123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- Description: Fix self-test fail in some conditions
- Reverts upstream 81755054c4c19d821e58456a1a7d601806e60e92
- Known triggers are Darktable and the GEGL test suite
- Note that this does *not* fix the other Darktable issue
- (https://gitlab.freedesktop.org/beignet/beignet/issues/60): beignet still
- needs to be blacklisted in Darktable (which it is by default).
- Author: Rebecca N. Palmer <rebecca_palmer@zoho.com>
- Bug: https://gitlab.freedesktop.org/beignet/beignet/issues/7
- Bug-Debian: https://bugs.debian.org/885423
- Forwarded: https://lists.freedesktop.org/archives/beignet/2019-January/009227.html
- diff --git b/backend/src/backend/gen_insn_selection_optimize.cpp a/backend/src/backend/gen_insn_selection_optimize.cpp
- index 07547ec4..d2e0fb9b 100644
- --- 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) {
|