[Beignet] [PATCH] Add bool move imm support.
Zhigang Gong
zhigang.gong at linux.intel.com
Tue Aug 13 01:46:55 PDT 2013
That's will be ok. One case hit this code path and can get expected behaviour, that will be good enough.
On Tue, Aug 13, 2013 at 08:39:08AM +0000, Yang, Rong R wrote:
> Hi, Zhigang,
>
> It is hard to construct a test to verify this patch's correctness, I only construct a test case that will assert without this patch.
>
> -----Original Message-----
> From: Zhigang Gong [mailto:zhigang.gong at linux.intel.com]
> Sent: Tuesday, August 13, 2013 3:05 PM
> To: Yang, Rong R
> Cc: beignet at lists.freedesktop.org
> Subject: Re: [Beignet] [PATCH] Add bool move imm support.
>
> Hi Rong,
>
> could you add a simple case to cover for this code path?
>
> On Tue, Aug 13, 2013 at 03:06:30PM +0800, Yang Rong wrote:
> >
> > Signed-off-by: Yang Rong <rong.r.yang at intel.com>
> > ---
> > backend/src/backend/gen_insn_selection.cpp | 17 +++++++++++++++++
> > backend/src/ir/instruction.cpp | 3 ++-
> > 2 files changed, 19 insertions(+), 1 deletion(-)
> >
> > diff --git a/backend/src/backend/gen_insn_selection.cpp
> > b/backend/src/backend/gen_insn_selection.cpp
> > index 46da37f..f3122c1 100644
> > --- a/backend/src/backend/gen_insn_selection.cpp
> > +++ b/backend/src/backend/gen_insn_selection.cpp
> > @@ -1893,15 +1893,32 @@ namespace gbe
> > const Type type = insn.getType();
> > const Immediate imm = insn.getImmediate();
> > const GenRegister dst = sel.selReg(insn.getDst(0), type);
> > + GenRegister flagReg;
> >
> > sel.push();
> > if (sel.isScalarOrBool(insn.getDst(0)) == true) {
> > sel.curr.execWidth = 1;
> > + if(type == TYPE_BOOL) {
> > + if(imm.data.b) {
> > + if(sel.curr.predicate == GEN_PREDICATE_NONE)
> > + flagReg = GenRegister::immuw(0xffff);
> > + else {
> > + if(sel.curr.physicalFlag)
> > + flagReg = GenRegister::flag(sel.curr.flag, sel.curr.subFlag);
> > + else
> > + flagReg = sel.selReg(Register(sel.curr.flagIndex), TYPE_U16);
> > + }
> > + } else
> > + flagReg = GenRegister::immuw(0x0);
> > + }
> > sel.curr.predicate = GEN_PREDICATE_NONE;
> > sel.curr.noMask = 1;
> > }
> >
> > switch (type) {
> > + case TYPE_BOOL:
> > + sel.MOV(dst, flagReg);
> > + break;
> > case TYPE_U32:
> > case TYPE_S32:
> > case TYPE_FLOAT:
> > diff --git a/backend/src/ir/instruction.cpp
> > b/backend/src/ir/instruction.cpp index 45095db..3b5ff08 100644
> > --- a/backend/src/ir/instruction.cpp
> > +++ b/backend/src/ir/instruction.cpp
> > @@ -861,7 +861,8 @@ namespace ir {
> > return false;
> > if (UNLIKELY(checkRegisterData(family, dst[0], fn, whyNot) == false))
> > return false;
> > - CHECK_TYPE(this->type, allButBool);
> > + //Support all type IMM, disable check
> > + //CHECK_TYPE(this->type, allButBool);
> > return true;
> > }
> >
> > --
> > 1.7.10.4
> >
> > _______________________________________________
> > Beignet mailing list
> > Beignet at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/beignet
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list