summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SimplifyCFG/switch_undef.ll
diff options
context:
space:
mode:
authorMikael Holmen <mikael.holmen@ericsson.com>2017-12-05 14:14:00 +0000
committerMikael Holmen <mikael.holmen@ericsson.com>2017-12-05 14:14:00 +0000
commit0a3e98062f29d5061b568953507e6c7dde56302a (patch)
tree5dc470f6ed460b4e4dfbee118209923c5c187ff0 /llvm/test/Transforms/SimplifyCFG/switch_undef.ll
parentb9b46394e3c2b9aeecc41409f03e8304fb09c363 (diff)
downloadbcm5719-llvm-0a3e98062f29d5061b568953507e6c7dde56302a.tar.gz
bcm5719-llvm-0a3e98062f29d5061b568953507e6c7dde56302a.zip
Bail out of a SimplifyCFG switch table opt at undef values.
Summary: A true or false result is expected from a comparison, but it seems the possibility of undef was overlooked, which could lead to a failed assert. This is fixed by this patch by bailing out if we encounter undef. The bug is old and the assert has been there since the end of 2014, so it seems this is unusual enough to forego optimization. Patch by JesperAntonsson. Reviewers: spatel, eeckstein, hans Reviewed By: hans Subscribers: uabelho, llvm-commits Differential Revision: https://reviews.llvm.org/D40639 llvm-svn: 319768
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG/switch_undef.ll')
-rw-r--r--llvm/test/Transforms/SimplifyCFG/switch_undef.ll23
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/switch_undef.ll b/llvm/test/Transforms/SimplifyCFG/switch_undef.ll
new file mode 100644
index 00000000000..22b8bd38978
--- /dev/null
+++ b/llvm/test/Transforms/SimplifyCFG/switch_undef.ll
@@ -0,0 +1,23 @@
+; RUN: opt %s -keep-loops=false -switch-to-lookup=true -simplifycfg -S | FileCheck %s
+
+define void @f6() #0 {
+; CHECK-LABEL: entry:
+
+entry:
+ br label %for.cond.i
+
+for.cond.i: ; preds = %f1.exit.i, %entry
+ switch i16 undef, label %f1.exit.i [
+ i16 -1, label %cond.false.i3.i
+ i16 1, label %cond.false.i3.i
+ i16 0, label %cond.false.i3.i
+ ]
+
+cond.false.i3.i: ; preds = %for.cond.i, %for.cond.i, %for.cond.i
+ br label %f1.exit.i
+
+f1.exit.i: ; preds = %cond.false.i3.i, %for.cond.i
+ %cond.i4.i = phi i16 [ undef, %cond.false.i3.i ], [ 1, %for.cond.i ]
+ %tobool7.i = icmp ne i16 %cond.i4.i, 0
+ br label %for.cond.i
+}
OpenPOWER on IntegriCloud