diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-03-24 19:52:05 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-03-24 19:52:05 +0000 |
commit | b8f8dbc227e8d08d6685bb2bc3131ac86e3ac24e (patch) | |
tree | bc699fbcc8daebe4e572a7841766102ebba64788 /llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | |
parent | cbc69712da58c6e9a4d72fe37e829bb27409d3b8 (diff) | |
download | bcm5719-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.cpp | 5 |
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()); |