blob: 90012a38ac5a2a06178ae1d6e77068f761f46c97 [file] [log] [blame]
Nick Lewycky73f565e2011-01-19 15:56:12 +00001; RUN: opt -analyze -scalar-evolution %s -S | FileCheck %s
2
Nick Lewycky30aa8b12011-01-19 16:59:46 +00003define i16 @test1(i8 %x) {
Nick Lewycky73f565e2011-01-19 15:56:12 +00004 %A = zext i8 %x to i12
5 %B = sext i12 %A to i16
6; CHECK: zext i8 %x to i16
7 ret i16 %B
8}
Nick Lewycky30aa8b12011-01-19 16:59:46 +00009
10define i8 @test2(i8 %x) {
11 %A = zext i8 %x to i16
12 %B = add i16 %A, 1025
13 %C = trunc i16 %B to i8
14; CHECK: (1 + %x)
15 ret i8 %C
16}
Nick Lewycky5c6fc1c2011-01-19 18:56:00 +000017
18define i8 @test3(i8 %x) {
19 %A = zext i8 %x to i16
20 %B = mul i16 %A, 1027
21 %C = trunc i16 %B to i8
22; CHECK: (3 * %x)
23 ret i8 %C
24}
Nick Lewycky630d85a2011-01-23 06:20:19 +000025
26define void @test4(i32 %x) {
27entry:
28 %0 = icmp sge i32 %x, 0
29 br i1 %0, label %loop, label %exit
30loop:
31 %A = phi i32 [0, %entry], [%I, %loop]
32 %rand = icmp sgt i32 %A, 10
33 %Z = select i1 %rand, i32 %A, i32 10
34 %B = trunc i32 %Z to i16
35 %C = sext i16 %B to i30
36; CHECK: %C =
37; CHECK-NEXT: (trunc i32 (10 smax {0,+,1}<%loop>) to i30)
38 %D = sext i16 %B to i32
39; CHECK: %D =
40; CHECK-NEXT: (10 smax {0,+,1}<%loop>)
41 %E = sext i16 %B to i34
42; CHECK: %E =
43; CHECK-NEXT: (zext i32 (10 smax {0,+,1}<%loop>) to i34)
44 %F = zext i16 %B to i30
45; CHECK: %F =
46; CHECK-NEXT: (trunc i32 (10 smax {0,+,1}<%loop>) to i30
47 %G = zext i16 %B to i32
48; CHECK: %G =
49; CHECK-NEXT: (10 smax {0,+,1}<%loop>)
50 %H = zext i16 %B to i34
51; CHECK: %H =
52; CHECK-NEXT: (zext i32 (10 smax {0,+,1}<%loop>) to i34)
53 %I = add i32 %A, 1
54 %1 = icmp ne i32 %A, 20
55 br i1 %1, label %loop, label %exit
56exit:
57 ret void
58}