summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/AMDGPU/update-phi.ll
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@google.com>2019-06-25 18:55:16 +0000
committerDiego Novillo <dnovillo@google.com>2019-06-25 18:55:16 +0000
commit688afeb884484edaab526c68689db816d993a257 (patch)
tree0cf873fe2717d1ded9381f797bc9bb8fda9475fc /llvm/test/CodeGen/AMDGPU/update-phi.ll
parentfcfa056cebf63462adaa0a25e77785ec19604e29 (diff)
downloadbcm5719-llvm-688afeb884484edaab526c68689db816d993a257.tar.gz
bcm5719-llvm-688afeb884484edaab526c68689db816d993a257.zip
Update phis in AMDGPUUnifyDivergentExitNodes
Original patch https://reviews.llvm.org/D63659 from Steven Perron <stevenperron@google.com> The pass AMDGPUUnifyDivergentExitNodes does not update the phi nodes in the successors of blocks that is splits. This is fixed by calling BasicBlock::splitBasicBlock to split the block instead of doing it manually. This does extra work because a new conditional branch is created in BB which is immediately replaced, but I think the simplicity is worth it. It also helps make the code more future proof in case other things need to be updated. llvm-svn: 364342
Diffstat (limited to 'llvm/test/CodeGen/AMDGPU/update-phi.ll')
-rw-r--r--llvm/test/CodeGen/AMDGPU/update-phi.ll39
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/update-phi.ll b/llvm/test/CodeGen/AMDGPU/update-phi.ll
new file mode 100644
index 00000000000..05775429e43
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/update-phi.ll
@@ -0,0 +1,39 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -mtriple=amdgcn-- -S -amdgpu-unify-divergent-exit-nodes -verify %s | FileCheck -check-prefix=IR %s
+
+; Make sure that the phi in n28 is updated when the block is split by unify
+; divergent exit nodes.
+
+define amdgpu_ps void @_amdgpu_ps_main() local_unnamed_addr #3 {
+; IR-LABEL: @_amdgpu_ps_main(
+; IR-NEXT: .entry:
+; IR-NEXT: br label [[DOTLOOPEXIT:%.*]]
+; IR: .loopexit:
+; IR-NEXT: br label [[N28:%.*]]
+; IR: n28:
+; IR-NEXT: [[DOT01:%.*]] = phi float [ 0.000000e+00, [[DOTLOOPEXIT]] ], [ [[N29:%.*]], [[TRANSITIONBLOCK:%.*]] ]
+; IR-NEXT: [[N29]] = fadd float [[DOT01]], 1.000000e+00
+; IR-NEXT: [[N30:%.*]] = fcmp ogt float [[N29]], 4.000000e+00
+; IR-NEXT: br i1 true, label [[TRANSITIONBLOCK]], label [[DUMMYRETURNBLOCK:%.*]]
+; IR: TransitionBlock:
+; IR-NEXT: br i1 [[N30]], label [[DOTLOOPEXIT]], label [[N28]]
+; IR: n31:
+; IR-NEXT: ret void
+; IR: DummyReturnBlock:
+; IR-NEXT: ret void
+;
+.entry:
+ br label %.loopexit
+
+.loopexit: ; preds = %n28, %.entry
+ br label %n28
+
+n28: ; preds = %.loopexit, %n28
+ %.01 = phi float [ 0.000000e+00, %.loopexit ], [ %n29, %n28 ]
+ %n29 = fadd float %.01, 1.0
+ %n30 = fcmp ogt float %n29, 4.000000e+00
+ br i1 %n30, label %.loopexit, label %n28
+
+n31: ; preds =
+ ret void
+}
OpenPOWER on IntegriCloud