Mesa (master): r600g/llvm: Fix handling of MASK_WRITE instructions

Tom Stellard tstellar at kemper.freedesktop.org
Mon Apr 30 20:58:51 UTC 2012


Module: Mesa
Branch: master
Commit: 4da1fcacf1d78c5fcae9e81eaf2a9d7c8117af3e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4da1fcacf1d78c5fcae9e81eaf2a9d7c8117af3e

Author: Tom Stellard <thomas.stellard at amd.com>
Date:   Mon Apr 30 16:11:27 2012 -0400

r600g/llvm: Fix handling of MASK_WRITE instructions

We can't delete MASK_WRITE instructions from the program, because this
will cause instructions being masked by MASK_WRITE to be marked dead and
then deleted in the dce pass.

---

 src/gallium/drivers/radeon/AMDGPUUtil.cpp          |    1 +
 .../drivers/radeon/R600LowerInstructions.cpp       |    3 ++-
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/radeon/AMDGPUUtil.cpp b/src/gallium/drivers/radeon/AMDGPUUtil.cpp
index a504543..6fb01b6 100644
--- a/src/gallium/drivers/radeon/AMDGPUUtil.cpp
+++ b/src/gallium/drivers/radeon/AMDGPUUtil.cpp
@@ -34,6 +34,7 @@ bool llvm::isPlaceHolderOpcode(unsigned opcode)
   case AMDIL::RETURN:
   case AMDIL::LOAD_INPUT:
   case AMDIL::LAST:
+  case AMDIL::MASK_WRITE:
   case AMDIL::RESERVE_REG:
     return true;
   }
diff --git a/src/gallium/drivers/radeon/R600LowerInstructions.cpp b/src/gallium/drivers/radeon/R600LowerInstructions.cpp
index fb5431d..8395d22 100644
--- a/src/gallium/drivers/radeon/R600LowerInstructions.cpp
+++ b/src/gallium/drivers/radeon/R600LowerInstructions.cpp
@@ -311,7 +311,8 @@ bool R600LowerInstructionsPass::runOnMachineFunction(MachineFunction &MF)
         MachineInstr * defInstr = MRI->getVRegDef(maskedRegister);
         MachineOperand * def = defInstr->findRegisterDefOperand(maskedRegister);
         def->addTargetFlag(MO_FLAG_MASK);
-        break;
+        /* Continue so the instruction is not erased */
+        continue;
       }
 
       case AMDIL::NEGATE_i32:




More information about the mesa-commit mailing list