Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 1 | ; This test checks that undef values are represented as zero. |
| 2 | |
Jim Stichnoth | 729dbd0 | 2015-02-25 14:48:43 -0800 | [diff] [blame] | 3 | ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 \ |
Jan Voung | a2703ae | 2015-02-19 11:27:44 -0800 | [diff] [blame] | 4 | ; RUN: | FileCheck %s |
Jim Stichnoth | 729dbd0 | 2015-02-25 14:48:43 -0800 | [diff] [blame] | 5 | ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 \ |
Jan Voung | a2703ae | 2015-02-19 11:27:44 -0800 | [diff] [blame] | 6 | ; RUN: | FileCheck %s |
Jim Stichnoth | 729dbd0 | 2015-02-25 14:48:43 -0800 | [diff] [blame] | 7 | ; RUN: %p2i -i %s --filetype=obj --disassemble --args -O2 -mattr=sse4.1 \ |
| 8 | ; RUN: | FileCheck %s |
| 9 | ; RUN: %p2i -i %s --filetype=obj --disassemble --args -Om1 -mattr=sse4.1 \ |
| 10 | ; RUN: | FileCheck %s |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 11 | |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 12 | define i32 @undef_i32() { |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 13 | entry: |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 14 | ret i32 undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 15 | ; CHECK-LABEL: undef_i32 |
Jan Voung | a2703ae | 2015-02-19 11:27:44 -0800 | [diff] [blame] | 16 | ; CHECK: mov eax,0x0 |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 17 | } |
| 18 | |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 19 | define i64 @undef_i64() { |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 20 | entry: |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 21 | ret i64 undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 22 | ; CHECK-LABEL: undef_i64 |
Jan Voung | a2703ae | 2015-02-19 11:27:44 -0800 | [diff] [blame] | 23 | ; CHECK-DAG: mov eax,0x0 |
| 24 | ; CHECK-DAG: mov edx,0x0 |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 25 | ; CHECK: ret |
| 26 | } |
| 27 | |
Jan Voung | fbdd244 | 2015-07-15 12:36:20 -0700 | [diff] [blame] | 28 | define i32 @trunc_undef_i64() { |
| 29 | entry: |
| 30 | %ret = trunc i64 undef to i32 |
| 31 | ret i32 %ret |
| 32 | ; CHECK-LABEL: trunc_undef_i64 |
| 33 | ; CHECK: mov eax,0x0 |
| 34 | ; CHECK: ret |
| 35 | } |
| 36 | |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 37 | define float @undef_float() { |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 38 | entry: |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 39 | ret float undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 40 | ; CHECK-LABEL: undef_float |
Jan Voung | a2703ae | 2015-02-19 11:27:44 -0800 | [diff] [blame] | 41 | ; CHECK: fld DWORD PTR {{.*}} .L$float$0 |
Matt Wala | d8f4a7d | 2014-06-18 09:55:03 -0700 | [diff] [blame] | 42 | } |
| 43 | |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 44 | define <4 x i1> @undef_v4i1() { |
| 45 | entry: |
| 46 | ret <4 x i1> undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 47 | ; CHECK-LABEL: undef_v4i1 |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 48 | ; CHECK: pxor |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | define <8 x i1> @undef_v8i1() { |
| 52 | entry: |
| 53 | ret <8 x i1> undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 54 | ; CHECK-LABEL: undef_v8i1 |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 55 | ; CHECK: pxor |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 56 | } |
| 57 | |
| 58 | define <16 x i1> @undef_v16i1() { |
| 59 | entry: |
| 60 | ret <16 x i1> undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 61 | ; CHECK-LABEL: undef_v16i1 |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 62 | ; CHECK: pxor |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 63 | } |
| 64 | |
| 65 | define <16 x i8> @undef_v16i8() { |
| 66 | entry: |
| 67 | ret <16 x i8> undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 68 | ; CHECK-LABEL: undef_v16i8 |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 69 | ; CHECK: pxor |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 70 | } |
| 71 | |
| 72 | define <8 x i16> @undef_v8i16() { |
| 73 | entry: |
| 74 | ret <8 x i16> undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 75 | ; CHECK-LABEL: undef_v8i16 |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 76 | ; CHECK: pxor |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 77 | } |
| 78 | |
| 79 | define <4 x i32> @undef_v4i32() { |
| 80 | entry: |
| 81 | ret <4 x i32> undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 82 | ; CHECK-LABEL: undef_v4i32 |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 83 | ; CHECK: pxor |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 84 | } |
| 85 | |
| 86 | define <4 x float> @undef_v4f32() { |
| 87 | entry: |
| 88 | ret <4 x float> undef |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 89 | ; CHECK-LABEL: undef_v4f32 |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 90 | ; CHECK: pxor |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 91 | } |
| 92 | |
| 93 | define <4 x i32> @vector_arith(<4 x i32> %arg) { |
| 94 | entry: |
| 95 | %val = add <4 x i32> undef, %arg |
| 96 | ret <4 x i32> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 97 | ; CHECK-LABEL: vector_arith |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 98 | ; CHECK: pxor |
| 99 | } |
| 100 | |
| 101 | define <4 x float> @vector_bitcast() { |
| 102 | entry: |
| 103 | %val = bitcast <4 x i32> undef to <4 x float> |
| 104 | ret <4 x float> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 105 | ; CHECK-LABEL: vector_bitcast |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 106 | ; CHECK: pxor |
| 107 | } |
| 108 | |
| 109 | define <4 x i32> @vector_sext() { |
| 110 | entry: |
| 111 | %val = sext <4 x i1> undef to <4 x i32> |
| 112 | ret <4 x i32> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 113 | ; CHECK-LABEL: vector_sext |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 114 | ; CHECK: pxor |
| 115 | } |
| 116 | |
| 117 | define <4 x i32> @vector_zext() { |
| 118 | entry: |
| 119 | %val = zext <4 x i1> undef to <4 x i32> |
| 120 | ret <4 x i32> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 121 | ; CHECK-LABEL: vector_zext |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 122 | ; CHECK: pxor |
| 123 | } |
| 124 | |
| 125 | define <4 x i1> @vector_trunc() { |
| 126 | entry: |
| 127 | %val = trunc <4 x i32> undef to <4 x i1> |
| 128 | ret <4 x i1> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 129 | ; CHECK-LABEL: vector_trunc |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 130 | ; CHECK: pxor |
| 131 | } |
| 132 | |
| 133 | define <4 x i1> @vector_icmp(<4 x i32> %arg) { |
| 134 | entry: |
| 135 | %val = icmp eq <4 x i32> undef, %arg |
| 136 | ret <4 x i1> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 137 | ; CHECK-LABEL: vector_icmp |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 138 | ; CHECK: pxor |
| 139 | } |
| 140 | |
| 141 | define <4 x i1> @vector_fcmp(<4 x float> %arg) { |
| 142 | entry: |
| 143 | %val = fcmp ueq <4 x float> undef, %arg |
| 144 | ret <4 x i1> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 145 | ; CHECK-LABEL: vector_fcmp |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 146 | ; CHECK: pxor |
| 147 | } |
| 148 | |
| 149 | define <4 x i32> @vector_fptosi() { |
| 150 | entry: |
| 151 | %val = fptosi <4 x float> undef to <4 x i32> |
| 152 | ret <4 x i32> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 153 | ; CHECK-LABEL: vector_fptosi |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 154 | ; CHECK: pxor |
| 155 | } |
| 156 | |
| 157 | define <4 x i32> @vector_fptoui() { |
| 158 | entry: |
| 159 | %val = fptoui <4 x float> undef to <4 x i32> |
| 160 | ret <4 x i32> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 161 | ; CHECK-LABEL: vector_fptoui |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 162 | ; CHECK: pxor |
| 163 | } |
| 164 | |
| 165 | define <4 x float> @vector_sitofp() { |
| 166 | entry: |
| 167 | %val = sitofp <4 x i32> undef to <4 x float> |
| 168 | ret <4 x float> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 169 | ; CHECK-LABEL: vector_sitofp |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 170 | ; CHECK: pxor |
| 171 | } |
| 172 | |
| 173 | define <4 x float> @vector_uitofp() { |
| 174 | entry: |
| 175 | %val = uitofp <4 x i32> undef to <4 x float> |
| 176 | ret <4 x float> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 177 | ; CHECK-LABEL: vector_uitofp |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 178 | ; CHECK: pxor |
| 179 | } |
| 180 | |
| 181 | define <4 x float> @vector_insertelement_arg1() { |
| 182 | entry: |
| 183 | %val = insertelement <4 x float> undef, float 1.0, i32 0 |
| 184 | ret <4 x float> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 185 | ; CHECK-LABEL: vector_insertelement_arg1 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 186 | ; CHECK: pxor |
| 187 | } |
| 188 | |
| 189 | define <4 x float> @vector_insertelement_arg2(<4 x float> %arg) { |
| 190 | entry: |
| 191 | %val = insertelement <4 x float> %arg, float undef, i32 0 |
| 192 | ret <4 x float> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 193 | ; CHECK-LABEL: vector_insertelement_arg2 |
Jim Stichnoth | 03ffa58 | 2015-06-04 09:25:07 -0700 | [diff] [blame] | 194 | ; CHECK: {{movss|insertps}} {{.*}},DWORD PTR {{.*}} .L$float$0 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 195 | } |
| 196 | |
| 197 | define float @vector_extractelement_v4f32_index_0() { |
| 198 | entry: |
| 199 | %val = extractelement <4 x float> undef, i32 0 |
| 200 | ret float %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 201 | ; CHECK-LABEL: vector_extractelement_v4f32_index_0 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 202 | ; CHECK: pxor |
| 203 | } |
| 204 | |
| 205 | define float @vector_extractelement_v4f32_index_1() { |
| 206 | entry: |
| 207 | %val = extractelement <4 x float> undef, i32 1 |
| 208 | ret float %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 209 | ; CHECK-LABEL: vector_extractelement_v4f32_index_1 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 210 | ; CHECK: pxor |
| 211 | } |
| 212 | |
| 213 | define i32 @vector_extractelement_v16i1_index_7() { |
| 214 | entry: |
| 215 | %val.trunc = extractelement <16 x i1> undef, i32 7 |
| 216 | %val = sext i1 %val.trunc to i32 |
| 217 | ret i32 %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 218 | ; CHECK-LABEL: vector_extractelement_v16i1_index_7 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 219 | ; CHECK: pxor |
| 220 | } |
| 221 | |
| 222 | define <4 x i32> @vector_select_v4i32_cond(<4 x i32> %a, <4 x i32> %b) { |
| 223 | entry: |
| 224 | %val = select <4 x i1> undef, <4 x i32> %a, <4 x i32> %b |
| 225 | ret <4 x i32> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 226 | ; CHECK-LABEL: vector_select_v4i32_cond |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 227 | ; CHECK: pxor |
| 228 | } |
| 229 | |
| 230 | define <4 x i32> @vector_select_v4i32_arg1(<4 x i1> %cond, <4 x i32> %b) { |
| 231 | entry: |
| 232 | %val = select <4 x i1> %cond, <4 x i32> undef, <4 x i32> %b |
| 233 | ret <4 x i32> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 234 | ; CHECK-LABEL: vector_select_v4i32_arg1 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 235 | ; CHECK: pxor |
| 236 | } |
| 237 | |
| 238 | define <4 x i32> @vector_select_v4i32_arg2(<4 x i1> %cond, <4 x i32> %a) { |
| 239 | entry: |
| 240 | %val = select <4 x i1> %cond, <4 x i32> %a, <4 x i32> undef |
| 241 | ret <4 x i32> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 242 | ; CHECK-LABEL: vector_select_v4i32_arg2 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 243 | ; CHECK: pxor |
| 244 | } |
| 245 | |
| 246 | define <4 x i1> @vector_select_v4i1_cond(<4 x i1> %a, <4 x i1> %b) { |
| 247 | entry: |
| 248 | %val = select <4 x i1> undef, <4 x i1> %a, <4 x i1> %b |
| 249 | ret <4 x i1> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 250 | ; CHECK-LABEL: vector_select_v4i1_cond |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 251 | ; CHECK: pxor |
| 252 | } |
| 253 | |
| 254 | define <4 x i1> @vector_select_v4i1_arg1(<4 x i1> %cond, <4 x i1> %b) { |
| 255 | entry: |
| 256 | %val = select <4 x i1> %cond, <4 x i1> undef, <4 x i1> %b |
| 257 | ret <4 x i1> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 258 | ; CHECK-LABEL: vector_select_v4i1_arg1 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 259 | ; CHECK: pxor |
| 260 | } |
| 261 | |
| 262 | define <4 x i1> @vector_select_v4i1_arg2(<4 x i1> %cond, <4 x i1> %a) { |
| 263 | entry: |
| 264 | %val = select <4 x i1> %cond, <4 x i1> %a, <4 x i1> undef |
| 265 | ret <4 x i1> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 266 | ; CHECK-LABEL: vector_select_v4i1_arg2 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 267 | ; CHECK: pxor |
| 268 | } |
| 269 | |
| 270 | define <4 x float> @vector_select_v4f32_cond(<4 x float> %a, <4 x float> %b) { |
| 271 | entry: |
| 272 | %val = select <4 x i1> undef, <4 x float> %a, <4 x float> %b |
| 273 | ret <4 x float> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 274 | ; CHECK-LABEL: vector_select_v4f32_cond |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 275 | ; CHECK: pxor |
| 276 | } |
| 277 | |
| 278 | define <4 x float> @vector_select_v4f32_arg1(<4 x i1> %cond, <4 x float> %b) { |
| 279 | entry: |
| 280 | %val = select <4 x i1> %cond, <4 x float> undef, <4 x float> %b |
| 281 | ret <4 x float> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 282 | ; CHECK-LABEL: vector_select_v4f32_arg1 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 283 | ; CHECK: pxor |
| 284 | } |
| 285 | |
| 286 | define <4 x float> @vector_select_v4f32_arg2(<4 x i1> %cond, <4 x float> %a) { |
| 287 | entry: |
| 288 | %val = select <4 x i1> %cond, <4 x float> %a, <4 x float> undef |
| 289 | ret <4 x float> %val |
Jan Voung | dddc306 | 2014-08-29 12:59:02 -0700 | [diff] [blame] | 290 | ; CHECK-LABEL: vector_select_v4f32_arg2 |
Matt Wala | e377767 | 2014-07-31 09:06:17 -0700 | [diff] [blame] | 291 | ; CHECK: pxor |
Matt Wala | 928f129 | 2014-07-07 16:50:46 -0700 | [diff] [blame] | 292 | } |