You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-libs/beignet/files/beignet-1.3.2_disable-doNeg...

67 lines
2.5 KiB

--- 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) {