Home | History | Annotate | Download | only in reader_tests
      1 ; Tests if we can read cast operations.
      2 
      3 ; RUN: %p2i -i %s --insts --no-local-syms | FileCheck %s
      4 ; RUN:   %p2i -i %s --args -notranslate -timing | \
      5 ; RUN:   FileCheck --check-prefix=NOIR %s
      6 
      7 ; TODO(kschimpf) Find way to test pointer conversions (since they in general
      8 ; get removed by pnacl-freeze).
      9 
     10 define internal i32 @TruncI64(i64 %v) {
     11   %v1 = trunc i64 %v to i1
     12   %v8 = trunc i64 %v to i8
     13   %v16 = trunc i64 %v to i16
     14   %v32 = trunc i64 %v to i32
     15   ret i32 %v32
     16 }
     17 
     18 ; CHECK:      define internal i32 @TruncI64(i64 %__0) {
     19 ; CHECK-NEXT: __0:
     20 ; CHECK-NEXT:   %__1 = trunc i64 %__0 to i1
     21 ; CHECK-NEXT:   %__2 = trunc i64 %__0 to i8
     22 ; CHECK-NEXT:   %__3 = trunc i64 %__0 to i16
     23 ; CHECK-NEXT:   %__4 = trunc i64 %__0 to i32
     24 ; CHECK-NEXT:   ret i32 %__4
     25 ; CHECK-NEXT: }
     26 
     27 define internal void @TruncI32(i32 %v) {
     28   %v1 = trunc i32 %v to i1
     29   %v8 = trunc i32 %v to i8
     30   %v16 = trunc i32 %v to i16
     31   ret void
     32 }
     33 
     34 ; CHECK-NEXT: define internal void @TruncI32(i32 %__0) {
     35 ; CHECK-NEXT: __0:
     36 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i1
     37 ; CHECK-NEXT:   %__2 = trunc i32 %__0 to i8
     38 ; CHECK-NEXT:   %__3 = trunc i32 %__0 to i16
     39 ; CHECK-NEXT:   ret void
     40 ; CHECK-NEXT: }
     41 
     42 define internal void @TruncI16(i32 %p) {
     43   %v = trunc i32 %p to i16
     44   %v1 = trunc i16 %v to i1
     45   %v8 = trunc i16 %v to i8
     46   ret void
     47 }
     48 
     49 ; CHECK-NEXT: define internal void @TruncI16(i32 %__0) {
     50 ; CHECK-NEXT: __0:
     51 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i16
     52 ; CHECK-NEXT:   %__2 = trunc i16 %__1 to i1
     53 ; CHECK-NEXT:   %__3 = trunc i16 %__1 to i8
     54 ; CHECK-NEXT:   ret void
     55 ; CHECK-NEXT: }
     56 
     57 define internal void @TruncI8(i32 %p) {
     58   %v = trunc i32 %p to i8
     59   %v1 = trunc i8 %v to i1
     60   ret void
     61 }
     62 
     63 ; CHECK-NEXT: define internal void @TruncI8(i32 %__0) {
     64 ; CHECK-NEXT: __0:
     65 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i8
     66 ; CHECK-NEXT:   %__2 = trunc i8 %__1 to i1
     67 ; CHECK-NEXT:   ret void
     68 ; CHECK-NEXT: }
     69 
     70 define internal i64 @ZextI1(i32 %p) {
     71   %v = trunc i32 %p to i1
     72   %v8 = zext i1 %v to i8
     73   %v16 = zext i1 %v to i16
     74   %v32 = zext i1 %v to i32
     75   %v64 = zext i1 %v to i64
     76   ret i64 %v64
     77 }
     78 
     79 ; CHECK-NEXT: define internal i64 @ZextI1(i32 %__0) {
     80 ; CHECK-NEXT: __0:
     81 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i1
     82 ; CHECK-NEXT:   %__2 = zext i1 %__1 to i8
     83 ; CHECK-NEXT:   %__3 = zext i1 %__1 to i16
     84 ; CHECK-NEXT:   %__4 = zext i1 %__1 to i32
     85 ; CHECK-NEXT:   %__5 = zext i1 %__1 to i64
     86 ; CHECK-NEXT:   ret i64 %__5
     87 ; CHECK-NEXT: }
     88 
     89 define internal i32 @ZextI8(i32 %p) {
     90   %v = trunc i32 %p to i8
     91   %v16 = zext i8 %v to i16
     92   %v32 = zext i8 %v to i32
     93   %v64 = zext i8 %v to i64
     94   ret i32 %v32
     95 }
     96 
     97 ; CHECK-NEXT: define internal i32 @ZextI8(i32 %__0) {
     98 ; CHECK-NEXT: __0:
     99 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i8
    100 ; CHECK-NEXT:   %__2 = zext i8 %__1 to i16
    101 ; CHECK-NEXT:   %__3 = zext i8 %__1 to i32
    102 ; CHECK-NEXT:   %__4 = zext i8 %__1 to i64
    103 ; CHECK-NEXT:   ret i32 %__3
    104 ; CHECK-NEXT: }
    105 
    106 define internal i64 @ZextI16(i32 %p) {
    107   %v = trunc i32 %p to i16
    108   %v32 = zext i16 %v to i32
    109   %v64 = zext i16 %v to i64
    110   ret i64 %v64
    111 }
    112 
    113 ; CHECK-NEXT: define internal i64 @ZextI16(i32 %__0) {
    114 ; CHECK-NEXT: __0:
    115 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i16
    116 ; CHECK-NEXT:   %__2 = zext i16 %__1 to i32
    117 ; CHECK-NEXT:   %__3 = zext i16 %__1 to i64
    118 ; CHECK-NEXT:   ret i64 %__3
    119 ; CHECK-NEXT: }
    120 
    121 define internal i64 @Zexti32(i32 %v) {
    122   %v64 = zext i32 %v to i64
    123   ret i64 %v64
    124 }
    125 
    126 ; CHECK-NEXT: define internal i64 @Zexti32(i32 %__0) {
    127 ; CHECK-NEXT: __0:
    128 ; CHECK-NEXT:   %__1 = zext i32 %__0 to i64
    129 ; CHECK-NEXT:   ret i64 %__1
    130 ; CHECK-NEXT: }
    131 
    132 define internal i32 @SextI1(i32 %p) {
    133   %v = trunc i32 %p to i1
    134   %v8 = sext i1 %v to i8
    135   %v16 = sext i1 %v to i16
    136   %v32 = sext i1 %v to i32
    137   %v64 = sext i1 %v to i64
    138   ret i32 %v32
    139 }
    140 
    141 ; CHECK-NEXT: define internal i32 @SextI1(i32 %__0) {
    142 ; CHECK-NEXT: __0:
    143 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i1
    144 ; CHECK-NEXT:   %__2 = sext i1 %__1 to i8
    145 ; CHECK-NEXT:   %__3 = sext i1 %__1 to i16
    146 ; CHECK-NEXT:   %__4 = sext i1 %__1 to i32
    147 ; CHECK-NEXT:   %__5 = sext i1 %__1 to i64
    148 ; CHECK-NEXT:   ret i32 %__4
    149 ; CHECK-NEXT: }
    150 
    151 define internal i64 @SextI8(i32 %p) {
    152   %v = trunc i32 %p to i8
    153   %v16 = sext i8 %v to i16
    154   %v32 = sext i8 %v to i32
    155   %v64 = sext i8 %v to i64
    156   ret i64 %v64
    157 }
    158 
    159 ; CHECK-NEXT: define internal i64 @SextI8(i32 %__0) {
    160 ; CHECK-NEXT: __0:
    161 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i8
    162 ; CHECK-NEXT:   %__2 = sext i8 %__1 to i16
    163 ; CHECK-NEXT:   %__3 = sext i8 %__1 to i32
    164 ; CHECK-NEXT:   %__4 = sext i8 %__1 to i64
    165 ; CHECK-NEXT:   ret i64 %__4
    166 ; CHECK-NEXT: }
    167 
    168 define internal i32 @SextI16(i32 %p) {
    169   %v = trunc i32 %p to i16
    170   %v32 = sext i16 %v to i32
    171   %v64 = sext i16 %v to i64
    172   ret i32 %v32
    173 }
    174 
    175 ; CHECK-NEXT: define internal i32 @SextI16(i32 %__0) {
    176 ; CHECK-NEXT: __0:
    177 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i16
    178 ; CHECK-NEXT:   %__2 = sext i16 %__1 to i32
    179 ; CHECK-NEXT:   %__3 = sext i16 %__1 to i64
    180 ; CHECK-NEXT:   ret i32 %__2
    181 ; CHECK-NEXT: }
    182 
    183 define internal i64 @Sexti32(i32 %v) {
    184   %v64 = sext i32 %v to i64
    185   ret i64 %v64
    186 }
    187 
    188 ; CHECK-NEXT: define internal i64 @Sexti32(i32 %__0) {
    189 ; CHECK-NEXT: __0:
    190 ; CHECK-NEXT:   %__1 = sext i32 %__0 to i64
    191 ; CHECK-NEXT:   ret i64 %__1
    192 ; CHECK-NEXT: }
    193 
    194 define internal float @Fptrunc(double %v) {
    195   %vfloat = fptrunc double %v to float
    196   ret float %vfloat
    197 }
    198 
    199 ; CHECK-NEXT: define internal float @Fptrunc(double %__0) {
    200 ; CHECK-NEXT: __0:
    201 ; CHECK-NEXT:   %__1 = fptrunc double %__0 to float
    202 ; CHECK-NEXT:   ret float %__1
    203 ; CHECK-NEXT: }
    204 
    205 define internal double @Fpext(float %v) {
    206   %vdouble = fpext float %v to double
    207   ret double %vdouble
    208 }
    209 
    210 ; CHECK-NEXT: define internal double @Fpext(float %__0) {
    211 ; CHECK-NEXT: __0:
    212 ; CHECK-NEXT:   %__1 = fpext float %__0 to double
    213 ; CHECK-NEXT:   ret double %__1
    214 ; CHECK-NEXT: }
    215 
    216 define internal i32 @FptouiFloat(float %v) {
    217   %v1 = fptoui float %v to i1
    218   %v8 = fptoui float %v to i8
    219   %v16 = fptoui float %v to i16
    220   %v32 = fptoui float %v to i32
    221   %v64 = fptoui float %v to i64
    222   ret i32 %v32
    223 }
    224 
    225 ; CHECK-NEXT: define internal i32 @FptouiFloat(float %__0) {
    226 ; CHECK-NEXT: __0:
    227 ; CHECK-NEXT:   %__1 = fptoui float %__0 to i1
    228 ; CHECK-NEXT:   %__2 = fptoui float %__0 to i8
    229 ; CHECK-NEXT:   %__3 = fptoui float %__0 to i16
    230 ; CHECK-NEXT:   %__4 = fptoui float %__0 to i32
    231 ; CHECK-NEXT:   %__5 = fptoui float %__0 to i64
    232 ; CHECK-NEXT:   ret i32 %__4
    233 ; CHECK-NEXT: }
    234 
    235 define internal i32 @FptouiDouble(double %v) {
    236   %v1 = fptoui double %v to i1
    237   %v8 = fptoui double %v to i8
    238   %v16 = fptoui double %v to i16
    239   %v32 = fptoui double %v to i32
    240   %v64 = fptoui double %v to i64
    241   ret i32 %v32
    242 }
    243 
    244 ; CHECK-NEXT: define internal i32 @FptouiDouble(double %__0) {
    245 ; CHECK-NEXT: __0:
    246 ; CHECK-NEXT:   %__1 = fptoui double %__0 to i1
    247 ; CHECK-NEXT:   %__2 = fptoui double %__0 to i8
    248 ; CHECK-NEXT:   %__3 = fptoui double %__0 to i16
    249 ; CHECK-NEXT:   %__4 = fptoui double %__0 to i32
    250 ; CHECK-NEXT:   %__5 = fptoui double %__0 to i64
    251 ; CHECK-NEXT:   ret i32 %__4
    252 ; CHECK-NEXT: }
    253 
    254 define internal i32 @FptosiFloat(float %v) {
    255   %v1 = fptosi float %v to i1
    256   %v8 = fptosi float %v to i8
    257   %v16 = fptosi float %v to i16
    258   %v32 = fptosi float %v to i32
    259   %v64 = fptosi float %v to i64
    260   ret i32 %v32
    261 }
    262 
    263 ; CHECK-NEXT: define internal i32 @FptosiFloat(float %__0) {
    264 ; CHECK-NEXT: __0:
    265 ; CHECK-NEXT:   %__1 = fptosi float %__0 to i1
    266 ; CHECK-NEXT:   %__2 = fptosi float %__0 to i8
    267 ; CHECK-NEXT:   %__3 = fptosi float %__0 to i16
    268 ; CHECK-NEXT:   %__4 = fptosi float %__0 to i32
    269 ; CHECK-NEXT:   %__5 = fptosi float %__0 to i64
    270 ; CHECK-NEXT:   ret i32 %__4
    271 ; CHECK-NEXT: }
    272 
    273 define internal i32 @FptosiDouble(double %v) {
    274   %v1 = fptosi double %v to i1
    275   %v8 = fptosi double %v to i8
    276   %v16 = fptosi double %v to i16
    277   %v32 = fptosi double %v to i32
    278   %v64 = fptosi double %v to i64
    279   ret i32 %v32
    280 }
    281 
    282 ; CHECK-NEXT: define internal i32 @FptosiDouble(double %__0) {
    283 ; CHECK-NEXT: __0:
    284 ; CHECK-NEXT:   %__1 = fptosi double %__0 to i1
    285 ; CHECK-NEXT:   %__2 = fptosi double %__0 to i8
    286 ; CHECK-NEXT:   %__3 = fptosi double %__0 to i16
    287 ; CHECK-NEXT:   %__4 = fptosi double %__0 to i32
    288 ; CHECK-NEXT:   %__5 = fptosi double %__0 to i64
    289 ; CHECK-NEXT:   ret i32 %__4
    290 ; CHECK-NEXT: }
    291 
    292 define internal float @UitofpI1(i32 %p) {
    293   %v = trunc i32 %p to i1
    294   %vfloat = uitofp i1 %v to float
    295   %vdouble = uitofp i1 %v to double
    296   ret float %vfloat
    297 }
    298 
    299 ; CHECK-NEXT: define internal float @UitofpI1(i32 %__0) {
    300 ; CHECK-NEXT: __0:
    301 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i1
    302 ; CHECK-NEXT:   %__2 = uitofp i1 %__1 to float
    303 ; CHECK-NEXT:   %__3 = uitofp i1 %__1 to double
    304 ; CHECK-NEXT:   ret float %__2
    305 ; CHECK-NEXT: }
    306 
    307 define internal float @UitofpI8(i32 %p) {
    308   %v = trunc i32 %p to i8
    309   %vfloat = uitofp i8 %v to float
    310   %vdouble = uitofp i8 %v to double
    311   ret float %vfloat
    312 }
    313 
    314 ; CHECK-NEXT: define internal float @UitofpI8(i32 %__0) {
    315 ; CHECK-NEXT: __0:
    316 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i8
    317 ; CHECK-NEXT:   %__2 = uitofp i8 %__1 to float
    318 ; CHECK-NEXT:   %__3 = uitofp i8 %__1 to double
    319 ; CHECK-NEXT:   ret float %__2
    320 ; CHECK-NEXT: }
    321 
    322 define internal float @UitofpI16(i32 %p) {
    323   %v = trunc i32 %p to i16
    324   %vfloat = uitofp i16 %v to float
    325   %vdouble = uitofp i16 %v to double
    326   ret float %vfloat
    327 }
    328 
    329 ; CHECK-NEXT: define internal float @UitofpI16(i32 %__0) {
    330 ; CHECK-NEXT: __0:
    331 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i16
    332 ; CHECK-NEXT:   %__2 = uitofp i16 %__1 to float
    333 ; CHECK-NEXT:   %__3 = uitofp i16 %__1 to double
    334 ; CHECK-NEXT:   ret float %__2
    335 ; CHECK-NEXT: }
    336 
    337 define internal float @UitofpI32(i32 %v) {
    338   %vfloat = uitofp i32 %v to float
    339   %vdouble = uitofp i32 %v to double
    340   ret float %vfloat
    341 }
    342 
    343 ; CHECK-NEXT: define internal float @UitofpI32(i32 %__0) {
    344 ; CHECK-NEXT: __0:
    345 ; CHECK-NEXT:   %__1 = uitofp i32 %__0 to float
    346 ; CHECK-NEXT:   %__2 = uitofp i32 %__0 to double
    347 ; CHECK-NEXT:   ret float %__1
    348 ; CHECK-NEXT: }
    349 
    350 define internal float @UitofpI64(i64 %v) {
    351   %vfloat = uitofp i64 %v to float
    352   %vdouble = uitofp i64 %v to double
    353   ret float %vfloat
    354 }
    355 
    356 ; CHECK-NEXT: define internal float @UitofpI64(i64 %__0) {
    357 ; CHECK-NEXT: __0:
    358 ; CHECK-NEXT:   %__1 = uitofp i64 %__0 to float
    359 ; CHECK-NEXT:   %__2 = uitofp i64 %__0 to double
    360 ; CHECK-NEXT:   ret float %__1
    361 ; CHECK-NEXT: }
    362 
    363 define internal float @SitofpI1(i32 %p) {
    364   %v = trunc i32 %p to i1
    365   %vfloat = sitofp i1 %v to float
    366   %vdouble = sitofp i1 %v to double
    367   ret float %vfloat
    368 }
    369 
    370 ; CHECK-NEXT: define internal float @SitofpI1(i32 %__0) {
    371 ; CHECK-NEXT: __0:
    372 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i1
    373 ; CHECK-NEXT:   %__2 = sitofp i1 %__1 to float
    374 ; CHECK-NEXT:   %__3 = sitofp i1 %__1 to double
    375 ; CHECK-NEXT:   ret float %__2
    376 ; CHECK-NEXT: }
    377 
    378 define internal float @SitofpI8(i32 %p) {
    379   %v = trunc i32 %p to i8
    380   %vfloat = sitofp i8 %v to float
    381   %vdouble = sitofp i8 %v to double
    382   ret float %vfloat
    383 }
    384 
    385 ; CHECK-NEXT: define internal float @SitofpI8(i32 %__0) {
    386 ; CHECK-NEXT: __0:
    387 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i8
    388 ; CHECK-NEXT:   %__2 = sitofp i8 %__1 to float
    389 ; CHECK-NEXT:   %__3 = sitofp i8 %__1 to double
    390 ; CHECK-NEXT:   ret float %__2
    391 ; CHECK-NEXT: }
    392 
    393 define internal float @SitofpI16(i32 %p) {
    394   %v = trunc i32 %p to i16
    395   %vfloat = sitofp i16 %v to float
    396   %vdouble = sitofp i16 %v to double
    397   ret float %vfloat
    398 }
    399 
    400 ; CHECK-NEXT: define internal float @SitofpI16(i32 %__0) {
    401 ; CHECK-NEXT: __0:
    402 ; CHECK-NEXT:   %__1 = trunc i32 %__0 to i16
    403 ; CHECK-NEXT:   %__2 = sitofp i16 %__1 to float
    404 ; CHECK-NEXT:   %__3 = sitofp i16 %__1 to double
    405 ; CHECK-NEXT:   ret float %__2
    406 ; CHECK-NEXT: }
    407 
    408 define internal float @SitofpI32(i32 %v) {
    409   %vfloat = sitofp i32 %v to float
    410   %vdouble = sitofp i32 %v to double
    411   ret float %vfloat
    412 }
    413 
    414 ; CHECK-NEXT: define internal float @SitofpI32(i32 %__0) {
    415 ; CHECK-NEXT: __0:
    416 ; CHECK-NEXT:   %__1 = sitofp i32 %__0 to float
    417 ; CHECK-NEXT:   %__2 = sitofp i32 %__0 to double
    418 ; CHECK-NEXT:   ret float %__1
    419 ; CHECK-NEXT: }
    420 
    421 define internal float @SitofpI64(i64 %v) {
    422   %vfloat = sitofp i64 %v to float
    423   %vdouble = sitofp i64 %v to double
    424   ret float %vfloat
    425 }
    426 
    427 ; CHECK-NEXT: define internal float @SitofpI64(i64 %__0) {
    428 ; CHECK-NEXT: __0:
    429 ; CHECK-NEXT:   %__1 = sitofp i64 %__0 to float
    430 ; CHECK-NEXT:   %__2 = sitofp i64 %__0 to double
    431 ; CHECK-NEXT:   ret float %__1
    432 ; CHECK-NEXT: }
    433 
    434 define internal float @BitcastI32(i32 %v) {
    435   %vfloat = bitcast i32 %v to float
    436   ret float %vfloat
    437 }
    438 
    439 ; CHECK-NEXT: define internal float @BitcastI32(i32 %__0) {
    440 ; CHECK-NEXT: __0:
    441 ; CHECK-NEXT:   %__1 = bitcast i32 %__0 to float
    442 ; CHECK-NEXT:   ret float %__1
    443 ; CHECK-NEXT: }
    444 
    445 define internal double @BitcastI64(i64 %v) {
    446   %vdouble = bitcast i64 %v to double
    447   ret double %vdouble
    448 }
    449 
    450 ; CHECK-NEXT: define internal double @BitcastI64(i64 %__0) {
    451 ; CHECK-NEXT: __0:
    452 ; CHECK-NEXT:   %__1 = bitcast i64 %__0 to double
    453 ; CHECK-NEXT:   ret double %__1
    454 ; CHECK-NEXT: }
    455 
    456 define internal i32 @BitcastFloat(float %v) {
    457   %vi32 = bitcast float %v to i32
    458   ret i32 %vi32
    459 }
    460 
    461 ; CHECK-NEXT: define internal i32 @BitcastFloat(float %__0) {
    462 ; CHECK-NEXT: __0:
    463 ; CHECK-NEXT:   %__1 = bitcast float %__0 to i32
    464 ; CHECK-NEXT:   ret i32 %__1
    465 ; CHECK-NEXT: }
    466 
    467 define internal i64 @BitcastDouble(double %v) {
    468   %vi64 = bitcast double %v to i64
    469   ret i64 %vi64
    470 }
    471 
    472 ; CHECK-NEXT: define internal i64 @BitcastDouble(double %__0) {
    473 ; CHECK-NEXT: __0:
    474 ; CHECK-NEXT:   %__1 = bitcast double %__0 to i64
    475 ; CHECK-NEXT:   ret i64 %__1
    476 ; CHECK-NEXT: }
    477 
    478 define internal void @BitcastV4xFloat(<4 x float> %v) {
    479   %v4xi32 = bitcast <4 x float> %v to <4 x i32>
    480   %v8xi16 = bitcast <4 x float> %v to <8 x i16>
    481   %v16xi8 = bitcast <4 x float> %v to <16 x i8>
    482   ret void
    483 }
    484 
    485 ; CHECK-NEXT: define internal void @BitcastV4xFloat(<4 x float> %__0) {
    486 ; CHECK-NEXT: __0:
    487 ; CHECK-NEXT:   %__1 = bitcast <4 x float> %__0 to <4 x i32>
    488 ; CHECK-NEXT:   %__2 = bitcast <4 x float> %__0 to <8 x i16>
    489 ; CHECK-NEXT:   %__3 = bitcast <4 x float> %__0 to <16 x i8>
    490 ; CHECK-NEXT:   ret void
    491 ; CHECK-NEXT: }
    492 
    493 define internal void @BitcastV4xi32(<4 x i32> %v) {
    494   %v4xfloat = bitcast <4 x i32> %v to <4 x float>
    495   %v8xi16 = bitcast <4 x i32> %v to <8 x i16>
    496   %v16xi8 = bitcast <4 x i32> %v to <16 x i8>
    497   ret void
    498 }
    499 
    500 ; CHECK-NEXT: define internal void @BitcastV4xi32(<4 x i32> %__0) {
    501 ; CHECK-NEXT: __0:
    502 ; CHECK-NEXT:   %__1 = bitcast <4 x i32> %__0 to <4 x float>
    503 ; CHECK-NEXT:   %__2 = bitcast <4 x i32> %__0 to <8 x i16>
    504 ; CHECK-NEXT:   %__3 = bitcast <4 x i32> %__0 to <16 x i8>
    505 ; CHECK-NEXT:   ret void
    506 ; CHECK-NEXT: }
    507 
    508 define internal void @BitcastV8xi16(<8 x i16> %v) {
    509   %v4xfloat = bitcast <8 x i16> %v to <4 x float>
    510   %v4xi32 = bitcast <8 x i16> %v to <4 x i32>
    511   %v16xi8 = bitcast <8 x i16> %v to <16 x i8>
    512   ret void
    513 }
    514 
    515 ; CHECK-NEXT: define internal void @BitcastV8xi16(<8 x i16> %__0) {
    516 ; CHECK-NEXT: __0:
    517 ; CHECK-NEXT:   %__1 = bitcast <8 x i16> %__0 to <4 x float>
    518 ; CHECK-NEXT:   %__2 = bitcast <8 x i16> %__0 to <4 x i32>
    519 ; CHECK-NEXT:   %__3 = bitcast <8 x i16> %__0 to <16 x i8>
    520 ; CHECK-NEXT:   ret void
    521 ; CHECK-NEXT: }
    522 
    523 define internal void @BitcastV16xi8(<16 x i8> %v) {
    524   %v4xfloat = bitcast <16 x i8> %v to <4 x float>
    525   %v4xi32 = bitcast <16 x i8> %v to <4 x i32>
    526   %v8xi16 = bitcast <16 x i8> %v to <8 x i16>
    527   ret void
    528 }
    529 
    530 ; CHECK-NEXT: define internal void @BitcastV16xi8(<16 x i8> %__0) {
    531 ; CHECK-NEXT: __0:
    532 ; CHECK-NEXT:   %__1 = bitcast <16 x i8> %__0 to <4 x float>
    533 ; CHECK-NEXT:   %__2 = bitcast <16 x i8> %__0 to <4 x i32>
    534 ; CHECK-NEXT:   %__3 = bitcast <16 x i8> %__0 to <8 x i16>
    535 ; CHECK-NEXT:   ret void
    536 ; CHECK-NEXT: }
    537 
    538 ; NOIR: Total across all functions
    539