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