summaryrefslogtreecommitdiffstats
path: root/test/Analysis/ScalarEvolution/fold.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Analysis/ScalarEvolution/fold.ll')
-rw-r--r--test/Analysis/ScalarEvolution/fold.ll62
1 files changed, 62 insertions, 0 deletions
diff --git a/test/Analysis/ScalarEvolution/fold.ll b/test/Analysis/ScalarEvolution/fold.ll
new file mode 100644
index 0000000..4e2adf1
--- /dev/null
+++ b/test/Analysis/ScalarEvolution/fold.ll
@@ -0,0 +1,62 @@
+; RUN: opt -analyze -scalar-evolution %s -S | FileCheck %s
+
+define i16 @test1(i8 %x) {
+ %A = zext i8 %x to i12
+ %B = sext i12 %A to i16
+; CHECK: zext i8 %x to i16
+ ret i16 %B
+}
+
+define i8 @test2(i8 %x) {
+ %A = zext i8 %x to i16
+ %B = add i16 %A, 1025
+ %C = trunc i16 %B to i8
+; CHECK: (1 + %x)
+ ret i8 %C
+}
+
+define i8 @test3(i8 %x) {
+ %A = zext i8 %x to i16
+ %B = mul i16 %A, 1027
+ %C = trunc i16 %B to i8
+; CHECK: (3 * %x)
+ ret i8 %C
+}
+
+define void @test4(i32 %x, i32 %y) {
+entry:
+ %Y = and i32 %y, 3
+ br label %loop
+loop:
+ %A = phi i32 [0, %entry], [%I, %loop]
+ %rand1 = icmp sgt i32 %A, %Y
+ %Z1 = select i1 %rand1, i32 %A, i32 %Y
+ %rand2 = icmp ugt i32 %A, %Z1
+ %Z2 = select i1 %rand2, i32 %A, i32 %Z1
+; CHECK: %Z2 =
+; CHECK-NEXT: --> ([[EXPR:.*]]){{ +}}Exits: 20
+ %B = trunc i32 %Z2 to i16
+ %C = sext i16 %B to i30
+; CHECK: %C =
+; CHECK-NEXT: (trunc i32 ([[EXPR]]) to i30)
+ %D = sext i16 %B to i32
+; CHECK: %D =
+; CHECK-NEXT: ([[EXPR]])
+ %E = sext i16 %B to i34
+; CHECK: %E =
+; CHECK-NEXT: (zext i32 ([[EXPR]]) to i34)
+ %F = zext i16 %B to i30
+; CHECK: %F =
+; CHECK-NEXT: (trunc i32 ([[EXPR]]) to i30
+ %G = zext i16 %B to i32
+; CHECK: %G =
+; CHECK-NEXT: ([[EXPR]])
+ %H = zext i16 %B to i34
+; CHECK: %H =
+; CHECK-NEXT: (zext i32 ([[EXPR]]) to i34)
+ %I = add i32 %A, 1
+ %0 = icmp ne i32 %A, 20
+ br i1 %0, label %loop, label %exit
+exit:
+ ret void
+}
OpenPOWER on IntegriCloud