[Beignet] [PATCH V2] backend: refine the local copy propagation.
rander.wang
rander.wang at intel.com
Thu Jun 15 01:47:35 UTC 2017
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.wang at 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
More information about the Beignet
mailing list