[PowerPC] Add a flag for conditional trap optimization
authorVictor Huang <wei.huang@ibm.com>
Fri, 19 Nov 2021 16:10:19 +0000 (10:10 -0600)
committerVictor Huang <wei.huang@ibm.com>
Fri, 19 Nov 2021 16:24:54 +0000 (10:24 -0600)
This patch adds a flag to enable/disable conditional trap optimization.
Optimization disabled by default.

Peer reviewed by: nemanjai

llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
llvm/test/CodeGen/PowerPC/mi-peepholes-trap-opt.mir

index 797e322..d12a9b8 100644 (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.
index 07bac3a..3ce22ff 100644 (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