summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2016-04-22 17:04:51 +0000
committerKonstantin Zhuravlyov <kzhuravl_dev@outlook.com>2016-04-22 17:04:51 +0000
commita40d8358e7f722b973b28e324cb93981e6869108 (patch)
tree97d18df6328522aa26dd3868a48249242fbbb65c /llvm/lib/Target
parentf6344ff295bcfad3a07a0810c76473df6e04c45f (diff)
downloadbcm5719-llvm-a40d8358e7f722b973b28e324cb93981e6869108.tar.gz
bcm5719-llvm-a40d8358e7f722b973b28e324cb93981e6869108.zip
[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 llvm-svn: 267167
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp6
-rw-r--r--llvm/lib/Target/AMDGPU/SIInsertNopsPass.cpp33
2 files changed, 18 insertions, 21 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
index 85dae20b53b..9cd19b8511f 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
@@ -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) {
diff --git a/llvm/lib/Target/AMDGPU/SIInsertNopsPass.cpp b/llvm/lib/Target/AMDGPU/SIInsertNopsPass.cpp
index d81cca0a367..77200189159 100644
--- a/llvm/lib/Target/AMDGPU/SIInsertNopsPass.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInsertNopsPass.cpp
@@ -54,10 +54,14 @@ FunctionPass *llvm::createSIInsertNopsPass() {
}
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(MachineFunction &MF) {
// 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(MachineFunction &MF) {
}
// 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();
OpenPOWER on IntegriCloud