From: liuhongt Date: Mon, 13 Sep 2021 10:54:05 +0000 (+0800) Subject: Use gen_lowpart_if_possible instead of gen_lowpart to avoid ICE. X-Git-Tag: basepoints/gcc-13~4829 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c8e4cb8adf68730357888adf186ab2e686a220ad;p=thirdparty%2Fgcc.git Use gen_lowpart_if_possible instead of gen_lowpart to avoid ICE. gcc/ChangeLog: PR bootstrap/102302 * expmed.c (extract_bit_field_using_extv): Use gen_lowpart_if_possible instead of gen_lowpart to avoid ICE. --- diff --git a/gcc/expmed.c b/gcc/expmed.c index 3143f38e0570..59734d4841cb 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -1571,14 +1571,16 @@ extract_bit_field_using_extv (const extraction_insn *extv, rtx op0, if (GET_MODE (target) != ext_mode) { + rtx temp; /* Don't use LHS paradoxical subreg if explicit truncation is needed between the mode of the extraction (word_mode) and the target mode. Instead, create a temporary and use convert_move to set the target. */ if (REG_P (target) - && TRULY_NOOP_TRUNCATION_MODES_P (GET_MODE (target), ext_mode)) + && TRULY_NOOP_TRUNCATION_MODES_P (GET_MODE (target), ext_mode) + && (temp = gen_lowpart_if_possible (ext_mode, target))) { - target = gen_lowpart (ext_mode, target); + target = temp; if (partial_subreg_p (GET_MODE (spec_target), ext_mode)) spec_target_subreg = target; }