Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Side by Side Diff: tests_lit/reader_tests/switch.ll

Issue 576243002: Add switch instruction to Subzero bitcode reader. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix formatting Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« src/PNaClTranslator.cpp ('K') | « src/PNaClTranslator.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 ; Test switch instructions.
2
3 ; RUN: llvm-as < %s | pnacl-freeze -allow-local-symbol-tables \
4 ; RUN: | %llvm2ice -notranslate -verbose=inst -build-on-read \
5 ; RUN: -allow-pnacl-reader-error-recovery \
6 ; RUN: -allow-local-symbol-tables \
7 ; RUN: | FileCheck %s
8
9 define i32 @testSwitch(i32 %a) {
Jim Stichnoth 2014/09/17 20:18:20 I think it wouldn't hurt to have a test where ther
Karl 2014/09/17 22:07:19 Done.
10 entry:
11 switch i32 %a, label %sw.default [
12 i32 1, label %sw.epilog
13 i32 2, label %sw.epilog
14 i32 3, label %sw.epilog
15 i32 7, label %sw.bb1
16 i32 8, label %sw.bb1
17 i32 15, label %sw.bb2
18 i32 14, label %sw.bb2
19 ]
20
21 sw.default: ; preds = %entry
22 %add = add i32 %a, 27
23 br label %sw.epilog
24
25 sw.bb1: ; preds = %entry, %entry
26 %phitmp = sub i32 21, %a
27 br label %sw.bb2
28
29 sw.bb2: ; preds = %sw.bb1, %entry, %en try
30 %result.0 = phi i32 [ 1, %entry ], [ 1, %entry ], [ %phitmp, %sw.bb1 ]
31 br label %sw.epilog
32
33 sw.epilog: ; preds = %sw.bb2, %sw.default , %entry, %entry, %entry
34 %result.1 = phi i32 [ %add, %sw.default ], [ %result.0, %sw.bb2 ], [ 17, %entr y ], [ 17, %entry ], [ 17, %entry ]
35 ret i32 %result.1
36 }
37
38 ; CHECK: define i32 @testSwitch(i32 %a) {
39 ; CHECK-NEXT: entry:
40 ; CHECK-NEXT: switch i32 %a, label %sw.default [
41 ; CHECK-NEXT: i32 1, label %sw.epilog
42 ; CHECK-NEXT: i32 2, label %sw.epilog
43 ; CHECK-NEXT: i32 3, label %sw.epilog
44 ; CHECK-NEXT: i32 7, label %sw.bb1
45 ; CHECK-NEXT: i32 8, label %sw.bb1
46 ; CHECK-NEXT: i32 15, label %sw.bb2
47 ; CHECK-NEXT: i32 14, label %sw.bb2
48 ; CHECK-NEXT: ]
49 ; CHECK-NEXT: sw.default:
50 ; CHECK-NEXT: %add = add i32 %a, 27
51 ; CHECK-NEXT: br label %sw.epilog
52 ; CHECK-NEXT: sw.bb1:
53 ; CHECK-NEXT: %phitmp = sub i32 21, %a
54 ; CHECK-NEXT: br label %sw.bb2
55 ; CHECK-NEXT: sw.bb2:
56 ; CHECK-NEXT: %result.0 = phi i32 [ 1, %entry ], [ 1, %entry ], [ %phitmp, %sw .bb1 ]
57 ; CHECK-NEXT: br label %sw.epilog
58 ; CHECK-NEXT: sw.epilog:
59 ; CHECK-NEXT: %result.1 = phi i32 [ %add, %sw.default ], [ %result.0, %sw.bb2 ], [ 17, %entry ], [ 17, %entry ], [ 17, %entry ]
60 ; CHECK-NEXT: ret i32 %result.1
61 ; CHECK-NEXT: }
62
63 define void @testSignedI32Values(i32 %a) {
Jim Stichnoth 2014/09/17 20:18:20 Add tests for i64 as well.
Karl 2014/09/17 22:07:19 Done.
64 entry:
65 switch i32 %a, label %labelDefault [
66 i32 0, label %label0
67 i32 -1, label %labelM1
68 i32 3, label %labelOther
69 i32 -3, label %labelOther
70 i32 -2147483648, label %labelMin ; min signed i32
71 i32 2147483647, label %labelMax ; max signed i32
72 ]
73 labelDefault:
74 ret void
75 label0:
76 ret void
77 labelM1:
78 ret void
79 labelMin:
80 ret void
81 labelMax:
82 ret void
83 labelOther:
84 ret void
85 }
86 ; CHECK-NEXT: define void @testSignedI32Values(i32 %a) {
87 ; CHECK-NEXT: entry:
88 ; CHECK-NEXT: switch i32 %a, label %labelDefault [
89 ; CHECK-NEXT: i32 0, label %label0
90 ; CHECK-NEXT: i32 -1, label %labelM1
91 ; CHECK-NEXT: i32 3, label %labelOther
92 ; CHECK-NEXT: i32 -3, label %labelOther
93 ; CHECK-NEXT: i32 -2147483648, label %labelMin
94 ; CHECK-NEXT: i32 2147483647, label %labelMax
95 ; CHECK-NEXT: ]
96 ; CHECK-NEXT: labelDefault:
97 ; CHECK-NEXT: ret void
98 ; CHECK-NEXT: label0:
99 ; CHECK-NEXT: ret void
100 ; CHECK-NEXT: labelM1:
101 ; CHECK-NEXT: ret void
102 ; CHECK-NEXT: labelMin:
103 ; CHECK-NEXT: ret void
104 ; CHECK-NEXT: labelMax:
105 ; CHECK-NEXT: ret void
106 ; CHECK-NEXT: labelOther:
107 ; CHECK-NEXT: ret void
108 ; CHECK-NEXT: }
109
110 define void @testUnsignedI32Values(i32 %a) {
111 entry:
112 switch i32 %a, label %exit [
113 i32 0, label %exit
114 i32 2147483647, label %exit ; max signed i32
Jim Stichnoth 2014/09/17 20:18:20 For this and the I16 and I8 unsigned tests (and th
Karl 2014/09/17 22:07:19 Done.
115 i32 4294967295, label %exit ; max unsigned i32
116 ]
117 exit:
118 ret void
119 }
120
121 ; CHECK-NEXT: define void @testUnsignedI32Values(i32 %a) {
122 ; CHECK-NEXT: entry:
123 ; CHECK-NEXT: switch i32 %a, label %exit [
124 ; CHECK-NEXT: i32 0, label %exit
125 ; CHECK-NEXT: i32 2147483647, label %exit
126 ; ; Note that -1 is signed version of 4294967295
127 ; CHECK-NEXT: i32 -1, label %exit
128 ; CHECK-NEXT: ]
129 ; CHECK-NEXT: exit:
130 ; CHECK-NEXT: ret void
131 ; CHECK-NEXT: }
132
133 define void @testSignedI16Values(i32 %p) {
134 entry:
135 %a = trunc i32 %p to i16
136 switch i16 %a, label %exit [
137 i16 0, label %exit
138 i16 -1, label %exit
139 i16 3, label %exit
140 i16 -3, label %exit
141 i16 -32768, label %exit ; min signed i16
142 i16 32767, label %exit ; max unsigned i16
143 ]
144 exit:
145 ret void
146 }
147
148 ; CHECK-NEXT: define void @testSignedI16Values(i32 %p) {
149 ; CHECK-NEXT: entry:
150 ; CHECK-NEXT: %a = trunc i32 %p to i16
151 ; CHECK-NEXT: switch i16 %a, label %exit [
152 ; CHECK-NEXT: i16 0, label %exit
153 ; CHECK-NEXT: i16 -1, label %exit
154 ; CHECK-NEXT: i16 3, label %exit
155 ; CHECK-NEXT: i16 -3, label %exit
156 ; CHECK-NEXT: i16 -32768, label %exit
157 ; CHECK-NEXT: i16 32767, label %exit
158 ; CHECK-NEXT: ]
159 ; CHECK-NEXT: exit:
160 ; CHECK-NEXT: ret void
161 ; CHECK-NEXT: }
162
163 define void @testUnsignedI16Values(i32 %p) {
164 entry:
165 %a = trunc i32 %p to i16
166 switch i16 %a, label %exit [
167 i16 0, label %exit
168 i16 32767, label %exit ; max signed i16
169 i16 65535, label %exit ; max unsigned i16
170 ]
171 exit:
172 ret void
173 }
174
175 ; CHECK-NEXT: define void @testUnsignedI16Values(i32 %p) {
176 ; CHECK-NEXT: entry:
177 ; CHECK-NEXT: %a = trunc i32 %p to i16
178 ; CHECK-NEXT: switch i16 %a, label %exit [
179 ; CHECK-NEXT: i16 0, label %exit
180 ; CHECK-NEXT: i16 32767, label %exit
181 ; ; Note that -1 is signed version of 65535
182 ; CHECK-NEXT: i16 -1, label %exit
183 ; CHECK-NEXT: ]
184 ; CHECK-NEXT: exit:
185 ; CHECK-NEXT: ret void
186 ; CHECK-NEXT: }
187
188 define void @testSignedI8Values(i32 %p) {
189 entry:
190 %a = trunc i32 %p to i8
191 switch i8 %a, label %exit [
192 i8 0, label %exit
193 i8 -1, label %exit
194 i8 3, label %exit
195 i8 -3, label %exit
196 i8 -128, label %exit ; min signed i8
197 i8 127, label %exit ; max unsigned i8
198 ]
199 exit:
200 ret void
201 }
202
203 ; CHECK-NEXT: define void @testSignedI8Values(i32 %p) {
204 ; CHECK-NEXT: entry:
205 ; CHECK-NEXT: %a = trunc i32 %p to i8
206 ; CHECK-NEXT: switch i8 %a, label %exit [
207 ; CHECK-NEXT: i8 0, label %exit
208 ; CHECK-NEXT: i8 -1, label %exit
209 ; CHECK-NEXT: i8 3, label %exit
210 ; CHECK-NEXT: i8 -3, label %exit
211 ; CHECK-NEXT: i8 -128, label %exit
212 ; CHECK-NEXT: i8 127, label %exit
213 ; CHECK-NEXT: ]
214 ; CHECK-NEXT: exit:
215 ; CHECK-NEXT: ret void
216 ; CHECK-NEXT: }
217
218 define void @testUnsignedI8Values(i32 %p) {
219 entry:
220 %a = trunc i32 %p to i8
221 switch i8 %a, label %exit [
222 i8 0, label %exit
223 i8 127, label %exit ; max signed i8
224 i8 255, label %exit ; max unsigned i8
225 ]
226 exit:
227 ret void
228 }
229
230 ; CHECK-NEXT: define void @testUnsignedI8Values(i32 %p) {
231 ; CHECK-NEXT: entry:
232 ; CHECK-NEXT: %a = trunc i32 %p to i8
233 ; CHECK-NEXT: switch i8 %a, label %exit [
234 ; CHECK-NEXT: i8 0, label %exit
235 ; CHECK-NEXT: i8 127, label %exit
236 ; ; Note that -1 is signed version of 255
237 ; CHECK-NEXT: i8 -1, label %exit
238 ; CHECK-NEXT: ]
239 ; CHECK-NEXT: exit:
240 ; CHECK-NEXT: ret void
241 ; CHECK-NEXT: }
242
243 define void @testI1Values(i32 %p) {
244 entry:
245 %a = trunc i32 %p to i1
246 switch i1 %a, label %exit [
247 i1 true, label %exit
248 i1 false, label %exit
249 ]
250 exit:
251 ret void
252 }
253
254 ; CHECK-NEXT: define void @testI1Values(i32 %p) {
255 ; CHECK-NEXT: entry:
256 ; CHECK-NEXT: %a = trunc i32 %p to i1
257 ; CHECK-NEXT: switch i1 %a, label %exit [
258 ; CHECK-NEXT: i1 -1, label %exit
259 ; CHECK-NEXT: i1 0, label %exit
260 ; CHECK-NEXT: ]
261 ; CHECK-NEXT: exit:
262 ; CHECK-NEXT: ret void
263 ; CHECK-NEXT: }
OLDNEW
« src/PNaClTranslator.cpp ('K') | « src/PNaClTranslator.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698