Mesa (master): radeon/llvm: improve ABS_i32 lowering
Vadim Girlin
vadimg at kemper.freedesktop.org
Tue May 15 15:53:37 UTC 2012
Module: Mesa
Branch: master
Commit: 0298238bdd65344b91731973902fb46530e74cca
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0298238bdd65344b91731973902fb46530e74cca
Author: Vadim Girlin <vadimgirlin at gmail.com>
Date: Tue May 15 18:47:53 2012 +0400
radeon/llvm: improve ABS_i32 lowering
We can save one instruction by lowering it to:
SUB_INT tmp, 0, src
MAX_INT dst, src, tmp
Signed-off-by: Vadim Girlin <vadimgirlin at gmail.com>
Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
---
.../drivers/radeon/R600LowerInstructions.cpp | 18 +++++-------------
1 files changed, 5 insertions(+), 13 deletions(-)
diff --git a/src/gallium/drivers/radeon/R600LowerInstructions.cpp b/src/gallium/drivers/radeon/R600LowerInstructions.cpp
index 41bf365..42c9766 100644
--- a/src/gallium/drivers/radeon/R600LowerInstructions.cpp
+++ b/src/gallium/drivers/radeon/R600LowerInstructions.cpp
@@ -90,24 +90,16 @@ bool R600LowerInstructionsPass::runOnMachineFunction(MachineFunction &MF)
case AMDIL::ABS_i32:
{
- unsigned setgt = MRI->createVirtualRegister(
+ unsigned neg = MRI->createVirtualRegister(
&AMDIL::R600_TReg32RegClass);
- BuildMI(MBB, I, MBB.findDebugLoc(I), TII->get(AMDIL::SETGE_INT),
- setgt)
+ BuildMI(MBB, I, MBB.findDebugLoc(I), TII->get(AMDIL::SUB_INT),neg)
.addReg(AMDIL::ZERO)
.addOperand(MI.getOperand(1));
- unsigned add_int = MRI->createVirtualRegister(
- &AMDIL::R600_TReg32RegClass);
- BuildMI(MBB, I, MBB.findDebugLoc(I), TII->get(AMDIL::ADD_INT),
- add_int)
- .addReg(setgt)
- .addOperand(MI.getOperand(1));
-
- BuildMI(MBB, I, MBB.findDebugLoc(I), TII->get(AMDIL::XOR_INT))
+ BuildMI(MBB, I, MBB.findDebugLoc(I), TII->get(AMDIL::MAX_INT))
.addOperand(MI.getOperand(0))
- .addReg(setgt)
- .addReg(add_int);
+ .addOperand(MI.getOperand(1))
+ .addReg(neg);
break;
}
More information about the mesa-commit
mailing list