[llvm] r267167 - [AMDGPU] Insert nop pass: take care of outstanding feedback

Konstantin Zhuravlyov via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 22 10:04:51 PDT 2016


Author: kzhuravl
Date: Fri Apr 22 12:04:51 2016
New Revision: 267167

URL: http://llvm.org/viewvc/llvm-project?rev=267167&view=rev
Log:
[AMDGPU] Insert nop pass: take care of outstanding feedback

- Switch few loops to range-based for loops
- Fix nop insertion at the end of BB
- Fix formatting
- Check for endpgm

Differential Revision: http://reviews.llvm.org/D19380

Modified:
    llvm/trunk/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
    llvm/trunk/lib/Target/AMDGPU/SIInsertNopsPass.cpp
    llvm/trunk/test/CodeGen/AMDGPU/debugger_insert_nops.ll

Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp?rev=267167&r1=267166&r2=267167&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp Fri Apr 22 12:04:51 2016
@@ -391,11 +391,7 @@ void GCNPassConfig::addPreSched2() {
 void GCNPassConfig::addPreEmitPass() {
   addPass(createSIInsertWaitsPass(), false);
   addPass(createSILowerControlFlowPass(), false);
-
-  const AMDGPUSubtarget &ST = *getAMDGPUTargetMachine().getSubtargetImpl();
-  if (ST.debuggerInsertNops()) {
-    addPass(createSIInsertNopsPass(), false);
-  }
+  addPass(createSIInsertNopsPass(), false);
 }
 
 TargetPassConfig *GCNTargetMachine::createPassConfig(PassManagerBase &PM) {

Modified: llvm/trunk/lib/Target/AMDGPU/SIInsertNopsPass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/SIInsertNopsPass.cpp?rev=267167&r1=267166&r2=267167&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/SIInsertNopsPass.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/SIInsertNopsPass.cpp Fri Apr 22 12:04:51 2016
@@ -54,10 +54,14 @@ FunctionPass *llvm::createSIInsertNopsPa
 }
 
 bool SIInsertNops::runOnMachineFunction(MachineFunction &MF) {
+  // Skip this pass if debugger-insert-nops feature is not enabled.
+  const AMDGPUSubtarget &ST = MF.getSubtarget<AMDGPUSubtarget>();
+  if (!ST.debuggerInsertNops())
+    return false;
+
   // Skip machine functions without debug info.
-  if (!MF.getMMI().hasDebugInfo()) {
+  if (!MF.getMMI().hasDebugInfo())
     return false;
-  }
 
   // Target instruction info.
   const SIInstrInfo *TII =
@@ -69,16 +73,16 @@ bool SIInsertNops::runOnMachineFunction(
   // Insert nop instruction before first isa instruction of each high level
   // source statement and collect last isa instruction for each high level
   // source statement.
-  for (auto MBB = MF.begin(); MBB != MF.end(); ++MBB) {
-    for (auto MI = MBB->begin(); MI != MBB->end(); ++MI) {
-      if (MI->isDebugValue() || !MI->getDebugLoc()) {
+  for (auto &MBB : MF) {
+    for (auto MI = MBB.begin(); MI != MBB.end(); ++MI) {
+      if (MI->isDebugValue() || !MI->getDebugLoc())
         continue;
-      }
+
       auto DL = MI->getDebugLoc();
       auto CL = DL.getLine();
       auto LineToInstEntry = LineToInst.find(CL);
       if (LineToInstEntry == LineToInst.end()) {
-        BuildMI(*MBB, *MI, DL, TII->get(AMDGPU::S_NOP))
+        BuildMI(MBB, *MI, DL, TII->get(AMDGPU::S_NOP))
           .addImm(0);
         LineToInst.insert(std::make_pair(CL, MI));
       } else {
@@ -88,16 +92,13 @@ bool SIInsertNops::runOnMachineFunction(
   }
   // Insert nop instruction after last isa instruction of each high level source
   // statement.
-  for (auto LineToInstEntry = LineToInst.begin();
-         LineToInstEntry != LineToInst.end(); ++LineToInstEntry) {
-    auto MBB = LineToInstEntry->second->getParent();
-    auto DL = LineToInstEntry->second->getDebugLoc();
-    MachineBasicBlock::iterator MI = LineToInstEntry->second;
-    ++MI;
-    if (MI != MBB->end()) {
-      BuildMI(*MBB, *MI, DL, TII->get(AMDGPU::S_NOP))
+  for (auto const &LineToInstEntry : LineToInst) {
+    auto MBB = LineToInstEntry.second->getParent();
+    auto DL = LineToInstEntry.second->getDebugLoc();
+    MachineBasicBlock::iterator MI = LineToInstEntry.second;
+    if (MI->getOpcode() != AMDGPU::S_ENDPGM)
+      BuildMI(*MBB, *(++MI), DL, TII->get(AMDGPU::S_NOP))
         .addImm(0);
-    }
   }
   // Insert nop instruction before prologue.
   MachineBasicBlock &MBB = MF.front();

Modified: llvm/trunk/test/CodeGen/AMDGPU/debugger_insert_nops.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/debugger_insert_nops.ll?rev=267167&r1=267166&r2=267167&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/debugger_insert_nops.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/debugger_insert_nops.ll Fri Apr 22 12:04:51 2016
@@ -2,13 +2,17 @@
 
 ; CHECK: debugger_insert_nops.cl:2:3
 ; CHECK-NEXT: s_nop 0
-; CHECK: debugger_insert_nops.cl:3:3
+; CHECK: s_nop 0
+; CHECK-NEXT: debugger_insert_nops.cl:3:3
 ; CHECK-NEXT: s_nop 0
-; CHECK: debugger_insert_nops.cl:4:3
+; CHECK: s_nop 0
+; CHECK-NEXT: debugger_insert_nops.cl:4:3
 ; CHECK-NEXT: s_nop 0
-; CHECK: debugger_insert_nops.cl:5:3
+; CHECK: s_nop 0
+; CHECK-NEXT: debugger_insert_nops.cl:5:3
 ; CHECK-NEXT: s_nop 0
-; CHECK: debugger_insert_nops.cl:6:1
+; CHECK: s_nop 0
+; CHECK-NEXT: debugger_insert_nops.cl:6:1
 ; CHECK-NEXT: s_nop 0
 ; CHECK-NEXT: s_endpgm
 




More information about the llvm-commits mailing list