diff options
author | Victor Huang <wei.huang@ibm.com> | 2021-11-19 10:10:19 -0600 |
---|---|---|
committer | Victor Huang <wei.huang@ibm.com> | 2021-11-19 10:24:54 -0600 |
commit | 86e77cdb081ff40b8b46099c935f8d343e26425e (patch) | |
tree | 319b9a8ceb4bac1917440542ad0442da0b176a31 | |
parent | ffe1741b5ccab07cbf45fe99033e4119688eb5a5 (diff) | |
download | llvm-86e77cdb081ff40b8b46099c935f8d343e26425e.tar.gz |
[PowerPC] Add a flag for conditional trap optimization
This patch adds a flag to enable/disable conditional trap optimization.
Optimization disabled by default.
Peer reviewed by: nemanjai
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCMIPeephole.cpp | 11 | ||||
-rw-r--r-- | llvm/test/CodeGen/PowerPC/mi-peepholes-trap-opt.mir | 3 |
2 files changed, 11 insertions, 3 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp index 797e322de7e8..d12a9b806fd0 100644 --- a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp +++ b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp @@ -79,6 +79,11 @@ static cl::opt<bool> cl::desc("enable elimination of zero-extensions"), cl::init(false), cl::Hidden); +static cl::opt<bool> + EnableTrapOptimization("ppc-opt-conditional-trap", + cl::desc("enable optimization of conditional traps"), + cl::init(false), cl::Hidden); + namespace { struct PPCMIPeephole : public MachineFunctionPass { @@ -423,7 +428,7 @@ bool PPCMIPeephole::simplifyCode(void) { // If a conditional trap instruction got optimized to an // unconditional trap, eliminate all the instructions after // the trap. - if (TrapOpt) { + if (EnableTrapOptimization && TrapOpt) { ToErase = &MI; continue; } @@ -1020,6 +1025,7 @@ bool PPCMIPeephole::simplifyCode(void) { case PPC::TWI: case PPC::TD: case PPC::TW: { + if (!EnableTrapOptimization) break; MachineInstr *LiMI1 = getVRegDefOrNull(&MI.getOperand(1), MRI); MachineInstr *LiMI2 = getVRegDefOrNull(&MI.getOperand(2), MRI); bool IsOperand2Immediate = MI.getOperand(2).isImm(); @@ -1068,7 +1074,8 @@ bool PPCMIPeephole::simplifyCode(void) { ToErase = nullptr; } // Reset TrapOpt to false at the end of the basic block. - TrapOpt = false; + if (EnableTrapOptimization) + TrapOpt = false; } // Eliminate all the TOC save instructions which are redundant. diff --git a/llvm/test/CodeGen/PowerPC/mi-peepholes-trap-opt.mir b/llvm/test/CodeGen/PowerPC/mi-peepholes-trap-opt.mir index 07bac3a2be0c..3ce22ff5108b 100644 --- a/llvm/test/CodeGen/PowerPC/mi-peepholes-trap-opt.mir +++ b/llvm/test/CodeGen/PowerPC/mi-peepholes-trap-opt.mir @@ -1,5 +1,6 @@ # RUN: llc -mtriple powerpc64le-unknown-linux-gnu -mcpu=pwr8 -x mir < %s \ -# RUN: -verify-machineinstrs -start-before=ppc-mi-peepholes | FileCheck %s +# RUN: -verify-machineinstrs -start-before=ppc-mi-peepholes \ +# RUN: -ppc-opt-conditional-trap | FileCheck %s --- name: conditional_trap_opt_reg_implicit_def |