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; Function Attrs: norecurse nounwind readonly 12define <4 x i32> @s2v_test1(i32* nocapture readonly %int32, <4 x i32> %vec) { 13; P9LE-LABEL: s2v_test1: 14; P9LE: # %bb.0: # %entry 15; P9LE-NEXT: lwz r3, 0(r3) 16; P9LE-NEXT: mtfprwz f0, r3 17; P9LE-NEXT: xxinsertw v2, vs0, 12 18; P9LE-NEXT: blr 19; 20; P9BE-LABEL: s2v_test1: 21; P9BE: # %bb.0: # %entry 22; P9BE-NEXT: lwz r3, 0(r3) 23; P9BE-NEXT: mtfprwz f0, r3 24; P9BE-NEXT: xxinsertw v2, vs0, 0 25; P9BE-NEXT: blr 26; 27; P8LE-LABEL: s2v_test1: 28; P8LE: # %bb.0: # %entry 29; P8LE-NEXT: addis r4, r2, .LCPI0_0@toc@ha 30; P8LE-NEXT: lxsiwzx v4, 0, r3 31; P8LE-NEXT: addi r4, r4, .LCPI0_0@toc@l 32; P8LE-NEXT: lvx v3, 0, r4 33; P8LE-NEXT: vperm v2, v2, v4, v3 34; P8LE-NEXT: blr 35; 36; P8BE-LABEL: s2v_test1: 37; P8BE: # %bb.0: # %entry 38; P8BE-NEXT: addis r4, r2, .LCPI0_0@toc@ha 39; P8BE-NEXT: lxsiwzx v4, 0, r3 40; P8BE-NEXT: addi r4, r4, .LCPI0_0@toc@l 41; P8BE-NEXT: lxvw4x v3, 0, r4 42; P8BE-NEXT: vperm v2, v4, v2, v3 43; P8BE-NEXT: blr 44entry: 45 %0 = load i32, i32* %int32, align 4 46 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 47 ret <4 x i32> %vecins 48} 49 50; Function Attrs: norecurse nounwind readonly 51define <4 x i32> @s2v_test2(i32* nocapture readonly %int32, <4 x i32> %vec) { 52; P9LE-LABEL: s2v_test2: 53; P9LE: # %bb.0: # %entry 54; P9LE-NEXT: lwz r3, 4(r3) 55; P9LE-NEXT: mtfprwz f0, r3 56; P9LE-NEXT: xxinsertw v2, vs0, 12 57; P9LE-NEXT: blr 58; 59; P9BE-LABEL: s2v_test2: 60; P9BE: # %bb.0: # %entry 61; P9BE-NEXT: lwz r3, 4(r3) 62; P9BE-NEXT: mtfprwz f0, r3 63; P9BE-NEXT: xxinsertw v2, vs0, 0 64; P9BE-NEXT: blr 65; 66; P8LE-LABEL: s2v_test2: 67; P8LE: # %bb.0: # %entry 68; P8LE-NEXT: addis r4, r2, .LCPI1_0@toc@ha 69; P8LE-NEXT: addi r3, r3, 4 70; P8LE-NEXT: addi r4, r4, .LCPI1_0@toc@l 71; P8LE-NEXT: lxsiwzx v4, 0, r3 72; P8LE-NEXT: lvx v3, 0, r4 73; P8LE-NEXT: vperm v2, v2, v4, v3 74; P8LE-NEXT: blr 75; 76; P8BE-LABEL: s2v_test2: 77; P8BE: # %bb.0: # %entry 78; P8BE-NEXT: addis r4, r2, .LCPI1_0@toc@ha 79; P8BE-NEXT: addi r3, r3, 4 80; P8BE-NEXT: addi r4, r4, .LCPI1_0@toc@l 81; P8BE-NEXT: lxsiwzx v4, 0, r3 82; P8BE-NEXT: lxvw4x v3, 0, r4 83; P8BE-NEXT: vperm v2, v4, v2, v3 84; P8BE-NEXT: blr 85entry: 86 %arrayidx = getelementptr inbounds i32, i32* %int32, i64 1 87 %0 = load i32, i32* %arrayidx, align 4 88 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 89 ret <4 x i32> %vecins 90} 91 92; Function Attrs: norecurse nounwind readonly 93define <4 x i32> @s2v_test3(i32* nocapture readonly %int32, <4 x i32> %vec, i32 signext %Idx) { 94; P9LE-LABEL: s2v_test3: 95; P9LE: # %bb.0: # %entry 96; P9LE-NEXT: sldi r4, r7, 2 97; P9LE-NEXT: lwzx r3, r3, r4 98; P9LE-NEXT: mtfprwz f0, r3 99; P9LE-NEXT: xxinsertw v2, vs0, 12 100; P9LE-NEXT: blr 101; 102; P9BE-LABEL: s2v_test3: 103; P9BE: # %bb.0: # %entry 104; P9BE-NEXT: sldi r4, r7, 2 105; P9BE-NEXT: lwzx r3, r3, r4 106; P9BE-NEXT: mtfprwz f0, r3 107; P9BE-NEXT: xxinsertw v2, vs0, 0 108; P9BE-NEXT: blr 109; 110; P8LE-LABEL: s2v_test3: 111; P8LE: # %bb.0: # %entry 112; P8LE-NEXT: addis r4, r2, .LCPI2_0@toc@ha 113; P8LE-NEXT: sldi r5, r7, 2 114; P8LE-NEXT: addi r4, r4, .LCPI2_0@toc@l 115; P8LE-NEXT: lxsiwzx v3, r3, r5 116; P8LE-NEXT: lvx v4, 0, r4 117; P8LE-NEXT: vperm v2, v2, v3, v4 118; P8LE-NEXT: blr 119; 120; P8BE-LABEL: s2v_test3: 121; P8BE: # %bb.0: # %entry 122; P8BE-NEXT: addis r4, r2, .LCPI2_0@toc@ha 123; P8BE-NEXT: sldi r5, r7, 2 124; P8BE-NEXT: addi r4, r4, .LCPI2_0@toc@l 125; P8BE-NEXT: lxsiwzx v3, r3, r5 126; P8BE-NEXT: lxvw4x v4, 0, r4 127; P8BE-NEXT: vperm v2, v3, v2, v4 128; P8BE-NEXT: blr 129entry: 130 %idxprom = sext i32 %Idx to i64 131 %arrayidx = getelementptr inbounds i32, i32* %int32, i64 %idxprom 132 %0 = load i32, i32* %arrayidx, align 4 133 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 134 ret <4 x i32> %vecins 135} 136 137; Function Attrs: norecurse nounwind readonly 138define <4 x i32> @s2v_test4(i32* nocapture readonly %int32, <4 x i32> %vec) { 139; P9LE-LABEL: s2v_test4: 140; P9LE: # %bb.0: # %entry 141; P9LE-NEXT: lwz r3, 4(r3) 142; P9LE-NEXT: mtfprwz f0, r3 143; P9LE-NEXT: xxinsertw v2, vs0, 12 144; P9LE-NEXT: blr 145; 146; P9BE-LABEL: s2v_test4: 147; P9BE: # %bb.0: # %entry 148; P9BE-NEXT: lwz r3, 4(r3) 149; P9BE-NEXT: mtfprwz f0, r3 150; P9BE-NEXT: xxinsertw v2, vs0, 0 151; P9BE-NEXT: blr 152; 153; P8LE-LABEL: s2v_test4: 154; P8LE: # %bb.0: # %entry 155; P8LE-NEXT: addis r4, r2, .LCPI3_0@toc@ha 156; P8LE-NEXT: addi r3, r3, 4 157; P8LE-NEXT: addi r4, r4, .LCPI3_0@toc@l 158; P8LE-NEXT: lxsiwzx v4, 0, r3 159; P8LE-NEXT: lvx v3, 0, r4 160; P8LE-NEXT: vperm v2, v2, v4, v3 161; P8LE-NEXT: blr 162; 163; P8BE-LABEL: s2v_test4: 164; P8BE: # %bb.0: # %entry 165; P8BE-NEXT: addis r4, r2, .LCPI3_0@toc@ha 166; P8BE-NEXT: addi r3, r3, 4 167; P8BE-NEXT: addi r4, r4, .LCPI3_0@toc@l 168; P8BE-NEXT: lxsiwzx v4, 0, r3 169; P8BE-NEXT: lxvw4x v3, 0, r4 170; P8BE-NEXT: vperm v2, v4, v2, v3 171; P8BE-NEXT: blr 172entry: 173 %arrayidx = getelementptr inbounds i32, i32* %int32, i64 1 174 %0 = load i32, i32* %arrayidx, align 4 175 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 176 ret <4 x i32> %vecins 177} 178 179; Function Attrs: norecurse nounwind readonly 180define <4 x i32> @s2v_test5(<4 x i32> %vec, i32* nocapture readonly %ptr1) { 181; P9LE-LABEL: s2v_test5: 182; P9LE: # %bb.0: # %entry 183; P9LE-NEXT: lwz r3, 0(r5) 184; P9LE-NEXT: mtfprwz f0, r3 185; P9LE-NEXT: xxinsertw v2, vs0, 12 186; P9LE-NEXT: blr 187; 188; P9BE-LABEL: s2v_test5: 189; P9BE: # %bb.0: # %entry 190; P9BE-NEXT: lwz r3, 0(r5) 191; P9BE-NEXT: mtfprwz f0, r3 192; P9BE-NEXT: xxinsertw v2, vs0, 0 193; P9BE-NEXT: blr 194; 195; P8LE-LABEL: s2v_test5: 196; P8LE: # %bb.0: # %entry 197; P8LE-NEXT: addis r3, r2, .LCPI4_0@toc@ha 198; P8LE-NEXT: lxsiwzx v4, 0, r5 199; P8LE-NEXT: addi r3, r3, .LCPI4_0@toc@l 200; P8LE-NEXT: lvx v3, 0, r3 201; P8LE-NEXT: vperm v2, v2, v4, v3 202; P8LE-NEXT: blr 203; 204; P8BE-LABEL: s2v_test5: 205; P8BE: # %bb.0: # %entry 206; P8BE-NEXT: addis r3, r2, .LCPI4_0@toc@ha 207; P8BE-NEXT: lxsiwzx v4, 0, r5 208; P8BE-NEXT: addi r3, r3, .LCPI4_0@toc@l 209; P8BE-NEXT: lxvw4x v3, 0, r3 210; P8BE-NEXT: vperm v2, v4, v2, v3 211; P8BE-NEXT: blr 212entry: 213 %0 = load i32, i32* %ptr1, align 4 214 %vecins = insertelement <4 x i32> %vec, i32 %0, i32 0 215 ret <4 x i32> %vecins 216} 217 218; Function Attrs: norecurse nounwind readonly 219define <4 x float> @s2v_test_f1(float* nocapture readonly %f64, <4 x float> %vec) { 220; P9LE-LABEL: s2v_test_f1: 221; P9LE: # %bb.0: # %entry 222; P9LE-NEXT: lwz r3, 0(r3) 223; P9LE-NEXT: mtfprwz f0, r3 224; P9LE-NEXT: xxinsertw v2, vs0, 12 225; P9LE-NEXT: blr 226; 227; P9BE-LABEL: s2v_test_f1: 228; P9BE: # %bb.0: # %entry 229; P9BE-NEXT: lwz r3, 0(r3) 230; P9BE-NEXT: mtfprwz f0, r3 231; P9BE-NEXT: xxinsertw v2, vs0, 0 232; P9BE-NEXT: blr 233; 234; P8LE-LABEL: s2v_test_f1: 235; P8LE: # %bb.0: # %entry 236; P8LE-NEXT: addis r4, r2, .LCPI5_0@toc@ha 237; P8LE-NEXT: lxsiwzx v4, 0, r3 238; P8LE-NEXT: addi r4, r4, .LCPI5_0@toc@l 239; P8LE-NEXT: lvx v3, 0, r4 240; P8LE-NEXT: vperm v2, v2, v4, v3 241; P8LE-NEXT: blr 242; 243; P8BE-LABEL: s2v_test_f1: 244; P8BE: # %bb.0: # %entry 245; P8BE-NEXT: addis r4, r2, .LCPI5_0@toc@ha 246; P8BE-NEXT: lxsiwzx v4, 0, r3 247; P8BE-NEXT: addi r4, r4, .LCPI5_0@toc@l 248; P8BE-NEXT: lxvw4x v3, 0, r4 249; P8BE-NEXT: vperm v2, v4, v2, v3 250; P8BE-NEXT: blr 251entry: 252 %0 = load float, float* %f64, align 4 253 %vecins = insertelement <4 x float> %vec, float %0, i32 0 254 ret <4 x float> %vecins 255} 256 257; Function Attrs: norecurse nounwind readonly 258define <2 x float> @s2v_test_f2(float* nocapture readonly %f64, <2 x float> %vec) { 259; P9LE-LABEL: s2v_test_f2: 260; P9LE: # %bb.0: # %entry 261; P9LE-NEXT: addi r3, r3, 4 262; P9LE-NEXT: xxmrglw vs1, v2, v2 263; P9LE-NEXT: lfiwzx f0, 0, r3 264; P9LE-NEXT: xxmrghw v2, vs1, vs0 265; P9LE-NEXT: blr 266; 267; P9BE-LABEL: s2v_test_f2: 268; P9BE: # %bb.0: # %entry 269; P9BE-NEXT: addi r3, r3, 4 270; P9BE-NEXT: lxsiwzx v3, 0, r3 271; P9BE-NEXT: vmrgow v2, v3, v2 272; P9BE-NEXT: blr 273; 274; P8LE-LABEL: s2v_test_f2: 275; P8LE: # %bb.0: # %entry 276; P8LE-NEXT: addi r3, r3, 4 277; P8LE-NEXT: xxmrglw vs1, v2, v2 278; P8LE-NEXT: lfiwzx f0, 0, r3 279; P8LE-NEXT: xxmrghw v2, vs1, vs0 280; P8LE-NEXT: blr 281; 282; P8BE-LABEL: s2v_test_f2: 283; P8BE: # %bb.0: # %entry 284; P8BE-NEXT: addi r3, r3, 4 285; P8BE-NEXT: lxsiwzx v3, 0, r3 286; P8BE-NEXT: vmrgow v2, v3, v2 287; P8BE-NEXT: blr 288entry: 289 %arrayidx = getelementptr inbounds float, float* %f64, i64 1 290 %0 = load float, float* %arrayidx, align 8 291 %vecins = insertelement <2 x float> %vec, float %0, i32 0 292 ret <2 x float> %vecins 293} 294 295; Function Attrs: norecurse nounwind readonly 296define <2 x float> @s2v_test_f3(float* nocapture readonly %f64, <2 x float> %vec, i32 signext %Idx) { 297; P9LE-LABEL: s2v_test_f3: 298; P9LE: # %bb.0: # %entry 299; P9LE-NEXT: sldi r4, r7, 2 300; P9LE-NEXT: xxmrglw vs1, v2, v2 301; P9LE-NEXT: lfiwzx f0, r3, r4 302; P9LE-NEXT: xxmrghw v2, vs1, vs0 303; P9LE-NEXT: blr 304; 305; P9BE-LABEL: s2v_test_f3: 306; P9BE: # %bb.0: # %entry 307; P9BE-NEXT: sldi r4, r7, 2 308; P9BE-NEXT: lxsiwzx v3, r3, r4 309; P9BE-NEXT: vmrgow v2, v3, v2 310; P9BE-NEXT: blr 311; 312; P8LE-LABEL: s2v_test_f3: 313; P8LE: # %bb.0: # %entry 314; P8LE-NEXT: sldi r4, r7, 2 315; P8LE-NEXT: xxmrglw vs1, v2, v2 316; P8LE-NEXT: lfiwzx f0, r3, r4 317; P8LE-NEXT: xxmrghw v2, vs1, vs0 318; P8LE-NEXT: blr 319; 320; P8BE-LABEL: s2v_test_f3: 321; P8BE: # %bb.0: # %entry 322; P8BE-NEXT: sldi r4, r7, 2 323; P8BE-NEXT: lxsiwzx v3, r3, r4 324; P8BE-NEXT: vmrgow v2, v3, v2 325; P8BE-NEXT: blr 326entry: 327 %idxprom = sext i32 %Idx to i64 328 %arrayidx = getelementptr inbounds float, float* %f64, i64 %idxprom 329 %0 = load float, float* %arrayidx, align 8 330 %vecins = insertelement <2 x float> %vec, float %0, i32 0 331 ret <2 x float> %vecins 332} 333 334; Function Attrs: norecurse nounwind readonly 335define <2 x float> @s2v_test_f4(float* nocapture readonly %f64, <2 x float> %vec) { 336; P9LE-LABEL: s2v_test_f4: 337; P9LE: # %bb.0: # %entry 338; P9LE-NEXT: addi r3, r3, 4 339; P9LE-NEXT: xxmrglw vs1, v2, v2 340; P9LE-NEXT: lfiwzx f0, 0, r3 341; P9LE-NEXT: xxmrghw v2, vs1, vs0 342; P9LE-NEXT: blr 343; 344; P9BE-LABEL: s2v_test_f4: 345; P9BE: # %bb.0: # %entry 346; P9BE-NEXT: addi r3, r3, 4 347; P9BE-NEXT: lxsiwzx v3, 0, r3 348; P9BE-NEXT: vmrgow v2, v3, v2 349; P9BE-NEXT: blr 350; 351; P8LE-LABEL: s2v_test_f4: 352; P8LE: # %bb.0: # %entry 353; P8LE-NEXT: addi r3, r3, 4 354; P8LE-NEXT: xxmrglw vs1, v2, v2 355; P8LE-NEXT: lfiwzx f0, 0, r3 356; P8LE-NEXT: xxmrghw v2, vs1, vs0 357; P8LE-NEXT: blr 358; 359; P8BE-LABEL: s2v_test_f4: 360; P8BE: # %bb.0: # %entry 361; P8BE-NEXT: addi r3, r3, 4 362; P8BE-NEXT: lxsiwzx v3, 0, r3 363; P8BE-NEXT: vmrgow v2, v3, v2 364; P8BE-NEXT: blr 365entry: 366 %arrayidx = getelementptr inbounds float, float* %f64, i64 1 367 %0 = load float, float* %arrayidx, align 8 368 %vecins = insertelement <2 x float> %vec, float %0, i32 0 369 ret <2 x float> %vecins 370} 371 372; Function Attrs: norecurse nounwind readonly 373define <2 x float> @s2v_test_f5(<2 x float> %vec, float* nocapture readonly %ptr1) { 374; P9LE-LABEL: s2v_test_f5: 375; P9LE: # %bb.0: # %entry 376; P9LE-NEXT: lfiwzx f0, 0, r5 377; P9LE-NEXT: xxmrglw vs1, v2, v2 378; P9LE-NEXT: xxmrghw v2, vs1, vs0 379; P9LE-NEXT: blr 380; 381; P9BE-LABEL: s2v_test_f5: 382; P9BE: # %bb.0: # %entry 383; P9BE-NEXT: lxsiwzx v3, 0, r5 384; P9BE-NEXT: vmrgow v2, v3, v2 385; P9BE-NEXT: blr 386; 387; P8LE-LABEL: s2v_test_f5: 388; P8LE: # %bb.0: # %entry 389; P8LE-NEXT: lfiwzx f0, 0, r5 390; P8LE-NEXT: xxmrglw vs1, v2, v2 391; P8LE-NEXT: xxmrghw v2, vs1, vs0 392; P8LE-NEXT: blr 393; 394; P8BE-LABEL: s2v_test_f5: 395; P8BE: # %bb.0: # %entry 396; P8BE-NEXT: lxsiwzx v3, 0, r5 397; P8BE-NEXT: vmrgow v2, v3, v2 398; P8BE-NEXT: blr 399entry: 400 %0 = load float, float* %ptr1, align 8 401 %vecins = insertelement <2 x float> %vec, float %0, i32 0 402 ret <2 x float> %vecins 403} 404 405