[Beignet] [PATCH] fix a regression issue caused by LocalCopyPropagation
Yang, Rong R
rong.r.yang at intel.com
Wed Oct 21 01:49:32 PDT 2015
Pushed.
> -----Original Message-----
> From: Guo, Yejun
> Sent: Monday, October 19, 2015 16:25
> To: Yang, Rong R; beignet at lists.freedesktop.org
> Subject: RE: [Beignet] [PATCH] fix a regression issue caused by
> LocalCopyPropagation
>
> Good catch, from hw spec, and, not, or, xor 's srcmod is logical, I can send
> another patch to complete the list.
>
> -----Original Message-----
> From: Yang, Rong R
> Sent: Monday, October 19, 2015 4:16 PM
> To: Guo, Yejun; beignet at lists.freedesktop.org
> Cc: Guo, Yejun
> Subject: RE: [Beignet] [PATCH] fix a regression issue caused by
> LocalCopyPropagation
>
> Only and and' srcmod is logical? How about other logic instructions?
>
> > -----Original Message-----
> > From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf
> > Of Guo Yejun
> > Sent: Tuesday, October 13, 2015 8:44
> > To: beignet at lists.freedesktop.org
> > Cc: Guo, Yejun
> > Subject: [Beignet] [PATCH] fix a regression issue caused by
> > LocalCopyPropagation
> >
> > on BDW+, for AND, SrcMod value indicates a logical source modifier.
> >
> > so, the below SELECTION IRs could not be optimized since abs is not a
> > logical source modifier
> >
> > MOV(16) %2802<1>:D : (abs)%2801<8,8,1>:D
> > AND(16) %2836<1>:D : %2802<8,8,1>:D 255:D
> >
> > Signed-off-by: Guo Yejun <yejun.guo at intel.com>
> > ---
> > backend/src/backend/gen_insn_selection.cpp | 4 ++++
> > backend/src/backend/gen_insn_selection.hpp | 6 ++++++
> > backend/src/backend/gen_insn_selection_optimize.cpp | 4 ++++
> > 3 files changed, 14 insertions(+)
> >
> > diff --git a/backend/src/backend/gen_insn_selection.cpp
> > b/backend/src/backend/gen_insn_selection.cpp
> > index da437d1..9714e3e 100644
> > --- a/backend/src/backend/gen_insn_selection.cpp
> > +++ b/backend/src/backend/gen_insn_selection.cpp
> > @@ -2123,6 +2123,7 @@ namespace gbe
> >
> > Selection75::Selection75(GenContext &ctx) : Selection(ctx) {
> > this->opaque->setSlowByteGather(false);
> > + opt_features = 0;
> > }
> >
> > Selection8::Selection8(GenContext &ctx) : Selection(ctx) { @@
> > -2130,6
> > +2131,7 @@ namespace gbe
> > this->opaque->setHasLongType(true);
> > this->opaque->setSlowByteGather(true);
> > this->opaque->setHasHalfType(true);
> > + opt_features = SIOF_OP_AND_LOGICAL_SRCMOD;
> > }
> >
> > SelectionChv::SelectionChv(GenContext &ctx) : Selection(ctx) { @@
> > -2138,6
> > +2140,7 @@ namespace gbe
> > this->opaque->setLongRegRestrict(true);
> > this->opaque->setSlowByteGather(true);
> > this->opaque->setHasHalfType(true);
> > + opt_features = SIOF_OP_AND_LOGICAL_SRCMOD;
> > }
> >
> > Selection9::Selection9(GenContext &ctx) : Selection(ctx) { @@
> > -2146,6
> > +2149,7 @@ namespace gbe
> > this->opaque->setLdMsgOrder(LD_MSG_ORDER_SKL);
> > this->opaque->setSlowByteGather(true);
> > this->opaque->setHasHalfType(true);
> > + opt_features = SIOF_OP_AND_LOGICAL_SRCMOD;
> > }
> >
> > void Selection::Opaque::TYPED_WRITE(GenRegister *msgs, uint32_t
> > msgNum, diff --git a/backend/src/backend/gen_insn_selection.hpp
> > b/backend/src/backend/gen_insn_selection.hpp
> > index 275eb9c..f313786 100644
> > --- a/backend/src/backend/gen_insn_selection.hpp
> > +++ b/backend/src/backend/gen_insn_selection.hpp
> > @@ -226,6 +226,12 @@ namespace gbe
> > bool removeSimpleIfEndif;
> > };
> >
> > + enum SEL_IR_OPT_FEATURE {
> > + //for OP_AND, on BDW+, SrcMod value indicates a logical source
> modifier
> > + // on PRE-BDW, SrcMod value indicates a numeric source modifier
> > + SIOF_OP_AND_LOGICAL_SRCMOD = 1 << 0, };
> > +
> > /*! Owns the selection engine */
> > class GenContext;
> > /*! Selection engine produces the pre-ISA instruction blocks */
> > diff --git a/backend/src/backend/gen_insn_selection_optimize.cpp
> > b/backend/src/backend/gen_insn_selection_optimize.cpp
> > index 3f2ae2f..939dd18 100644
> > --- a/backend/src/backend/gen_insn_selection_optimize.cpp
> > +++ b/backend/src/backend/gen_insn_selection_optimize.cpp
> > @@ -170,6 +170,10 @@ namespace gbe
> > if (insn.isWrite() || insn.isRead()) //register in selection vector
> > return false;
> >
> > + if (features & SIOF_OP_AND_LOGICAL_SRCMOD)
> > + if (insn.opcode == SEL_OP_AND && (info->replacement.absolute ||
> > info->replacement.negation))
> > + return false;
> > +
> > if (info->replacementOverwritten)
> > return false;
> >
> > --
> > 1.9.1
> >
> > _______________________________________________
> > Beignet mailing list
> > Beignet at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list