blob: b033ce11faf2325b68b8b447715a6b436a4c931d [file] [log] [blame]
Matt Walad8f4a7d2014-06-18 09:55:03 -07001; This test checks that undef values are represented as zero.
2
Jan Vounga2703ae2015-02-19 11:27:44 -08003; RUN: %p2i -i %s --assemble --disassemble --args -O2 --verbose none \
4; RUN: | FileCheck %s
5; RUN: %p2i -i %s --assemble --disassemble --args -Om1 --verbose none \
6; RUN: | FileCheck %s
7; RUN: %p2i -i %s --assemble --disassemble --args -O2 -mattr=sse4.1 \
8; RUN: --verbose none | FileCheck %s
9; RUN: %p2i -i %s --assemble --disassemble --args -Om1 -mattr=sse4.1 \
10; RUN: --verbose none | FileCheck %s
Matt Walad8f4a7d2014-06-18 09:55:03 -070011
Matt Wala928f1292014-07-07 16:50:46 -070012define i32 @undef_i32() {
Matt Walad8f4a7d2014-06-18 09:55:03 -070013entry:
Matt Walad8f4a7d2014-06-18 09:55:03 -070014 ret i32 undef
Jan Voungdddc3062014-08-29 12:59:02 -070015; CHECK-LABEL: undef_i32
Jan Vounga2703ae2015-02-19 11:27:44 -080016; CHECK: mov eax,0x0
Matt Walad8f4a7d2014-06-18 09:55:03 -070017}
18
Matt Wala928f1292014-07-07 16:50:46 -070019define i64 @undef_i64() {
Matt Walad8f4a7d2014-06-18 09:55:03 -070020entry:
Matt Walad8f4a7d2014-06-18 09:55:03 -070021 ret i64 undef
Jan Voungdddc3062014-08-29 12:59:02 -070022; CHECK-LABEL: undef_i64
Jan Vounga2703ae2015-02-19 11:27:44 -080023; CHECK-DAG: mov eax,0x0
24; CHECK-DAG: mov edx,0x0
Matt Walad8f4a7d2014-06-18 09:55:03 -070025; CHECK: ret
26}
27
Matt Wala928f1292014-07-07 16:50:46 -070028define float @undef_float() {
Matt Walad8f4a7d2014-06-18 09:55:03 -070029entry:
Matt Walad8f4a7d2014-06-18 09:55:03 -070030 ret float undef
Jan Voungdddc3062014-08-29 12:59:02 -070031; CHECK-LABEL: undef_float
Jan Vounga2703ae2015-02-19 11:27:44 -080032; CHECK: fld DWORD PTR {{.*}} .L$float$0
Matt Walad8f4a7d2014-06-18 09:55:03 -070033}
34
Matt Wala928f1292014-07-07 16:50:46 -070035define <4 x i1> @undef_v4i1() {
36entry:
37 ret <4 x i1> undef
Jan Voungdddc3062014-08-29 12:59:02 -070038; CHECK-LABEL: undef_v4i1
Matt Wala928f1292014-07-07 16:50:46 -070039; CHECK: pxor
Matt Wala928f1292014-07-07 16:50:46 -070040}
41
42define <8 x i1> @undef_v8i1() {
43entry:
44 ret <8 x i1> undef
Jan Voungdddc3062014-08-29 12:59:02 -070045; CHECK-LABEL: undef_v8i1
Matt Wala928f1292014-07-07 16:50:46 -070046; CHECK: pxor
Matt Wala928f1292014-07-07 16:50:46 -070047}
48
49define <16 x i1> @undef_v16i1() {
50entry:
51 ret <16 x i1> undef
Jan Voungdddc3062014-08-29 12:59:02 -070052; CHECK-LABEL: undef_v16i1
Matt Wala928f1292014-07-07 16:50:46 -070053; CHECK: pxor
Matt Wala928f1292014-07-07 16:50:46 -070054}
55
56define <16 x i8> @undef_v16i8() {
57entry:
58 ret <16 x i8> undef
Jan Voungdddc3062014-08-29 12:59:02 -070059; CHECK-LABEL: undef_v16i8
Matt Wala928f1292014-07-07 16:50:46 -070060; CHECK: pxor
Matt Wala928f1292014-07-07 16:50:46 -070061}
62
63define <8 x i16> @undef_v8i16() {
64entry:
65 ret <8 x i16> undef
Jan Voungdddc3062014-08-29 12:59:02 -070066; CHECK-LABEL: undef_v8i16
Matt Wala928f1292014-07-07 16:50:46 -070067; CHECK: pxor
Matt Wala928f1292014-07-07 16:50:46 -070068}
69
70define <4 x i32> @undef_v4i32() {
71entry:
72 ret <4 x i32> undef
Jan Voungdddc3062014-08-29 12:59:02 -070073; CHECK-LABEL: undef_v4i32
Matt Wala928f1292014-07-07 16:50:46 -070074; CHECK: pxor
Matt Wala928f1292014-07-07 16:50:46 -070075}
76
77define <4 x float> @undef_v4f32() {
78entry:
79 ret <4 x float> undef
Jan Voungdddc3062014-08-29 12:59:02 -070080; CHECK-LABEL: undef_v4f32
Matt Wala928f1292014-07-07 16:50:46 -070081; CHECK: pxor
Matt Walae3777672014-07-31 09:06:17 -070082}
83
84define <4 x i32> @vector_arith(<4 x i32> %arg) {
85entry:
86 %val = add <4 x i32> undef, %arg
87 ret <4 x i32> %val
Jan Voungdddc3062014-08-29 12:59:02 -070088; CHECK-LABEL: vector_arith
Matt Walae3777672014-07-31 09:06:17 -070089; CHECK: pxor
90}
91
92define <4 x float> @vector_bitcast() {
93entry:
94 %val = bitcast <4 x i32> undef to <4 x float>
95 ret <4 x float> %val
Jan Voungdddc3062014-08-29 12:59:02 -070096; CHECK-LABEL: vector_bitcast
Matt Walae3777672014-07-31 09:06:17 -070097; CHECK: pxor
98}
99
100define <4 x i32> @vector_sext() {
101entry:
102 %val = sext <4 x i1> undef to <4 x i32>
103 ret <4 x i32> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700104; CHECK-LABEL: vector_sext
Matt Walae3777672014-07-31 09:06:17 -0700105; CHECK: pxor
106}
107
108define <4 x i32> @vector_zext() {
109entry:
110 %val = zext <4 x i1> undef to <4 x i32>
111 ret <4 x i32> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700112; CHECK-LABEL: vector_zext
Matt Walae3777672014-07-31 09:06:17 -0700113; CHECK: pxor
114}
115
116define <4 x i1> @vector_trunc() {
117entry:
118 %val = trunc <4 x i32> undef to <4 x i1>
119 ret <4 x i1> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700120; CHECK-LABEL: vector_trunc
Matt Walae3777672014-07-31 09:06:17 -0700121; CHECK: pxor
122}
123
124define <4 x i1> @vector_icmp(<4 x i32> %arg) {
125entry:
126 %val = icmp eq <4 x i32> undef, %arg
127 ret <4 x i1> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700128; CHECK-LABEL: vector_icmp
Matt Walae3777672014-07-31 09:06:17 -0700129; CHECK: pxor
130}
131
132define <4 x i1> @vector_fcmp(<4 x float> %arg) {
133entry:
134 %val = fcmp ueq <4 x float> undef, %arg
135 ret <4 x i1> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700136; CHECK-LABEL: vector_fcmp
Matt Walae3777672014-07-31 09:06:17 -0700137; CHECK: pxor
138}
139
140define <4 x i32> @vector_fptosi() {
141entry:
142 %val = fptosi <4 x float> undef to <4 x i32>
143 ret <4 x i32> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700144; CHECK-LABEL: vector_fptosi
Matt Walae3777672014-07-31 09:06:17 -0700145; CHECK: pxor
146}
147
148define <4 x i32> @vector_fptoui() {
149entry:
150 %val = fptoui <4 x float> undef to <4 x i32>
151 ret <4 x i32> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700152; CHECK-LABEL: vector_fptoui
Matt Walae3777672014-07-31 09:06:17 -0700153; CHECK: pxor
154}
155
156define <4 x float> @vector_sitofp() {
157entry:
158 %val = sitofp <4 x i32> undef to <4 x float>
159 ret <4 x float> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700160; CHECK-LABEL: vector_sitofp
Matt Walae3777672014-07-31 09:06:17 -0700161; CHECK: pxor
162}
163
164define <4 x float> @vector_uitofp() {
165entry:
166 %val = uitofp <4 x i32> undef to <4 x float>
167 ret <4 x float> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700168; CHECK-LABEL: vector_uitofp
Matt Walae3777672014-07-31 09:06:17 -0700169; CHECK: pxor
170}
171
172define <4 x float> @vector_insertelement_arg1() {
173entry:
174 %val = insertelement <4 x float> undef, float 1.0, i32 0
175 ret <4 x float> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700176; CHECK-LABEL: vector_insertelement_arg1
Matt Walae3777672014-07-31 09:06:17 -0700177; CHECK: pxor
178}
179
180define <4 x float> @vector_insertelement_arg2(<4 x float> %arg) {
181entry:
182 %val = insertelement <4 x float> %arg, float undef, i32 0
183 ret <4 x float> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700184; CHECK-LABEL: vector_insertelement_arg2
Jan Vounga2703ae2015-02-19 11:27:44 -0800185; CHECK: movss {{.*}},DWORD PTR {{.*}} .L$float$0
Matt Walae3777672014-07-31 09:06:17 -0700186}
187
188define float @vector_extractelement_v4f32_index_0() {
189entry:
190 %val = extractelement <4 x float> undef, i32 0
191 ret float %val
Jan Voungdddc3062014-08-29 12:59:02 -0700192; CHECK-LABEL: vector_extractelement_v4f32_index_0
Matt Walae3777672014-07-31 09:06:17 -0700193; CHECK: pxor
194}
195
196define float @vector_extractelement_v4f32_index_1() {
197entry:
198 %val = extractelement <4 x float> undef, i32 1
199 ret float %val
Jan Voungdddc3062014-08-29 12:59:02 -0700200; CHECK-LABEL: vector_extractelement_v4f32_index_1
Matt Walae3777672014-07-31 09:06:17 -0700201; CHECK: pxor
202}
203
204define i32 @vector_extractelement_v16i1_index_7() {
205entry:
206 %val.trunc = extractelement <16 x i1> undef, i32 7
207 %val = sext i1 %val.trunc to i32
208 ret i32 %val
Jan Voungdddc3062014-08-29 12:59:02 -0700209; CHECK-LABEL: vector_extractelement_v16i1_index_7
Matt Walae3777672014-07-31 09:06:17 -0700210; CHECK: pxor
211}
212
213define <4 x i32> @vector_select_v4i32_cond(<4 x i32> %a, <4 x i32> %b) {
214entry:
215 %val = select <4 x i1> undef, <4 x i32> %a, <4 x i32> %b
216 ret <4 x i32> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700217; CHECK-LABEL: vector_select_v4i32_cond
Matt Walae3777672014-07-31 09:06:17 -0700218; CHECK: pxor
219}
220
221define <4 x i32> @vector_select_v4i32_arg1(<4 x i1> %cond, <4 x i32> %b) {
222entry:
223 %val = select <4 x i1> %cond, <4 x i32> undef, <4 x i32> %b
224 ret <4 x i32> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700225; CHECK-LABEL: vector_select_v4i32_arg1
Matt Walae3777672014-07-31 09:06:17 -0700226; CHECK: pxor
227}
228
229define <4 x i32> @vector_select_v4i32_arg2(<4 x i1> %cond, <4 x i32> %a) {
230entry:
231 %val = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> undef
232 ret <4 x i32> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700233; CHECK-LABEL: vector_select_v4i32_arg2
Matt Walae3777672014-07-31 09:06:17 -0700234; CHECK: pxor
235}
236
237define <4 x i1> @vector_select_v4i1_cond(<4 x i1> %a, <4 x i1> %b) {
238entry:
239 %val = select <4 x i1> undef, <4 x i1> %a, <4 x i1> %b
240 ret <4 x i1> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700241; CHECK-LABEL: vector_select_v4i1_cond
Matt Walae3777672014-07-31 09:06:17 -0700242; CHECK: pxor
243}
244
245define <4 x i1> @vector_select_v4i1_arg1(<4 x i1> %cond, <4 x i1> %b) {
246entry:
247 %val = select <4 x i1> %cond, <4 x i1> undef, <4 x i1> %b
248 ret <4 x i1> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700249; CHECK-LABEL: vector_select_v4i1_arg1
Matt Walae3777672014-07-31 09:06:17 -0700250; CHECK: pxor
251}
252
253define <4 x i1> @vector_select_v4i1_arg2(<4 x i1> %cond, <4 x i1> %a) {
254entry:
255 %val = select <4 x i1> %cond, <4 x i1> %a, <4 x i1> undef
256 ret <4 x i1> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700257; CHECK-LABEL: vector_select_v4i1_arg2
Matt Walae3777672014-07-31 09:06:17 -0700258; CHECK: pxor
259}
260
261define <4 x float> @vector_select_v4f32_cond(<4 x float> %a, <4 x float> %b) {
262entry:
263 %val = select <4 x i1> undef, <4 x float> %a, <4 x float> %b
264 ret <4 x float> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700265; CHECK-LABEL: vector_select_v4f32_cond
Matt Walae3777672014-07-31 09:06:17 -0700266; CHECK: pxor
267}
268
269define <4 x float> @vector_select_v4f32_arg1(<4 x i1> %cond, <4 x float> %b) {
270entry:
271 %val = select <4 x i1> %cond, <4 x float> undef, <4 x float> %b
272 ret <4 x float> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700273; CHECK-LABEL: vector_select_v4f32_arg1
Matt Walae3777672014-07-31 09:06:17 -0700274; CHECK: pxor
275}
276
277define <4 x float> @vector_select_v4f32_arg2(<4 x i1> %cond, <4 x float> %a) {
278entry:
279 %val = select <4 x i1> %cond, <4 x float> %a, <4 x float> undef
280 ret <4 x float> %val
Jan Voungdddc3062014-08-29 12:59:02 -0700281; CHECK-LABEL: vector_select_v4f32_arg2
Matt Walae3777672014-07-31 09:06:17 -0700282; CHECK: pxor
Matt Wala928f1292014-07-07 16:50:46 -0700283}