summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/InstCombine/switch-constant-expr.ll
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-10-12 10:20:15 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-10-12 10:20:15 +0000
commitfd0d7b21e0b974dcb8ee6257ae4ef4fa7398e80b (patch)
treeee961ca9d3d8742be18054e98111dd1e42866821 /llvm/test/Transforms/InstCombine/switch-constant-expr.ll
parent6ce45e0840bed276887787749ee7f83fbec65ab9 (diff)
downloadbcm5719-llvm-fd0d7b21e0b974dcb8ee6257ae4ef4fa7398e80b.tar.gz
bcm5719-llvm-fd0d7b21e0b974dcb8ee6257ae4ef4fa7398e80b.zip
[InstCombine] Fix constexpr issue in select combining
As discussed by Andrea on PR30486, we have an unsafe cast to an Instruction type in the select combine which doesn't take into account that it could be a ConstantExpr instead. Differential Revision: https://reviews.llvm.org/D25466 llvm-svn: 284000
Diffstat (limited to 'llvm/test/Transforms/InstCombine/switch-constant-expr.ll')
-rw-r--r--llvm/test/Transforms/InstCombine/switch-constant-expr.ll44
1 files changed, 44 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/switch-constant-expr.ll b/llvm/test/Transforms/InstCombine/switch-constant-expr.ll
new file mode 100644
index 00000000000..c2ea83b2adb
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/switch-constant-expr.ll
@@ -0,0 +1,44 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+@g = global i32 0
+
+; PR30486
+define i32 @single_case() {
+; CHECK-LABEL: @single_case(
+; CHECK-NEXT: switch i32 ptrtoint (i32* @g to i32), label %x [
+; CHECK-NEXT: ]
+; CHECK: x:
+; CHECK-NEXT: ret i32 0
+;
+ switch i32 add (i32 ptrtoint (i32* @g to i32), i32 -1), label %x []
+x:
+ ret i32 0
+}
+
+define i32 @multiple_cases() {
+; CHECK-LABEL: @multiple_cases(
+; CHECK-NEXT: switch i32 ptrtoint (i32* @g to i32), label %x [
+; CHECK-NEXT: i32 2, label %one
+; CHECK-NEXT: i32 3, label %two
+; CHECK-NEXT: ]
+; CHECK: x:
+; CHECK-NEXT: ret i32 0
+; CHECK: one:
+; CHECK-NEXT: ret i32 1
+; CHECK: two:
+; CHECK-NEXT: ret i32 2
+;
+ switch i32 add (i32 ptrtoint (i32* @g to i32), i32 -1), label %x [
+ i32 1, label %one
+ i32 2, label %two
+ ]
+x:
+ ret i32 0
+
+one:
+ ret i32 1
+
+two:
+ ret i32 2
+}
OpenPOWER on IntegriCloud