1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 3; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P9LE 4; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 5; RUN: -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P9BE 6; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 7; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P8LE 8; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 9; RUN: -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P8BE 10 11; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 12; RUN: -mtriple=powerpc64-ibm-aix-xcoff< %s | FileCheck %s \ 13; RUN: --check-prefixes=AIX,P9-AIX,P9-AIX-64 14; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 15; RUN: -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck %s \ 16; RUN: --check-prefixes=AIX,P9-AIX,P9-AIX-32 17; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 18; RUN: -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck %s \ 19; RUN: --check-prefixes=AIX,P8-AIX-64 20; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 21; RUN: -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck %s \ 22; RUN: --check-prefixes=AIX,P8-AIX-32 23 24; Function Attrs: norecurse nounwind readonly 25define <4 x i32> @s2v_test1(i32* nocapture readonly %int32, <4 x i32> %vec) { 26; P9LE-LABEL: s2v_test1: 27; P9LE: # %bb.0: # %entry 28; P9LE-NEXT: lwz r3, 0(r3) 29; P9LE-NEXT: mtfprwz f0, r3 30; P9LE-NEXT: xxinsertw v2, vs0, 12 31; P9LE-NEXT: blr 32; 33; P9BE-LABEL: s2v_test1: 34; P9BE: # %bb.0: # %entry 35; P9BE-NEXT: lwz r3, 0(r3) 36; P9BE-NEXT: mtfprwz f0, r3 37; P9BE-NEXT: xxinsertw v2, vs0, 0 38; P9BE-NEXT: blr 39; 40; P8LE-LABEL: s2v_test1: 41; P8LE: # %bb.0: # %entry 42; P8LE-NEXT: addis r4, r2, .LCPI0_0@toc@ha 43; P8LE-NEXT: lxsiwzx v3, 0, r3 44; P8LE-NEXT: addi r4, r4, .LCPI0_0@toc@l 45; P8LE-NEXT: lxvd2x vs0, 0, r4 46; P8LE-NEXT: xxswapd v4, vs0 47; P8LE-NEXT: vperm v2, v2, v3, v4 48; P8LE-NEXT: blr 49; 50; P8BE-LABEL: s2v_test1: 51; P8BE: # %bb.0: # %entry 52; P8BE-NEXT: addis r4, r2, .LCPI0_0@toc@ha 53; P8BE-NEXT: lxsiwzx v4, 0, r3 54; P8BE-NEXT: addi r4, r4, .LCPI0_0@toc@l 55; P8BE-NEXT: lxvw4x v3, 0, r4 56; P8BE-NEXT: vperm v2, v4, v2, v3 57; P8BE-NEXT: blr 58; 59; P9-AIX-LABEL: s2v_test1: 60; P9-AIX: # %bb.0: # %entry 61; P9-AIX-NEXT: lwz r3, 0(r3) 62; P9-AIX-NEXT: mtfprwz f0, r3 63; P9-AIX-NEXT: xxinsertw v2, vs0, 0 64; P9-AIX-NEXT: blr 65; 66; P8-AIX-64-LABEL: s2v_test1: 67; P8-AIX-64: # %bb.0: # %entry 68; P8-AIX-64-NEXT: ld r4, L..C0(r2) # %const.0 69; P8-AIX-64-NEXT: lxsiwzx v3, 0, r3 70; P8-AIX-64-NEXT: lxvw4x v4, 0, r4 71; P8-AIX-64-NEXT: vperm v2, v3, v2, v4 72; P8-AIX-64-NEXT: blr 73; 74; P8-AIX-32-LABEL: s2v_test1: 75; P8-AIX-32: # %bb.0: # %entry 76; P8-AIX-32-NEXT: lwz r3, 0(r3) 77; P8-AIX-32-NEXT: lwz r4, L..C0(r2) # %const.0 78; P8-AIX-32-NEXT: stw r3, -16(r1) 79; P8-AIX-32-NEXT: addi r3, r1, -16 80; P8-AIX-32-NEXT: lxvw4x v3, 0, r4 81; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 82; P8-AIX-32-NEXT: vperm v2, v4, v2, v3 83; P8-AIX-32-NEXT: blr 84entry: 85 %0 = load i32, i32* %int32, align 4 86 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 87 ret <4 x i32> %vecins 88} 89 90; Function Attrs: norecurse nounwind readonly 91define <4 x i32> @s2v_test2(i32* nocapture readonly %int32, <4 x i32> %vec) { 92; P9LE-LABEL: s2v_test2: 93; P9LE: # %bb.0: # %entry 94; P9LE-NEXT: lwz r3, 4(r3) 95; P9LE-NEXT: mtfprwz f0, r3 96; P9LE-NEXT: xxinsertw v2, vs0, 12 97; P9LE-NEXT: blr 98; 99; P9BE-LABEL: s2v_test2: 100; P9BE: # %bb.0: # %entry 101; P9BE-NEXT: lwz r3, 4(r3) 102; P9BE-NEXT: mtfprwz f0, r3 103; P9BE-NEXT: xxinsertw v2, vs0, 0 104; P9BE-NEXT: blr 105; 106; P8LE-LABEL: s2v_test2: 107; P8LE: # %bb.0: # %entry 108; P8LE-NEXT: addis r4, r2, .LCPI1_0@toc@ha 109; P8LE-NEXT: addi r3, r3, 4 110; P8LE-NEXT: addi r4, r4, .LCPI1_0@toc@l 111; P8LE-NEXT: lxsiwzx v3, 0, r3 112; P8LE-NEXT: lxvd2x vs0, 0, r4 113; P8LE-NEXT: xxswapd v4, vs0 114; P8LE-NEXT: vperm v2, v2, v3, v4 115; P8LE-NEXT: blr 116; 117; P8BE-LABEL: s2v_test2: 118; P8BE: # %bb.0: # %entry 119; P8BE-NEXT: addis r4, r2, .LCPI1_0@toc@ha 120; P8BE-NEXT: addi r3, r3, 4 121; P8BE-NEXT: addi r4, r4, .LCPI1_0@toc@l 122; P8BE-NEXT: lxsiwzx v4, 0, r3 123; P8BE-NEXT: lxvw4x v3, 0, r4 124; P8BE-NEXT: vperm v2, v4, v2, v3 125; P8BE-NEXT: blr 126; 127; P9-AIX-LABEL: s2v_test2: 128; P9-AIX: # %bb.0: # %entry 129; P9-AIX-NEXT: lwz r3, 4(r3) 130; P9-AIX-NEXT: mtfprwz f0, r3 131; P9-AIX-NEXT: xxinsertw v2, vs0, 0 132; P9-AIX-NEXT: blr 133; 134; P8-AIX-64-LABEL: s2v_test2: 135; P8-AIX-64: # %bb.0: # %entry 136; P8-AIX-64-NEXT: ld r4, L..C1(r2) # %const.0 137; P8-AIX-64-NEXT: addi r3, r3, 4 138; P8-AIX-64-NEXT: lxsiwzx v3, 0, r3 139; P8-AIX-64-NEXT: lxvw4x v4, 0, r4 140; P8-AIX-64-NEXT: vperm v2, v3, v2, v4 141; P8-AIX-64-NEXT: blr 142; 143; P8-AIX-32-LABEL: s2v_test2: 144; P8-AIX-32: # %bb.0: # %entry 145; P8-AIX-32-NEXT: lwz r3, 4(r3) 146; P8-AIX-32-NEXT: lwz r4, L..C1(r2) # %const.0 147; P8-AIX-32-NEXT: stw r3, -16(r1) 148; P8-AIX-32-NEXT: addi r3, r1, -16 149; P8-AIX-32-NEXT: lxvw4x v3, 0, r4 150; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 151; P8-AIX-32-NEXT: vperm v2, v4, v2, v3 152; P8-AIX-32-NEXT: blr 153entry: 154 %arrayidx = getelementptr inbounds i32, i32* %int32, i64 1 155 %0 = load i32, i32* %arrayidx, align 4 156 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 157 ret <4 x i32> %vecins 158} 159 160; Function Attrs: norecurse nounwind readonly 161define <4 x i32> @s2v_test3(i32* nocapture readonly %int32, <4 x i32> %vec, i32 signext %Idx) { 162; P9LE-LABEL: s2v_test3: 163; P9LE: # %bb.0: # %entry 164; P9LE-NEXT: sldi r4, r7, 2 165; P9LE-NEXT: lwzx r3, r3, r4 166; P9LE-NEXT: mtfprwz f0, r3 167; P9LE-NEXT: xxinsertw v2, vs0, 12 168; P9LE-NEXT: blr 169; 170; P9BE-LABEL: s2v_test3: 171; P9BE: # %bb.0: # %entry 172; P9BE-NEXT: sldi r4, r7, 2 173; P9BE-NEXT: lwzx r3, r3, r4 174; P9BE-NEXT: mtfprwz f0, r3 175; P9BE-NEXT: xxinsertw v2, vs0, 0 176; P9BE-NEXT: blr 177; 178; P8LE-LABEL: s2v_test3: 179; P8LE: # %bb.0: # %entry 180; P8LE-NEXT: addis r4, r2, .LCPI2_0@toc@ha 181; P8LE-NEXT: addi r4, r4, .LCPI2_0@toc@l 182; P8LE-NEXT: lxvd2x vs0, 0, r4 183; P8LE-NEXT: sldi r4, r7, 2 184; P8LE-NEXT: lxsiwzx v3, r3, r4 185; P8LE-NEXT: xxswapd v4, vs0 186; P8LE-NEXT: vperm v2, v2, v3, v4 187; P8LE-NEXT: blr 188; 189; P8BE-LABEL: s2v_test3: 190; P8BE: # %bb.0: # %entry 191; P8BE-NEXT: addis r4, r2, .LCPI2_0@toc@ha 192; P8BE-NEXT: sldi r5, r7, 2 193; P8BE-NEXT: addi r4, r4, .LCPI2_0@toc@l 194; P8BE-NEXT: lxsiwzx v3, r3, r5 195; P8BE-NEXT: lxvw4x v4, 0, r4 196; P8BE-NEXT: vperm v2, v3, v2, v4 197; P8BE-NEXT: blr 198; 199; P9-AIX-64-LABEL: s2v_test3: 200; P9-AIX-64: # %bb.0: # %entry 201; P9-AIX-64-NEXT: sldi r4, r4, 2 202; P9-AIX-64-NEXT: lwzx r3, r3, r4 203; P9-AIX-64-NEXT: mtfprwz f0, r3 204; P9-AIX-64-NEXT: xxinsertw v2, vs0, 0 205; P9-AIX-64-NEXT: blr 206; 207; P9-AIX-32-LABEL: s2v_test3: 208; P9-AIX-32: # %bb.0: # %entry 209; P9-AIX-32-NEXT: slwi r4, r4, 2 210; P9-AIX-32-NEXT: lwzx r3, r3, r4 211; P9-AIX-32-NEXT: mtfprwz f0, r3 212; P9-AIX-32-NEXT: xxinsertw v2, vs0, 0 213; P9-AIX-32-NEXT: blr 214; 215; P8-AIX-64-LABEL: s2v_test3: 216; P8-AIX-64: # %bb.0: # %entry 217; P8-AIX-64-NEXT: ld r5, L..C2(r2) # %const.0 218; P8-AIX-64-NEXT: sldi r4, r4, 2 219; P8-AIX-64-NEXT: lxsiwzx v3, r3, r4 220; P8-AIX-64-NEXT: lxvw4x v4, 0, r5 221; P8-AIX-64-NEXT: vperm v2, v3, v2, v4 222; P8-AIX-64-NEXT: blr 223; 224; P8-AIX-32-LABEL: s2v_test3: 225; P8-AIX-32: # %bb.0: # %entry 226; P8-AIX-32-NEXT: slwi r4, r4, 2 227; P8-AIX-32-NEXT: lwzx r3, r3, r4 228; P8-AIX-32-NEXT: lwz r4, L..C2(r2) # %const.0 229; P8-AIX-32-NEXT: stw r3, -16(r1) 230; P8-AIX-32-NEXT: addi r3, r1, -16 231; P8-AIX-32-NEXT: lxvw4x v3, 0, r4 232; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 233; P8-AIX-32-NEXT: vperm v2, v4, v2, v3 234; P8-AIX-32-NEXT: blr 235entry: 236 %idxprom = sext i32 %Idx to i64 237 %arrayidx = getelementptr inbounds i32, i32* %int32, i64 %idxprom 238 %0 = load i32, i32* %arrayidx, align 4 239 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 240 ret <4 x i32> %vecins 241} 242 243; Function Attrs: norecurse nounwind readonly 244define <4 x i32> @s2v_test4(i32* nocapture readonly %int32, <4 x i32> %vec) { 245; P9LE-LABEL: s2v_test4: 246; P9LE: # %bb.0: # %entry 247; P9LE-NEXT: lwz r3, 4(r3) 248; P9LE-NEXT: mtfprwz f0, r3 249; P9LE-NEXT: xxinsertw v2, vs0, 12 250; P9LE-NEXT: blr 251; 252; P9BE-LABEL: s2v_test4: 253; P9BE: # %bb.0: # %entry 254; P9BE-NEXT: lwz r3, 4(r3) 255; P9BE-NEXT: mtfprwz f0, r3 256; P9BE-NEXT: xxinsertw v2, vs0, 0 257; P9BE-NEXT: blr 258; 259; P8LE-LABEL: s2v_test4: 260; P8LE: # %bb.0: # %entry 261; P8LE-NEXT: addis r4, r2, .LCPI3_0@toc@ha 262; P8LE-NEXT: addi r3, r3, 4 263; P8LE-NEXT: addi r4, r4, .LCPI3_0@toc@l 264; P8LE-NEXT: lxsiwzx v3, 0, r3 265; P8LE-NEXT: lxvd2x vs0, 0, r4 266; P8LE-NEXT: xxswapd v4, vs0 267; P8LE-NEXT: vperm v2, v2, v3, v4 268; P8LE-NEXT: blr 269; 270; P8BE-LABEL: s2v_test4: 271; P8BE: # %bb.0: # %entry 272; P8BE-NEXT: addis r4, r2, .LCPI3_0@toc@ha 273; P8BE-NEXT: addi r3, r3, 4 274; P8BE-NEXT: addi r4, r4, .LCPI3_0@toc@l 275; P8BE-NEXT: lxsiwzx v4, 0, r3 276; P8BE-NEXT: lxvw4x v3, 0, r4 277; P8BE-NEXT: vperm v2, v4, v2, v3 278; P8BE-NEXT: blr 279; 280; P9-AIX-LABEL: s2v_test4: 281; P9-AIX: # %bb.0: # %entry 282; P9-AIX-NEXT: lwz r3, 4(r3) 283; P9-AIX-NEXT: mtfprwz f0, r3 284; P9-AIX-NEXT: xxinsertw v2, vs0, 0 285; P9-AIX-NEXT: blr 286; 287; P8-AIX-64-LABEL: s2v_test4: 288; P8-AIX-64: # %bb.0: # %entry 289; P8-AIX-64-NEXT: ld r4, L..C3(r2) # %const.0 290; P8-AIX-64-NEXT: addi r3, r3, 4 291; P8-AIX-64-NEXT: lxsiwzx v3, 0, r3 292; P8-AIX-64-NEXT: lxvw4x v4, 0, r4 293; P8-AIX-64-NEXT: vperm v2, v3, v2, v4 294; P8-AIX-64-NEXT: blr 295; 296; P8-AIX-32-LABEL: s2v_test4: 297; P8-AIX-32: # %bb.0: # %entry 298; P8-AIX-32-NEXT: lwz r3, 4(r3) 299; P8-AIX-32-NEXT: lwz r4, L..C3(r2) # %const.0 300; P8-AIX-32-NEXT: stw r3, -16(r1) 301; P8-AIX-32-NEXT: addi r3, r1, -16 302; P8-AIX-32-NEXT: lxvw4x v3, 0, r4 303; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 304; P8-AIX-32-NEXT: vperm v2, v4, v2, v3 305; P8-AIX-32-NEXT: blr 306entry: 307 %arrayidx = getelementptr inbounds i32, i32* %int32, i64 1 308 %0 = load i32, i32* %arrayidx, align 4 309 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 310 ret <4 x i32> %vecins 311} 312 313; Function Attrs: norecurse nounwind readonly 314define <4 x i32> @s2v_test5(<4 x i32> %vec, i32* nocapture readonly %ptr1) { 315; P9LE-LABEL: s2v_test5: 316; P9LE: # %bb.0: # %entry 317; P9LE-NEXT: lwz r3, 0(r5) 318; P9LE-NEXT: mtfprwz f0, r3 319; P9LE-NEXT: xxinsertw v2, vs0, 12 320; P9LE-NEXT: blr 321; 322; P9BE-LABEL: s2v_test5: 323; P9BE: # %bb.0: # %entry 324; P9BE-NEXT: lwz r3, 0(r5) 325; P9BE-NEXT: mtfprwz f0, r3 326; P9BE-NEXT: xxinsertw v2, vs0, 0 327; P9BE-NEXT: blr 328; 329; P8LE-LABEL: s2v_test5: 330; P8LE: # %bb.0: # %entry 331; P8LE-NEXT: addis r3, r2, .LCPI4_0@toc@ha 332; P8LE-NEXT: lxsiwzx v3, 0, r5 333; P8LE-NEXT: addi r3, r3, .LCPI4_0@toc@l 334; P8LE-NEXT: lxvd2x vs0, 0, r3 335; P8LE-NEXT: xxswapd v4, vs0 336; P8LE-NEXT: vperm v2, v2, v3, v4 337; P8LE-NEXT: blr 338; 339; P8BE-LABEL: s2v_test5: 340; P8BE: # %bb.0: # %entry 341; P8BE-NEXT: addis r3, r2, .LCPI4_0@toc@ha 342; P8BE-NEXT: lxsiwzx v4, 0, r5 343; P8BE-NEXT: addi r3, r3, .LCPI4_0@toc@l 344; P8BE-NEXT: lxvw4x v3, 0, r3 345; P8BE-NEXT: vperm v2, v4, v2, v3 346; P8BE-NEXT: blr 347; 348; P9-AIX-LABEL: s2v_test5: 349; P9-AIX: # %bb.0: # %entry 350; P9-AIX-NEXT: lwz r3, 0(r3) 351; P9-AIX-NEXT: mtfprwz f0, r3 352; P9-AIX-NEXT: xxinsertw v2, vs0, 0 353; P9-AIX-NEXT: blr 354; 355; P8-AIX-64-LABEL: s2v_test5: 356; P8-AIX-64: # %bb.0: # %entry 357; P8-AIX-64-NEXT: ld r4, L..C4(r2) # %const.0 358; P8-AIX-64-NEXT: lxsiwzx v3, 0, r3 359; P8-AIX-64-NEXT: lxvw4x v4, 0, r4 360; P8-AIX-64-NEXT: vperm v2, v3, v2, v4 361; P8-AIX-64-NEXT: blr 362; 363; P8-AIX-32-LABEL: s2v_test5: 364; P8-AIX-32: # %bb.0: # %entry 365; P8-AIX-32-NEXT: lwz r3, 0(r3) 366; P8-AIX-32-NEXT: lwz r4, L..C4(r2) # %const.0 367; P8-AIX-32-NEXT: stw r3, -16(r1) 368; P8-AIX-32-NEXT: addi r3, r1, -16 369; P8-AIX-32-NEXT: lxvw4x v3, 0, r4 370; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 371; P8-AIX-32-NEXT: vperm v2, v4, v2, v3 372; P8-AIX-32-NEXT: blr 373entry: 374 %0 = load i32, i32* %ptr1, align 4 375 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 376 ret <4 x i32> %vecins 377} 378 379; Function Attrs: norecurse nounwind readonly 380define <4 x float> @s2v_test_f1(float* nocapture readonly %f64, <4 x float> %vec) { 381; P9LE-LABEL: s2v_test_f1: 382; P9LE: # %bb.0: # %entry 383; P9LE-NEXT: lwz r3, 0(r3) 384; P9LE-NEXT: mtfprwz f0, r3 385; P9LE-NEXT: xxinsertw v2, vs0, 12 386; P9LE-NEXT: blr 387; 388; P9BE-LABEL: s2v_test_f1: 389; P9BE: # %bb.0: # %entry 390; P9BE-NEXT: lwz r3, 0(r3) 391; P9BE-NEXT: mtfprwz f0, r3 392; P9BE-NEXT: xxinsertw v2, vs0, 0 393; P9BE-NEXT: blr 394; 395; P8LE-LABEL: s2v_test_f1: 396; P8LE: # %bb.0: # %entry 397; P8LE-NEXT: addis r4, r2, .LCPI5_0@toc@ha 398; P8LE-NEXT: lxsiwzx v3, 0, r3 399; P8LE-NEXT: addi r4, r4, .LCPI5_0@toc@l 400; P8LE-NEXT: lxvd2x vs0, 0, r4 401; P8LE-NEXT: xxswapd v4, vs0 402; P8LE-NEXT: vperm v2, v2, v3, v4 403; P8LE-NEXT: blr 404; 405; P8BE-LABEL: s2v_test_f1: 406; P8BE: # %bb.0: # %entry 407; P8BE-NEXT: addis r4, r2, .LCPI5_0@toc@ha 408; P8BE-NEXT: lxsiwzx v4, 0, r3 409; P8BE-NEXT: addi r4, r4, .LCPI5_0@toc@l 410; P8BE-NEXT: lxvw4x v3, 0, r4 411; P8BE-NEXT: vperm v2, v4, v2, v3 412; P8BE-NEXT: blr 413; 414; P9-AIX-LABEL: s2v_test_f1: 415; P9-AIX: # %bb.0: # %entry 416; P9-AIX-NEXT: lwz r3, 0(r3) 417; P9-AIX-NEXT: mtfprwz f0, r3 418; P9-AIX-NEXT: xxinsertw v2, vs0, 0 419; P9-AIX-NEXT: blr 420; 421; P8-AIX-64-LABEL: s2v_test_f1: 422; P8-AIX-64: # %bb.0: # %entry 423; P8-AIX-64-NEXT: ld r4, L..C5(r2) # %const.0 424; P8-AIX-64-NEXT: lxsiwzx v3, 0, r3 425; P8-AIX-64-NEXT: lxvw4x v4, 0, r4 426; P8-AIX-64-NEXT: vperm v2, v3, v2, v4 427; P8-AIX-64-NEXT: blr 428; 429; P8-AIX-32-LABEL: s2v_test_f1: 430; P8-AIX-32: # %bb.0: # %entry 431; P8-AIX-32-NEXT: lwz r4, L..C5(r2) # %const.0 432; P8-AIX-32-NEXT: lxsiwzx v3, 0, r3 433; P8-AIX-32-NEXT: lxvw4x v4, 0, r4 434; P8-AIX-32-NEXT: vperm v2, v3, v2, v4 435; P8-AIX-32-NEXT: blr 436entry: 437 %0 = load float, float* %f64, align 4 438 %vecins = insertelement <4 x float> %vec, float %0, i32 0 439 ret <4 x float> %vecins 440} 441 442; Function Attrs: norecurse nounwind readonly 443define <2 x float> @s2v_test_f2(float* nocapture readonly %f64, <2 x float> %vec) { 444; P9LE-LABEL: s2v_test_f2: 445; P9LE: # %bb.0: # %entry 446; P9LE-NEXT: addi r3, r3, 4 447; P9LE-NEXT: xxmrglw vs1, v2, v2 448; P9LE-NEXT: lfiwzx f0, 0, r3 449; P9LE-NEXT: xxmrghw v2, vs1, vs0 450; P9LE-NEXT: blr 451; 452; P9BE-LABEL: s2v_test_f2: 453; P9BE: # %bb.0: # %entry 454; P9BE-NEXT: addi r3, r3, 4 455; P9BE-NEXT: lxsiwzx v3, 0, r3 456; P9BE-NEXT: vmrgow v2, v3, v2 457; P9BE-NEXT: blr 458; 459; P8LE-LABEL: s2v_test_f2: 460; P8LE: # %bb.0: # %entry 461; P8LE-NEXT: addi r3, r3, 4 462; P8LE-NEXT: xxmrglw vs1, v2, v2 463; P8LE-NEXT: lfiwzx f0, 0, r3 464; P8LE-NEXT: xxmrghw v2, vs1, vs0 465; P8LE-NEXT: blr 466; 467; P8BE-LABEL: s2v_test_f2: 468; P8BE: # %bb.0: # %entry 469; P8BE-NEXT: addi r3, r3, 4 470; P8BE-NEXT: lxsiwzx v3, 0, r3 471; P8BE-NEXT: vmrgow v2, v3, v2 472; P8BE-NEXT: blr 473; 474; AIX-LABEL: s2v_test_f2: 475; AIX: # %bb.0: # %entry 476; AIX-NEXT: addi r3, r3, 4 477; AIX-NEXT: lxsiwzx v3, 0, r3 478; AIX-NEXT: vmrgow v2, v3, v2 479; AIX-NEXT: blr 480entry: 481 %arrayidx = getelementptr inbounds float, float* %f64, i64 1 482 %0 = load float, float* %arrayidx, align 8 483 %vecins = insertelement <2 x float> %vec, float %0, i32 0 484 ret <2 x float> %vecins 485} 486 487; Function Attrs: norecurse nounwind readonly 488define <2 x float> @s2v_test_f3(float* nocapture readonly %f64, <2 x float> %vec, i32 signext %Idx) { 489; P9LE-LABEL: s2v_test_f3: 490; P9LE: # %bb.0: # %entry 491; P9LE-NEXT: sldi r4, r7, 2 492; P9LE-NEXT: xxmrglw vs1, v2, v2 493; P9LE-NEXT: lfiwzx f0, r3, r4 494; P9LE-NEXT: xxmrghw v2, vs1, vs0 495; P9LE-NEXT: blr 496; 497; P9BE-LABEL: s2v_test_f3: 498; P9BE: # %bb.0: # %entry 499; P9BE-NEXT: sldi r4, r7, 2 500; P9BE-NEXT: lxsiwzx v3, r3, r4 501; P9BE-NEXT: vmrgow v2, v3, v2 502; P9BE-NEXT: blr 503; 504; P8LE-LABEL: s2v_test_f3: 505; P8LE: # %bb.0: # %entry 506; P8LE-NEXT: sldi r4, r7, 2 507; P8LE-NEXT: xxmrglw vs1, v2, v2 508; P8LE-NEXT: lfiwzx f0, r3, r4 509; P8LE-NEXT: xxmrghw v2, vs1, vs0 510; P8LE-NEXT: blr 511; 512; P8BE-LABEL: s2v_test_f3: 513; P8BE: # %bb.0: # %entry 514; P8BE-NEXT: sldi r4, r7, 2 515; P8BE-NEXT: lxsiwzx v3, r3, r4 516; P8BE-NEXT: vmrgow v2, v3, v2 517; P8BE-NEXT: blr 518; 519; P9-AIX-64-LABEL: s2v_test_f3: 520; P9-AIX-64: # %bb.0: # %entry 521; P9-AIX-64-NEXT: sldi r4, r4, 2 522; P9-AIX-64-NEXT: lxsiwzx v3, r3, r4 523; P9-AIX-64-NEXT: vmrgow v2, v3, v2 524; P9-AIX-64-NEXT: blr 525; 526; P9-AIX-32-LABEL: s2v_test_f3: 527; P9-AIX-32: # %bb.0: # %entry 528; P9-AIX-32-NEXT: slwi r4, r4, 2 529; P9-AIX-32-NEXT: lxsiwzx v3, r3, r4 530; P9-AIX-32-NEXT: vmrgow v2, v3, v2 531; P9-AIX-32-NEXT: blr 532; 533; P8-AIX-64-LABEL: s2v_test_f3: 534; P8-AIX-64: # %bb.0: # %entry 535; P8-AIX-64-NEXT: sldi r4, r4, 2 536; P8-AIX-64-NEXT: lxsiwzx v3, r3, r4 537; P8-AIX-64-NEXT: vmrgow v2, v3, v2 538; P8-AIX-64-NEXT: blr 539; 540; P8-AIX-32-LABEL: s2v_test_f3: 541; P8-AIX-32: # %bb.0: # %entry 542; P8-AIX-32-NEXT: slwi r4, r4, 2 543; P8-AIX-32-NEXT: lxsiwzx v3, r3, r4 544; P8-AIX-32-NEXT: vmrgow v2, v3, v2 545; P8-AIX-32-NEXT: blr 546entry: 547 %idxprom = sext i32 %Idx to i64 548 %arrayidx = getelementptr inbounds float, float* %f64, i64 %idxprom 549 %0 = load float, float* %arrayidx, align 8 550 %vecins = insertelement <2 x float> %vec, float %0, i32 0 551 ret <2 x float> %vecins 552} 553 554; Function Attrs: norecurse nounwind readonly 555define <2 x float> @s2v_test_f4(float* nocapture readonly %f64, <2 x float> %vec) { 556; P9LE-LABEL: s2v_test_f4: 557; P9LE: # %bb.0: # %entry 558; P9LE-NEXT: addi r3, r3, 4 559; P9LE-NEXT: xxmrglw vs1, v2, v2 560; P9LE-NEXT: lfiwzx f0, 0, r3 561; P9LE-NEXT: xxmrghw v2, vs1, vs0 562; P9LE-NEXT: blr 563; 564; P9BE-LABEL: s2v_test_f4: 565; P9BE: # %bb.0: # %entry 566; P9BE-NEXT: addi r3, r3, 4 567; P9BE-NEXT: lxsiwzx v3, 0, r3 568; P9BE-NEXT: vmrgow v2, v3, v2 569; P9BE-NEXT: blr 570; 571; P8LE-LABEL: s2v_test_f4: 572; P8LE: # %bb.0: # %entry 573; P8LE-NEXT: addi r3, r3, 4 574; P8LE-NEXT: xxmrglw vs1, v2, v2 575; P8LE-NEXT: lfiwzx f0, 0, r3 576; P8LE-NEXT: xxmrghw v2, vs1, vs0 577; P8LE-NEXT: blr 578; 579; P8BE-LABEL: s2v_test_f4: 580; P8BE: # %bb.0: # %entry 581; P8BE-NEXT: addi r3, r3, 4 582; P8BE-NEXT: lxsiwzx v3, 0, r3 583; P8BE-NEXT: vmrgow v2, v3, v2 584; P8BE-NEXT: blr 585; 586; AIX-LABEL: s2v_test_f4: 587; AIX: # %bb.0: # %entry 588; AIX-NEXT: addi r3, r3, 4 589; AIX-NEXT: lxsiwzx v3, 0, r3 590; AIX-NEXT: vmrgow v2, v3, v2 591; AIX-NEXT: blr 592entry: 593 %arrayidx = getelementptr inbounds float, float* %f64, i64 1 594 %0 = load float, float* %arrayidx, align 8 595 %vecins = insertelement <2 x float> %vec, float %0, i32 0 596 ret <2 x float> %vecins 597} 598 599; Function Attrs: norecurse nounwind readonly 600define <2 x float> @s2v_test_f5(<2 x float> %vec, float* nocapture readonly %ptr1) { 601; P9LE-LABEL: s2v_test_f5: 602; P9LE: # %bb.0: # %entry 603; P9LE-NEXT: lfiwzx f0, 0, r5 604; P9LE-NEXT: xxmrglw vs1, v2, v2 605; P9LE-NEXT: xxmrghw v2, vs1, vs0 606; P9LE-NEXT: blr 607; 608; P9BE-LABEL: s2v_test_f5: 609; P9BE: # %bb.0: # %entry 610; P9BE-NEXT: lxsiwzx v3, 0, r5 611; P9BE-NEXT: vmrgow v2, v3, v2 612; P9BE-NEXT: blr 613; 614; P8LE-LABEL: s2v_test_f5: 615; P8LE: # %bb.0: # %entry 616; P8LE-NEXT: lfiwzx f0, 0, r5 617; P8LE-NEXT: xxmrglw vs1, v2, v2 618; P8LE-NEXT: xxmrghw v2, vs1, vs0 619; P8LE-NEXT: blr 620; 621; P8BE-LABEL: s2v_test_f5: 622; P8BE: # %bb.0: # %entry 623; P8BE-NEXT: lxsiwzx v3, 0, r5 624; P8BE-NEXT: vmrgow v2, v3, v2 625; P8BE-NEXT: blr 626; 627; AIX-LABEL: s2v_test_f5: 628; AIX: # %bb.0: # %entry 629; AIX-NEXT: lxsiwzx v3, 0, r3 630; AIX-NEXT: vmrgow v2, v3, v2 631; AIX-NEXT: blr 632entry: 633 %0 = load float, float* %ptr1, align 8 634 %vecins = insertelement <2 x float> %vec, float %0, i32 0 635 ret <2 x float> %vecins 636} 637 638