476 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8define void @build_vector_7_inc1_v4i1(ptr %a) {9; CHECK-LABEL: build_vector_7_inc1_v4i1:10; CHECK: // %bb.0:11; CHECK-NEXT: mov w8, #5 // =0x512; CHECK-NEXT: strb w8, [x0]13; CHECK-NEXT: ret14;15; NONEON-NOSVE-LABEL: build_vector_7_inc1_v4i1:16; NONEON-NOSVE: // %bb.0:17; NONEON-NOSVE-NEXT: mov w8, #5 // =0x518; NONEON-NOSVE-NEXT: strb w8, [x0]19; NONEON-NOSVE-NEXT: ret20 store <4 x i1> <i1 true, i1 false, i1 true, i1 false>, ptr %a, align 121 ret void22}23 24define void @build_vector_7_inc1_v32i8(ptr %a) {25; CHECK-LABEL: build_vector_7_inc1_v32i8:26; CHECK: // %bb.0:27; CHECK-NEXT: index z0.b, #0, #128; CHECK-NEXT: mov z1.d, z0.d29; CHECK-NEXT: add z0.b, z0.b, #7 // =0x730; CHECK-NEXT: add z1.b, z1.b, #23 // =0x1731; CHECK-NEXT: stp q0, q1, [x0]32; CHECK-NEXT: ret33;34; NONEON-NOSVE-LABEL: build_vector_7_inc1_v32i8:35; NONEON-NOSVE: // %bb.0:36; NONEON-NOSVE-NEXT: adrp x8, .LCPI1_037; NONEON-NOSVE-NEXT: adrp x9, .LCPI1_138; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI1_0]39; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI1_1]40; NONEON-NOSVE-NEXT: stp q1, q0, [x0]41; NONEON-NOSVE-NEXT: ret42 store <32 x i8> <i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 16, i8 17, i8 18, i8 19, i8 20, i8 21, i8 22, i8 23, i8 24, i8 25, i8 26, i8 27, i8 28, i8 29, i8 30, i8 31, i8 32, i8 33, i8 34, i8 35, i8 36, i8 37, i8 38>, ptr %a, align 143 ret void44}45 46define void @build_vector_0_inc2_v16i16(ptr %a) {47; CHECK-LABEL: build_vector_0_inc2_v16i16:48; CHECK: // %bb.0:49; CHECK-NEXT: index z0.h, #0, #250; CHECK-NEXT: str q0, [x0]51; CHECK-NEXT: add z0.h, z0.h, #16 // =0x1052; CHECK-NEXT: str q0, [x0, #16]53; CHECK-NEXT: ret54;55; NONEON-NOSVE-LABEL: build_vector_0_inc2_v16i16:56; NONEON-NOSVE: // %bb.0:57; NONEON-NOSVE-NEXT: adrp x8, .LCPI2_058; NONEON-NOSVE-NEXT: adrp x9, .LCPI2_159; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI2_0]60; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI2_1]61; NONEON-NOSVE-NEXT: stp q1, q0, [x0]62; NONEON-NOSVE-NEXT: ret63 store <16 x i16> <i16 0, i16 2, i16 4, i16 6, i16 8, i16 10, i16 12, i16 14, i16 16, i16 18, i16 20, i16 22, i16 24, i16 26, i16 28, i16 30>, ptr %a, align 264 ret void65}66 67; Negative const stride.68define void @build_vector_0_dec3_v8i32(ptr %a) {69; CHECK-LABEL: build_vector_0_dec3_v8i32:70; CHECK: // %bb.0:71; CHECK-NEXT: index z0.s, #0, #-372; CHECK-NEXT: str q0, [x0]73; CHECK-NEXT: sub z0.s, z0.s, #12 // =0xc74; CHECK-NEXT: str q0, [x0, #16]75; CHECK-NEXT: ret76;77; NONEON-NOSVE-LABEL: build_vector_0_dec3_v8i32:78; NONEON-NOSVE: // %bb.0:79; NONEON-NOSVE-NEXT: adrp x8, .LCPI3_080; NONEON-NOSVE-NEXT: adrp x9, .LCPI3_181; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI3_0]82; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI3_1]83; NONEON-NOSVE-NEXT: stp q1, q0, [x0]84; NONEON-NOSVE-NEXT: ret85 store <8 x i32> <i32 0, i32 -3, i32 -6, i32 -9, i32 -12, i32 -15, i32 -18, i32 -21>, ptr %a, align 486 ret void87}88 89; Constant stride that's too big to be directly encoded into the index.90define void @build_vector_minus2_dec32_v4i64(ptr %a) {91; CHECK-LABEL: build_vector_minus2_dec32_v4i64:92; CHECK: // %bb.0:93; CHECK-NEXT: mov x8, #-32 // =0xffffffffffffffe094; CHECK-NEXT: index z0.d, #0, x895; CHECK-NEXT: mov z1.d, z0.d96; CHECK-NEXT: sub z0.d, z0.d, #2 // =0x297; CHECK-NEXT: sub z1.d, z1.d, #66 // =0x4298; CHECK-NEXT: stp q0, q1, [x0]99; CHECK-NEXT: ret100;101; NONEON-NOSVE-LABEL: build_vector_minus2_dec32_v4i64:102; NONEON-NOSVE: // %bb.0:103; NONEON-NOSVE-NEXT: adrp x8, .LCPI4_0104; NONEON-NOSVE-NEXT: adrp x9, .LCPI4_1105; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI4_0]106; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI4_1]107; NONEON-NOSVE-NEXT: stp q1, q0, [x0]108; NONEON-NOSVE-NEXT: ret109 store <4 x i64> <i64 -2, i64 -34, i64 -66, i64 -98>, ptr %a, align 8110 ret void111}112 113; Constant but not a sequence.114define void @build_vector_no_stride_v4i64(ptr %a) {115; CHECK-LABEL: build_vector_no_stride_v4i64:116; CHECK: // %bb.0:117; CHECK-NEXT: index z0.d, #1, #7118; CHECK-NEXT: index z1.d, #0, #4119; CHECK-NEXT: stp q1, q0, [x0]120; CHECK-NEXT: ret121;122; NONEON-NOSVE-LABEL: build_vector_no_stride_v4i64:123; NONEON-NOSVE: // %bb.0:124; NONEON-NOSVE-NEXT: adrp x8, .LCPI5_0125; NONEON-NOSVE-NEXT: adrp x9, .LCPI5_1126; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI5_0]127; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI5_1]128; NONEON-NOSVE-NEXT: stp q1, q0, [x0]129; NONEON-NOSVE-NEXT: ret130 store <4 x i64> <i64 0, i64 4, i64 1, i64 8>, ptr %a, align 8131 ret void132}133 134define void @build_vector_0_inc2_v16f16(ptr %a) {135; CHECK-LABEL: build_vector_0_inc2_v16f16:136; CHECK: // %bb.0:137; CHECK-NEXT: adrp x8, .LCPI6_0138; CHECK-NEXT: adrp x9, .LCPI6_1139; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI6_0]140; CHECK-NEXT: ldr q1, [x9, :lo12:.LCPI6_1]141; CHECK-NEXT: stp q1, q0, [x0]142; CHECK-NEXT: ret143;144; NONEON-NOSVE-LABEL: build_vector_0_inc2_v16f16:145; NONEON-NOSVE: // %bb.0:146; NONEON-NOSVE-NEXT: adrp x8, .LCPI6_0147; NONEON-NOSVE-NEXT: adrp x9, .LCPI6_1148; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI6_0]149; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI6_1]150; NONEON-NOSVE-NEXT: stp q1, q0, [x0]151; NONEON-NOSVE-NEXT: ret152 store <16 x half> <half 0.0, half 2.0, half 4.0, half 6.0, half 8.0, half 10.0, half 12.0, half 14.0, half 16.0, half 18.0, half 20.0, half 22.0, half 24.0, half 26.0, half 28.0, half 30.0>, ptr %a, align 2153 ret void154}155 156; Negative const stride.157define void @build_vector_0_dec3_v8f32(ptr %a) {158; CHECK-LABEL: build_vector_0_dec3_v8f32:159; CHECK: // %bb.0:160; CHECK-NEXT: adrp x8, .LCPI7_0161; CHECK-NEXT: adrp x9, .LCPI7_1162; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI7_0]163; CHECK-NEXT: ldr q1, [x9, :lo12:.LCPI7_1]164; CHECK-NEXT: stp q1, q0, [x0]165; CHECK-NEXT: ret166;167; NONEON-NOSVE-LABEL: build_vector_0_dec3_v8f32:168; NONEON-NOSVE: // %bb.0:169; NONEON-NOSVE-NEXT: adrp x8, .LCPI7_0170; NONEON-NOSVE-NEXT: adrp x9, .LCPI7_1171; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI7_0]172; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI7_1]173; NONEON-NOSVE-NEXT: stp q1, q0, [x0]174; NONEON-NOSVE-NEXT: ret175 store <8 x float> <float 0.0, float -3.0, float -6.0, float -9.0, float -12.0, float -15.0, float -18.0, float -21.0>, ptr %a, align 4176 ret void177}178 179; Constant stride that's too big to be directly encoded into the index.180define void @build_vector_minus2_dec32_v4f64(ptr %a) {181; CHECK-LABEL: build_vector_minus2_dec32_v4f64:182; CHECK: // %bb.0:183; CHECK-NEXT: adrp x8, .LCPI8_0184; CHECK-NEXT: adrp x9, .LCPI8_1185; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI8_0]186; CHECK-NEXT: ldr q1, [x9, :lo12:.LCPI8_1]187; CHECK-NEXT: stp q1, q0, [x0]188; CHECK-NEXT: ret189;190; NONEON-NOSVE-LABEL: build_vector_minus2_dec32_v4f64:191; NONEON-NOSVE: // %bb.0:192; NONEON-NOSVE-NEXT: adrp x8, .LCPI8_0193; NONEON-NOSVE-NEXT: adrp x9, .LCPI8_1194; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI8_0]195; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI8_1]196; NONEON-NOSVE-NEXT: stp q1, q0, [x0]197; NONEON-NOSVE-NEXT: ret198 store <4 x double> <double -2.0, double -34.0, double -66.0, double -98.0>, ptr %a, align 8199 ret void200}201 202; Constant but not a sequence.203define void @build_vector_no_stride_v4f64(ptr %a) {204; CHECK-LABEL: build_vector_no_stride_v4f64:205; CHECK: // %bb.0:206; CHECK-NEXT: adrp x8, .LCPI9_0207; CHECK-NEXT: adrp x9, .LCPI9_1208; CHECK-NEXT: ldr q0, [x8, :lo12:.LCPI9_0]209; CHECK-NEXT: ldr q1, [x9, :lo12:.LCPI9_1]210; CHECK-NEXT: stp q1, q0, [x0]211; CHECK-NEXT: ret212;213; NONEON-NOSVE-LABEL: build_vector_no_stride_v4f64:214; NONEON-NOSVE: // %bb.0:215; NONEON-NOSVE-NEXT: adrp x8, .LCPI9_0216; NONEON-NOSVE-NEXT: adrp x9, .LCPI9_1217; NONEON-NOSVE-NEXT: ldr q0, [x8, :lo12:.LCPI9_0]218; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI9_1]219; NONEON-NOSVE-NEXT: stp q1, q0, [x0]220; NONEON-NOSVE-NEXT: ret221 store <4 x double> <double 0.0, double 4.0, double 1.0, double 8.0>, ptr %a, align 8222 ret void223}224 225define void @build_vector_non_const_v4i1(i1 %a, i1 %b, i1 %c, i1 %d, ptr %out) {226; CHECK-LABEL: build_vector_non_const_v4i1:227; CHECK: // %bb.0:228; CHECK-NEXT: orr w8, w0, w1, lsl #1229; CHECK-NEXT: orr w8, w8, w2, lsl #2230; CHECK-NEXT: orr w8, w8, w3, lsl #3231; CHECK-NEXT: strb w8, [x4]232; CHECK-NEXT: ret233;234; NONEON-NOSVE-LABEL: build_vector_non_const_v4i1:235; NONEON-NOSVE: // %bb.0:236; NONEON-NOSVE-NEXT: orr w8, w0, w1, lsl #1237; NONEON-NOSVE-NEXT: orr w8, w8, w2, lsl #2238; NONEON-NOSVE-NEXT: orr w8, w8, w3, lsl #3239; NONEON-NOSVE-NEXT: strb w8, [x4]240; NONEON-NOSVE-NEXT: ret241 %1 = insertelement <4 x i1> poison, i1 %a, i64 0242 %2 = insertelement <4 x i1> %1, i1 %b, i64 1243 %3 = insertelement <4 x i1> %2, i1 %c, i64 2244 %4 = insertelement <4 x i1> %3, i1 %d, i64 3245 store <4 x i1> %4, ptr %out246 ret void247}248 249define void @build_vector_non_const_v2f64(double %a, double %b, ptr %out) {250; CHECK-LABEL: build_vector_non_const_v2f64:251; CHECK: // %bb.0:252; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0253; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1254; CHECK-NEXT: zip1 z0.d, z0.d, z1.d255; CHECK-NEXT: str q0, [x0]256; CHECK-NEXT: ret257;258; NONEON-NOSVE-LABEL: build_vector_non_const_v2f64:259; NONEON-NOSVE: // %bb.0:260; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #-16]!261; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16262; NONEON-NOSVE-NEXT: ldr q0, [sp]263; NONEON-NOSVE-NEXT: str q0, [x0]264; NONEON-NOSVE-NEXT: add sp, sp, #16265; NONEON-NOSVE-NEXT: ret266 %1 = insertelement <2 x double> poison, double %a, i64 0267 %2 = insertelement <2 x double> %1, double %b, i64 1268 store <2 x double> %2, ptr %out269 ret void270}271 272define void @build_vector_non_const_v2f32(float %a, float %b, ptr %out) {273; CHECK-LABEL: build_vector_non_const_v2f32:274; CHECK: // %bb.0:275; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0276; CHECK-NEXT: // kill: def $s1 killed $s1 def $z1277; CHECK-NEXT: zip1 z0.s, z0.s, z1.s278; CHECK-NEXT: str d0, [x0]279; CHECK-NEXT: ret280;281; NONEON-NOSVE-LABEL: build_vector_non_const_v2f32:282; NONEON-NOSVE: // %bb.0:283; NONEON-NOSVE-NEXT: sub sp, sp, #16284; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16285; NONEON-NOSVE-NEXT: stp s0, s1, [sp, #8]286; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]287; NONEON-NOSVE-NEXT: str d0, [x0]288; NONEON-NOSVE-NEXT: add sp, sp, #16289; NONEON-NOSVE-NEXT: ret290 %1 = insertelement <2 x float> poison, float %a, i64 0291 %2 = insertelement <2 x float> %1, float %b, i64 1292 store <2 x float> %2, ptr %out293 ret void294}295 296define void @build_vector_non_const_v4f32(float %a, float %b, float %c, float %d, ptr %out) {297; CHECK-LABEL: build_vector_non_const_v4f32:298; CHECK: // %bb.0:299; CHECK-NEXT: // kill: def $s2 killed $s2 def $z2300; CHECK-NEXT: // kill: def $s0 killed $s0 def $z0301; CHECK-NEXT: // kill: def $s3 killed $s3 def $z3302; CHECK-NEXT: // kill: def $s1 killed $s1 def $z1303; CHECK-NEXT: zip1 z2.s, z2.s, z3.s304; CHECK-NEXT: zip1 z0.s, z0.s, z1.s305; CHECK-NEXT: zip1 z0.d, z0.d, z2.d306; CHECK-NEXT: str q0, [x0]307; CHECK-NEXT: ret308;309; NONEON-NOSVE-LABEL: build_vector_non_const_v4f32:310; NONEON-NOSVE: // %bb.0:311; NONEON-NOSVE-NEXT: sub sp, sp, #16312; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16313; NONEON-NOSVE-NEXT: stp s2, s3, [sp, #8]314; NONEON-NOSVE-NEXT: stp s0, s1, [sp]315; NONEON-NOSVE-NEXT: ldr q0, [sp]316; NONEON-NOSVE-NEXT: str q0, [x0]317; NONEON-NOSVE-NEXT: add sp, sp, #16318; NONEON-NOSVE-NEXT: ret319 %1 = insertelement <4 x float> poison, float %a, i64 0320 %2 = insertelement <4 x float> %1, float %b, i64 1321 %3 = insertelement <4 x float> %2, float %c, i64 2322 %4 = insertelement <4 x float> %3, float %d, i64 3323 store <4 x float> %4, ptr %out324 ret void325}326 327define void @build_vector_non_const_v4f64(double %a, double %b, double %c, double %d, ptr %out) {328; CHECK-LABEL: build_vector_non_const_v4f64:329; CHECK: // %bb.0:330; CHECK-NEXT: // kill: def $d2 killed $d2 def $z2331; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0332; CHECK-NEXT: // kill: def $d3 killed $d3 def $z3333; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1334; CHECK-NEXT: zip1 z2.d, z2.d, z3.d335; CHECK-NEXT: zip1 z0.d, z0.d, z1.d336; CHECK-NEXT: stp q0, q2, [x0]337; CHECK-NEXT: ret338;339; NONEON-NOSVE-LABEL: build_vector_non_const_v4f64:340; NONEON-NOSVE: // %bb.0:341; NONEON-NOSVE-NEXT: stp d0, d1, [sp, #-32]!342; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32343; NONEON-NOSVE-NEXT: stp d2, d3, [sp, #16]344; NONEON-NOSVE-NEXT: ldp q1, q0, [sp]345; NONEON-NOSVE-NEXT: stp q1, q0, [x0]346; NONEON-NOSVE-NEXT: add sp, sp, #32347; NONEON-NOSVE-NEXT: ret348 %1 = insertelement <4 x double> poison, double %a, i64 0349 %2 = insertelement <4 x double> %1, double %b, i64 1350 %3 = insertelement <4 x double> %2, double %c, i64 2351 %4 = insertelement <4 x double> %3, double %d, i64 3352 store <4 x double> %4, ptr %out353 ret void354}355 356define void @build_vector_non_const_v8f16(half %a, half %b, half %c, half %d, half %e, half %f, half %g, half %h, ptr %out) {357; CHECK-LABEL: build_vector_non_const_v8f16:358; CHECK: // %bb.0:359; CHECK-NEXT: // kill: def $h6 killed $h6 def $z6360; CHECK-NEXT: // kill: def $h4 killed $h4 def $z4361; CHECK-NEXT: // kill: def $h2 killed $h2 def $z2362; CHECK-NEXT: // kill: def $h0 killed $h0 def $z0363; CHECK-NEXT: // kill: def $h7 killed $h7 def $z7364; CHECK-NEXT: // kill: def $h5 killed $h5 def $z5365; CHECK-NEXT: // kill: def $h3 killed $h3 def $z3366; CHECK-NEXT: // kill: def $h1 killed $h1 def $z1367; CHECK-NEXT: zip1 z6.h, z6.h, z7.h368; CHECK-NEXT: zip1 z4.h, z4.h, z5.h369; CHECK-NEXT: zip1 z2.h, z2.h, z3.h370; CHECK-NEXT: zip1 z0.h, z0.h, z1.h371; CHECK-NEXT: zip1 z1.s, z4.s, z6.s372; CHECK-NEXT: zip1 z0.s, z0.s, z2.s373; CHECK-NEXT: zip1 z0.d, z0.d, z1.d374; CHECK-NEXT: str q0, [x0]375; CHECK-NEXT: ret376;377; NONEON-NOSVE-LABEL: build_vector_non_const_v8f16:378; NONEON-NOSVE: // %bb.0:379; NONEON-NOSVE-NEXT: sub sp, sp, #16380; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16381; NONEON-NOSVE-NEXT: str h7, [sp, #14]382; NONEON-NOSVE-NEXT: str h6, [sp, #12]383; NONEON-NOSVE-NEXT: str h5, [sp, #10]384; NONEON-NOSVE-NEXT: str h4, [sp, #8]385; NONEON-NOSVE-NEXT: str h3, [sp, #6]386; NONEON-NOSVE-NEXT: str h2, [sp, #4]387; NONEON-NOSVE-NEXT: str h1, [sp, #2]388; NONEON-NOSVE-NEXT: str h0, [sp]389; NONEON-NOSVE-NEXT: ldr q0, [sp]390; NONEON-NOSVE-NEXT: str q0, [x0]391; NONEON-NOSVE-NEXT: add sp, sp, #16392; NONEON-NOSVE-NEXT: ret393 %1 = insertelement <8 x half> poison, half %a, i64 0394 %2 = insertelement <8 x half> %1, half %b, i64 1395 %3 = insertelement <8 x half> %2, half %c, i64 2396 %4 = insertelement <8 x half> %3, half %d, i64 3397 %5 = insertelement <8 x half> %4, half %e, i64 4398 %6 = insertelement <8 x half> %5, half %f, i64 5399 %7 = insertelement <8 x half> %6, half %g, i64 6400 %8 = insertelement <8 x half> %7, half %h, i64 7401 store <8 x half> %8, ptr %out402 ret void403}404 405define void @build_vector_non_const_v2i32(i32 %a, i32 %b, ptr %out) {406; CHECK-LABEL: build_vector_non_const_v2i32:407; CHECK: // %bb.0:408; CHECK-NEXT: fmov s0, w1409; CHECK-NEXT: fmov s1, w0410; CHECK-NEXT: zip1 z0.s, z1.s, z0.s411; CHECK-NEXT: str d0, [x2]412; CHECK-NEXT: ret413;414; NONEON-NOSVE-LABEL: build_vector_non_const_v2i32:415; NONEON-NOSVE: // %bb.0:416; NONEON-NOSVE-NEXT: sub sp, sp, #16417; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16418; NONEON-NOSVE-NEXT: stp w0, w1, [sp, #8]419; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]420; NONEON-NOSVE-NEXT: str d0, [x2]421; NONEON-NOSVE-NEXT: add sp, sp, #16422; NONEON-NOSVE-NEXT: ret423 %1 = insertelement <2 x i32> poison, i32 %a, i64 0424 %2 = insertelement <2 x i32> %1, i32 %b, i64 1425 store <2 x i32> %2, ptr %out426 ret void427}428 429define void @build_vector_non_const_v8i8(i8 %a, i8 %b, i8 %c, i8 %d, i8 %e, i8 %f, i8 %g, i8 %h, ptr %out) {430; CHECK-LABEL: build_vector_non_const_v8i8:431; CHECK: // %bb.0:432; CHECK-NEXT: sub sp, sp, #16433; CHECK-NEXT: .cfi_def_cfa_offset 16434; CHECK-NEXT: strb w7, [sp, #15]435; CHECK-NEXT: ldr x8, [sp, #16]436; CHECK-NEXT: strb w6, [sp, #14]437; CHECK-NEXT: strb w5, [sp, #13]438; CHECK-NEXT: strb w4, [sp, #12]439; CHECK-NEXT: strb w3, [sp, #11]440; CHECK-NEXT: strb w2, [sp, #10]441; CHECK-NEXT: strb w1, [sp, #9]442; CHECK-NEXT: strb w0, [sp, #8]443; CHECK-NEXT: ldr d0, [sp, #8]444; CHECK-NEXT: str d0, [x8]445; CHECK-NEXT: add sp, sp, #16446; CHECK-NEXT: ret447;448; NONEON-NOSVE-LABEL: build_vector_non_const_v8i8:449; NONEON-NOSVE: // %bb.0:450; NONEON-NOSVE-NEXT: sub sp, sp, #16451; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16452; NONEON-NOSVE-NEXT: strb w7, [sp, #15]453; NONEON-NOSVE-NEXT: ldr x8, [sp, #16]454; NONEON-NOSVE-NEXT: strb w6, [sp, #14]455; NONEON-NOSVE-NEXT: strb w5, [sp, #13]456; NONEON-NOSVE-NEXT: strb w4, [sp, #12]457; NONEON-NOSVE-NEXT: strb w3, [sp, #11]458; NONEON-NOSVE-NEXT: strb w2, [sp, #10]459; NONEON-NOSVE-NEXT: strb w1, [sp, #9]460; NONEON-NOSVE-NEXT: strb w0, [sp, #8]461; NONEON-NOSVE-NEXT: ldr d0, [sp, #8]462; NONEON-NOSVE-NEXT: str d0, [x8]463; NONEON-NOSVE-NEXT: add sp, sp, #16464; NONEON-NOSVE-NEXT: ret465 %1 = insertelement <8 x i8> poison, i8 %a, i64 0466 %2 = insertelement <8 x i8> %1, i8 %b, i64 1467 %3 = insertelement <8 x i8> %2, i8 %c, i64 2468 %4 = insertelement <8 x i8> %3, i8 %d, i64 3469 %5 = insertelement <8 x i8> %4, i8 %e, i64 4470 %6 = insertelement <8 x i8> %5, i8 %f, i64 5471 %7 = insertelement <8 x i8> %6, i8 %g, i64 6472 %8 = insertelement <8 x i8> %7, i8 %h, i64 7473 store <8 x i8> %8, ptr %out474 ret void475}476