brintos

brintos / llvm-project-archived public Read only

0
0
Text · 39.4 KiB · 5d0a7e9 Raw
954 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=armv8-linux-gnueabi -verify-machineinstrs -asm-verbose=false | FileCheck %s3 4; %struct.uint16x4x2_t = type { <4 x i16>, <4 x i16> }5; %struct.uint16x4x3_t = type { <4 x i16>, <4 x i16>, <4 x i16> }6; %struct.uint16x4x4_t = type { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> }7 8; %struct.uint32x2x2_t = type { <2 x i32>, <2 x i32> }9; %struct.uint32x2x3_t = type { <2 x i32>, <2 x i32>, <2 x i32> }10; %struct.uint32x2x4_t = type { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> }11 12; %struct.uint64x1x2_t = type { <1 x i64>, <1 x i64> }13; %struct.uint64x1x3_t = type { <1 x i64>, <1 x i64>, <1 x i64> }14; %struct.uint64x1x4_t = type { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> }15 16; %struct.uint8x8x2_t = type { <8 x i8>, <8 x i8> }17; %struct.uint8x8x3_t = type { <8 x i8>, <8 x i8>, <8 x i8> }18; %struct.uint8x8x4_t = type { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }19 20; %struct.uint16x8x2_t = type { <8 x i16>, <8 x i16> }21; %struct.uint16x8x3_t = type { <8 x i16>, <8 x i16>, <8 x i16> }22; %struct.uint16x8x4_t = type { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> }23 24; %struct.uint32x4x2_t = type { <4 x i32>, <4 x i32> }25; %struct.uint32x4x3_t = type { <4 x i32>, <4 x i32>, <4 x i32> }26; %struct.uint32x4x4_t = type { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> }27 28; %struct.uint64x2x2_t = type { <2 x i64>, <2 x i64> }29; %struct.uint64x2x3_t = type { <2 x i64>, <2 x i64>, <2 x i64> }30; %struct.uint64x2x4_t = type { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> }31 32; %struct.uint8x16x2_t = type { <16 x i8>, <16 x i8> }33; %struct.uint8x16x3_t = type { <16 x i8>, <16 x i8>, <16 x i8> }34; %struct.uint8x16x4_t = type { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }35 36%struct.uint16x4x2_t = type { [2 x <4 x i16>] }37%struct.uint16x4x3_t = type { [3 x <4 x i16>] }38%struct.uint16x4x4_t = type { [4 x <4 x i16>] }39%struct.uint32x2x2_t = type { [2 x <2 x i32>] }40%struct.uint32x2x3_t = type { [3 x <2 x i32>] }41%struct.uint32x2x4_t = type { [4 x <2 x i32>] }42%struct.uint64x1x2_t = type { [2 x <1 x i64>] }43%struct.uint64x1x3_t = type { [3 x <1 x i64>] }44%struct.uint64x1x4_t = type { [4 x <1 x i64>] }45%struct.uint8x8x2_t = type { [2 x <8 x i8>] }46%struct.uint8x8x3_t = type { [3 x <8 x i8>] }47%struct.uint8x8x4_t = type { [4 x <8 x i8>] }48%struct.uint16x8x2_t = type { [2 x <8 x i16>] }49%struct.uint16x8x3_t = type { [3 x <8 x i16>] }50%struct.uint16x8x4_t = type { [4 x <8 x i16>] }51%struct.uint32x4x2_t = type { [2 x <4 x i32>] }52%struct.uint32x4x3_t = type { [3 x <4 x i32>] }53%struct.uint32x4x4_t = type { [4 x <4 x i32>] }54%struct.uint64x2x2_t = type { [2 x <2 x i64>] }55%struct.uint64x2x3_t = type { [3 x <2 x i64>] }56%struct.uint64x2x4_t = type { [4 x <2 x i64>] }57%struct.uint8x16x2_t = type { [2 x <16 x i8>] }58%struct.uint8x16x3_t = type { [3 x <16 x i8>] }59%struct.uint8x16x4_t = type { [4 x <16 x i8>] }60 61declare void @llvm.arm.neon.vst1x2.p0.v4i16(ptr nocapture, <4 x i16>, <4 x i16>) argmemonly nounwind62declare void @llvm.arm.neon.vst1x3.p0.v4i16(ptr nocapture, <4 x i16>, <4 x i16>, <4 x i16>) argmemonly nounwind63declare void @llvm.arm.neon.vst1x4.p0.v4i16(ptr nocapture, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>) argmemonly nounwind64 65declare void @llvm.arm.neon.vst1x2.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>) argmemonly nounwind66declare void @llvm.arm.neon.vst1x3.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>, <2 x i32>) argmemonly nounwind67declare void @llvm.arm.neon.vst1x4.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>) argmemonly nounwind68 69declare void @llvm.arm.neon.vst1x2.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>) argmemonly nounwind70declare void @llvm.arm.neon.vst1x3.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>, <1 x i64>) argmemonly nounwind71declare void @llvm.arm.neon.vst1x4.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>) argmemonly nounwind72 73declare void @llvm.arm.neon.vst1x2.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>) argmemonly nounwind74declare void @llvm.arm.neon.vst1x3.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>, <8 x i8>) argmemonly nounwind75declare void @llvm.arm.neon.vst1x4.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>) argmemonly nounwind76 77declare void @llvm.arm.neon.vst1x2.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>) argmemonly nounwind78declare void @llvm.arm.neon.vst1x3.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>, <8 x i16>) argmemonly nounwind79declare void @llvm.arm.neon.vst1x4.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>) argmemonly nounwind80 81declare void @llvm.arm.neon.vst1x2.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>) argmemonly nounwind82declare void @llvm.arm.neon.vst1x3.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>, <4 x i32>) argmemonly nounwind83declare void @llvm.arm.neon.vst1x4.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>) argmemonly nounwind84 85declare void @llvm.arm.neon.vst1x2.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>) argmemonly nounwind86declare void @llvm.arm.neon.vst1x3.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>, <2 x i64>) argmemonly nounwind87declare void @llvm.arm.neon.vst1x4.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>) argmemonly nounwind88 89declare void @llvm.arm.neon.vst1x2.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>) argmemonly nounwind90declare void @llvm.arm.neon.vst1x3.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>, <16 x i8>) argmemonly nounwind91declare void @llvm.arm.neon.vst1x4.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) argmemonly nounwind92 93define arm_aapcs_vfpcc void @test_vst1_u16_x2(ptr %a, %struct.uint16x4x2_t %b) nounwind {94; CHECK-LABEL: test_vst1_u16_x2:95; CHECK:         vst1.16 {d0, d1}, [r0]96; CHECK-NEXT:    bx lr97entry:98  %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 099  %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1100  tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1)101  ret void102}103 104define arm_aapcs_vfpcc void @test_vst1_u16_x2_align8(ptr %a, %struct.uint16x4x2_t %b) nounwind {105; CHECK-LABEL: test_vst1_u16_x2_align8:106; CHECK:         vst1.16 {d0, d1}, [r0:64]107; CHECK-NEXT:    bx lr108entry:109  %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0110  %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1111  tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr align 8 %a, <4 x i16> %b0, <4 x i16> %b1)112  ret void113}114 115define arm_aapcs_vfpcc void @test_vst1_u16_x2_align16(ptr %a, %struct.uint16x4x2_t %b) nounwind {116; CHECK-LABEL: test_vst1_u16_x2_align16:117; CHECK:         vst1.16 {d0, d1}, [r0:128]118; CHECK-NEXT:    bx lr119entry:120  %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0121  %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1122  tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr align 16 %a, <4 x i16> %b0, <4 x i16> %b1)123  ret void124}125 126define arm_aapcs_vfpcc void @test_vst1_u16_x2_align32(ptr %a, %struct.uint16x4x2_t %b) nounwind {127; CHECK-LABEL: test_vst1_u16_x2_align32:128; CHECK:         vst1.16 {d0, d1}, [r0:128]129; CHECK-NEXT:    bx lr130entry:131  %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0132  %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1133  tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr align 32 %a, <4 x i16> %b0, <4 x i16> %b1)134  ret void135}136 137define arm_aapcs_vfpcc void @test_vst1_u16_x3(ptr %a, %struct.uint16x4x3_t %b) nounwind {138; CHECK-LABEL: test_vst1_u16_x3:139; CHECK:         vst1.16 {d0, d1, d2}, [r0]140; CHECK-NEXT:    bx lr141entry:142  %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0143  %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1144  %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2145  tail call void @llvm.arm.neon.vst1x3.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2)146  ret void147}148 149define arm_aapcs_vfpcc void @test_vst1_u16_x4(ptr %a, %struct.uint16x4x4_t %b) nounwind {150; CHECK-LABEL: test_vst1_u16_x4:151; CHECK:         vst1.16 {d0, d1, d2, d3}, [r0]152; CHECK-NEXT:    bx lr153entry:154  %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0155  %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1156  %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2157  %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3158  tail call void @llvm.arm.neon.vst1x4.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2, <4 x i16> %b3)159  ret void160}161 162define arm_aapcs_vfpcc void @test_vst1_u32_x2(ptr %a, %struct.uint32x2x2_t %b) nounwind {163; CHECK-LABEL: test_vst1_u32_x2:164; CHECK:         vst1.32 {d0, d1}, [r0]165; CHECK-NEXT:    bx lr166entry:167  %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0168  %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1169  tail call void @llvm.arm.neon.vst1x2.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1)170  ret void171}172 173define arm_aapcs_vfpcc void @test_vst1_u32_x3(ptr %a, %struct.uint32x2x3_t %b) nounwind {174; CHECK-LABEL: test_vst1_u32_x3:175; CHECK:         vst1.32 {d0, d1, d2}, [r0]176; CHECK-NEXT:    bx lr177entry:178  %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0179  %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1180  %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2181  tail call void @llvm.arm.neon.vst1x3.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2)182  ret void183}184 185define arm_aapcs_vfpcc void @test_vst1_u32_x4(ptr %a, %struct.uint32x2x4_t %b) nounwind {186; CHECK-LABEL: test_vst1_u32_x4:187; CHECK:         vst1.32 {d0, d1, d2, d3}, [r0]188; CHECK-NEXT:    bx lr189entry:190  %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0191  %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1192  %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2193  %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3194  tail call void @llvm.arm.neon.vst1x4.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2, <2 x i32> %b3)195  ret void196}197 198define arm_aapcs_vfpcc void @test_vst1_u64_x2(ptr %a, %struct.uint64x1x2_t %b) nounwind {199; CHECK-LABEL: test_vst1_u64_x2:200; CHECK:         vst1.64 {d0, d1}, [r0]201; CHECK-NEXT:    bx lr202entry:203  %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0204  %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1205  tail call void @llvm.arm.neon.vst1x2.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1)206  ret void207}208 209define arm_aapcs_vfpcc void @test_vst1_u64_x3(ptr %a, %struct.uint64x1x3_t %b) nounwind {210; CHECK-LABEL: test_vst1_u64_x3:211; CHECK:         vst1.64 {d0, d1, d2}, [r0]212; CHECK-NEXT:    bx lr213entry:214  %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0215  %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1216  %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2217  tail call void @llvm.arm.neon.vst1x3.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2)218  ret void219}220 221define arm_aapcs_vfpcc void @test_vst1_u64_x4(ptr %a, %struct.uint64x1x4_t %b) nounwind {222; CHECK-LABEL: test_vst1_u64_x4:223; CHECK:         vst1.64 {d0, d1, d2, d3}, [r0]224; CHECK-NEXT:    bx lr225entry:226  %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0227  %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1228  %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2229  %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3230  tail call void @llvm.arm.neon.vst1x4.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2, <1 x i64> %b3)231  ret void232}233 234define arm_aapcs_vfpcc void @test_vst1_u8_x2(ptr %a, %struct.uint8x8x2_t %b) nounwind {235; CHECK-LABEL: test_vst1_u8_x2:236; CHECK:         vst1.8 {d0, d1}, [r0]237; CHECK-NEXT:    bx lr238entry:239  %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0240  %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1241  tail call void @llvm.arm.neon.vst1x2.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1)242  ret void243}244 245define arm_aapcs_vfpcc void @test_vst1_u8_x3(ptr %a, %struct.uint8x8x3_t %b) nounwind {246; CHECK-LABEL: test_vst1_u8_x3:247; CHECK:         vst1.8 {d0, d1, d2}, [r0]248; CHECK-NEXT:    bx lr249entry:250  %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0251  %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1252  %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2253  tail call void @llvm.arm.neon.vst1x3.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2)254  ret void255}256 257define arm_aapcs_vfpcc void @test_vst1_u8_x4(ptr %a, %struct.uint8x8x4_t %b) nounwind {258; CHECK-LABEL: test_vst1_u8_x4:259; CHECK:         vst1.8 {d0, d1, d2, d3}, [r0]260; CHECK-NEXT:    bx lr261entry:262  %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0263  %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1264  %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2265  %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3266  tail call void @llvm.arm.neon.vst1x4.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2, <8 x i8> %b3)267  ret void268}269 270define arm_aapcs_vfpcc void @test_vst1q_u16_x2(ptr %a, %struct.uint16x8x2_t %b) nounwind {271; CHECK-LABEL: test_vst1q_u16_x2:272; CHECK:         vst1.16 {d0, d1, d2, d3}, [r0]273; CHECK-NEXT:    bx lr274entry:275  %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0276  %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1277  tail call void @llvm.arm.neon.vst1x2.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1)278  ret void279}280 281define arm_aapcs_vfpcc void @test_vst1q_u16_x3(ptr %a, %struct.uint16x8x3_t %b) nounwind {282; CHECK-LABEL: test_vst1q_u16_x3:283; CHECK:         vst1.16 {d0, d1, d2}, [r0]!284; CHECK-NEXT:    vst1.16 {d3, d4, d5}, [r0]285; CHECK-NEXT:    bx lr286entry:287  %b0 = extractvalue %struct.uint16x8x3_t %b, 0, 0288  %b1 = extractvalue %struct.uint16x8x3_t %b, 0, 1289  %b2 = extractvalue %struct.uint16x8x3_t %b, 0, 2290  tail call void @llvm.arm.neon.vst1x3.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2)291  ret void292}293 294define arm_aapcs_vfpcc void @test_vst1q_u16_x4(ptr %a, %struct.uint16x8x4_t %b) nounwind {295; CHECK-LABEL: test_vst1q_u16_x4:296; CHECK:         vst1.16 {d0, d1, d2, d3}, [r0]!297; CHECK-NEXT:    vst1.16 {d4, d5, d6, d7}, [r0]298; CHECK-NEXT:    bx lr299entry:300  %b0 = extractvalue %struct.uint16x8x4_t %b, 0, 0301  %b1 = extractvalue %struct.uint16x8x4_t %b, 0, 1302  %b2 = extractvalue %struct.uint16x8x4_t %b, 0, 2303  %b3 = extractvalue %struct.uint16x8x4_t %b, 0, 3304  tail call void @llvm.arm.neon.vst1x4.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2, <8 x i16> %b3)305  ret void306}307 308define arm_aapcs_vfpcc void @test_vst1q_u32_x2(ptr %a, %struct.uint32x4x2_t %b) nounwind {309; CHECK-LABEL: test_vst1q_u32_x2:310; CHECK:         vst1.32 {d0, d1, d2, d3}, [r0]311; CHECK-NEXT:    bx lr312entry:313  %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0314  %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1315  tail call void @llvm.arm.neon.vst1x2.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1)316  ret void317}318 319define arm_aapcs_vfpcc void @test_vst1q_u32_x3(ptr %a, %struct.uint32x4x3_t %b) nounwind {320; CHECK-LABEL: test_vst1q_u32_x3:321; CHECK:         vst1.32 {d0, d1, d2}, [r0]!322; CHECK-NEXT:    vst1.32 {d3, d4, d5}, [r0]323; CHECK-NEXT:    bx lr324entry:325  %b0 = extractvalue %struct.uint32x4x3_t %b, 0, 0326  %b1 = extractvalue %struct.uint32x4x3_t %b, 0, 1327  %b2 = extractvalue %struct.uint32x4x3_t %b, 0, 2328  tail call void @llvm.arm.neon.vst1x3.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2)329  ret void330}331 332define arm_aapcs_vfpcc void @test_vst1q_u32_x4(ptr %a, %struct.uint32x4x4_t %b) nounwind {333; CHECK-LABEL: test_vst1q_u32_x4:334; CHECK:         vst1.32 {d0, d1, d2, d3}, [r0]!335; CHECK-NEXT:    vst1.32 {d4, d5, d6, d7}, [r0]336; CHECK-NEXT:    bx lr337entry:338  %b0 = extractvalue %struct.uint32x4x4_t %b, 0, 0339  %b1 = extractvalue %struct.uint32x4x4_t %b, 0, 1340  %b2 = extractvalue %struct.uint32x4x4_t %b, 0, 2341  %b3 = extractvalue %struct.uint32x4x4_t %b, 0, 3342  tail call void @llvm.arm.neon.vst1x4.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2, <4 x i32> %b3)343  ret void344}345 346define arm_aapcs_vfpcc void @test_vst1q_u64_x2(ptr %a, %struct.uint64x2x2_t %b) nounwind {347; CHECK-LABEL: test_vst1q_u64_x2:348; CHECK:         vst1.64 {d0, d1, d2, d3}, [r0]349; CHECK-NEXT:    bx lr350entry:351  %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0352  %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1353  tail call void @llvm.arm.neon.vst1x2.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1)354  ret void355}356 357define arm_aapcs_vfpcc void @test_vst1q_u64_x3(ptr %a, %struct.uint64x2x3_t %b) nounwind {358; CHECK-LABEL: test_vst1q_u64_x3:359; CHECK:         vst1.64 {d0, d1, d2}, [r0]!360; CHECK-NEXT:    vst1.64 {d3, d4, d5}, [r0]361; CHECK-NEXT:    bx lr362entry:363  %b0 = extractvalue %struct.uint64x2x3_t %b, 0, 0364  %b1 = extractvalue %struct.uint64x2x3_t %b, 0, 1365  %b2 = extractvalue %struct.uint64x2x3_t %b, 0, 2366  tail call void @llvm.arm.neon.vst1x3.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2)367  ret void368}369 370define arm_aapcs_vfpcc void @test_vst1q_u64_x4(ptr %a, %struct.uint64x2x4_t %b) nounwind {371; CHECK-LABEL: test_vst1q_u64_x4:372; CHECK:         vst1.64 {d0, d1, d2, d3}, [r0]!373; CHECK-NEXT:    vst1.64 {d4, d5, d6, d7}, [r0]374; CHECK-NEXT:    bx lr375entry:376  %b0 = extractvalue %struct.uint64x2x4_t %b, 0, 0377  %b1 = extractvalue %struct.uint64x2x4_t %b, 0, 1378  %b2 = extractvalue %struct.uint64x2x4_t %b, 0, 2379  %b3 = extractvalue %struct.uint64x2x4_t %b, 0, 3380  tail call void @llvm.arm.neon.vst1x4.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2, <2 x i64> %b3)381  ret void382}383 384define arm_aapcs_vfpcc void @test_vst1q_u8_x2(ptr %a, %struct.uint8x16x2_t %b) nounwind {385; CHECK-LABEL: test_vst1q_u8_x2:386; CHECK:         vst1.8 {d0, d1, d2, d3}, [r0]387; CHECK-NEXT:    bx lr388entry:389  %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0390  %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1391  tail call void @llvm.arm.neon.vst1x2.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1)392  ret void393}394 395define arm_aapcs_vfpcc void @test_vst1q_u8_x3(ptr %a, %struct.uint8x16x3_t %b) nounwind {396; CHECK-LABEL: test_vst1q_u8_x3:397; CHECK:         vst1.8 {d0, d1, d2}, [r0]!398; CHECK-NEXT:    vst1.8 {d3, d4, d5}, [r0]399; CHECK-NEXT:    bx lr400entry:401  %b0 = extractvalue %struct.uint8x16x3_t %b, 0, 0402  %b1 = extractvalue %struct.uint8x16x3_t %b, 0, 1403  %b2 = extractvalue %struct.uint8x16x3_t %b, 0, 2404  tail call void @llvm.arm.neon.vst1x3.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2)405  ret void406}407 408define arm_aapcs_vfpcc void @test_vst1q_u8_x4(ptr %a, %struct.uint8x16x4_t %b) nounwind {409; CHECK-LABEL: test_vst1q_u8_x4:410; CHECK:         vst1.8 {d0, d1, d2, d3}, [r0]!411; CHECK-NEXT:    vst1.8 {d4, d5, d6, d7}, [r0]412; CHECK-NEXT:    bx lr413entry:414  %b0 = extractvalue %struct.uint8x16x4_t %b, 0, 0415  %b1 = extractvalue %struct.uint8x16x4_t %b, 0, 1416  %b2 = extractvalue %struct.uint8x16x4_t %b, 0, 2417  %b3 = extractvalue %struct.uint8x16x4_t %b, 0, 3418  tail call void @llvm.arm.neon.vst1x4.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2, <16 x i8> %b3)419  ret void420}421 422; Post increment423 424define arm_aapcs_vfpcc ptr @test_vst1_u8_x2_post_imm(ptr %a, %struct.uint8x8x2_t %b) nounwind {425; CHECK-LABEL: test_vst1_u8_x2_post_imm:426; CHECK:         vst1.8 {d0, d1}, [r0]!427; CHECK-NEXT:    bx lr428entry:429  %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0430  %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1431  tail call void @llvm.arm.neon.vst1x2.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1)432  %tmp = getelementptr i8, ptr %a, i32 16433  ret ptr %tmp434}435 436define arm_aapcs_vfpcc ptr @test_vst1_u8_x2_post_reg(ptr %a, %struct.uint8x8x2_t %b, i32 %inc) nounwind {437; CHECK-LABEL: test_vst1_u8_x2_post_reg:438; CHECK:         vst1.8 {d0, d1}, [r0], r1439; CHECK-NEXT:    bx lr440entry:441  %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0442  %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1443  tail call void @llvm.arm.neon.vst1x2.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1)444  %tmp = getelementptr i8, ptr %a, i32 %inc445  ret ptr %tmp446}447 448define arm_aapcs_vfpcc ptr @test_vst1_u16_x2_post_imm(ptr %a, %struct.uint16x4x2_t %b) nounwind {449; CHECK-LABEL: test_vst1_u16_x2_post_imm:450; CHECK:         vst1.16 {d0, d1}, [r0]!451; CHECK-NEXT:    bx lr452  %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0453  %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1454  tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1)455  %tmp = getelementptr i16, ptr %a, i32 8456  ret ptr %tmp457}458 459define arm_aapcs_vfpcc ptr @test_vst1_u16_x2_post_reg(ptr %a, %struct.uint16x4x2_t %b, i32 %inc) nounwind {460; CHECK-LABEL: test_vst1_u16_x2_post_reg:461; CHECK:         lsl r1, r1, #1462; CHECK-NEXT:    vst1.16 {d0, d1}, [r0], r1463; CHECK-NEXT:    bx lr464  %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0465  %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1466  tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1)467  %tmp = getelementptr i16, ptr %a, i32 %inc468  ret ptr %tmp469}470 471define arm_aapcs_vfpcc ptr @test_vst1_u32_x2_post_imm(ptr %a, %struct.uint32x2x2_t %b) nounwind {472; CHECK-LABEL: test_vst1_u32_x2_post_imm:473; CHECK:         vst1.32 {d0, d1}, [r0]!474; CHECK-NEXT:    bx lr475entry:476  %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0477  %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1478  tail call void @llvm.arm.neon.vst1x2.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1)479  %tmp = getelementptr i32, ptr %a, i32 4480  ret ptr %tmp481}482 483define arm_aapcs_vfpcc ptr @test_vst1_u32_x2_post_reg(ptr %a, %struct.uint32x2x2_t %b, i32 %inc) nounwind {484; CHECK-LABEL: test_vst1_u32_x2_post_reg:485; CHECK:         lsl r1, r1, #2486; CHECK-NEXT:    vst1.32 {d0, d1}, [r0], r1487; CHECK-NEXT:    bx lr488entry:489  %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0490  %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1491  tail call void @llvm.arm.neon.vst1x2.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1)492  %tmp = getelementptr i32, ptr %a, i32 %inc493  ret ptr %tmp494}495 496define arm_aapcs_vfpcc ptr @test_vst1_u64_x2_post_imm(ptr %a, %struct.uint64x1x2_t %b) nounwind {497; CHECK-LABEL: test_vst1_u64_x2_post_imm:498; CHECK:         vst1.64 {d0, d1}, [r0]!499; CHECK-NEXT:    bx lr500entry:501  %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0502  %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1503  tail call void @llvm.arm.neon.vst1x2.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1)504  %tmp = getelementptr i64, ptr %a, i32 2505  ret ptr %tmp506}507 508define arm_aapcs_vfpcc ptr @test_vst1_u64_x2_post_reg(ptr %a, %struct.uint64x1x2_t %b, i32 %inc) nounwind {509; CHECK-LABEL: test_vst1_u64_x2_post_reg:510; CHECK:         lsl r1, r1, #3511; CHECK-NEXT:    vst1.64 {d0, d1}, [r0], r1512; CHECK-NEXT:    bx lr513entry:514  %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0515  %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1516  tail call void @llvm.arm.neon.vst1x2.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1)517  %tmp = getelementptr i64, ptr %a, i32 %inc518  ret ptr %tmp519}520 521define arm_aapcs_vfpcc ptr @test_vst1q_u8_x2_post_imm(ptr %a, %struct.uint8x16x2_t %b) nounwind {522; CHECK-LABEL: test_vst1q_u8_x2_post_imm:523; CHECK:         vst1.8 {d0, d1, d2, d3}, [r0]!524; CHECK-NEXT:    bx lr525entry:526  %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0527  %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1528  tail call void @llvm.arm.neon.vst1x2.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1)529  %tmp = getelementptr i8, ptr %a, i32 32530  ret ptr %tmp531}532 533define arm_aapcs_vfpcc ptr @test_vst1q_u8_x2_post_reg(ptr %a, %struct.uint8x16x2_t %b, i32 %inc) nounwind {534; CHECK-LABEL: test_vst1q_u8_x2_post_reg:535; CHECK:         vst1.8 {d0, d1, d2, d3}, [r0], r1536; CHECK-NEXT:    bx lr537entry:538  %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0539  %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1540  tail call void @llvm.arm.neon.vst1x2.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1)541  %tmp = getelementptr i8, ptr %a, i32 %inc542  ret ptr %tmp543}544 545define arm_aapcs_vfpcc ptr @test_vst1q_u16_x2_post_imm(ptr %a, %struct.uint16x8x2_t %b) nounwind {546; CHECK-LABEL: test_vst1q_u16_x2_post_imm:547; CHECK:         vst1.16 {d0, d1, d2, d3}, [r0]!548; CHECK-NEXT:    bx lr549entry:550  %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0551  %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1552  tail call void @llvm.arm.neon.vst1x2.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1)553  %tmp = getelementptr i16, ptr %a, i32 16554  ret ptr %tmp555}556 557define arm_aapcs_vfpcc ptr @test_vst1q_u16_x2_post_reg(ptr %a, %struct.uint16x8x2_t %b, i32 %inc) nounwind {558; CHECK-LABEL: test_vst1q_u16_x2_post_reg:559; CHECK:         lsl r1, r1, #1560; CHECK-NEXT:    vst1.16 {d0, d1, d2, d3}, [r0], r1561; CHECK-NEXT:    bx lr562entry:563  %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0564  %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1565  tail call void @llvm.arm.neon.vst1x2.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1)566  %tmp = getelementptr i16, ptr %a, i32 %inc567  ret ptr %tmp568}569 570define arm_aapcs_vfpcc ptr @test_vst1q_u32_x2_post_imm(ptr %a, %struct.uint32x4x2_t %b) nounwind {571; CHECK-LABEL: test_vst1q_u32_x2_post_imm:572; CHECK:         vst1.32 {d0, d1, d2, d3}, [r0]!573; CHECK-NEXT:    bx lr574entry:575  %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0576  %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1577  tail call void @llvm.arm.neon.vst1x2.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1)578  %tmp = getelementptr i32, ptr %a, i32 8579  ret ptr %tmp580}581 582define arm_aapcs_vfpcc ptr @test_vst1q_u32_x2_post_reg(ptr %a, %struct.uint32x4x2_t %b, i32 %inc) nounwind {583; CHECK-LABEL: test_vst1q_u32_x2_post_reg:584; CHECK:         lsl r1, r1, #2585; CHECK-NEXT:    vst1.32 {d0, d1, d2, d3}, [r0], r1586; CHECK-NEXT:    bx lr587entry:588  %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0589  %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1590  tail call void @llvm.arm.neon.vst1x2.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1)591  %tmp = getelementptr i32, ptr %a, i32 %inc592  ret ptr %tmp593}594 595define arm_aapcs_vfpcc ptr @test_vst1q_u64_x2_post_imm(ptr %a, %struct.uint64x2x2_t %b) nounwind {596; CHECK-LABEL: test_vst1q_u64_x2_post_imm:597; CHECK:         vst1.64 {d0, d1, d2, d3}, [r0]!598; CHECK-NEXT:    bx lr599entry:600  %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0601  %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1602  tail call void @llvm.arm.neon.vst1x2.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1)603  %tmp = getelementptr i64, ptr %a, i32 4604  ret ptr %tmp605}606 607define arm_aapcs_vfpcc ptr @test_vst1q_u64_x2_post_reg(ptr %a, %struct.uint64x2x2_t %b, i32 %inc) nounwind {608; CHECK-LABEL: test_vst1q_u64_x2_post_reg:609; CHECK:         lsl r1, r1, #3610; CHECK-NEXT:    vst1.64 {d0, d1, d2, d3}, [r0], r1611; CHECK-NEXT:    bx lr612entry:613  %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0614  %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1615  tail call void @llvm.arm.neon.vst1x2.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1)616  %tmp = getelementptr i64, ptr %a, i32 %inc617  ret ptr %tmp618}619 620 621define arm_aapcs_vfpcc ptr @test_vst1_u8_x3_post_imm(ptr %a, %struct.uint8x8x3_t %b) nounwind {622; CHECK-LABEL: test_vst1_u8_x3_post_imm:623; CHECK:         vst1.8 {d0, d1, d2}, [r0]!624; CHECK-NEXT:    bx lr625entry:626  %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0627  %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1628  %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2629  tail call void @llvm.arm.neon.vst1x3.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2)630  %tmp = getelementptr i8, ptr %a, i32 24631  ret ptr %tmp632}633 634define arm_aapcs_vfpcc ptr @test_vst1_u8_x3_post_reg(ptr %a, %struct.uint8x8x3_t %b, i32 %inc) nounwind {635; CHECK-LABEL: test_vst1_u8_x3_post_reg:636; CHECK:         vst1.8 {d0, d1, d2}, [r0], r1637; CHECK-NEXT:    bx lr638entry:639  %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0640  %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1641  %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2642  tail call void @llvm.arm.neon.vst1x3.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2)643  %tmp = getelementptr i8, ptr %a, i32 %inc644  ret ptr %tmp645}646 647define arm_aapcs_vfpcc ptr @test_vst1_u16_x3_post_imm(ptr %a, %struct.uint16x4x3_t %b) nounwind {648; CHECK-LABEL: test_vst1_u16_x3_post_imm:649; CHECK:         vst1.16 {d0, d1, d2}, [r0]!650; CHECK-NEXT:    bx lr651  %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0652  %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1653  %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2654  tail call void @llvm.arm.neon.vst1x3.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2)655  %tmp = getelementptr i16, ptr %a, i32 12656  ret ptr %tmp657}658 659define arm_aapcs_vfpcc ptr @test_vst1_u16_x3_post_reg(ptr %a, %struct.uint16x4x3_t %b, i32 %inc) nounwind {660; CHECK-LABEL: test_vst1_u16_x3_post_reg:661; CHECK:         lsl r1, r1, #1662; CHECK-NEXT:    vst1.16 {d0, d1, d2}, [r0], r1663; CHECK-NEXT:    bx lr664  %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0665  %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1666  %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2667  tail call void @llvm.arm.neon.vst1x3.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2)668  %tmp = getelementptr i16, ptr %a, i32 %inc669  ret ptr %tmp670}671 672define arm_aapcs_vfpcc ptr @test_vst1_u32_x3_post_imm(ptr %a, %struct.uint32x2x3_t %b) nounwind {673; CHECK-LABEL: test_vst1_u32_x3_post_imm:674; CHECK:         vst1.32 {d0, d1, d2}, [r0]!675; CHECK-NEXT:    bx lr676entry:677  %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0678  %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1679  %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2680  tail call void @llvm.arm.neon.vst1x3.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2)681  %tmp = getelementptr i32, ptr %a, i32 6682  ret ptr %tmp683}684 685define arm_aapcs_vfpcc ptr @test_vst1_u32_x3_post_reg(ptr %a, %struct.uint32x2x3_t %b, i32 %inc) nounwind {686; CHECK-LABEL: test_vst1_u32_x3_post_reg:687; CHECK:         lsl r1, r1, #2688; CHECK-NEXT:    vst1.32 {d0, d1, d2}, [r0], r1689; CHECK-NEXT:    bx lr690entry:691  %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0692  %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1693  %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2694  tail call void @llvm.arm.neon.vst1x3.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2)695  %tmp = getelementptr i32, ptr %a, i32 %inc696  ret ptr %tmp697}698 699define arm_aapcs_vfpcc ptr @test_vst1_u64_x3_post_imm(ptr %a, %struct.uint64x1x3_t %b) nounwind {700; CHECK-LABEL: test_vst1_u64_x3_post_imm:701; CHECK:         vst1.64 {d0, d1, d2}, [r0]!702; CHECK-NEXT:    bx lr703entry:704  %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0705  %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1706  %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2707  tail call void @llvm.arm.neon.vst1x3.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2)708  %tmp = getelementptr i64, ptr %a, i32 3709  ret ptr %tmp710}711 712define arm_aapcs_vfpcc ptr @test_vst1_u64_x3_post_reg(ptr %a, %struct.uint64x1x3_t %b, i32 %inc) nounwind {713; CHECK-LABEL: test_vst1_u64_x3_post_reg:714; CHECK:         lsl r1, r1, #3715; CHECK-NEXT:    vst1.64 {d0, d1, d2}, [r0], r1716; CHECK-NEXT:    bx lr717entry:718  %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0719  %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1720  %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2721  tail call void @llvm.arm.neon.vst1x3.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2)722  %tmp = getelementptr i64, ptr %a, i32 %inc723  ret ptr %tmp724}725 726define arm_aapcs_vfpcc ptr @test_vst1q_u8_x3_post_imm(ptr %a, %struct.uint8x16x3_t %b) nounwind {727; CHECK-LABEL: test_vst1q_u8_x3_post_imm:728; CHECK:         vst1.8 {d0, d1, d2}, [r0]!729; CHECK-NEXT:    vst1.8 {d3, d4, d5}, [r0]!730; CHECK-NEXT:    bx lr731entry:732  %b0 = extractvalue %struct.uint8x16x3_t %b, 0, 0733  %b1 = extractvalue %struct.uint8x16x3_t %b, 0, 1734  %b2 = extractvalue %struct.uint8x16x3_t %b, 0, 2735  tail call void @llvm.arm.neon.vst1x3.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2)736  %tmp = getelementptr i8, ptr %a, i32 48737  ret ptr %tmp738}739 740define arm_aapcs_vfpcc ptr @test_vst1q_u16_x3_post_imm(ptr %a, %struct.uint16x8x3_t %b) nounwind {741; CHECK-LABEL: test_vst1q_u16_x3_post_imm:742; CHECK:         vst1.16 {d0, d1, d2}, [r0]!743; CHECK-NEXT:    vst1.16 {d3, d4, d5}, [r0]!744; CHECK-NEXT:    bx lr745entry:746  %b0 = extractvalue %struct.uint16x8x3_t %b, 0, 0747  %b1 = extractvalue %struct.uint16x8x3_t %b, 0, 1748  %b2 = extractvalue %struct.uint16x8x3_t %b, 0, 2749  tail call void @llvm.arm.neon.vst1x3.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2)750  %tmp = getelementptr i16, ptr %a, i32 24751  ret ptr %tmp752}753 754define arm_aapcs_vfpcc ptr @test_vst1q_u32_x3_post_imm(ptr %a, %struct.uint32x4x3_t %b) nounwind {755; CHECK-LABEL: test_vst1q_u32_x3_post_imm:756; CHECK:         vst1.32 {d0, d1, d2}, [r0]!757; CHECK-NEXT:    vst1.32 {d3, d4, d5}, [r0]!758; CHECK-NEXT:    bx lr759entry:760  %b0 = extractvalue %struct.uint32x4x3_t %b, 0, 0761  %b1 = extractvalue %struct.uint32x4x3_t %b, 0, 1762  %b2 = extractvalue %struct.uint32x4x3_t %b, 0, 2763  tail call void @llvm.arm.neon.vst1x3.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2)764  %tmp = getelementptr i32, ptr %a, i32 12765  ret ptr %tmp766}767 768define arm_aapcs_vfpcc ptr @test_vst1q_u64_x3_post_imm(ptr %a, %struct.uint64x2x3_t %b) nounwind {769; CHECK-LABEL: test_vst1q_u64_x3_post_imm:770; CHECK:         vst1.64 {d0, d1, d2}, [r0]!771; CHECK-NEXT:    vst1.64 {d3, d4, d5}, [r0]!772; CHECK-NEXT:    bx lr773entry:774  %b0 = extractvalue %struct.uint64x2x3_t %b, 0, 0775  %b1 = extractvalue %struct.uint64x2x3_t %b, 0, 1776  %b2 = extractvalue %struct.uint64x2x3_t %b, 0, 2777  tail call void @llvm.arm.neon.vst1x3.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2)778  %tmp = getelementptr i64, ptr %a, i32 6779  ret ptr %tmp780}781 782define arm_aapcs_vfpcc ptr @test_vst1_u8_x4_post_imm(ptr %a, %struct.uint8x8x4_t %b) nounwind {783; CHECK-LABEL: test_vst1_u8_x4_post_imm:784; CHECK:         vst1.8 {d0, d1, d2, d3}, [r0]!785; CHECK-NEXT:    bx lr786entry:787  %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0788  %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1789  %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2790  %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3791  tail call void @llvm.arm.neon.vst1x4.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2, <8 x i8> %b3)792  %tmp = getelementptr i8, ptr %a, i32 32793  ret ptr %tmp794}795 796define arm_aapcs_vfpcc ptr @test_vst1_u8_x4_post_reg(ptr %a, %struct.uint8x8x4_t %b, i32 %inc) nounwind {797; CHECK-LABEL: test_vst1_u8_x4_post_reg:798; CHECK:         vst1.8 {d0, d1, d2, d3}, [r0], r1799; CHECK-NEXT:    bx lr800entry:801  %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0802  %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1803  %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2804  %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3805  tail call void @llvm.arm.neon.vst1x4.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2, <8 x i8> %b3)806  %tmp = getelementptr i8, ptr %a, i32 %inc807  ret ptr %tmp808}809 810define arm_aapcs_vfpcc ptr @test_vst1_u16_x4_post_imm(ptr %a, %struct.uint16x4x4_t %b) nounwind {811; CHECK-LABEL: test_vst1_u16_x4_post_imm:812; CHECK:         vst1.16 {d0, d1, d2, d3}, [r0]!813; CHECK-NEXT:    bx lr814  %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0815  %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1816  %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2817  %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3818  tail call void @llvm.arm.neon.vst1x4.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2, <4 x i16> %b3)819  %tmp = getelementptr i16, ptr %a, i32 16820  ret ptr %tmp821}822 823define arm_aapcs_vfpcc ptr @test_vst1_u16_x4_post_reg(ptr %a, %struct.uint16x4x4_t %b, i32 %inc) nounwind {824; CHECK-LABEL: test_vst1_u16_x4_post_reg:825; CHECK:         lsl r1, r1, #1826; CHECK-NEXT:    vst1.16 {d0, d1, d2, d3}, [r0], r1827; CHECK-NEXT:    bx lr828  %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0829  %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1830  %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2831  %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3832  tail call void @llvm.arm.neon.vst1x4.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2, <4 x i16> %b3)833  %tmp = getelementptr i16, ptr %a, i32 %inc834  ret ptr %tmp835}836 837define arm_aapcs_vfpcc ptr @test_vst1_u32_x4_post_imm(ptr %a, %struct.uint32x2x4_t %b) nounwind {838; CHECK-LABEL: test_vst1_u32_x4_post_imm:839; CHECK:         vst1.32 {d0, d1, d2, d3}, [r0]!840; CHECK-NEXT:    bx lr841entry:842  %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0843  %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1844  %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2845  %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3846  tail call void @llvm.arm.neon.vst1x4.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2, <2 x i32> %b3)847  %tmp = getelementptr i32, ptr %a, i32 8848  ret ptr %tmp849}850 851define arm_aapcs_vfpcc ptr @test_vst1_u32_x4_post_reg(ptr %a, %struct.uint32x2x4_t %b, i32 %inc) nounwind {852; CHECK-LABEL: test_vst1_u32_x4_post_reg:853; CHECK:         lsl r1, r1, #2854; CHECK-NEXT:    vst1.32 {d0, d1, d2, d3}, [r0], r1855; CHECK-NEXT:    bx lr856entry:857  %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0858  %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1859  %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2860  %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3861  tail call void @llvm.arm.neon.vst1x4.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2, <2 x i32> %b3)862  %tmp = getelementptr i32, ptr %a, i32 %inc863  ret ptr %tmp864}865 866define arm_aapcs_vfpcc ptr @test_vst1_u64_x4_post_imm(ptr %a, %struct.uint64x1x4_t %b) nounwind {867; CHECK-LABEL: test_vst1_u64_x4_post_imm:868; CHECK:         vst1.64 {d0, d1, d2, d3}, [r0]!869; CHECK-NEXT:    bx lr870entry:871  %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0872  %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1873  %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2874  %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3875  tail call void @llvm.arm.neon.vst1x4.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2, <1 x i64> %b3)876  %tmp = getelementptr i64, ptr %a, i32 4877  ret ptr %tmp878}879 880define arm_aapcs_vfpcc ptr @test_vst1_u64_x4_post_reg(ptr %a, %struct.uint64x1x4_t %b, i32 %inc) nounwind {881; CHECK-LABEL: test_vst1_u64_x4_post_reg:882; CHECK:         lsl r1, r1, #3883; CHECK-NEXT:    vst1.64 {d0, d1, d2, d3}, [r0], r1884; CHECK-NEXT:    bx lr885entry:886  %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0887  %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1888  %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2889  %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3890  tail call void @llvm.arm.neon.vst1x4.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2, <1 x i64> %b3)891  %tmp = getelementptr i64, ptr %a, i32 %inc892  ret ptr %tmp893}894 895define arm_aapcs_vfpcc ptr @test_vst1q_u8_x4_post_imm(ptr %a, %struct.uint8x16x4_t %b) nounwind {896; CHECK-LABEL: test_vst1q_u8_x4_post_imm:897; CHECK:         vst1.8 {d0, d1, d2, d3}, [r0]!898; CHECK-NEXT:    vst1.8 {d4, d5, d6, d7}, [r0]!899; CHECK-NEXT:    bx lr900entry:901  %b0 = extractvalue %struct.uint8x16x4_t %b, 0, 0902  %b1 = extractvalue %struct.uint8x16x4_t %b, 0, 1903  %b2 = extractvalue %struct.uint8x16x4_t %b, 0, 2904  %b3 = extractvalue %struct.uint8x16x4_t %b, 0, 3905  tail call void @llvm.arm.neon.vst1x4.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2, <16 x i8> %b3)906  %tmp = getelementptr i8, ptr %a, i32 64907  ret ptr %tmp908}909 910define arm_aapcs_vfpcc ptr @test_vst1q_u16_x4_post_imm(ptr %a, %struct.uint16x8x4_t %b) nounwind {911; CHECK-LABEL: test_vst1q_u16_x4_post_imm:912; CHECK:         vst1.16 {d0, d1, d2, d3}, [r0]!913; CHECK-NEXT:    vst1.16 {d4, d5, d6, d7}, [r0]!914; CHECK-NEXT:    bx lr915entry:916  %b0 = extractvalue %struct.uint16x8x4_t %b, 0, 0917  %b1 = extractvalue %struct.uint16x8x4_t %b, 0, 1918  %b2 = extractvalue %struct.uint16x8x4_t %b, 0, 2919  %b3 = extractvalue %struct.uint16x8x4_t %b, 0, 3920  tail call void @llvm.arm.neon.vst1x4.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2, <8 x i16> %b3)921  %tmp = getelementptr i16, ptr %a, i32 32922  ret ptr %tmp923}924 925define arm_aapcs_vfpcc ptr @test_vst1q_u32_x4_post_imm(ptr %a, %struct.uint32x4x4_t %b) nounwind {926; CHECK-LABEL: test_vst1q_u32_x4_post_imm:927; CHECK:         vst1.32 {d0, d1, d2, d3}, [r0]!928; CHECK-NEXT:    vst1.32 {d4, d5, d6, d7}, [r0]!929; CHECK-NEXT:    bx lr930entry:931  %b0 = extractvalue %struct.uint32x4x4_t %b, 0, 0932  %b1 = extractvalue %struct.uint32x4x4_t %b, 0, 1933  %b2 = extractvalue %struct.uint32x4x4_t %b, 0, 2934  %b3 = extractvalue %struct.uint32x4x4_t %b, 0, 3935  tail call void @llvm.arm.neon.vst1x4.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2, <4 x i32> %b3)936  %tmp = getelementptr i32, ptr %a, i32 16937  ret ptr %tmp938}939 940define arm_aapcs_vfpcc ptr @test_vst1q_u64_x4_post_imm(ptr %a, %struct.uint64x2x4_t %b) nounwind {941; CHECK-LABEL: test_vst1q_u64_x4_post_imm:942; CHECK:         vst1.64 {d0, d1, d2, d3}, [r0]!943; CHECK-NEXT:    vst1.64 {d4, d5, d6, d7}, [r0]!944; CHECK-NEXT:    bx lr945entry:946  %b0 = extractvalue %struct.uint64x2x4_t %b, 0, 0947  %b1 = extractvalue %struct.uint64x2x4_t %b, 0, 1948  %b2 = extractvalue %struct.uint64x2x4_t %b, 0, 2949  %b3 = extractvalue %struct.uint64x2x4_t %b, 0, 3950  tail call void @llvm.arm.neon.vst1x4.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2, <2 x i64> %b3)951  %tmp = getelementptr i64, ptr %a, i32 8952  ret ptr %tmp953}954