~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Transforms/InstCombine/2004-11-27-SetCCForCastLargerAndConstant.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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: opt < %s -instcombine -S | FileCheck %s
 
13
; END.
 
14
define i1 @lt_signed_to_large_unsigned(i8 %SB) {
 
15
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
16
        %C = icmp ult i32 %Y, 1024              ; <i1> [#uses=1]
 
17
        ret i1 %C
 
18
; CHECK: %C1 = icmp sgt i8 %SB, -1
 
19
; CHECK: ret i1 %C1
 
20
}
 
21
 
 
22
define i1 @lt_signed_to_large_signed(i8 %SB) {
 
23
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
24
        %C = icmp slt i32 %Y, 1024              ; <i1> [#uses=1]
 
25
        ret i1 %C
 
26
; CHECK: ret i1 true
 
27
}
 
28
 
 
29
define i1 @lt_signed_to_large_negative(i8 %SB) {
 
30
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
31
        %C = icmp slt i32 %Y, -1024             ; <i1> [#uses=1]
 
32
        ret i1 %C
 
33
; CHECK: ret i1 false
 
34
}
 
35
 
 
36
define i1 @lt_signed_to_small_unsigned(i8 %SB) {
 
37
        %Y = sext i8 %SB to i32
 
38
        %C = icmp ult i32 %Y, 17
 
39
        ret i1 %C
 
40
; CHECK: %C = icmp ult i8 %SB, 17
 
41
; CHECK: ret i1 %C
 
42
}
 
43
 
 
44
define i1 @lt_signed_to_small_signed(i8 %SB) {
 
45
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
46
        %C = icmp slt i32 %Y, 17                ; <i1> [#uses=1]
 
47
        ret i1 %C
 
48
; CHECK: %C = icmp slt i8 %SB, 17
 
49
; CHECK: ret i1 %C
 
50
}
 
51
define i1 @lt_signed_to_small_negative(i8 %SB) {
 
52
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
53
        %C = icmp slt i32 %Y, -17               ; <i1> [#uses=1]
 
54
        ret i1 %C
 
55
; CHECK: %C = icmp slt i8 %SB, -17
 
56
; CHECK: ret i1 %C
 
57
}
 
58
 
 
59
define i1 @lt_unsigned_to_large_unsigned(i8 %SB) {
 
60
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
61
        %C = icmp ult i32 %Y, 1024              ; <i1> [#uses=1]
 
62
        ret i1 %C
 
63
; CHECK: ret i1 true
 
64
}
 
65
 
 
66
define i1 @lt_unsigned_to_large_signed(i8 %SB) {
 
67
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
68
        %C = icmp slt i32 %Y, 1024              ; <i1> [#uses=1]
 
69
        ret i1 %C
 
70
; CHECK: ret i1 true
 
71
}
 
72
 
 
73
define i1 @lt_unsigned_to_large_negative(i8 %SB) {
 
74
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
75
        %C = icmp slt i32 %Y, -1024             ; <i1> [#uses=1]
 
76
        ret i1 %C
 
77
; CHECK: ret i1 false
 
78
}
 
79
 
 
80
define i1 @lt_unsigned_to_small_unsigned(i8 %SB) {
 
81
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
82
        %C = icmp ult i32 %Y, 17                ; <i1> [#uses=1]
 
83
        ret i1 %C
 
84
; CHECK: %C = icmp ult i8 %SB, 17
 
85
; CHECK: ret i1 %C
 
86
}
 
87
 
 
88
define i1 @lt_unsigned_to_small_signed(i8 %SB) {
 
89
        %Y = zext i8 %SB to i32
 
90
        %C = icmp slt i32 %Y, 17
 
91
        ret i1 %C
 
92
; CHECK: %C = icmp ult i8 %SB, 17
 
93
; CHECK: ret i1 %C
 
94
}
 
95
 
 
96
define i1 @lt_unsigned_to_small_negative(i8 %SB) {
 
97
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
98
        %C = icmp slt i32 %Y, -17               ; <i1> [#uses=1]
 
99
        ret i1 %C
 
100
; CHECK: ret i1 false
 
101
}
 
102
 
 
103
define i1 @gt_signed_to_large_unsigned(i8 %SB) {
 
104
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
105
        %C = icmp ugt i32 %Y, 1024              ; <i1> [#uses=1]
 
106
        ret i1 %C
 
107
; CHECK: %C = icmp slt i8 %SB, 0
 
108
; CHECK: ret i1 %C
 
109
}
 
110
 
 
111
define i1 @gt_signed_to_large_signed(i8 %SB) {
 
112
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
113
        %C = icmp sgt i32 %Y, 1024              ; <i1> [#uses=1]
 
114
        ret i1 %C
 
115
; CHECK: ret i1 false
 
116
}
 
117
 
 
118
define i1 @gt_signed_to_large_negative(i8 %SB) {
 
119
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
120
        %C = icmp sgt i32 %Y, -1024             ; <i1> [#uses=1]
 
121
        ret i1 %C
 
122
; CHECK: ret i1 true
 
123
}
 
124
 
 
125
define i1 @gt_signed_to_small_unsigned(i8 %SB) {
 
126
        %Y = sext i8 %SB to i32
 
127
        %C = icmp ugt i32 %Y, 17
 
128
        ret i1 %C
 
129
; CHECK: %C = icmp ugt i8 %SB, 17
 
130
; CHECK: ret i1 %C
 
131
}
 
132
 
 
133
define i1 @gt_signed_to_small_signed(i8 %SB) {
 
134
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
135
        %C = icmp sgt i32 %Y, 17                ; <i1> [#uses=1]
 
136
        ret i1 %C
 
137
; CHECK: %C = icmp sgt i8 %SB, 17
 
138
; CHECK: ret i1 %C
 
139
}
 
140
 
 
141
define i1 @gt_signed_to_small_negative(i8 %SB) {
 
142
        %Y = sext i8 %SB to i32         ; <i32> [#uses=1]
 
143
        %C = icmp sgt i32 %Y, -17               ; <i1> [#uses=1]
 
144
        ret i1 %C
 
145
; CHECK: %C = icmp sgt i8 %SB, -17
 
146
; CHECK: ret i1 %C
 
147
}
 
148
 
 
149
define i1 @gt_unsigned_to_large_unsigned(i8 %SB) {
 
150
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
151
        %C = icmp ugt i32 %Y, 1024              ; <i1> [#uses=1]
 
152
        ret i1 %C
 
153
; CHECK: ret i1 false
 
154
}
 
155
 
 
156
define i1 @gt_unsigned_to_large_signed(i8 %SB) {
 
157
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
158
        %C = icmp sgt i32 %Y, 1024              ; <i1> [#uses=1]
 
159
        ret i1 %C
 
160
; CHECK: ret i1 false
 
161
}
 
162
 
 
163
define i1 @gt_unsigned_to_large_negative(i8 %SB) {
 
164
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
165
        %C = icmp sgt i32 %Y, -1024             ; <i1> [#uses=1]
 
166
        ret i1 %C
 
167
; CHECK: ret i1 true
 
168
}
 
169
 
 
170
define i1 @gt_unsigned_to_small_unsigned(i8 %SB) {
 
171
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
172
        %C = icmp ugt i32 %Y, 17                ; <i1> [#uses=1]
 
173
        ret i1 %C
 
174
; CHECK: %C = icmp ugt i8 %SB, 17
 
175
; CHECK: ret i1 %C
 
176
}
 
177
 
 
178
define i1 @gt_unsigned_to_small_signed(i8 %SB) {
 
179
        %Y = zext i8 %SB to i32
 
180
        %C = icmp sgt i32 %Y, 17
 
181
        ret i1 %C
 
182
; CHECK: %C = icmp ugt i8 %SB, 17
 
183
; CHECK: ret i1 %C
 
184
}
 
185
 
 
186
define i1 @gt_unsigned_to_small_negative(i8 %SB) {
 
187
        %Y = zext i8 %SB to i32         ; <i32> [#uses=1]
 
188
        %C = icmp sgt i32 %Y, -17               ; <i1> [#uses=1]
 
189
        ret i1 %C
 
190
; CHECK: ret i1 true
 
191
}
 
192