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(ptr 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: lxvd2x vs0, 0, r4 46; P8LE-NEXT: xxswapd v3, vs0 47; P8LE-NEXT: vperm v2, v2, v4, v3 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 v4, 0, r3 70; P8-AIX-64-NEXT: lxvw4x v3, 0, r4 71; P8-AIX-64-NEXT: vperm v2, v4, v2, v3 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: lfiwzx f0, 0, r3 77; P8-AIX-32-NEXT: lwz r3, L..C0(r2) # %const.0 78; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 79; P8-AIX-32-NEXT: xxspltw v3, vs0, 1 80; P8-AIX-32-NEXT: vperm v2, v3, v2, v4 81; P8-AIX-32-NEXT: blr 82entry: 83 %0 = load i32, ptr %int32, align 4 84 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 85 ret <4 x i32> %vecins 86} 87 88; Function Attrs: norecurse nounwind readonly 89define <4 x i32> @s2v_test2(ptr nocapture readonly %int32, <4 x i32> %vec) { 90; P9LE-LABEL: s2v_test2: 91; P9LE: # %bb.0: # %entry 92; P9LE-NEXT: lwz r3, 4(r3) 93; P9LE-NEXT: mtfprwz f0, r3 94; P9LE-NEXT: xxinsertw v2, vs0, 12 95; P9LE-NEXT: blr 96; 97; P9BE-LABEL: s2v_test2: 98; P9BE: # %bb.0: # %entry 99; P9BE-NEXT: lwz r3, 4(r3) 100; P9BE-NEXT: mtfprwz f0, r3 101; P9BE-NEXT: xxinsertw v2, vs0, 0 102; P9BE-NEXT: blr 103; 104; P8LE-LABEL: s2v_test2: 105; P8LE: # %bb.0: # %entry 106; P8LE-NEXT: addis r4, r2, .LCPI1_0@toc@ha 107; P8LE-NEXT: addi r3, r3, 4 108; P8LE-NEXT: addi r4, r4, .LCPI1_0@toc@l 109; P8LE-NEXT: lxsiwzx v4, 0, r3 110; P8LE-NEXT: lxvd2x vs0, 0, r4 111; P8LE-NEXT: xxswapd v3, vs0 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 v4, 0, r3 137; P8-AIX-64-NEXT: lxvw4x v3, 0, r4 138; P8-AIX-64-NEXT: vperm v2, v4, v2, v3 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: addi r3, r3, 4 144; P8-AIX-32-NEXT: lfiwzx f0, 0, r3 145; P8-AIX-32-NEXT: lwz r3, L..C1(r2) # %const.0 146; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 147; P8-AIX-32-NEXT: xxspltw v3, vs0, 1 148; P8-AIX-32-NEXT: vperm v2, v3, v2, v4 149; P8-AIX-32-NEXT: blr 150entry: 151 %arrayidx = getelementptr inbounds i32, ptr %int32, i64 1 152 %0 = load i32, ptr %arrayidx, align 4 153 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 154 ret <4 x i32> %vecins 155} 156 157; Function Attrs: norecurse nounwind readonly 158define <4 x i32> @s2v_test3(ptr nocapture readonly %int32, <4 x i32> %vec, i32 signext %Idx) { 159; P9LE-LABEL: s2v_test3: 160; P9LE: # %bb.0: # %entry 161; P9LE-NEXT: sldi r4, r7, 2 162; P9LE-NEXT: lwzx r3, r3, r4 163; P9LE-NEXT: mtfprwz f0, r3 164; P9LE-NEXT: xxinsertw v2, vs0, 12 165; P9LE-NEXT: blr 166; 167; P9BE-LABEL: s2v_test3: 168; P9BE: # %bb.0: # %entry 169; P9BE-NEXT: sldi r4, r7, 2 170; P9BE-NEXT: lwzx r3, r3, r4 171; P9BE-NEXT: mtfprwz f0, r3 172; P9BE-NEXT: xxinsertw v2, vs0, 0 173; P9BE-NEXT: blr 174; 175; P8LE-LABEL: s2v_test3: 176; P8LE: # %bb.0: # %entry 177; P8LE-NEXT: addis r4, r2, .LCPI2_0@toc@ha 178; P8LE-NEXT: addi r4, r4, .LCPI2_0@toc@l 179; P8LE-NEXT: lxvd2x vs0, 0, r4 180; P8LE-NEXT: sldi r4, r7, 2 181; P8LE-NEXT: lxsiwzx v4, r3, r4 182; P8LE-NEXT: xxswapd v3, vs0 183; P8LE-NEXT: vperm v2, v2, v4, v3 184; P8LE-NEXT: blr 185; 186; P8BE-LABEL: s2v_test3: 187; P8BE: # %bb.0: # %entry 188; P8BE-NEXT: sldi r4, r7, 2 189; P8BE-NEXT: lxsiwzx v3, r3, r4 190; P8BE-NEXT: addis r3, r2, .LCPI2_0@toc@ha 191; P8BE-NEXT: addi r3, r3, .LCPI2_0@toc@l 192; P8BE-NEXT: lxvw4x v4, 0, r3 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: sldi r4, r4, 2 215; P8-AIX-64-NEXT: lxsiwzx v3, r3, r4 216; P8-AIX-64-NEXT: ld r3, L..C2(r2) # %const.0 217; P8-AIX-64-NEXT: lxvw4x v4, 0, r3 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: lfiwzx f0, r3, r4 225; P8-AIX-32-NEXT: lwz r3, L..C2(r2) # %const.0 226; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 227; P8-AIX-32-NEXT: xxspltw v3, vs0, 1 228; P8-AIX-32-NEXT: vperm v2, v3, v2, v4 229; P8-AIX-32-NEXT: blr 230entry: 231 %idxprom = sext i32 %Idx to i64 232 %arrayidx = getelementptr inbounds i32, ptr %int32, i64 %idxprom 233 %0 = load i32, ptr %arrayidx, align 4 234 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 235 ret <4 x i32> %vecins 236} 237 238; Function Attrs: norecurse nounwind readonly 239define <4 x i32> @s2v_test4(ptr nocapture readonly %int32, <4 x i32> %vec) { 240; P9LE-LABEL: s2v_test4: 241; P9LE: # %bb.0: # %entry 242; P9LE-NEXT: lwz r3, 4(r3) 243; P9LE-NEXT: mtfprwz f0, r3 244; P9LE-NEXT: xxinsertw v2, vs0, 12 245; P9LE-NEXT: blr 246; 247; P9BE-LABEL: s2v_test4: 248; P9BE: # %bb.0: # %entry 249; P9BE-NEXT: lwz r3, 4(r3) 250; P9BE-NEXT: mtfprwz f0, r3 251; P9BE-NEXT: xxinsertw v2, vs0, 0 252; P9BE-NEXT: blr 253; 254; P8LE-LABEL: s2v_test4: 255; P8LE: # %bb.0: # %entry 256; P8LE-NEXT: addis r4, r2, .LCPI3_0@toc@ha 257; P8LE-NEXT: addi r3, r3, 4 258; P8LE-NEXT: addi r4, r4, .LCPI3_0@toc@l 259; P8LE-NEXT: lxsiwzx v4, 0, r3 260; P8LE-NEXT: lxvd2x vs0, 0, r4 261; P8LE-NEXT: xxswapd v3, vs0 262; P8LE-NEXT: vperm v2, v2, v4, v3 263; P8LE-NEXT: blr 264; 265; P8BE-LABEL: s2v_test4: 266; P8BE: # %bb.0: # %entry 267; P8BE-NEXT: addis r4, r2, .LCPI3_0@toc@ha 268; P8BE-NEXT: addi r3, r3, 4 269; P8BE-NEXT: addi r4, r4, .LCPI3_0@toc@l 270; P8BE-NEXT: lxsiwzx v4, 0, r3 271; P8BE-NEXT: lxvw4x v3, 0, r4 272; P8BE-NEXT: vperm v2, v4, v2, v3 273; P8BE-NEXT: blr 274; 275; P9-AIX-LABEL: s2v_test4: 276; P9-AIX: # %bb.0: # %entry 277; P9-AIX-NEXT: lwz r3, 4(r3) 278; P9-AIX-NEXT: mtfprwz f0, r3 279; P9-AIX-NEXT: xxinsertw v2, vs0, 0 280; P9-AIX-NEXT: blr 281; 282; P8-AIX-64-LABEL: s2v_test4: 283; P8-AIX-64: # %bb.0: # %entry 284; P8-AIX-64-NEXT: ld r4, L..C3(r2) # %const.0 285; P8-AIX-64-NEXT: addi r3, r3, 4 286; P8-AIX-64-NEXT: lxsiwzx v4, 0, r3 287; P8-AIX-64-NEXT: lxvw4x v3, 0, r4 288; P8-AIX-64-NEXT: vperm v2, v4, v2, v3 289; P8-AIX-64-NEXT: blr 290; 291; P8-AIX-32-LABEL: s2v_test4: 292; P8-AIX-32: # %bb.0: # %entry 293; P8-AIX-32-NEXT: addi r3, r3, 4 294; P8-AIX-32-NEXT: lfiwzx f0, 0, r3 295; P8-AIX-32-NEXT: lwz r3, L..C3(r2) # %const.0 296; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 297; P8-AIX-32-NEXT: xxspltw v3, vs0, 1 298; P8-AIX-32-NEXT: vperm v2, v3, v2, v4 299; P8-AIX-32-NEXT: blr 300entry: 301 %arrayidx = getelementptr inbounds i32, ptr %int32, i64 1 302 %0 = load i32, ptr %arrayidx, align 4 303 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 304 ret <4 x i32> %vecins 305} 306 307; Function Attrs: norecurse nounwind readonly 308define <4 x i32> @s2v_test5(<4 x i32> %vec, ptr nocapture readonly %ptr1) { 309; P9LE-LABEL: s2v_test5: 310; P9LE: # %bb.0: # %entry 311; P9LE-NEXT: lwz r3, 0(r5) 312; P9LE-NEXT: mtfprwz f0, r3 313; P9LE-NEXT: xxinsertw v2, vs0, 12 314; P9LE-NEXT: blr 315; 316; P9BE-LABEL: s2v_test5: 317; P9BE: # %bb.0: # %entry 318; P9BE-NEXT: lwz r3, 0(r5) 319; P9BE-NEXT: mtfprwz f0, r3 320; P9BE-NEXT: xxinsertw v2, vs0, 0 321; P9BE-NEXT: blr 322; 323; P8LE-LABEL: s2v_test5: 324; P8LE: # %bb.0: # %entry 325; P8LE-NEXT: addis r3, r2, .LCPI4_0@toc@ha 326; P8LE-NEXT: lxsiwzx v4, 0, r5 327; P8LE-NEXT: addi r3, r3, .LCPI4_0@toc@l 328; P8LE-NEXT: lxvd2x vs0, 0, r3 329; P8LE-NEXT: xxswapd v3, vs0 330; P8LE-NEXT: vperm v2, v2, v4, v3 331; P8LE-NEXT: blr 332; 333; P8BE-LABEL: s2v_test5: 334; P8BE: # %bb.0: # %entry 335; P8BE-NEXT: addis r3, r2, .LCPI4_0@toc@ha 336; P8BE-NEXT: lxsiwzx v4, 0, r5 337; P8BE-NEXT: addi r3, r3, .LCPI4_0@toc@l 338; P8BE-NEXT: lxvw4x v3, 0, r3 339; P8BE-NEXT: vperm v2, v4, v2, v3 340; P8BE-NEXT: blr 341; 342; P9-AIX-LABEL: s2v_test5: 343; P9-AIX: # %bb.0: # %entry 344; P9-AIX-NEXT: lwz r3, 0(r3) 345; P9-AIX-NEXT: mtfprwz f0, r3 346; P9-AIX-NEXT: xxinsertw v2, vs0, 0 347; P9-AIX-NEXT: blr 348; 349; P8-AIX-64-LABEL: s2v_test5: 350; P8-AIX-64: # %bb.0: # %entry 351; P8-AIX-64-NEXT: ld r4, L..C4(r2) # %const.0 352; P8-AIX-64-NEXT: lxsiwzx v4, 0, r3 353; P8-AIX-64-NEXT: lxvw4x v3, 0, r4 354; P8-AIX-64-NEXT: vperm v2, v4, v2, v3 355; P8-AIX-64-NEXT: blr 356; 357; P8-AIX-32-LABEL: s2v_test5: 358; P8-AIX-32: # %bb.0: # %entry 359; P8-AIX-32-NEXT: lfiwzx f0, 0, r3 360; P8-AIX-32-NEXT: lwz r3, L..C4(r2) # %const.0 361; P8-AIX-32-NEXT: lxvw4x v4, 0, r3 362; P8-AIX-32-NEXT: xxspltw v3, vs0, 1 363; P8-AIX-32-NEXT: vperm v2, v3, v2, v4 364; P8-AIX-32-NEXT: blr 365entry: 366 %0 = load i32, ptr %ptr1, align 4 367 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 368 ret <4 x i32> %vecins 369} 370 371; Function Attrs: norecurse nounwind readonly 372define <4 x float> @s2v_test_f1(ptr nocapture readonly %f64, <4 x float> %vec) { 373; P9LE-LABEL: s2v_test_f1: 374; P9LE: # %bb.0: # %entry 375; P9LE-NEXT: lwz r3, 0(r3) 376; P9LE-NEXT: mtfprwz f0, r3 377; P9LE-NEXT: xxinsertw v2, vs0, 12 378; P9LE-NEXT: blr 379; 380; P9BE-LABEL: s2v_test_f1: 381; P9BE: # %bb.0: # %entry 382; P9BE-NEXT: lwz r3, 0(r3) 383; P9BE-NEXT: mtfprwz f0, r3 384; P9BE-NEXT: xxinsertw v2, vs0, 0 385; P9BE-NEXT: blr 386; 387; P8LE-LABEL: s2v_test_f1: 388; P8LE: # %bb.0: # %entry 389; P8LE-NEXT: addis r4, r2, .LCPI5_0@toc@ha 390; P8LE-NEXT: lxsiwzx v4, 0, r3 391; P8LE-NEXT: addi r4, r4, .LCPI5_0@toc@l 392; P8LE-NEXT: lxvd2x vs0, 0, r4 393; P8LE-NEXT: xxswapd v3, vs0 394; P8LE-NEXT: vperm v2, v2, v4, v3 395; P8LE-NEXT: blr 396; 397; P8BE-LABEL: s2v_test_f1: 398; P8BE: # %bb.0: # %entry 399; P8BE-NEXT: addis r4, r2, .LCPI5_0@toc@ha 400; P8BE-NEXT: lxsiwzx v4, 0, r3 401; P8BE-NEXT: addi r4, r4, .LCPI5_0@toc@l 402; P8BE-NEXT: lxvw4x v3, 0, r4 403; P8BE-NEXT: vperm v2, v4, v2, v3 404; P8BE-NEXT: blr 405; 406; P9-AIX-LABEL: s2v_test_f1: 407; P9-AIX: # %bb.0: # %entry 408; P9-AIX-NEXT: lwz r3, 0(r3) 409; P9-AIX-NEXT: mtfprwz f0, r3 410; P9-AIX-NEXT: xxinsertw v2, vs0, 0 411; P9-AIX-NEXT: blr 412; 413; P8-AIX-64-LABEL: s2v_test_f1: 414; P8-AIX-64: # %bb.0: # %entry 415; P8-AIX-64-NEXT: ld r4, L..C5(r2) # %const.0 416; P8-AIX-64-NEXT: lxsiwzx v4, 0, r3 417; P8-AIX-64-NEXT: lxvw4x v3, 0, r4 418; P8-AIX-64-NEXT: vperm v2, v4, v2, v3 419; P8-AIX-64-NEXT: blr 420; 421; P8-AIX-32-LABEL: s2v_test_f1: 422; P8-AIX-32: # %bb.0: # %entry 423; P8-AIX-32-NEXT: lwz r4, L..C5(r2) # %const.0 424; P8-AIX-32-NEXT: lxsiwzx v4, 0, r3 425; P8-AIX-32-NEXT: lxvw4x v3, 0, r4 426; P8-AIX-32-NEXT: vperm v2, v4, v2, v3 427; P8-AIX-32-NEXT: blr 428entry: 429 %0 = load float, ptr %f64, align 4 430 %vecins = insertelement <4 x float> %vec, float %0, i32 0 431 ret <4 x float> %vecins 432} 433 434; Function Attrs: norecurse nounwind readonly 435define <2 x float> @s2v_test_f2(ptr nocapture readonly %f64, <2 x float> %vec) { 436; P9LE-LABEL: s2v_test_f2: 437; P9LE: # %bb.0: # %entry 438; P9LE-NEXT: addi r3, r3, 4 439; P9LE-NEXT: xxmrglw vs1, v2, v2 440; P9LE-NEXT: lfiwzx f0, 0, r3 441; P9LE-NEXT: xxmrghw v2, vs1, vs0 442; P9LE-NEXT: blr 443; 444; P9BE-LABEL: s2v_test_f2: 445; P9BE: # %bb.0: # %entry 446; P9BE-NEXT: addi r3, r3, 4 447; P9BE-NEXT: lxsiwzx v3, 0, r3 448; P9BE-NEXT: vmrgow v2, v3, v2 449; P9BE-NEXT: blr 450; 451; P8LE-LABEL: s2v_test_f2: 452; P8LE: # %bb.0: # %entry 453; P8LE-NEXT: addi r3, r3, 4 454; P8LE-NEXT: xxmrglw vs0, v2, v2 455; P8LE-NEXT: lfiwzx f1, 0, r3 456; P8LE-NEXT: xxmrghw v2, vs0, vs1 457; P8LE-NEXT: blr 458; 459; P8BE-LABEL: s2v_test_f2: 460; P8BE: # %bb.0: # %entry 461; P8BE-NEXT: addi r3, r3, 4 462; P8BE-NEXT: lxsiwzx v3, 0, r3 463; P8BE-NEXT: vmrgow v2, v3, v2 464; P8BE-NEXT: blr 465; 466; AIX-LABEL: s2v_test_f2: 467; AIX: # %bb.0: # %entry 468; AIX-NEXT: addi r3, r3, 4 469; AIX-NEXT: lxsiwzx v3, 0, r3 470; AIX-NEXT: vmrgow v2, v3, v2 471; AIX-NEXT: blr 472entry: 473 %arrayidx = getelementptr inbounds float, ptr %f64, i64 1 474 %0 = load float, ptr %arrayidx, align 8 475 %vecins = insertelement <2 x float> %vec, float %0, i32 0 476 ret <2 x float> %vecins 477} 478 479; Function Attrs: norecurse nounwind readonly 480define <2 x float> @s2v_test_f3(ptr nocapture readonly %f64, <2 x float> %vec, i32 signext %Idx) { 481; P9LE-LABEL: s2v_test_f3: 482; P9LE: # %bb.0: # %entry 483; P9LE-NEXT: sldi r4, r7, 2 484; P9LE-NEXT: xxmrglw vs1, v2, v2 485; P9LE-NEXT: lfiwzx f0, r3, r4 486; P9LE-NEXT: xxmrghw v2, vs1, vs0 487; P9LE-NEXT: blr 488; 489; P9BE-LABEL: s2v_test_f3: 490; P9BE: # %bb.0: # %entry 491; P9BE-NEXT: sldi r4, r7, 2 492; P9BE-NEXT: lxsiwzx v3, r3, r4 493; P9BE-NEXT: vmrgow v2, v3, v2 494; P9BE-NEXT: blr 495; 496; P8LE-LABEL: s2v_test_f3: 497; P8LE: # %bb.0: # %entry 498; P8LE-NEXT: sldi r4, r7, 2 499; P8LE-NEXT: xxmrglw vs0, v2, v2 500; P8LE-NEXT: lfiwzx f1, r3, r4 501; P8LE-NEXT: xxmrghw v2, vs0, vs1 502; P8LE-NEXT: blr 503; 504; P8BE-LABEL: s2v_test_f3: 505; P8BE: # %bb.0: # %entry 506; P8BE-NEXT: sldi r4, r7, 2 507; P8BE-NEXT: lxsiwzx v3, r3, r4 508; P8BE-NEXT: vmrgow v2, v3, v2 509; P8BE-NEXT: blr 510; 511; P9-AIX-64-LABEL: s2v_test_f3: 512; P9-AIX-64: # %bb.0: # %entry 513; P9-AIX-64-NEXT: sldi r4, r4, 2 514; P9-AIX-64-NEXT: lxsiwzx v3, r3, r4 515; P9-AIX-64-NEXT: vmrgow v2, v3, v2 516; P9-AIX-64-NEXT: blr 517; 518; P9-AIX-32-LABEL: s2v_test_f3: 519; P9-AIX-32: # %bb.0: # %entry 520; P9-AIX-32-NEXT: slwi r4, r4, 2 521; P9-AIX-32-NEXT: lxsiwzx v3, r3, r4 522; P9-AIX-32-NEXT: vmrgow v2, v3, v2 523; P9-AIX-32-NEXT: blr 524; 525; P8-AIX-64-LABEL: s2v_test_f3: 526; P8-AIX-64: # %bb.0: # %entry 527; P8-AIX-64-NEXT: sldi r4, r4, 2 528; P8-AIX-64-NEXT: lxsiwzx v3, r3, r4 529; P8-AIX-64-NEXT: vmrgow v2, v3, v2 530; P8-AIX-64-NEXT: blr 531; 532; P8-AIX-32-LABEL: s2v_test_f3: 533; P8-AIX-32: # %bb.0: # %entry 534; P8-AIX-32-NEXT: slwi r4, r4, 2 535; P8-AIX-32-NEXT: lxsiwzx v3, r3, r4 536; P8-AIX-32-NEXT: vmrgow v2, v3, v2 537; P8-AIX-32-NEXT: blr 538entry: 539 %idxprom = sext i32 %Idx to i64 540 %arrayidx = getelementptr inbounds float, ptr %f64, i64 %idxprom 541 %0 = load float, ptr %arrayidx, align 8 542 %vecins = insertelement <2 x float> %vec, float %0, i32 0 543 ret <2 x float> %vecins 544} 545 546; Function Attrs: norecurse nounwind readonly 547define <2 x float> @s2v_test_f4(ptr nocapture readonly %f64, <2 x float> %vec) { 548; P9LE-LABEL: s2v_test_f4: 549; P9LE: # %bb.0: # %entry 550; P9LE-NEXT: addi r3, r3, 4 551; P9LE-NEXT: xxmrglw vs1, v2, v2 552; P9LE-NEXT: lfiwzx f0, 0, r3 553; P9LE-NEXT: xxmrghw v2, vs1, vs0 554; P9LE-NEXT: blr 555; 556; P9BE-LABEL: s2v_test_f4: 557; P9BE: # %bb.0: # %entry 558; P9BE-NEXT: addi r3, r3, 4 559; P9BE-NEXT: lxsiwzx v3, 0, r3 560; P9BE-NEXT: vmrgow v2, v3, v2 561; P9BE-NEXT: blr 562; 563; P8LE-LABEL: s2v_test_f4: 564; P8LE: # %bb.0: # %entry 565; P8LE-NEXT: addi r3, r3, 4 566; P8LE-NEXT: xxmrglw vs0, v2, v2 567; P8LE-NEXT: lfiwzx f1, 0, r3 568; P8LE-NEXT: xxmrghw v2, vs0, vs1 569; P8LE-NEXT: blr 570; 571; P8BE-LABEL: s2v_test_f4: 572; P8BE: # %bb.0: # %entry 573; P8BE-NEXT: addi r3, r3, 4 574; P8BE-NEXT: lxsiwzx v3, 0, r3 575; P8BE-NEXT: vmrgow v2, v3, v2 576; P8BE-NEXT: blr 577; 578; AIX-LABEL: s2v_test_f4: 579; AIX: # %bb.0: # %entry 580; AIX-NEXT: addi r3, r3, 4 581; AIX-NEXT: lxsiwzx v3, 0, r3 582; AIX-NEXT: vmrgow v2, v3, v2 583; AIX-NEXT: blr 584entry: 585 %arrayidx = getelementptr inbounds float, ptr %f64, i64 1 586 %0 = load float, ptr %arrayidx, align 8 587 %vecins = insertelement <2 x float> %vec, float %0, i32 0 588 ret <2 x float> %vecins 589} 590 591; Function Attrs: norecurse nounwind readonly 592define <2 x float> @s2v_test_f5(<2 x float> %vec, ptr nocapture readonly %ptr1) { 593; P9LE-LABEL: s2v_test_f5: 594; P9LE: # %bb.0: # %entry 595; P9LE-NEXT: lfiwzx f0, 0, r5 596; P9LE-NEXT: xxmrglw vs1, v2, v2 597; P9LE-NEXT: xxmrghw v2, vs1, vs0 598; P9LE-NEXT: blr 599; 600; P9BE-LABEL: s2v_test_f5: 601; P9BE: # %bb.0: # %entry 602; P9BE-NEXT: lxsiwzx v3, 0, r5 603; P9BE-NEXT: vmrgow v2, v3, v2 604; P9BE-NEXT: blr 605; 606; P8LE-LABEL: s2v_test_f5: 607; P8LE: # %bb.0: # %entry 608; P8LE-NEXT: lfiwzx f1, 0, r5 609; P8LE-NEXT: xxmrglw vs0, v2, v2 610; P8LE-NEXT: xxmrghw v2, vs0, vs1 611; P8LE-NEXT: blr 612; 613; P8BE-LABEL: s2v_test_f5: 614; P8BE: # %bb.0: # %entry 615; P8BE-NEXT: lxsiwzx v3, 0, r5 616; P8BE-NEXT: vmrgow v2, v3, v2 617; P8BE-NEXT: blr 618; 619; AIX-LABEL: s2v_test_f5: 620; AIX: # %bb.0: # %entry 621; AIX-NEXT: lxsiwzx v3, 0, r3 622; AIX-NEXT: vmrgow v2, v3, v2 623; AIX-NEXT: blr 624entry: 625 %0 = load float, ptr %ptr1, align 8 626 %vecins = insertelement <2 x float> %vec, float %0, i32 0 627 ret <2 x float> %vecins 628} 629 630