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