summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2020-02-20 16:22:35 -0800
committerHans Wennborg <hans@chromium.org>2020-02-21 09:51:47 +0100
commitda0fe2ade369223ebea2dafd411746e854a801f2 (patch)
tree7d8e06571519c8941e724b58b9bea737a5a4b66b /llvm/test/Transforms
parentd75ce45777d9802d43b555993fde8ed6562fb368 (diff)
downloadbcm5719-llvm-da0fe2ade369223ebea2dafd411746e854a801f2.tar.gz
bcm5719-llvm-da0fe2ade369223ebea2dafd411746e854a801f2.zip
Filter callbr insts from critical edge splitting
Similarly to how splitting predecessors with an indirectbr isn't handled in the generic way, we also shouldn't split callbrs, for similar reasons. (cherry picked from commit 2fe457690da0fc38bc7f9f1d0aee2ba6a6a16ada)
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/LICM/callbr-crash.ll18
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/test/Transforms/LICM/callbr-crash.ll b/llvm/test/Transforms/LICM/callbr-crash.ll
new file mode 100644
index 00000000000..e5e7215d5b4
--- /dev/null
+++ b/llvm/test/Transforms/LICM/callbr-crash.ll
@@ -0,0 +1,18 @@
+; RUN: opt -licm -disable-output < %s
+
+define i32 @j() {
+entry:
+ br label %for.cond
+
+for.cond: ; preds = %cond.true.i, %entry
+ callbr void asm sideeffect "", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@j, %for.end))
+ to label %cond.true.i [label %for.end]
+
+cond.true.i: ; preds = %for.cond
+ %asmresult1.i.i = extractvalue { i8, i32 } zeroinitializer, 1
+ br i1 undef, label %for.end, label %for.cond
+
+for.end: ; preds = %cond.true.i, %for.cond
+ %asmresult1.i.i2 = phi i32 [ %asmresult1.i.i, %cond.true.i ], [ undef, %for.cond ]
+ ret i32 undef
+}
OpenPOWER on IntegriCloud