diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index 13abe7f1343..342afffea6d 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -384,6 +384,17 @@ void GCNPassConfig::addPreSched2() { } void GCNPassConfig::addPreEmitPass() { + + // The hazard recognizer that runs as part of the post-ra scheduler does not + // gaurantee to be able handle all hazards correctly. This is because + // if there are multiple scheduling regions in a basic block, the regions + // are scheduled bottom up, so when we begin to schedule a region we don't + // know what instructions were emitted directly before it. + // + // Here we add a stand-alone hazard recognizer pass which can handle all cases. + // hazard recognizer pass. + addPass(&PostRAHazardRecognizerID); + addPass(createSIInsertWaitsPass(), false); addPass(createSIShrinkInstructionsPass()); addPass(createSILowerControlFlowPass(), false); |