annotate llvm/test/Transforms/AggressiveInstCombine/trunc_select_cmp.ll @ 201:a96fbbdf2d0f

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Fri, 04 Jun 2021 21:07:06 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
anatofuz
parents:
diff changeset
2 ; RUN: opt < %s -aggressive-instcombine -S | FileCheck %s
anatofuz
parents:
diff changeset
3 ; RUN: opt < %s -passes=aggressive-instcombine -S | FileCheck %s
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 define dso_local i16 @cmp_select_sext_const(i8 %a) {
anatofuz
parents:
diff changeset
6 ; CHECK-LABEL: @cmp_select_sext_const(
anatofuz
parents:
diff changeset
7 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
8 ; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
9 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], 109
anatofuz
parents:
diff changeset
10 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 109, i32 [[CONV]]
anatofuz
parents:
diff changeset
11 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
12 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
13 ;
anatofuz
parents:
diff changeset
14 entry:
anatofuz
parents:
diff changeset
15 %conv = sext i8 %a to i32
anatofuz
parents:
diff changeset
16 %cmp = icmp slt i32 %conv, 109
anatofuz
parents:
diff changeset
17 %cond = select i1 %cmp, i32 109, i32 %conv
anatofuz
parents:
diff changeset
18 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
19 ret i16 %conv4
anatofuz
parents:
diff changeset
20 }
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 define dso_local i16 @cmp_select_sext(i8 %a, i8 %b) {
anatofuz
parents:
diff changeset
23 ; CHECK-LABEL: @cmp_select_sext(
anatofuz
parents:
diff changeset
24 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
25 ; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
26 ; CHECK-NEXT: [[CONV2:%.*]] = sext i8 [[B:%.*]] to i32
anatofuz
parents:
diff changeset
27 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], [[CONV2]]
anatofuz
parents:
diff changeset
28 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[CONV2]], i32 [[CONV]]
anatofuz
parents:
diff changeset
29 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
30 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
31 ;
anatofuz
parents:
diff changeset
32 entry:
anatofuz
parents:
diff changeset
33 %conv = sext i8 %a to i32
anatofuz
parents:
diff changeset
34 %conv2 = sext i8 %b to i32
anatofuz
parents:
diff changeset
35 %cmp = icmp slt i32 %conv, %conv2
anatofuz
parents:
diff changeset
36 %cond = select i1 %cmp, i32 %conv2, i32 %conv
anatofuz
parents:
diff changeset
37 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
38 ret i16 %conv4
anatofuz
parents:
diff changeset
39 }
anatofuz
parents:
diff changeset
40
anatofuz
parents:
diff changeset
41 define dso_local i16 @cmp_select_zext(i8 %a, i8 %b) {
anatofuz
parents:
diff changeset
42 ; CHECK-LABEL: @cmp_select_zext(
anatofuz
parents:
diff changeset
43 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
44 ; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
45 ; CHECK-NEXT: [[CONV2:%.*]] = zext i8 [[B:%.*]] to i32
anatofuz
parents:
diff changeset
46 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], [[CONV2]]
anatofuz
parents:
diff changeset
47 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[CONV2]], i32 [[CONV]]
anatofuz
parents:
diff changeset
48 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
49 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
50 ;
anatofuz
parents:
diff changeset
51 entry:
anatofuz
parents:
diff changeset
52 %conv = zext i8 %a to i32
anatofuz
parents:
diff changeset
53 %conv2 = zext i8 %b to i32
anatofuz
parents:
diff changeset
54 %cmp = icmp slt i32 %conv, %conv2
anatofuz
parents:
diff changeset
55 %cond = select i1 %cmp, i32 %conv2, i32 %conv
anatofuz
parents:
diff changeset
56 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
57 ret i16 %conv4
anatofuz
parents:
diff changeset
58 }
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 define dso_local i16 @cmp_select_zext_sext(i8 %a, i8 %b) {
anatofuz
parents:
diff changeset
61 ; CHECK-LABEL: @cmp_select_zext_sext(
anatofuz
parents:
diff changeset
62 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
63 ; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
64 ; CHECK-NEXT: [[CONV2:%.*]] = sext i8 [[B:%.*]] to i32
anatofuz
parents:
diff changeset
65 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], [[CONV2]]
anatofuz
parents:
diff changeset
66 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[CONV2]], i32 [[CONV]]
anatofuz
parents:
diff changeset
67 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
68 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
69 ;
anatofuz
parents:
diff changeset
70 entry:
anatofuz
parents:
diff changeset
71 %conv = zext i8 %a to i32
anatofuz
parents:
diff changeset
72 %conv2 = sext i8 %b to i32
anatofuz
parents:
diff changeset
73 %cmp = icmp slt i32 %conv, %conv2
anatofuz
parents:
diff changeset
74 %cond = select i1 %cmp, i32 %conv2, i32 %conv
anatofuz
parents:
diff changeset
75 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
76 ret i16 %conv4
anatofuz
parents:
diff changeset
77 }
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 define dso_local i16 @cmp_select_zext_sext_diffOrigTy(i8 %a, i16 %b) {
anatofuz
parents:
diff changeset
80 ; CHECK-LABEL: @cmp_select_zext_sext_diffOrigTy(
anatofuz
parents:
diff changeset
81 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
82 ; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
83 ; CHECK-NEXT: [[CONV2:%.*]] = sext i16 [[B:%.*]] to i32
anatofuz
parents:
diff changeset
84 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], [[CONV2]]
anatofuz
parents:
diff changeset
85 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[CONV2]], i32 [[CONV]]
anatofuz
parents:
diff changeset
86 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
87 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
88 ;
anatofuz
parents:
diff changeset
89 entry:
anatofuz
parents:
diff changeset
90 %conv = zext i8 %a to i32
anatofuz
parents:
diff changeset
91 %conv2 = sext i16 %b to i32
anatofuz
parents:
diff changeset
92 %cmp = icmp slt i32 %conv, %conv2
anatofuz
parents:
diff changeset
93 %cond = select i1 %cmp, i32 %conv2, i32 %conv
anatofuz
parents:
diff changeset
94 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
95 ret i16 %conv4
anatofuz
parents:
diff changeset
96 }
anatofuz
parents:
diff changeset
97
anatofuz
parents:
diff changeset
98 define dso_local i16 @my_abs_sext(i8 %a) {
anatofuz
parents:
diff changeset
99 ; CHECK-LABEL: @my_abs_sext(
anatofuz
parents:
diff changeset
100 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
101 ; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
102 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], 0
anatofuz
parents:
diff changeset
103 ; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[CONV]]
anatofuz
parents:
diff changeset
104 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 [[CONV]]
anatofuz
parents:
diff changeset
105 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
106 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
107 ;
anatofuz
parents:
diff changeset
108 entry:
anatofuz
parents:
diff changeset
109 %conv = sext i8 %a to i32
anatofuz
parents:
diff changeset
110 %cmp = icmp slt i32 %conv, 0
anatofuz
parents:
diff changeset
111 %sub = sub nsw i32 0, %conv
anatofuz
parents:
diff changeset
112 %cond = select i1 %cmp, i32 %sub, i32 %conv
anatofuz
parents:
diff changeset
113 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
114 ret i16 %conv4
anatofuz
parents:
diff changeset
115 }
anatofuz
parents:
diff changeset
116
anatofuz
parents:
diff changeset
117 define dso_local i16 @my_abs_zext(i8 %a) {
anatofuz
parents:
diff changeset
118 ; CHECK-LABEL: @my_abs_zext(
anatofuz
parents:
diff changeset
119 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
120 ; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
121 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], 0
anatofuz
parents:
diff changeset
122 ; CHECK-NEXT: [[SUB:%.*]] = sub nsw i32 0, [[CONV]]
anatofuz
parents:
diff changeset
123 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 [[SUB]], i32 [[CONV]]
anatofuz
parents:
diff changeset
124 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
125 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
126 ;
anatofuz
parents:
diff changeset
127 entry:
anatofuz
parents:
diff changeset
128 %conv = zext i8 %a to i32
anatofuz
parents:
diff changeset
129 %cmp = icmp slt i32 %conv, 0
anatofuz
parents:
diff changeset
130 %sub = sub nsw i32 0, %conv
anatofuz
parents:
diff changeset
131 %cond = select i1 %cmp, i32 %sub, i32 %conv
anatofuz
parents:
diff changeset
132 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
133 ret i16 %conv4
anatofuz
parents:
diff changeset
134 }
anatofuz
parents:
diff changeset
135
anatofuz
parents:
diff changeset
136 define dso_local i16 @select_sext(i8 %a, i1 %cond) {
anatofuz
parents:
diff changeset
137 ; CHECK-LABEL: @select_sext(
anatofuz
parents:
diff changeset
138 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
139 ; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[A:%.*]] to i16
anatofuz
parents:
diff changeset
140 ; CHECK-NEXT: [[SUB:%.*]] = sub i16 0, [[CONV]]
anatofuz
parents:
diff changeset
141 ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[SUB]], i16 [[CONV]]
anatofuz
parents:
diff changeset
142 ; CHECK-NEXT: ret i16 [[SEL]]
anatofuz
parents:
diff changeset
143 ;
anatofuz
parents:
diff changeset
144 entry:
anatofuz
parents:
diff changeset
145 %conv = sext i8 %a to i32
anatofuz
parents:
diff changeset
146 %sub = sub nsw i32 0, %conv
anatofuz
parents:
diff changeset
147 %sel = select i1 %cond, i32 %sub, i32 %conv
anatofuz
parents:
diff changeset
148 %conv4 = trunc i32 %sel to i16
anatofuz
parents:
diff changeset
149 ret i16 %conv4
anatofuz
parents:
diff changeset
150 }
anatofuz
parents:
diff changeset
151
anatofuz
parents:
diff changeset
152 define dso_local i16 @select_zext(i8 %a, i1 %cond) {
anatofuz
parents:
diff changeset
153 ; CHECK-LABEL: @select_zext(
anatofuz
parents:
diff changeset
154 ; CHECK-NEXT: entry:
anatofuz
parents:
diff changeset
155 ; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[A:%.*]] to i16
anatofuz
parents:
diff changeset
156 ; CHECK-NEXT: [[SUB:%.*]] = sub i16 0, [[CONV]]
anatofuz
parents:
diff changeset
157 ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[COND:%.*]], i16 [[SUB]], i16 [[CONV]]
anatofuz
parents:
diff changeset
158 ; CHECK-NEXT: ret i16 [[SEL]]
anatofuz
parents:
diff changeset
159 ;
anatofuz
parents:
diff changeset
160 entry:
anatofuz
parents:
diff changeset
161 %conv = zext i8 %a to i32
anatofuz
parents:
diff changeset
162 %sub = sub nsw i32 0, %conv
anatofuz
parents:
diff changeset
163 %sel = select i1 %cond, i32 %sub, i32 %conv
anatofuz
parents:
diff changeset
164 %conv4 = trunc i32 %sel to i16
anatofuz
parents:
diff changeset
165 ret i16 %conv4
anatofuz
parents:
diff changeset
166 }
anatofuz
parents:
diff changeset
167
anatofuz
parents:
diff changeset
168 define i16 @cmp_select_signed_const_i16Const_noTransformation(i8 %a) {
anatofuz
parents:
diff changeset
169 ; CHECK-LABEL: @cmp_select_signed_const_i16Const_noTransformation(
anatofuz
parents:
diff changeset
170 ; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
171 ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[CONV]], 32768
anatofuz
parents:
diff changeset
172 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 32768, i32 [[CONV]]
anatofuz
parents:
diff changeset
173 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
174 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
175 ;
anatofuz
parents:
diff changeset
176 %conv = sext i8 %a to i32
anatofuz
parents:
diff changeset
177 %cmp = icmp slt i32 %conv, 32768
anatofuz
parents:
diff changeset
178 %cond = select i1 %cmp, i32 32768, i32 %conv
anatofuz
parents:
diff changeset
179 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
180 ret i16 %conv4
anatofuz
parents:
diff changeset
181 }
anatofuz
parents:
diff changeset
182
anatofuz
parents:
diff changeset
183 define i16 @cmp_select_unsigned_const_i16Const(i8 %a) {
anatofuz
parents:
diff changeset
184 ; CHECK-LABEL: @cmp_select_unsigned_const_i16Const(
anatofuz
parents:
diff changeset
185 ; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
186 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[CONV]], 32768
anatofuz
parents:
diff changeset
187 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 32768, i32 [[CONV]]
anatofuz
parents:
diff changeset
188 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
189 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
190 ;
anatofuz
parents:
diff changeset
191 %conv = zext i8 %a to i32
anatofuz
parents:
diff changeset
192 %cmp = icmp ult i32 %conv, 32768
anatofuz
parents:
diff changeset
193 %cond = select i1 %cmp, i32 32768, i32 %conv
anatofuz
parents:
diff changeset
194 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
195 ret i16 %conv4
anatofuz
parents:
diff changeset
196 }
anatofuz
parents:
diff changeset
197
anatofuz
parents:
diff changeset
198 define i16 @cmp_select_unsigned_const_i16Const_noTransformation(i8 %a) {
anatofuz
parents:
diff changeset
199 ; CHECK-LABEL: @cmp_select_unsigned_const_i16Const_noTransformation(
anatofuz
parents:
diff changeset
200 ; CHECK-NEXT: [[CONV:%.*]] = zext i8 [[A:%.*]] to i32
anatofuz
parents:
diff changeset
201 ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[CONV]], 65536
anatofuz
parents:
diff changeset
202 ; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i32 65536, i32 [[CONV]]
anatofuz
parents:
diff changeset
203 ; CHECK-NEXT: [[CONV4:%.*]] = trunc i32 [[COND]] to i16
anatofuz
parents:
diff changeset
204 ; CHECK-NEXT: ret i16 [[CONV4]]
anatofuz
parents:
diff changeset
205 ;
anatofuz
parents:
diff changeset
206 %conv = zext i8 %a to i32
anatofuz
parents:
diff changeset
207 %cmp = icmp ult i32 %conv, 65536
anatofuz
parents:
diff changeset
208 %cond = select i1 %cmp, i32 65536, i32 %conv
anatofuz
parents:
diff changeset
209 %conv4 = trunc i32 %cond to i16
anatofuz
parents:
diff changeset
210 ret i16 %conv4
anatofuz
parents:
diff changeset
211 }
anatofuz
parents:
diff changeset
212