src modifier is not supported by some instructions. so return false when it exists. This fix piglit % scalar-arithmetic-int failed
V2: (1)add hadd rhadd (2)confirmed math functions support midifer except IDIV/Mod Signed-off-by: rander.wang <rander.w...@intel.com> --- .../src/backend/gen_insn_selection_optimize.cpp | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/backend/src/backend/gen_insn_selection_optimize.cpp b/backend/src/backend/gen_insn_selection_optimize.cpp index 07547ec..c35ee25 100644 --- a/backend/src/backend/gen_insn_selection_optimize.cpp +++ b/backend/src/backend/gen_insn_selection_optimize.cpp @@ -189,6 +189,40 @@ namespace gbe if (insn.opcode == SEL_OP_BSWAP) //should remove once bswap issue is fixed return false; + //the src modifier is not supported by the following instructions + if(info->replacement.negation || info->replacement.absolute) + { + switch(insn.opcode) + { + case SEL_OP_MATH: + { + switch(insn.extra.function) + { + case GEN_MATH_FUNCTION_INT_DIV_QUOTIENT: + case GEN_MATH_FUNCTION_INT_DIV_REMAINDER: + case GEN_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER: + return false; + default: + break; + } + + break; + } + case SEL_OP_CBIT: + case SEL_OP_FBH: + case SEL_OP_FBL: + case SEL_OP_BRC: + case SEL_OP_BRD: + case SEL_OP_BFREV: + case SEL_OP_LZD: + case SEL_OP_HADD: + case SEL_OP_RHADD + return false; + default: + break; + } + } + if (insn.isWrite() || insn.isRead()) //register in selection vector return false; -- 2.7.4 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet