Remove llvm-upgrade and update test cases.
[oota-llvm.git] / test / Transforms / InstCombine / 2004-11-27-SetCCForCastLargerAndConstant.ll
1 ; This test case tests the InstructionCombining optimization that
2 ; reduces things like:
3 ;   %Y = sext i8 %X to i32 
4 ;   %C = icmp ult i32 %Y, 1024
5 ; to
6 ;   %C = i1 true
7 ; It includes test cases for different constant values, signedness of the
8 ; cast operands, and types of setCC operators. In all cases, the cast should
9 ; be eliminated. In many cases the setCC is also eliminated based on the
10 ; constant value and the range of the casted value.
11 ;
12 ; RUN: llvm-as < %s -o - | opt -instcombine | llvm-dis | \
13 ; RUN:    notcast .*int
14
15 define i1 @lt_signed_to_large_unsigned(i8 %SB) {
16         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
17         %C = icmp ult i32 %Y, 1024              ; <i1> [#uses=1]
18         ret i1 %C
19 }
20
21 define i1 @lt_signed_to_large_signed(i8 %SB) {
22         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
23         %C = icmp slt i32 %Y, 1024              ; <i1> [#uses=1]
24         ret i1 %C
25 }
26
27 define i1 @lt_signed_to_large_negative(i8 %SB) {
28         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
29         %C = icmp slt i32 %Y, -1024             ; <i1> [#uses=1]
30         ret i1 %C
31 }
32
33 define i1 @lt_signed_to_small_signed(i8 %SB) {
34         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
35         %C = icmp slt i32 %Y, 17                ; <i1> [#uses=1]
36         ret i1 %C
37 }
38 define i1 @lt_signed_to_small_negative(i8 %SB) {
39         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
40         %C = icmp slt i32 %Y, -17               ; <i1> [#uses=1]
41         ret i1 %C
42 }
43
44 define i1 @lt_unsigned_to_large_unsigned(i8 %SB) {
45         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
46         %C = icmp ult i32 %Y, 1024              ; <i1> [#uses=1]
47         ret i1 %C
48 }
49
50 define i1 @lt_unsigned_to_large_signed(i8 %SB) {
51         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
52         %C = icmp slt i32 %Y, 1024              ; <i1> [#uses=1]
53         ret i1 %C
54 }
55
56 define i1 @lt_unsigned_to_large_negative(i8 %SB) {
57         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
58         %C = icmp slt i32 %Y, -1024             ; <i1> [#uses=1]
59         ret i1 %C
60 }
61
62 define i1 @lt_unsigned_to_small_unsigned(i8 %SB) {
63         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
64         %C = icmp ult i32 %Y, 17                ; <i1> [#uses=1]
65         ret i1 %C
66 }
67
68 define i1 @lt_unsigned_to_small_negative(i8 %SB) {
69         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
70         %C = icmp slt i32 %Y, -17               ; <i1> [#uses=1]
71         ret i1 %C
72 }
73
74 define i1 @gt_signed_to_large_unsigned(i8 %SB) {
75         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
76         %C = icmp ugt i32 %Y, 1024              ; <i1> [#uses=1]
77         ret i1 %C
78 }
79
80 define i1 @gt_signed_to_large_signed(i8 %SB) {
81         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
82         %C = icmp sgt i32 %Y, 1024              ; <i1> [#uses=1]
83         ret i1 %C
84 }
85
86 define i1 @gt_signed_to_large_negative(i8 %SB) {
87         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
88         %C = icmp sgt i32 %Y, -1024             ; <i1> [#uses=1]
89         ret i1 %C
90 }
91 define i1 @gt_signed_to_small_signed(i8 %SB) {
92         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
93         %C = icmp sgt i32 %Y, 17                ; <i1> [#uses=1]
94         ret i1 %C
95 }
96
97 define i1 @gt_signed_to_small_negative(i8 %SB) {
98         %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
99         %C = icmp sgt i32 %Y, -17               ; <i1> [#uses=1]
100         ret i1 %C
101 }
102
103 define i1 @gt_unsigned_to_large_unsigned(i8 %SB) {
104         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
105         %C = icmp ugt i32 %Y, 1024              ; <i1> [#uses=1]
106         ret i1 %C
107 }
108
109 define i1 @gt_unsigned_to_large_signed(i8 %SB) {
110         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
111         %C = icmp sgt i32 %Y, 1024              ; <i1> [#uses=1]
112         ret i1 %C
113 }
114
115 define i1 @gt_unsigned_to_large_negative(i8 %SB) {
116         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
117         %C = icmp sgt i32 %Y, -1024             ; <i1> [#uses=1]
118         ret i1 %C
119 }
120
121 define i1 @gt_unsigned_to_small_unsigned(i8 %SB) {
122         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
123         %C = icmp ugt i32 %Y, 17                ; <i1> [#uses=1]
124         ret i1 %C
125 }
126
127 define i1 @gt_unsigned_to_small_negative(i8 %SB) {
128         %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
129         %C = icmp sgt i32 %Y, -17               ; <i1> [#uses=1]
130         ret i1 %C
131 }
132