[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