This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PING: PATCH [4/n]: Prepare x32: Permute the conversion and addition if one operand is a constant
Ok, you removed ignore_address_wrap_around, so we're almost there.
On 07/28/2011 07:59 PM, H.J. Lu wrote:
@@ -712,7 +715,16 @@ convert_modes (enum machine_mode mode, enum machine_mode oldmode, rtx x, int uns
if (GET_CODE (x) == SUBREG&& SUBREG_PROMOTED_VAR_P (x)
&& GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)))>= GET_MODE_SIZE (mode)
&& SUBREG_PROMOTED_UNSIGNED_P (x) == unsignedp)
- x = gen_lowpart (mode, x);
+ {
+ temp = rtl_hooks.gen_lowpart_no_emit (mode, x);
+ if (temp)
+ x = temp;
+ else
+ {
+ gcc_assert (!no_emit);
+ x = gen_lowpart (mode, x);
+ }
+ }
+ {
+ /* gen_lowpart_no_emit should always succeed here. */
+ x = rtl_hooks.gen_lowpart_no_emit (mode, x);
+ }
if (GET_MODE (x) != VOIDmode)
oldmode = GET_MODE (x);
@@ -776,6 +788,10 @@ convert_modes (enum machine_mode mode, enum machine_mode oldmode, rtx x, int uns
return gen_int_mode (val, mode);
}
+ temp = rtl_hooks.gen_lowpart_no_emit (mode, x);
+ if (temp)
+ return temp;
+ gcc_assert (!no_emit);
return gen_lowpart (mode, x);
Right now, gen_lowpart_no_emit will never return NULL, so these tests in
convert_modes are dead. Instead, please include in your patch mine at
http://permalink.gmane.org/gmane.comp.gcc.patches/242085 and adjust as
follows.
+ temp = rtl_hooks.gen_lowpart_no_emit (mode, x);
+ if (no_emit)
+ return rtl_hooks.gen_lowpart_no_emit (mode, x);
+ else
+ return gen_lowpart (mode, x);
}
If it does not work, PLEASE say why instead of posting another "updated
patch".
Paolo