Message ID | CAFULd4ZPtz6X1=KjVz=A-b3UcaZJ-hYN+je6v2teOUheU6Lwyw@mail.gmail.com |
---|---|
State | New |
Headers | show |
On Sun, Mar 11, 2012 at 8:53 AM, Uros Bizjak <ubizjak@gmail.com> wrote: > On Sun, Mar 11, 2012 at 3:30 PM, Uros Bizjak <ubizjak@gmail.com> wrote: > >>>>> This patches uses word_mode instead of Pmode in loop expand since >>>>> word_mode may have bigger size than Pmode. OK for trunk? >>>>> >>>>> Thanks. >>>>> >>>>> H.J. >>>>> --- >>>>> 2012-03-02 H.J. Lu <hongjiu.lu@intel.com> >>>>> >>>>> * config/i386/i386.c (ix86_expand_movmem): Use word_mode instead >>>>> of Pmode on loop. >>>>> (ix86_expand_setmem): Likwise. >>>> >>>> Jan, can you please comment on the changes in this patch? >>>> >>> >>> Here is a complete updated patch to use word_mode in ix86_expand_movmem >>> and ix86_expand_setmem. It also fixes ix86_zero_extend_to_Pmode to handle >>> Pmode != DImode. OK for trunk? >> >> Please rewrite ix86_zero_extend_to_Pmode to something like: >> rtx tmp; >> if (GET_MODE (exp) != Pmode) >> tmp = convert_to_mode (Pmode, exp, 1); >> return force_reg (Pmode, tmp)); > > I am testing attached patch: > > 2012-03-11 Uros Bizjak <ubizjak@gmail.com> > > * config/i386/i386.c (ix86_zero_extend_to_Pmode): Rewrite using > convert_to_mode. > (ix86_expand_call): Use force_reg istead of copy_to_mode_reg. > It passed all tests in GCC testsuite under Linux/x32 and glibc x32 tests. Thanks.
On Sun, Mar 11, 2012 at 5:56 PM, H.J. Lu <hjl.tools@gmail.com> wrote: >>>>>> This patches uses word_mode instead of Pmode in loop expand since >>>>>> word_mode may have bigger size than Pmode. OK for trunk? >>>>>> >>>>>> Thanks. >>>>>> >>>>>> H.J. >>>>>> --- >>>>>> 2012-03-02 H.J. Lu <hongjiu.lu@intel.com> >>>>>> >>>>>> * config/i386/i386.c (ix86_expand_movmem): Use word_mode instead >>>>>> of Pmode on loop. >>>>>> (ix86_expand_setmem): Likwise. >>>>> >>>>> Jan, can you please comment on the changes in this patch? >>>>> >>>> >>>> Here is a complete updated patch to use word_mode in ix86_expand_movmem >>>> and ix86_expand_setmem. It also fixes ix86_zero_extend_to_Pmode to handle >>>> Pmode != DImode. OK for trunk? >>> >>> Please rewrite ix86_zero_extend_to_Pmode to something like: >>> rtx tmp; >>> if (GET_MODE (exp) != Pmode) >>> tmp = convert_to_mode (Pmode, exp, 1); >>> return force_reg (Pmode, tmp)); >> >> I am testing attached patch: >> >> 2012-03-11 Uros Bizjak <ubizjak@gmail.com> >> >> * config/i386/i386.c (ix86_zero_extend_to_Pmode): Rewrite using >> convert_to_mode. >> (ix86_expand_call): Use force_reg istead of copy_to_mode_reg. >> > > It passed all tests in GCC testsuite under Linux/x32 and glibc x32 > tests. I have committed the patch without (ix86_expand_call) change. The later change was wrong, since it allowed arg register in the call pattern. Please commit your loop expand patch. Thanks, Uros.
Index: i386.c =================================================================== --- i386.c (revision 185193) +++ i386.c (working copy) @@ -21025,14 +21025,9 @@ ix86_adjust_counter (rtx countreg, HOST_WIDE_INT v rtx ix86_zero_extend_to_Pmode (rtx exp) { - rtx r; - if (GET_MODE (exp) == VOIDmode) - return force_reg (Pmode, exp); - if (GET_MODE (exp) == Pmode) - return copy_to_mode_reg (Pmode, exp); - r = gen_reg_rtx (Pmode); - emit_insn (gen_zero_extendsidi2 (r, exp)); - return r; + if (GET_MODE (exp) != Pmode) + exp = convert_to_mode (Pmode, exp, 1); + return force_reg (Pmode, exp); } /* Divide COUNTREG by SCALE. */ @@ -22996,7 +22991,7 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx call fnaddr = XEXP (fnaddr, 0); if (GET_MODE (fnaddr) != word_mode) fnaddr = convert_to_mode (word_mode, fnaddr, 1); - fnaddr = gen_rtx_MEM (QImode, copy_to_mode_reg (word_mode, fnaddr)); + fnaddr = gen_rtx_MEM (QImode, force_reg (word_mode, fnaddr)); } vec_len = 0;