1 ; RUN: opt -analyze -scalar-evolution %s -S | FileCheck %s
3 define i16 @test1(i8 %x) {
5 %B = sext i12 %A to i16
6 ; CHECK: zext i8 %x to i16
10 define i8 @test2(i8 %x) {
11 %A = zext i8 %x to i16
13 %C = trunc i16 %B to i8
18 define i8 @test3(i8 %x) {
19 %A = zext i8 %x to i16
21 %C = trunc i16 %B to i8
26 define void @test4(i32 %x) {
28 %0 = icmp sge i32 %x, 0
29 br i1 %0, label %loop, label %exit
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
37 ; CHECK-NEXT: (trunc i32 (10 smax {0,+,1}<%loop>) to i30)
38 %D = sext i16 %B to i32
40 ; CHECK-NEXT: (10 smax {0,+,1}<%loop>)
41 %E = sext i16 %B to i34
43 ; CHECK-NEXT: (zext i32 (10 smax {0,+,1}<%loop>) to i34)
44 %F = zext i16 %B to i30
46 ; CHECK-NEXT: (trunc i32 (10 smax {0,+,1}<%loop>) to i30
47 %G = zext i16 %B to i32
49 ; CHECK-NEXT: (10 smax {0,+,1}<%loop>)
50 %H = zext i16 %B to i34
52 ; CHECK-NEXT: (zext i32 (10 smax {0,+,1}<%loop>) to i34)
54 %1 = icmp ne i32 %A, 20
55 br i1 %1, label %loop, label %exit