1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s 3; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE 4 5target triple = "aarch64-unknown-linux-gnu" 6 7; 8; insertelement 9; 10 11; i8 12define <4 x i8> @insertelement_v4i8(<4 x i8> %op1) { 13; CHECK-LABEL: insertelement_v4i8: 14; CHECK: // %bb.0: 15; CHECK-NEXT: mov w8, #3 // =0x3 16; CHECK-NEXT: index z1.h, #0, #1 17; CHECK-NEXT: ptrue p0.h 18; CHECK-NEXT: mov z2.h, w8 19; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 20; CHECK-NEXT: mov w8, #5 // =0x5 21; CHECK-NEXT: cmpeq p0.h, p0/z, z1.h, z2.h 22; CHECK-NEXT: mov z0.h, p0/m, w8 23; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 24; CHECK-NEXT: ret 25; 26; NONEON-NOSVE-LABEL: insertelement_v4i8: 27; NONEON-NOSVE: // %bb.0: 28; NONEON-NOSVE-NEXT: sub sp, sp, #32 29; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 30; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 31; NONEON-NOSVE-NEXT: str d0, [sp] 32; NONEON-NOSVE-NEXT: strh w8, [sp, #24] 33; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4] 34; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 35; NONEON-NOSVE-NEXT: strh w8, [sp, #20] 36; NONEON-NOSVE-NEXT: ldr w8, [sp] 37; NONEON-NOSVE-NEXT: str d0, [sp, #8] 38; NONEON-NOSVE-NEXT: str w8, [sp, #16] 39; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8] 40; NONEON-NOSVE-NEXT: strh w8, [sp, #22] 41; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 42; NONEON-NOSVE-NEXT: add sp, sp, #32 43; NONEON-NOSVE-NEXT: ret 44 %r = insertelement <4 x i8> %op1, i8 5, i64 3 45 ret <4 x i8> %r 46} 47 48define <8 x i8> @insertelement_v8i8(<8 x i8> %op1) { 49; CHECK-LABEL: insertelement_v8i8: 50; CHECK: // %bb.0: 51; CHECK-NEXT: mov w8, #7 // =0x7 52; CHECK-NEXT: index z1.b, #0, #1 53; CHECK-NEXT: ptrue p0.b 54; CHECK-NEXT: mov z2.b, w8 55; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 56; CHECK-NEXT: mov w8, #5 // =0x5 57; CHECK-NEXT: cmpeq p0.b, p0/z, z1.b, z2.b 58; CHECK-NEXT: mov z0.b, p0/m, w8 59; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 60; CHECK-NEXT: ret 61; 62; NONEON-NOSVE-LABEL: insertelement_v8i8: 63; NONEON-NOSVE: // %bb.0: 64; NONEON-NOSVE-NEXT: sub sp, sp, #32 65; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 66; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 67; NONEON-NOSVE-NEXT: str d0, [sp] 68; NONEON-NOSVE-NEXT: strb w8, [sp, #24] 69; NONEON-NOSVE-NEXT: ldrb w8, [sp, #6] 70; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 71; NONEON-NOSVE-NEXT: strb w8, [sp, #22] 72; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4] 73; NONEON-NOSVE-NEXT: str d0, [sp, #8] 74; NONEON-NOSVE-NEXT: strh w8, [sp, #20] 75; NONEON-NOSVE-NEXT: ldr w8, [sp] 76; NONEON-NOSVE-NEXT: str w8, [sp, #16] 77; NONEON-NOSVE-NEXT: ldrb w8, [sp, #8] 78; NONEON-NOSVE-NEXT: strb w8, [sp, #23] 79; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 80; NONEON-NOSVE-NEXT: add sp, sp, #32 81; NONEON-NOSVE-NEXT: ret 82 %r = insertelement <8 x i8> %op1, i8 5, i64 7 83 ret <8 x i8> %r 84} 85 86define <16 x i8> @insertelement_v16i8(<16 x i8> %op1) { 87; CHECK-LABEL: insertelement_v16i8: 88; CHECK: // %bb.0: 89; CHECK-NEXT: mov w8, #15 // =0xf 90; CHECK-NEXT: index z1.b, #0, #1 91; CHECK-NEXT: ptrue p0.b 92; CHECK-NEXT: mov z2.b, w8 93; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 94; CHECK-NEXT: mov w8, #5 // =0x5 95; CHECK-NEXT: cmpeq p0.b, p0/z, z1.b, z2.b 96; CHECK-NEXT: mov z0.b, p0/m, w8 97; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 98; CHECK-NEXT: ret 99; 100; NONEON-NOSVE-LABEL: insertelement_v16i8: 101; NONEON-NOSVE: // %bb.0: 102; NONEON-NOSVE-NEXT: sub sp, sp, #64 103; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 104; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 105; NONEON-NOSVE-NEXT: str q0, [sp] 106; NONEON-NOSVE-NEXT: strb w8, [sp, #48] 107; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14] 108; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 109; NONEON-NOSVE-NEXT: strb w8, [sp, #46] 110; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 111; NONEON-NOSVE-NEXT: str q0, [sp, #16] 112; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 113; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 114; NONEON-NOSVE-NEXT: str w8, [sp, #40] 115; NONEON-NOSVE-NEXT: ldr x8, [sp] 116; NONEON-NOSVE-NEXT: str x8, [sp, #32] 117; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16] 118; NONEON-NOSVE-NEXT: strb w8, [sp, #47] 119; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 120; NONEON-NOSVE-NEXT: add sp, sp, #64 121; NONEON-NOSVE-NEXT: ret 122 %r = insertelement <16 x i8> %op1, i8 5, i64 15 123 ret <16 x i8> %r 124} 125 126define <32 x i8> @insertelement_v32i8(<32 x i8> %op1) { 127; CHECK-LABEL: insertelement_v32i8: 128; CHECK: // %bb.0: 129; CHECK-NEXT: mov w8, #15 // =0xf 130; CHECK-NEXT: index z2.b, #0, #1 131; CHECK-NEXT: ptrue p0.b 132; CHECK-NEXT: mov z3.b, w8 133; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1 134; CHECK-NEXT: mov w8, #5 // =0x5 135; CHECK-NEXT: cmpeq p0.b, p0/z, z2.b, z3.b 136; CHECK-NEXT: mov z1.b, p0/m, w8 137; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 138; CHECK-NEXT: ret 139; 140; NONEON-NOSVE-LABEL: insertelement_v32i8: 141; NONEON-NOSVE: // %bb.0: 142; NONEON-NOSVE-NEXT: sub sp, sp, #64 143; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 144; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 145; NONEON-NOSVE-NEXT: str q1, [sp] 146; NONEON-NOSVE-NEXT: strb w8, [sp, #48] 147; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14] 148; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 149; NONEON-NOSVE-NEXT: strb w8, [sp, #46] 150; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 151; NONEON-NOSVE-NEXT: str q1, [sp, #16] 152; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 153; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 154; NONEON-NOSVE-NEXT: str w8, [sp, #40] 155; NONEON-NOSVE-NEXT: ldr x8, [sp] 156; NONEON-NOSVE-NEXT: str x8, [sp, #32] 157; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16] 158; NONEON-NOSVE-NEXT: strb w8, [sp, #47] 159; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 160; NONEON-NOSVE-NEXT: add sp, sp, #64 161; NONEON-NOSVE-NEXT: ret 162 %r = insertelement <32 x i8> %op1, i8 5, i64 31 163 ret <32 x i8> %r 164} 165 166; i16 167define <2 x i16> @insertelement_v2i16(<2 x i16> %op1) { 168; CHECK-LABEL: insertelement_v2i16: 169; CHECK: // %bb.0: 170; CHECK-NEXT: mov w8, #1 // =0x1 171; CHECK-NEXT: index z1.s, #0, #1 172; CHECK-NEXT: ptrue p0.s 173; CHECK-NEXT: mov z2.s, w8 174; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 175; CHECK-NEXT: mov w8, #5 // =0x5 176; CHECK-NEXT: cmpeq p0.s, p0/z, z1.s, z2.s 177; CHECK-NEXT: mov z0.s, p0/m, w8 178; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 179; CHECK-NEXT: ret 180; 181; NONEON-NOSVE-LABEL: insertelement_v2i16: 182; NONEON-NOSVE: // %bb.0: 183; NONEON-NOSVE-NEXT: sub sp, sp, #32 184; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 185; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 186; NONEON-NOSVE-NEXT: str d0, [sp] 187; NONEON-NOSVE-NEXT: str w8, [sp, #24] 188; NONEON-NOSVE-NEXT: ldr w9, [sp] 189; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 190; NONEON-NOSVE-NEXT: str d0, [sp, #8] 191; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 192; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #16] 193; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 194; NONEON-NOSVE-NEXT: add sp, sp, #32 195; NONEON-NOSVE-NEXT: ret 196 %r = insertelement <2 x i16> %op1, i16 5, i64 1 197 ret <2 x i16> %r 198} 199 200define <4 x i16> @insertelement_v4i16(<4 x i16> %op1) { 201; CHECK-LABEL: insertelement_v4i16: 202; CHECK: // %bb.0: 203; CHECK-NEXT: mov w8, #3 // =0x3 204; CHECK-NEXT: index z1.h, #0, #1 205; CHECK-NEXT: ptrue p0.h 206; CHECK-NEXT: mov z2.h, w8 207; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 208; CHECK-NEXT: mov w8, #5 // =0x5 209; CHECK-NEXT: cmpeq p0.h, p0/z, z1.h, z2.h 210; CHECK-NEXT: mov z0.h, p0/m, w8 211; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 212; CHECK-NEXT: ret 213; 214; NONEON-NOSVE-LABEL: insertelement_v4i16: 215; NONEON-NOSVE: // %bb.0: 216; NONEON-NOSVE-NEXT: sub sp, sp, #32 217; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 218; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 219; NONEON-NOSVE-NEXT: str d0, [sp] 220; NONEON-NOSVE-NEXT: strh w8, [sp, #24] 221; NONEON-NOSVE-NEXT: ldrh w8, [sp, #4] 222; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 223; NONEON-NOSVE-NEXT: strh w8, [sp, #20] 224; NONEON-NOSVE-NEXT: ldr w8, [sp] 225; NONEON-NOSVE-NEXT: str d0, [sp, #8] 226; NONEON-NOSVE-NEXT: str w8, [sp, #16] 227; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8] 228; NONEON-NOSVE-NEXT: strh w8, [sp, #22] 229; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 230; NONEON-NOSVE-NEXT: add sp, sp, #32 231; NONEON-NOSVE-NEXT: ret 232 %r = insertelement <4 x i16> %op1, i16 5, i64 3 233 ret <4 x i16> %r 234} 235 236define <8 x i16> @insertelement_v8i16(<8 x i16> %op1) { 237; CHECK-LABEL: insertelement_v8i16: 238; CHECK: // %bb.0: 239; CHECK-NEXT: mov w8, #7 // =0x7 240; CHECK-NEXT: index z1.h, #0, #1 241; CHECK-NEXT: ptrue p0.h 242; CHECK-NEXT: mov z2.h, w8 243; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 244; CHECK-NEXT: mov w8, #5 // =0x5 245; CHECK-NEXT: cmpeq p0.h, p0/z, z1.h, z2.h 246; CHECK-NEXT: mov z0.h, p0/m, w8 247; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 248; CHECK-NEXT: ret 249; 250; NONEON-NOSVE-LABEL: insertelement_v8i16: 251; NONEON-NOSVE: // %bb.0: 252; NONEON-NOSVE-NEXT: sub sp, sp, #64 253; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 254; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 255; NONEON-NOSVE-NEXT: str q0, [sp] 256; NONEON-NOSVE-NEXT: strh w8, [sp, #48] 257; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 258; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 259; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 260; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 261; NONEON-NOSVE-NEXT: str q0, [sp, #16] 262; NONEON-NOSVE-NEXT: str w8, [sp, #40] 263; NONEON-NOSVE-NEXT: ldr x8, [sp] 264; NONEON-NOSVE-NEXT: str x8, [sp, #32] 265; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16] 266; NONEON-NOSVE-NEXT: strh w8, [sp, #46] 267; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 268; NONEON-NOSVE-NEXT: add sp, sp, #64 269; NONEON-NOSVE-NEXT: ret 270 %r = insertelement <8 x i16> %op1, i16 5, i64 7 271 ret <8 x i16> %r 272} 273 274define <16 x i16> @insertelement_v16i16(<16 x i16> %op1) { 275; CHECK-LABEL: insertelement_v16i16: 276; CHECK: // %bb.0: 277; CHECK-NEXT: mov w8, #7 // =0x7 278; CHECK-NEXT: index z2.h, #0, #1 279; CHECK-NEXT: ptrue p0.h 280; CHECK-NEXT: mov z3.h, w8 281; CHECK-NEXT: // kill: def $q1 killed $q1 def $z1 282; CHECK-NEXT: mov w8, #5 // =0x5 283; CHECK-NEXT: cmpeq p0.h, p0/z, z2.h, z3.h 284; CHECK-NEXT: mov z1.h, p0/m, w8 285; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 286; CHECK-NEXT: ret 287; 288; NONEON-NOSVE-LABEL: insertelement_v16i16: 289; NONEON-NOSVE: // %bb.0: 290; NONEON-NOSVE-NEXT: sub sp, sp, #64 291; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 292; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 293; NONEON-NOSVE-NEXT: str q1, [sp] 294; NONEON-NOSVE-NEXT: strh w8, [sp, #48] 295; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 296; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 297; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 298; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 299; NONEON-NOSVE-NEXT: str q1, [sp, #16] 300; NONEON-NOSVE-NEXT: str w8, [sp, #40] 301; NONEON-NOSVE-NEXT: ldr x8, [sp] 302; NONEON-NOSVE-NEXT: str x8, [sp, #32] 303; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16] 304; NONEON-NOSVE-NEXT: strh w8, [sp, #46] 305; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 306; NONEON-NOSVE-NEXT: add sp, sp, #64 307; NONEON-NOSVE-NEXT: ret 308 %r = insertelement <16 x i16> %op1, i16 5, i64 15 309 ret <16 x i16> %r 310} 311 312;i32 313define <2 x i32> @insertelement_v2i32(<2 x i32> %op1) { 314; CHECK-LABEL: insertelement_v2i32: 315; CHECK: // %bb.0: 316; CHECK-NEXT: mov w8, #1 // =0x1 317; CHECK-NEXT: index z1.s, #0, #1 318; CHECK-NEXT: ptrue p0.s 319; CHECK-NEXT: mov z2.s, w8 320; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 321; CHECK-NEXT: mov w8, #5 // =0x5 322; CHECK-NEXT: cmpeq p0.s, p0/z, z1.s, z2.s 323; CHECK-NEXT: mov z0.s, p0/m, w8 324; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 325; CHECK-NEXT: ret 326; 327; NONEON-NOSVE-LABEL: insertelement_v2i32: 328; NONEON-NOSVE: // %bb.0: 329; NONEON-NOSVE-NEXT: sub sp, sp, #32 330; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 331; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 332; NONEON-NOSVE-NEXT: str d0, [sp] 333; NONEON-NOSVE-NEXT: str w8, [sp, #24] 334; NONEON-NOSVE-NEXT: ldr w9, [sp] 335; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 336; NONEON-NOSVE-NEXT: str d0, [sp, #8] 337; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 338; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #16] 339; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 340; NONEON-NOSVE-NEXT: add sp, sp, #32 341; NONEON-NOSVE-NEXT: ret 342 %r = insertelement <2 x i32> %op1, i32 5, i64 1 343 ret <2 x i32> %r 344} 345 346define <4 x i32> @insertelement_v4i32(<4 x i32> %op1) { 347; CHECK-LABEL: insertelement_v4i32: 348; CHECK: // %bb.0: 349; CHECK-NEXT: mov w8, #3 // =0x3 350; CHECK-NEXT: index z1.s, #0, #1 351; CHECK-NEXT: ptrue p0.s 352; CHECK-NEXT: mov z2.s, w8 353; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 354; CHECK-NEXT: mov w8, #5 // =0x5 355; CHECK-NEXT: cmpeq p0.s, p0/z, z1.s, z2.s 356; CHECK-NEXT: mov z0.s, p0/m, w8 357; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 358; CHECK-NEXT: ret 359; 360; NONEON-NOSVE-LABEL: insertelement_v4i32: 361; NONEON-NOSVE: // %bb.0: 362; NONEON-NOSVE-NEXT: sub sp, sp, #64 363; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 364; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 365; NONEON-NOSVE-NEXT: str q0, [sp] 366; NONEON-NOSVE-NEXT: str w8, [sp, #48] 367; NONEON-NOSVE-NEXT: ldr x8, [sp] 368; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] 369; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 370; NONEON-NOSVE-NEXT: str x8, [sp, #32] 371; NONEON-NOSVE-NEXT: str q0, [sp, #16] 372; NONEON-NOSVE-NEXT: ldr w8, [sp, #16] 373; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #40] 374; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 375; NONEON-NOSVE-NEXT: add sp, sp, #64 376; NONEON-NOSVE-NEXT: ret 377 %r = insertelement <4 x i32> %op1, i32 5, i64 3 378 ret <4 x i32> %r 379} 380 381define <8 x i32> @insertelement_v8i32(ptr %a) { 382; CHECK-LABEL: insertelement_v8i32: 383; CHECK: // %bb.0: 384; CHECK-NEXT: mov w8, #3 // =0x3 385; CHECK-NEXT: index z0.s, #0, #1 386; CHECK-NEXT: ptrue p0.s 387; CHECK-NEXT: mov z1.s, w8 388; CHECK-NEXT: mov w8, #5 // =0x5 389; CHECK-NEXT: cmpeq p0.s, p0/z, z0.s, z1.s 390; CHECK-NEXT: ldp q0, q1, [x0] 391; CHECK-NEXT: mov z1.s, p0/m, w8 392; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 393; CHECK-NEXT: ret 394; 395; NONEON-NOSVE-LABEL: insertelement_v8i32: 396; NONEON-NOSVE: // %bb.0: 397; NONEON-NOSVE-NEXT: sub sp, sp, #64 398; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 399; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 400; NONEON-NOSVE-NEXT: ldp q0, q2, [x0] 401; NONEON-NOSVE-NEXT: str w8, [sp, #48] 402; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 403; NONEON-NOSVE-NEXT: stp q2, q1, [sp] 404; NONEON-NOSVE-NEXT: ldr x8, [sp] 405; NONEON-NOSVE-NEXT: ldr w9, [sp, #8] 406; NONEON-NOSVE-NEXT: str x8, [sp, #32] 407; NONEON-NOSVE-NEXT: ldr w8, [sp, #16] 408; NONEON-NOSVE-NEXT: stp w9, w8, [sp, #40] 409; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 410; NONEON-NOSVE-NEXT: add sp, sp, #64 411; NONEON-NOSVE-NEXT: ret 412 %op1 = load <8 x i32>, ptr %a 413 %r = insertelement <8 x i32> %op1, i32 5, i64 7 414 ret <8 x i32> %r 415} 416 417;i64 418define <1 x i64> @insertelement_v1i64(<1 x i64> %op1) { 419; CHECK-LABEL: insertelement_v1i64: 420; CHECK: // %bb.0: 421; CHECK-NEXT: mov z0.d, #5 // =0x5 422; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 423; CHECK-NEXT: ret 424; 425; NONEON-NOSVE-LABEL: insertelement_v1i64: 426; NONEON-NOSVE: // %bb.0: 427; NONEON-NOSVE-NEXT: sub sp, sp, #16 428; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16 429; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 430; NONEON-NOSVE-NEXT: str x8, [sp, #8] 431; NONEON-NOSVE-NEXT: ldr d0, [sp, #8] 432; NONEON-NOSVE-NEXT: add sp, sp, #16 433; NONEON-NOSVE-NEXT: ret 434 %r = insertelement <1 x i64> %op1, i64 5, i64 0 435 ret <1 x i64> %r 436} 437 438define <2 x i64> @insertelement_v2i64(<2 x i64> %op1) { 439; CHECK-LABEL: insertelement_v2i64: 440; CHECK: // %bb.0: 441; CHECK-NEXT: mov w8, #1 // =0x1 442; CHECK-NEXT: index z1.d, #0, #1 443; CHECK-NEXT: ptrue p0.d 444; CHECK-NEXT: mov z2.d, x8 445; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 446; CHECK-NEXT: mov w8, #5 // =0x5 447; CHECK-NEXT: cmpeq p0.d, p0/z, z1.d, z2.d 448; CHECK-NEXT: mov z0.d, p0/m, x8 449; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 450; CHECK-NEXT: ret 451; 452; NONEON-NOSVE-LABEL: insertelement_v2i64: 453; NONEON-NOSVE: // %bb.0: 454; NONEON-NOSVE-NEXT: sub sp, sp, #64 455; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 456; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 457; NONEON-NOSVE-NEXT: str q0, [sp] 458; NONEON-NOSVE-NEXT: str x8, [sp, #48] 459; NONEON-NOSVE-NEXT: ldr x9, [sp] 460; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 461; NONEON-NOSVE-NEXT: str q0, [sp, #16] 462; NONEON-NOSVE-NEXT: ldr x8, [sp, #16] 463; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #32] 464; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 465; NONEON-NOSVE-NEXT: add sp, sp, #64 466; NONEON-NOSVE-NEXT: ret 467 %r = insertelement <2 x i64> %op1, i64 5, i64 1 468 ret <2 x i64> %r 469} 470 471define <4 x i64> @insertelement_v4i64(ptr %a) { 472; CHECK-LABEL: insertelement_v4i64: 473; CHECK: // %bb.0: 474; CHECK-NEXT: mov w8, #1 // =0x1 475; CHECK-NEXT: index z0.d, #0, #1 476; CHECK-NEXT: ptrue p0.d 477; CHECK-NEXT: mov z1.d, x8 478; CHECK-NEXT: mov w8, #5 // =0x5 479; CHECK-NEXT: cmpeq p0.d, p0/z, z0.d, z1.d 480; CHECK-NEXT: ldp q0, q1, [x0] 481; CHECK-NEXT: mov z1.d, p0/m, x8 482; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 483; CHECK-NEXT: ret 484; 485; NONEON-NOSVE-LABEL: insertelement_v4i64: 486; NONEON-NOSVE: // %bb.0: 487; NONEON-NOSVE-NEXT: sub sp, sp, #64 488; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 489; NONEON-NOSVE-NEXT: mov w8, #5 // =0x5 490; NONEON-NOSVE-NEXT: ldp q0, q2, [x0] 491; NONEON-NOSVE-NEXT: str x8, [sp, #48] 492; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 493; NONEON-NOSVE-NEXT: stp q2, q1, [sp] 494; NONEON-NOSVE-NEXT: ldr x9, [sp] 495; NONEON-NOSVE-NEXT: ldr x8, [sp, #16] 496; NONEON-NOSVE-NEXT: stp x9, x8, [sp, #32] 497; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 498; NONEON-NOSVE-NEXT: add sp, sp, #64 499; NONEON-NOSVE-NEXT: ret 500 %op1 = load <4 x i64>, ptr %a 501 %r = insertelement <4 x i64> %op1, i64 5, i64 3 502 ret <4 x i64> %r 503} 504 505;f16 506define <2 x half> @insertelement_v2f16(<2 x half> %op1) { 507; CHECK-LABEL: insertelement_v2f16: 508; CHECK: // %bb.0: 509; CHECK-NEXT: fmov h1, #5.00000000 510; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 511; CHECK-NEXT: zip1 z0.h, z0.h, z1.h 512; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 513; CHECK-NEXT: ret 514; 515; NONEON-NOSVE-LABEL: insertelement_v2f16: 516; NONEON-NOSVE: // %bb.0: 517; NONEON-NOSVE-NEXT: str d0, [sp, #-16]! 518; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16 519; NONEON-NOSVE-NEXT: adrp x8, .LCPI14_0 520; NONEON-NOSVE-NEXT: ldr h1, [sp] 521; NONEON-NOSVE-NEXT: ldr h0, [x8, :lo12:.LCPI14_0] 522; NONEON-NOSVE-NEXT: str h1, [sp, #8] 523; NONEON-NOSVE-NEXT: str h0, [sp, #10] 524; NONEON-NOSVE-NEXT: ldr d0, [sp, #8] 525; NONEON-NOSVE-NEXT: add sp, sp, #16 526; NONEON-NOSVE-NEXT: ret 527 %r = insertelement <2 x half> %op1, half 5.0, i64 1 528 ret <2 x half> %r 529} 530 531define <4 x half> @insertelement_v4f16(<4 x half> %op1) { 532; CHECK-LABEL: insertelement_v4f16: 533; CHECK: // %bb.0: 534; CHECK-NEXT: mov w8, #3 // =0x3 535; CHECK-NEXT: index z1.h, #0, #1 536; CHECK-NEXT: ptrue p0.h 537; CHECK-NEXT: mov z2.h, w8 538; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 539; CHECK-NEXT: cmpeq p0.h, p0/z, z1.h, z2.h 540; CHECK-NEXT: fmov h1, #5.00000000 541; CHECK-NEXT: mov z0.h, p0/m, h1 542; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 543; CHECK-NEXT: ret 544; 545; NONEON-NOSVE-LABEL: insertelement_v4f16: 546; NONEON-NOSVE: // %bb.0: 547; NONEON-NOSVE-NEXT: sub sp, sp, #32 548; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 549; NONEON-NOSVE-NEXT: adrp x8, .LCPI15_0 550; NONEON-NOSVE-NEXT: str d0, [sp] 551; NONEON-NOSVE-NEXT: ldr h1, [x8, :lo12:.LCPI15_0] 552; NONEON-NOSVE-NEXT: ldr w8, [sp] 553; NONEON-NOSVE-NEXT: str h1, [sp, #24] 554; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 555; NONEON-NOSVE-NEXT: str w8, [sp, #16] 556; NONEON-NOSVE-NEXT: str d0, [sp, #8] 557; NONEON-NOSVE-NEXT: ldr h0, [sp, #4] 558; NONEON-NOSVE-NEXT: str h0, [sp, #20] 559; NONEON-NOSVE-NEXT: ldr h0, [sp, #8] 560; NONEON-NOSVE-NEXT: str h0, [sp, #22] 561; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 562; NONEON-NOSVE-NEXT: add sp, sp, #32 563; NONEON-NOSVE-NEXT: ret 564 %r = insertelement <4 x half> %op1, half 5.0, i64 3 565 ret <4 x half> %r 566} 567 568define <8 x half> @insertelement_v8f16(<8 x half> %op1) { 569; CHECK-LABEL: insertelement_v8f16: 570; CHECK: // %bb.0: 571; CHECK-NEXT: mov w8, #7 // =0x7 572; CHECK-NEXT: index z1.h, #0, #1 573; CHECK-NEXT: ptrue p0.h 574; CHECK-NEXT: mov z2.h, w8 575; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 576; CHECK-NEXT: cmpeq p0.h, p0/z, z1.h, z2.h 577; CHECK-NEXT: fmov h1, #5.00000000 578; CHECK-NEXT: mov z0.h, p0/m, h1 579; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 580; CHECK-NEXT: ret 581; 582; NONEON-NOSVE-LABEL: insertelement_v8f16: 583; NONEON-NOSVE: // %bb.0: 584; NONEON-NOSVE-NEXT: sub sp, sp, #64 585; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 586; NONEON-NOSVE-NEXT: adrp x8, .LCPI16_0 587; NONEON-NOSVE-NEXT: str q0, [sp] 588; NONEON-NOSVE-NEXT: ldr h1, [x8, :lo12:.LCPI16_0] 589; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 590; NONEON-NOSVE-NEXT: str h1, [sp, #48] 591; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 592; NONEON-NOSVE-NEXT: str w8, [sp, #40] 593; NONEON-NOSVE-NEXT: ldr x8, [sp] 594; NONEON-NOSVE-NEXT: str q0, [sp, #16] 595; NONEON-NOSVE-NEXT: ldr h0, [sp, #12] 596; NONEON-NOSVE-NEXT: str x8, [sp, #32] 597; NONEON-NOSVE-NEXT: str h0, [sp, #44] 598; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 599; NONEON-NOSVE-NEXT: str h0, [sp, #46] 600; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 601; NONEON-NOSVE-NEXT: add sp, sp, #64 602; NONEON-NOSVE-NEXT: ret 603 %r = insertelement <8 x half> %op1, half 5.0, i64 7 604 ret <8 x half> %r 605} 606 607define <16 x half> @insertelement_v16f16(ptr %a) { 608; CHECK-LABEL: insertelement_v16f16: 609; CHECK: // %bb.0: 610; CHECK-NEXT: mov w8, #7 // =0x7 611; CHECK-NEXT: index z0.h, #0, #1 612; CHECK-NEXT: ptrue p0.h 613; CHECK-NEXT: mov z1.h, w8 614; CHECK-NEXT: fmov h2, #5.00000000 615; CHECK-NEXT: cmpeq p0.h, p0/z, z0.h, z1.h 616; CHECK-NEXT: ldp q0, q1, [x0] 617; CHECK-NEXT: mov z1.h, p0/m, h2 618; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 619; CHECK-NEXT: ret 620; 621; NONEON-NOSVE-LABEL: insertelement_v16f16: 622; NONEON-NOSVE: // %bb.0: 623; NONEON-NOSVE-NEXT: sub sp, sp, #64 624; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 625; NONEON-NOSVE-NEXT: adrp x8, .LCPI17_0 626; NONEON-NOSVE-NEXT: ldp q0, q2, [x0] 627; NONEON-NOSVE-NEXT: ldr h1, [x8, :lo12:.LCPI17_0] 628; NONEON-NOSVE-NEXT: str h1, [sp, #48] 629; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 630; NONEON-NOSVE-NEXT: stp q2, q1, [sp] 631; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 632; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 633; NONEON-NOSVE-NEXT: str h1, [sp, #44] 634; NONEON-NOSVE-NEXT: ldr h1, [sp, #16] 635; NONEON-NOSVE-NEXT: str w8, [sp, #40] 636; NONEON-NOSVE-NEXT: ldr x8, [sp] 637; NONEON-NOSVE-NEXT: str h1, [sp, #46] 638; NONEON-NOSVE-NEXT: str x8, [sp, #32] 639; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 640; NONEON-NOSVE-NEXT: add sp, sp, #64 641; NONEON-NOSVE-NEXT: ret 642 %op1 = load <16 x half>, ptr %a 643 %r = insertelement <16 x half> %op1, half 5.0, i64 15 644 ret <16 x half> %r 645} 646 647;f32 648define <2 x float> @insertelement_v2f32(<2 x float> %op1) { 649; CHECK-LABEL: insertelement_v2f32: 650; CHECK: // %bb.0: 651; CHECK-NEXT: mov w8, #1 // =0x1 652; CHECK-NEXT: index z1.s, #0, #1 653; CHECK-NEXT: ptrue p0.s 654; CHECK-NEXT: mov z2.s, w8 655; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 656; CHECK-NEXT: cmpeq p0.s, p0/z, z1.s, z2.s 657; CHECK-NEXT: fmov s1, #5.00000000 658; CHECK-NEXT: mov z0.s, p0/m, s1 659; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 660; CHECK-NEXT: ret 661; 662; NONEON-NOSVE-LABEL: insertelement_v2f32: 663; NONEON-NOSVE: // %bb.0: 664; NONEON-NOSVE-NEXT: sub sp, sp, #32 665; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 32 666; NONEON-NOSVE-NEXT: mov w8, #1084227584 // =0x40a00000 667; NONEON-NOSVE-NEXT: str d0, [sp] 668; NONEON-NOSVE-NEXT: str w8, [sp, #24] 669; NONEON-NOSVE-NEXT: ldr s1, [sp] 670; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 671; NONEON-NOSVE-NEXT: str d0, [sp, #8] 672; NONEON-NOSVE-NEXT: ldr s0, [sp, #8] 673; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #16] 674; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 675; NONEON-NOSVE-NEXT: add sp, sp, #32 676; NONEON-NOSVE-NEXT: ret 677 %r = insertelement <2 x float> %op1, float 5.0, i64 1 678 ret <2 x float> %r 679} 680 681define <4 x float> @insertelement_v4f32(<4 x float> %op1) { 682; CHECK-LABEL: insertelement_v4f32: 683; CHECK: // %bb.0: 684; CHECK-NEXT: mov w8, #3 // =0x3 685; CHECK-NEXT: index z1.s, #0, #1 686; CHECK-NEXT: ptrue p0.s 687; CHECK-NEXT: mov z2.s, w8 688; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 689; CHECK-NEXT: cmpeq p0.s, p0/z, z1.s, z2.s 690; CHECK-NEXT: fmov s1, #5.00000000 691; CHECK-NEXT: mov z0.s, p0/m, s1 692; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 693; CHECK-NEXT: ret 694; 695; NONEON-NOSVE-LABEL: insertelement_v4f32: 696; NONEON-NOSVE: // %bb.0: 697; NONEON-NOSVE-NEXT: sub sp, sp, #64 698; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 699; NONEON-NOSVE-NEXT: mov w8, #1084227584 // =0x40a00000 700; NONEON-NOSVE-NEXT: str q0, [sp] 701; NONEON-NOSVE-NEXT: str w8, [sp, #48] 702; NONEON-NOSVE-NEXT: ldr s1, [sp, #8] 703; NONEON-NOSVE-NEXT: ldr x8, [sp] 704; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 705; NONEON-NOSVE-NEXT: str x8, [sp, #32] 706; NONEON-NOSVE-NEXT: str q0, [sp, #16] 707; NONEON-NOSVE-NEXT: ldr s0, [sp, #16] 708; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #40] 709; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 710; NONEON-NOSVE-NEXT: add sp, sp, #64 711; NONEON-NOSVE-NEXT: ret 712 %r = insertelement <4 x float> %op1, float 5.0, i64 3 713 ret <4 x float> %r 714} 715 716define <8 x float> @insertelement_v8f32(ptr %a) { 717; CHECK-LABEL: insertelement_v8f32: 718; CHECK: // %bb.0: 719; CHECK-NEXT: mov w8, #3 // =0x3 720; CHECK-NEXT: index z0.s, #0, #1 721; CHECK-NEXT: ptrue p0.s 722; CHECK-NEXT: mov z1.s, w8 723; CHECK-NEXT: fmov s2, #5.00000000 724; CHECK-NEXT: cmpeq p0.s, p0/z, z0.s, z1.s 725; CHECK-NEXT: ldp q0, q1, [x0] 726; CHECK-NEXT: mov z1.s, p0/m, s2 727; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 728; CHECK-NEXT: ret 729; 730; NONEON-NOSVE-LABEL: insertelement_v8f32: 731; NONEON-NOSVE: // %bb.0: 732; NONEON-NOSVE-NEXT: sub sp, sp, #64 733; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 734; NONEON-NOSVE-NEXT: mov w8, #1084227584 // =0x40a00000 735; NONEON-NOSVE-NEXT: ldr q1, [x0, #16] 736; NONEON-NOSVE-NEXT: str w8, [sp, #48] 737; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 738; NONEON-NOSVE-NEXT: stp q1, q0, [sp] 739; NONEON-NOSVE-NEXT: ldr s1, [sp, #8] 740; NONEON-NOSVE-NEXT: ldr x8, [sp] 741; NONEON-NOSVE-NEXT: ldr s0, [sp, #16] 742; NONEON-NOSVE-NEXT: str x8, [sp, #32] 743; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #40] 744; NONEON-NOSVE-NEXT: ldr q0, [x0] 745; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 746; NONEON-NOSVE-NEXT: add sp, sp, #64 747; NONEON-NOSVE-NEXT: ret 748 %op1 = load <8 x float>, ptr %a 749 %r = insertelement <8 x float> %op1, float 5.0, i64 7 750 ret <8 x float> %r 751} 752 753;f64 754define <1 x double> @insertelement_v1f64(<1 x double> %op1) { 755; CHECK-LABEL: insertelement_v1f64: 756; CHECK: // %bb.0: 757; CHECK-NEXT: fmov d0, #5.00000000 758; CHECK-NEXT: ret 759; 760; NONEON-NOSVE-LABEL: insertelement_v1f64: 761; NONEON-NOSVE: // %bb.0: 762; NONEON-NOSVE-NEXT: sub sp, sp, #16 763; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16 764; NONEON-NOSVE-NEXT: mov x8, #4617315517961601024 // =0x4014000000000000 765; NONEON-NOSVE-NEXT: str x8, [sp, #8] 766; NONEON-NOSVE-NEXT: ldr d0, [sp, #8] 767; NONEON-NOSVE-NEXT: add sp, sp, #16 768; NONEON-NOSVE-NEXT: ret 769 %r = insertelement <1 x double> %op1, double 5.0, i64 0 770 ret <1 x double> %r 771} 772 773define <2 x double> @insertelement_v2f64(<2 x double> %op1) { 774; CHECK-LABEL: insertelement_v2f64: 775; CHECK: // %bb.0: 776; CHECK-NEXT: mov w8, #1 // =0x1 777; CHECK-NEXT: index z1.d, #0, #1 778; CHECK-NEXT: ptrue p0.d 779; CHECK-NEXT: mov z2.d, x8 780; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 781; CHECK-NEXT: cmpeq p0.d, p0/z, z1.d, z2.d 782; CHECK-NEXT: fmov d1, #5.00000000 783; CHECK-NEXT: mov z0.d, p0/m, d1 784; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 785; CHECK-NEXT: ret 786; 787; NONEON-NOSVE-LABEL: insertelement_v2f64: 788; NONEON-NOSVE: // %bb.0: 789; NONEON-NOSVE-NEXT: sub sp, sp, #64 790; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 791; NONEON-NOSVE-NEXT: mov x8, #4617315517961601024 // =0x4014000000000000 792; NONEON-NOSVE-NEXT: str q0, [sp] 793; NONEON-NOSVE-NEXT: str x8, [sp, #48] 794; NONEON-NOSVE-NEXT: ldr d1, [sp] 795; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 796; NONEON-NOSVE-NEXT: str q0, [sp, #16] 797; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 798; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #32] 799; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 800; NONEON-NOSVE-NEXT: add sp, sp, #64 801; NONEON-NOSVE-NEXT: ret 802 %r = insertelement <2 x double> %op1, double 5.0, i64 1 803 ret <2 x double> %r 804} 805 806define <4 x double> @insertelement_v4f64(ptr %a) { 807; CHECK-LABEL: insertelement_v4f64: 808; CHECK: // %bb.0: 809; CHECK-NEXT: mov w8, #1 // =0x1 810; CHECK-NEXT: index z0.d, #0, #1 811; CHECK-NEXT: ptrue p0.d 812; CHECK-NEXT: mov z1.d, x8 813; CHECK-NEXT: fmov d2, #5.00000000 814; CHECK-NEXT: cmpeq p0.d, p0/z, z0.d, z1.d 815; CHECK-NEXT: ldp q0, q1, [x0] 816; CHECK-NEXT: mov z1.d, p0/m, d2 817; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 818; CHECK-NEXT: ret 819; 820; NONEON-NOSVE-LABEL: insertelement_v4f64: 821; NONEON-NOSVE: // %bb.0: 822; NONEON-NOSVE-NEXT: sub sp, sp, #64 823; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 824; NONEON-NOSVE-NEXT: mov x8, #4617315517961601024 // =0x4014000000000000 825; NONEON-NOSVE-NEXT: ldr q1, [x0, #16] 826; NONEON-NOSVE-NEXT: str x8, [sp, #48] 827; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 828; NONEON-NOSVE-NEXT: stp q1, q0, [sp] 829; NONEON-NOSVE-NEXT: ldr d1, [sp] 830; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 831; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #32] 832; NONEON-NOSVE-NEXT: ldr q0, [x0] 833; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 834; NONEON-NOSVE-NEXT: add sp, sp, #64 835; NONEON-NOSVE-NEXT: ret 836 %op1 = load <4 x double>, ptr %a 837 %r = insertelement <4 x double> %op1, double 5.0, i64 3 838 ret <4 x double> %r 839} 840