[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
This commit is contained in:
Victor Huang 2021-11-19 10:10:19 -06:00
parent ffe1741b5c
commit 86e77cdb08
2 changed files with 11 additions and 3 deletions

View File

@ -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.

View File

@ -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