On Mon, Mar 03, 2014 at 07:19:51PM -0800, Andrew Pinski wrote:
> On Mon, Mar 3, 2014 at 5:02 AM, lin zuojian <manjian2...@gmail.com> wrote:
>
> Testcase?
The test case is the same with
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23684.
> How about making a generic pass which does this?
Maybe GIMPLE should add a pass about it.Now slp pass has hadled it,but
only available in O3.
>
> See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23684 also. At the
> same time this can be used to do the store pair optimization for
> ARM/AARCH64 too.
>
> Thanks,
> Andrew
>
>
> >
> > ---
> > gcc/config/i386/i386.md | 49
> > +++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 49 insertions(+)
> >
> > diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
> > index b9f1320..86ab025 100644
> > --- a/gcc/config/i386/i386.md
> > +++ b/gcc/config/i386/i386.md
> > @@ -18535,6 +18535,55 @@
> > [(set_attr "type" "other")
> > (set_attr "length" "3")])
> >
> > +(define_peephole2
> > + [(set (mem:QI (match_operand 0 "register_operand"))
> > + (match_operand 1
> > "const_int_operand"))
> > + (set (mem:QI (plus (match_dup 0)
> > + (const_int 1)))
> > + (match_operand 2 "const_int_operand"))
> > + (set (mem:QI (plus (match_dup 0)
> > + (const_int 2)))
> > + (match_operand 3 "const_int_operand"))
> > + (set (mem:QI (plus (match_dup 0)
> > + (const_int 3)))
> > + (match_operand 4 "const_int_operand"))]
> > + ""
> > + [(set (mem:SI (match_dup 0))
> > + (match_operand 5 "const_int_operand"))]
> > +{
> > + int32_t _const = (INTVAL(operands[1]) & 0xff) |
> > (((INTVAL(operands[2])) & 0xff) << 8)
> > +
> > | (((INTVAL(operands[3])) & 0xff) << 16) |
> > (((INTVAL(operands[4])) & 0xff) << 24);
> > + operands[5] = gen_rtx_CONST_INT (SImode, _const);
> > +}
> > +)
> > +
> > +(define_peephole2
> > + [(set (mem:QI (plus (match_operand 0 "register_operand")
> > + (match_operand 6
> > "const_int_operand")))
> > + (match_operand 1
> > "const_int_operand"))
> > + (set (mem:QI (plus (match_dup 0)
> > + (match_operand 7
> > "const_int_operand")))
> > + (match_operand 2 "const_int_operand"))
> > + (set (mem:QI (plus (match_dup 0)
> > + (match_operand 8
> > "const_int_operand")))
> > + (match_operand 3 "const_int_operand"))
> > + (set (mem:QI (plus (match_dup 0)
> > + (match_operand 9
> > "const_int_operand")))
> > + (match_operand 4 "const_int_operand"))]
> > + ""
> > + [(set (mem:SI (match_dup 0))
> > + (match_operand 5 "const_int_operand"))]
> > +{
> > + if ((INTVAL(operands[7]) - INTVAL(operands[6]) != 1)
> > + && (INTVAL(operands[8]) - INTVAL(operands[7]) != 1)
> > + && (INTVAL(operands[9]) - INTVAL(operands[8]) != 1))
> > + FAIL;
> > + int32_t _const = (INTVAL(operands[1]) & 0xff) |
> > (((INTVAL(operands[2])) & 0xff) << 8)
> > +
> > | (((INTVAL(operands[3])) & 0xff) << 16) |
> > (((INTVAL(operands[4])) & 0xff) << 24);
> > + operands[5] = gen_rtx_CONST_INT (SImode, _const);
> > +}
> > +)
> > +
> > (include "mmx.md")
> > (include "sse.md")
> > (include "sync.md")
> > --
> > 1.8.3.2
> >
> >
> > ----- End forwarded message -----