| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: llc -mtriple=aarch64-unknown-linux -global-isel -global-isel-abort=1 < %s | FileCheck %s |
| |
| define <2 x i8> @test_bitcast_assertion(<4 x i32> %vqaddq_v2.i.i, ptr %BS_VAR_0) { |
| ; CHECK-LABEL: test_bitcast_assertion: |
| ; CHECK: // %bb.0: // %entry |
| ; CHECK-NEXT: sub sp, sp, #16 |
| ; CHECK-NEXT: .cfi_def_cfa_offset 16 |
| ; CHECK-NEXT: movi v1.2d, #0000000000000000 |
| ; CHECK-NEXT: mov x8, sp |
| ; CHECK-NEXT: mov w9, #4 // =0x4 |
| ; CHECK-NEXT: .LBB0_1: // %for.cond |
| ; CHECK-NEXT: // =>This Inner Loop Header: Depth=1 |
| ; CHECK-NEXT: umov w10, v1.h[0] |
| ; CHECK-NEXT: str q0, [sp] |
| ; CHECK-NEXT: and x10, x10, #0x3 |
| ; CHECK-NEXT: umull x10, w10, w9 |
| ; CHECK-NEXT: ldrh w10, [x8, x10] |
| ; CHECK-NEXT: stp q1, q1, [x0, #32] |
| ; CHECK-NEXT: stp q1, q1, [x0, #64] |
| ; CHECK-NEXT: fmov d2, x10 |
| ; CHECK-NEXT: stp q1, q1, [x0, #96] |
| ; CHECK-NEXT: mov v2.d[1], xzr |
| ; CHECK-NEXT: stp q2, q1, [x0] |
| ; CHECK-NEXT: b .LBB0_1 |
| entry: |
| br label %for.cond |
| |
| for.cond: ; preds = %for.cond, %entry |
| %vec_wide = phi <64 x i16> [ %bitcasted_vec, %for.cond ], [ zeroinitializer, %entry ] |
| %conv = extractelement <64 x i16> %vec_wide, i64 0 |
| %vecext.i = extractelement <4 x i32> %vqaddq_v2.i.i, i16 %conv |
| %masked_val = and i32 %vecext.i, 65535 |
| %val_i64 = zext i32 %masked_val to i64 |
| %vecinit16 = insertelement <16 x i64> zeroinitializer, i64 %val_i64, i64 0 |
| store <16 x i64> %vecinit16, ptr %BS_VAR_0, align 16 |
| %bitcasted_vec = bitcast <16 x i64> zeroinitializer to <64 x i16> |
| br label %for.cond |
| } |
| |