1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=armv8-linux-gnueabi -verify-machineinstrs -asm-verbose=false | FileCheck %s 3 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 nounwind 62declare void @llvm.arm.neon.vst1x3.p0.v4i16(ptr nocapture, <4 x i16>, <4 x i16>, <4 x i16>) argmemonly nounwind 63declare void @llvm.arm.neon.vst1x4.p0.v4i16(ptr nocapture, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>) argmemonly nounwind 64 65declare void @llvm.arm.neon.vst1x2.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>) argmemonly nounwind 66declare void @llvm.arm.neon.vst1x3.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>, <2 x i32>) argmemonly nounwind 67declare void @llvm.arm.neon.vst1x4.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>) argmemonly nounwind 68 69declare void @llvm.arm.neon.vst1x2.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>) argmemonly nounwind 70declare void @llvm.arm.neon.vst1x3.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>, <1 x i64>) argmemonly nounwind 71declare void @llvm.arm.neon.vst1x4.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>) argmemonly nounwind 72 73declare void @llvm.arm.neon.vst1x2.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>) argmemonly nounwind 74declare void @llvm.arm.neon.vst1x3.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>, <8 x i8>) argmemonly nounwind 75declare void @llvm.arm.neon.vst1x4.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>) argmemonly nounwind 76 77declare void @llvm.arm.neon.vst1x2.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>) argmemonly nounwind 78declare void @llvm.arm.neon.vst1x3.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>, <8 x i16>) argmemonly nounwind 79declare void @llvm.arm.neon.vst1x4.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>) argmemonly nounwind 80 81declare void @llvm.arm.neon.vst1x2.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>) argmemonly nounwind 82declare void @llvm.arm.neon.vst1x3.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>, <4 x i32>) argmemonly nounwind 83declare void @llvm.arm.neon.vst1x4.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>) argmemonly nounwind 84 85declare void @llvm.arm.neon.vst1x2.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>) argmemonly nounwind 86declare void @llvm.arm.neon.vst1x3.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>, <2 x i64>) argmemonly nounwind 87declare void @llvm.arm.neon.vst1x4.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>) argmemonly nounwind 88 89declare void @llvm.arm.neon.vst1x2.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>) argmemonly nounwind 90declare void @llvm.arm.neon.vst1x3.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>, <16 x i8>) argmemonly nounwind 91declare void @llvm.arm.neon.vst1x4.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) argmemonly nounwind 92 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 lr 97entry: 98 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0 99 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1 100 tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1) 101 ret void 102} 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 lr 108entry: 109 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0 110 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1 111 tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr align 8 %a, <4 x i16> %b0, <4 x i16> %b1) 112 ret void 113} 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 lr 119entry: 120 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0 121 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1 122 tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr align 16 %a, <4 x i16> %b0, <4 x i16> %b1) 123 ret void 124} 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 lr 130entry: 131 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0 132 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1 133 tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr align 32 %a, <4 x i16> %b0, <4 x i16> %b1) 134 ret void 135} 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 lr 141entry: 142 %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0 143 %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1 144 %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2 145 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 void 147} 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 lr 153entry: 154 %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0 155 %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1 156 %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2 157 %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3 158 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 void 160} 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 lr 166entry: 167 %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0 168 %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1 169 tail call void @llvm.arm.neon.vst1x2.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1) 170 ret void 171} 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 lr 177entry: 178 %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0 179 %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1 180 %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2 181 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 void 183} 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 lr 189entry: 190 %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0 191 %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1 192 %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2 193 %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3 194 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 void 196} 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 lr 202entry: 203 %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0 204 %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1 205 tail call void @llvm.arm.neon.vst1x2.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1) 206 ret void 207} 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 lr 213entry: 214 %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0 215 %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1 216 %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2 217 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 void 219} 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 lr 225entry: 226 %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0 227 %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1 228 %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2 229 %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3 230 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 void 232} 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 lr 238entry: 239 %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0 240 %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1 241 tail call void @llvm.arm.neon.vst1x2.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1) 242 ret void 243} 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 lr 249entry: 250 %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0 251 %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1 252 %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2 253 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 void 255} 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 lr 261entry: 262 %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0 263 %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1 264 %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2 265 %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3 266 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 void 268} 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 lr 274entry: 275 %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0 276 %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1 277 tail call void @llvm.arm.neon.vst1x2.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1) 278 ret void 279} 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 lr 286entry: 287 %b0 = extractvalue %struct.uint16x8x3_t %b, 0, 0 288 %b1 = extractvalue %struct.uint16x8x3_t %b, 0, 1 289 %b2 = extractvalue %struct.uint16x8x3_t %b, 0, 2 290 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 void 292} 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 lr 299entry: 300 %b0 = extractvalue %struct.uint16x8x4_t %b, 0, 0 301 %b1 = extractvalue %struct.uint16x8x4_t %b, 0, 1 302 %b2 = extractvalue %struct.uint16x8x4_t %b, 0, 2 303 %b3 = extractvalue %struct.uint16x8x4_t %b, 0, 3 304 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 void 306} 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 lr 312entry: 313 %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0 314 %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1 315 tail call void @llvm.arm.neon.vst1x2.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1) 316 ret void 317} 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 lr 324entry: 325 %b0 = extractvalue %struct.uint32x4x3_t %b, 0, 0 326 %b1 = extractvalue %struct.uint32x4x3_t %b, 0, 1 327 %b2 = extractvalue %struct.uint32x4x3_t %b, 0, 2 328 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 void 330} 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 lr 337entry: 338 %b0 = extractvalue %struct.uint32x4x4_t %b, 0, 0 339 %b1 = extractvalue %struct.uint32x4x4_t %b, 0, 1 340 %b2 = extractvalue %struct.uint32x4x4_t %b, 0, 2 341 %b3 = extractvalue %struct.uint32x4x4_t %b, 0, 3 342 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 void 344} 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 lr 350entry: 351 %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0 352 %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1 353 tail call void @llvm.arm.neon.vst1x2.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1) 354 ret void 355} 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 lr 362entry: 363 %b0 = extractvalue %struct.uint64x2x3_t %b, 0, 0 364 %b1 = extractvalue %struct.uint64x2x3_t %b, 0, 1 365 %b2 = extractvalue %struct.uint64x2x3_t %b, 0, 2 366 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 void 368} 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 lr 375entry: 376 %b0 = extractvalue %struct.uint64x2x4_t %b, 0, 0 377 %b1 = extractvalue %struct.uint64x2x4_t %b, 0, 1 378 %b2 = extractvalue %struct.uint64x2x4_t %b, 0, 2 379 %b3 = extractvalue %struct.uint64x2x4_t %b, 0, 3 380 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 void 382} 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 lr 388entry: 389 %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0 390 %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1 391 tail call void @llvm.arm.neon.vst1x2.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1) 392 ret void 393} 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 lr 400entry: 401 %b0 = extractvalue %struct.uint8x16x3_t %b, 0, 0 402 %b1 = extractvalue %struct.uint8x16x3_t %b, 0, 1 403 %b2 = extractvalue %struct.uint8x16x3_t %b, 0, 2 404 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 void 406} 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 lr 413entry: 414 %b0 = extractvalue %struct.uint8x16x4_t %b, 0, 0 415 %b1 = extractvalue %struct.uint8x16x4_t %b, 0, 1 416 %b2 = extractvalue %struct.uint8x16x4_t %b, 0, 2 417 %b3 = extractvalue %struct.uint8x16x4_t %b, 0, 3 418 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 void 420} 421 422; Post increment 423 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 lr 428entry: 429 %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0 430 %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1 431 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 16 433 ret ptr %tmp 434} 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], r1 439; CHECK-NEXT: bx lr 440entry: 441 %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0 442 %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1 443 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 %inc 445 ret ptr %tmp 446} 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 lr 452 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0 453 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1 454 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 8 456 ret ptr %tmp 457} 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, #1 462; CHECK-NEXT: vst1.16 {d0, d1}, [r0], r1 463; CHECK-NEXT: bx lr 464 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0 465 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1 466 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 %inc 468 ret ptr %tmp 469} 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 lr 475entry: 476 %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0 477 %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1 478 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 4 480 ret ptr %tmp 481} 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, #2 486; CHECK-NEXT: vst1.32 {d0, d1}, [r0], r1 487; CHECK-NEXT: bx lr 488entry: 489 %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0 490 %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1 491 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 %inc 493 ret ptr %tmp 494} 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 lr 500entry: 501 %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0 502 %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1 503 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 2 505 ret ptr %tmp 506} 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, #3 511; CHECK-NEXT: vst1.64 {d0, d1}, [r0], r1 512; CHECK-NEXT: bx lr 513entry: 514 %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0 515 %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1 516 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 %inc 518 ret ptr %tmp 519} 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 lr 525entry: 526 %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0 527 %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1 528 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 32 530 ret ptr %tmp 531} 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], r1 536; CHECK-NEXT: bx lr 537entry: 538 %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0 539 %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1 540 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 %inc 542 ret ptr %tmp 543} 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 lr 549entry: 550 %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0 551 %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1 552 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 16 554 ret ptr %tmp 555} 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, #1 560; CHECK-NEXT: vst1.16 {d0, d1, d2, d3}, [r0], r1 561; CHECK-NEXT: bx lr 562entry: 563 %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0 564 %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1 565 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 %inc 567 ret ptr %tmp 568} 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 lr 574entry: 575 %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0 576 %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1 577 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 8 579 ret ptr %tmp 580} 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, #2 585; CHECK-NEXT: vst1.32 {d0, d1, d2, d3}, [r0], r1 586; CHECK-NEXT: bx lr 587entry: 588 %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0 589 %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1 590 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 %inc 592 ret ptr %tmp 593} 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 lr 599entry: 600 %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0 601 %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1 602 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 4 604 ret ptr %tmp 605} 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, #3 610; CHECK-NEXT: vst1.64 {d0, d1, d2, d3}, [r0], r1 611; CHECK-NEXT: bx lr 612entry: 613 %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0 614 %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1 615 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 %inc 617 ret ptr %tmp 618} 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 lr 625entry: 626 %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0 627 %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1 628 %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2 629 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 24 631 ret ptr %tmp 632} 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], r1 637; CHECK-NEXT: bx lr 638entry: 639 %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0 640 %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1 641 %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2 642 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 %inc 644 ret ptr %tmp 645} 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 lr 651 %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0 652 %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1 653 %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2 654 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 12 656 ret ptr %tmp 657} 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, #1 662; CHECK-NEXT: vst1.16 {d0, d1, d2}, [r0], r1 663; CHECK-NEXT: bx lr 664 %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0 665 %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1 666 %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2 667 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 %inc 669 ret ptr %tmp 670} 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 lr 676entry: 677 %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0 678 %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1 679 %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2 680 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 6 682 ret ptr %tmp 683} 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, #2 688; CHECK-NEXT: vst1.32 {d0, d1, d2}, [r0], r1 689; CHECK-NEXT: bx lr 690entry: 691 %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0 692 %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1 693 %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2 694 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 %inc 696 ret ptr %tmp 697} 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 lr 703entry: 704 %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0 705 %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1 706 %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2 707 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 3 709 ret ptr %tmp 710} 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, #3 715; CHECK-NEXT: vst1.64 {d0, d1, d2}, [r0], r1 716; CHECK-NEXT: bx lr 717entry: 718 %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0 719 %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1 720 %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2 721 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 %inc 723 ret ptr %tmp 724} 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 lr 731entry: 732 %b0 = extractvalue %struct.uint8x16x3_t %b, 0, 0 733 %b1 = extractvalue %struct.uint8x16x3_t %b, 0, 1 734 %b2 = extractvalue %struct.uint8x16x3_t %b, 0, 2 735 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 48 737 ret ptr %tmp 738} 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 lr 745entry: 746 %b0 = extractvalue %struct.uint16x8x3_t %b, 0, 0 747 %b1 = extractvalue %struct.uint16x8x3_t %b, 0, 1 748 %b2 = extractvalue %struct.uint16x8x3_t %b, 0, 2 749 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 24 751 ret ptr %tmp 752} 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 lr 759entry: 760 %b0 = extractvalue %struct.uint32x4x3_t %b, 0, 0 761 %b1 = extractvalue %struct.uint32x4x3_t %b, 0, 1 762 %b2 = extractvalue %struct.uint32x4x3_t %b, 0, 2 763 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 12 765 ret ptr %tmp 766} 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 lr 773entry: 774 %b0 = extractvalue %struct.uint64x2x3_t %b, 0, 0 775 %b1 = extractvalue %struct.uint64x2x3_t %b, 0, 1 776 %b2 = extractvalue %struct.uint64x2x3_t %b, 0, 2 777 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 6 779 ret ptr %tmp 780} 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 lr 786entry: 787 %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0 788 %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1 789 %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2 790 %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3 791 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 32 793 ret ptr %tmp 794} 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], r1 799; CHECK-NEXT: bx lr 800entry: 801 %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0 802 %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1 803 %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2 804 %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3 805 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 %inc 807 ret ptr %tmp 808} 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 lr 814 %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0 815 %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1 816 %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2 817 %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3 818 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 16 820 ret ptr %tmp 821} 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, #1 826; CHECK-NEXT: vst1.16 {d0, d1, d2, d3}, [r0], r1 827; CHECK-NEXT: bx lr 828 %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0 829 %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1 830 %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2 831 %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3 832 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 %inc 834 ret ptr %tmp 835} 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 lr 841entry: 842 %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0 843 %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1 844 %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2 845 %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3 846 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 8 848 ret ptr %tmp 849} 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, #2 854; CHECK-NEXT: vst1.32 {d0, d1, d2, d3}, [r0], r1 855; CHECK-NEXT: bx lr 856entry: 857 %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0 858 %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1 859 %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2 860 %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3 861 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 %inc 863 ret ptr %tmp 864} 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 lr 870entry: 871 %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0 872 %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1 873 %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2 874 %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3 875 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 4 877 ret ptr %tmp 878} 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, #3 883; CHECK-NEXT: vst1.64 {d0, d1, d2, d3}, [r0], r1 884; CHECK-NEXT: bx lr 885entry: 886 %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0 887 %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1 888 %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2 889 %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3 890 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 %inc 892 ret ptr %tmp 893} 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 lr 900entry: 901 %b0 = extractvalue %struct.uint8x16x4_t %b, 0, 0 902 %b1 = extractvalue %struct.uint8x16x4_t %b, 0, 1 903 %b2 = extractvalue %struct.uint8x16x4_t %b, 0, 2 904 %b3 = extractvalue %struct.uint8x16x4_t %b, 0, 3 905 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 64 907 ret ptr %tmp 908} 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 lr 915entry: 916 %b0 = extractvalue %struct.uint16x8x4_t %b, 0, 0 917 %b1 = extractvalue %struct.uint16x8x4_t %b, 0, 1 918 %b2 = extractvalue %struct.uint16x8x4_t %b, 0, 2 919 %b3 = extractvalue %struct.uint16x8x4_t %b, 0, 3 920 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 32 922 ret ptr %tmp 923} 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 lr 930entry: 931 %b0 = extractvalue %struct.uint32x4x4_t %b, 0, 0 932 %b1 = extractvalue %struct.uint32x4x4_t %b, 0, 1 933 %b2 = extractvalue %struct.uint32x4x4_t %b, 0, 2 934 %b3 = extractvalue %struct.uint32x4x4_t %b, 0, 3 935 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 16 937 ret ptr %tmp 938} 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 lr 945entry: 946 %b0 = extractvalue %struct.uint64x2x4_t %b, 0, 0 947 %b1 = extractvalue %struct.uint64x2x4_t %b, 0, 1 948 %b2 = extractvalue %struct.uint64x2x4_t %b, 0, 2 949 %b3 = extractvalue %struct.uint64x2x4_t %b, 0, 3 950 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 8 952 ret ptr %tmp 953} 954