summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-03-24 19:52:05 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-03-24 19:52:05 +0000
commitb8f8dbc227e8d08d6685bb2bc3131ac86e3ac24e (patch)
treebc699fbcc8daebe4e572a7841766102ebba64788 /llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
parentcbc69712da58c6e9a4d72fe37e829bb27409d3b8 (diff)
downloadbcm5719-llvm-b8f8dbc227e8d08d6685bb2bc3131ac86e3ac24e.tar.gz
bcm5719-llvm-b8f8dbc227e8d08d6685bb2bc3131ac86e3ac24e.zip
AMDGPU: Unify divergent function exits.
StructurizeCFG can't handle cases with multiple returns creating regions with multiple exits. Create a copy of UnifyFunctionExitNodes that only unifies exit nodes that skips exit nodes with uniform branch sources. llvm-svn: 298729
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
index 93c28149621..46e458a2e38 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
@@ -132,6 +132,7 @@ extern "C" void LLVMInitializeAMDGPUTarget() {
initializeSIInsertSkipsPass(*PR);
initializeSIDebuggerInsertNopsPass(*PR);
initializeSIOptimizeExecMaskingPass(*PR);
+ initializeAMDGPUUnifyDivergentExitNodesPass(*PR);
initializeAMDGPUAAWrapperPassPass(*PR);
}
@@ -673,6 +674,10 @@ bool GCNPassConfig::addPreISel() {
// supported.
const AMDGPUTargetMachine &TM = getAMDGPUTargetMachine();
addPass(createAMDGPUAnnotateKernelFeaturesPass(&TM));
+
+ // Merge divergent exit nodes. StructurizeCFG won't recognize the multi-exit
+ // regions formed by them.
+ addPass(&AMDGPUUnifyDivergentExitNodesID);
addPass(createStructurizeCFGPass(true)); // true -> SkipUniformRegions
addPass(createSinkingPass());
addPass(createSITypeRewriter());
OpenPOWER on IntegriCloud