diff options
Diffstat (limited to 'dev-libs/beignet/files/beignet-1.3.2_disable-doNegAddOptimization.patch')
-rw-r--r-- | dev-libs/beignet/files/beignet-1.3.2_disable-doNegAddOptimization.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/dev-libs/beignet/files/beignet-1.3.2_disable-doNegAddOptimization.patch b/dev-libs/beignet/files/beignet-1.3.2_disable-doNegAddOptimization.patch new file mode 100644 index 0000000..ae399b1 --- /dev/null +++ b/dev-libs/beignet/files/beignet-1.3.2_disable-doNegAddOptimization.patch @@ -0,0 +1,66 @@ +--- b/backend/src/backend/gen_insn_selection_optimize.cpp ++++ a/backend/src/backend/gen_insn_selection_optimize.cpp +@@ -74,7 +74,8 @@ namespace gbe + const GenRegister& replacement) : + insn(insn), intermedia(intermedia), replacement(replacement) + { +- assert(insn.opcode == SEL_OP_MOV || insn.opcode == SEL_OP_ADD); ++ assert(insn.opcode == SEL_OP_MOV); ++ assert(&(insn.src(0)) == &replacement); + assert(&(insn.dst(0)) == &intermedia); + this->elements = CalculateElements(intermedia, insn.state.execWidth); + replacementOverwritten = false; +@@ -101,7 +102,6 @@ namespace gbe + void doReplacement(ReplaceInfo* info); + bool CanBeReplaced(const ReplaceInfo* info, const SelectionInstruction& insn, const GenRegister& var); + void cleanReplaceInfoMap(); +- void doNegAddOptimization(SelectionInstruction &insn); + + SelectionBlock &bb; + const ir::Liveness::LiveOut& liveout; +@@ -159,13 +159,8 @@ namespace gbe + + void SelBasicBlockOptimizer::addToReplaceInfoMap(SelectionInstruction& insn) + { +- assert(insn.opcode == SEL_OP_MOV || insn.opcode == SEL_OP_ADD); +- GenRegister &src = insn.src(0); +- if (insn.opcode == SEL_OP_ADD) { +- if (src.file == GEN_IMMEDIATE_VALUE) +- src = insn.src(1); +- } +- ++ assert(insn.opcode == SEL_OP_MOV); ++ const GenRegister& src = insn.src(0); + const GenRegister& dst = insn.dst(0); + if (src.type != dst.type || src.file != dst.file) + return; +@@ -254,29 +249,10 @@ namespace gbe + + if (insn.opcode == SEL_OP_MOV) + addToReplaceInfoMap(insn); +- +- doNegAddOptimization(insn); + } + cleanReplaceInfoMap(); + } + +- /* LLVM transform Mad(a, -b, c) to +- Add b, -b, 0 +- Mad val, a, b, c +- for Gen support negtive modifier, mad(a, -b, c) is native suppoted. +- Also it can be used for the same like instruction sequence. +- Do it just like a: mov b, -b, so it is a Mov operation like LocalCopyPropagation +- */ +- void SelBasicBlockOptimizer::doNegAddOptimization(SelectionInstruction &insn) { +- if (insn.opcode == SEL_OP_ADD) { +- GenRegister src0 = insn.src(0); +- GenRegister src1 = insn.src(1); +- if ((src0.negation && src1.file == GEN_IMMEDIATE_VALUE && src1.value.f == 0.0f) || +- (src1.negation && src0.file == GEN_IMMEDIATE_VALUE && src0.value.f == 0.0f)) +- addToReplaceInfoMap(insn); +- } +- } +- + void SelBasicBlockOptimizer::run() + { + for (size_t i = 0; i < MaxTries; ++i) { |