358 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; 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=P9LE4; 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=P9BE6; 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=P8LE8; 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=P8BE10 11 12; Function Attrs: norecurse nounwind readonly13define <2 x i64> @s2v_test1(ptr nocapture readonly %int64, <2 x i64> %vec) {14; P9LE-LABEL: s2v_test1:15; P9LE: # %bb.0: # %entry16; P9LE-NEXT: lfd f0, 0(r3)17; P9LE-NEXT: xxmrghd v2, v2, vs018; P9LE-NEXT: blr19;20; P9BE-LABEL: s2v_test1:21; P9BE: # %bb.0: # %entry22; P9BE-NEXT: lfd f0, 0(r3)23; P9BE-NEXT: xxpermdi v2, vs0, v2, 124; P9BE-NEXT: blr25;26; P8LE-LABEL: s2v_test1:27; P8LE: # %bb.0: # %entry28; P8LE-NEXT: lfdx f0, 0, r329; P8LE-NEXT: xxmrghd v2, v2, vs030; P8LE-NEXT: blr31;32; P8BE-LABEL: s2v_test1:33; P8BE: # %bb.0: # %entry34; P8BE-NEXT: lfdx f0, 0, r335; P8BE-NEXT: xxpermdi v2, vs0, v2, 136; P8BE-NEXT: blr37 38entry:39 %0 = load i64, ptr %int64, align 840 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 041 ret <2 x i64> %vecins42}43 44; Function Attrs: norecurse nounwind readonly45define <2 x i64> @s2v_test2(ptr nocapture readonly %int64, <2 x i64> %vec) {46; P9LE-LABEL: s2v_test2:47; P9LE: # %bb.0: # %entry48; P9LE-NEXT: lfd f0, 8(r3)49; P9LE-NEXT: xxmrghd v2, v2, vs050; P9LE-NEXT: blr51;52; P9BE-LABEL: s2v_test2:53; P9BE: # %bb.0: # %entry54; P9BE-NEXT: lfd f0, 8(r3)55; P9BE-NEXT: xxpermdi v2, vs0, v2, 156; P9BE-NEXT: blr57;58; P8LE-LABEL: s2v_test2:59; P8LE: # %bb.0: # %entry60; P8LE-NEXT: lfd f0, 8(r3)61; P8LE-NEXT: xxmrghd v2, v2, vs062; P8LE-NEXT: blr63;64; P8BE-LABEL: s2v_test2:65; P8BE: # %bb.0: # %entry66; P8BE-NEXT: lfd f0, 8(r3)67; P8BE-NEXT: xxpermdi v2, vs0, v2, 168; P8BE-NEXT: blr69 70entry:71 %arrayidx = getelementptr inbounds i64, ptr %int64, i64 172 %0 = load i64, ptr %arrayidx, align 873 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 074 ret <2 x i64> %vecins75}76 77; Function Attrs: norecurse nounwind readonly78define <2 x i64> @s2v_test3(ptr nocapture readonly %int64, <2 x i64> %vec, i32 signext %Idx) {79; P9LE-LABEL: s2v_test3:80; P9LE: # %bb.0: # %entry81; P9LE-NEXT: sldi r4, r7, 382; P9LE-NEXT: lfdx f0, r3, r483; P9LE-NEXT: xxmrghd v2, v2, vs084; P9LE-NEXT: blr85;86; P9BE-LABEL: s2v_test3:87; P9BE: # %bb.0: # %entry88; P9BE-NEXT: sldi r4, r7, 389; P9BE-NEXT: lfdx f0, r3, r490; P9BE-NEXT: xxpermdi v2, vs0, v2, 191; P9BE-NEXT: blr92;93; P8LE-LABEL: s2v_test3:94; P8LE: # %bb.0: # %entry95; P8LE-NEXT: sldi r4, r7, 396; P8LE-NEXT: lfdx f0, r3, r497; P8LE-NEXT: xxmrghd v2, v2, vs098; P8LE-NEXT: blr99;100; P8BE-LABEL: s2v_test3:101; P8BE: # %bb.0: # %entry102; P8BE-NEXT: sldi r4, r7, 3103; P8BE-NEXT: lfdx f0, r3, r4104; P8BE-NEXT: xxpermdi v2, vs0, v2, 1105; P8BE-NEXT: blr106 107entry:108 %idxprom = sext i32 %Idx to i64109 %arrayidx = getelementptr inbounds i64, ptr %int64, i64 %idxprom110 %0 = load i64, ptr %arrayidx, align 8111 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0112 ret <2 x i64> %vecins113}114 115; Function Attrs: norecurse nounwind readonly116define <2 x i64> @s2v_test4(ptr nocapture readonly %int64, <2 x i64> %vec) {117; P9LE-LABEL: s2v_test4:118; P9LE: # %bb.0: # %entry119; P9LE-NEXT: lfd f0, 8(r3)120; P9LE-NEXT: xxmrghd v2, v2, vs0121; P9LE-NEXT: blr122;123; P9BE-LABEL: s2v_test4:124; P9BE: # %bb.0: # %entry125; P9BE-NEXT: lfd f0, 8(r3)126; P9BE-NEXT: xxpermdi v2, vs0, v2, 1127; P9BE-NEXT: blr128;129; P8LE-LABEL: s2v_test4:130; P8LE: # %bb.0: # %entry131; P8LE-NEXT: lfd f0, 8(r3)132; P8LE-NEXT: xxmrghd v2, v2, vs0133; P8LE-NEXT: blr134;135; P8BE-LABEL: s2v_test4:136; P8BE: # %bb.0: # %entry137; P8BE-NEXT: lfd f0, 8(r3)138; P8BE-NEXT: xxpermdi v2, vs0, v2, 1139; P8BE-NEXT: blr140 141entry:142 %arrayidx = getelementptr inbounds i64, ptr %int64, i64 1143 %0 = load i64, ptr %arrayidx, align 8144 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0145 ret <2 x i64> %vecins146}147 148; Function Attrs: norecurse nounwind readonly149define <2 x i64> @s2v_test5(<2 x i64> %vec, ptr nocapture readonly %ptr1) {150; P9LE-LABEL: s2v_test5:151; P9LE: # %bb.0: # %entry152; P9LE-NEXT: lfd f0, 0(r5)153; P9LE-NEXT: xxmrghd v2, v2, vs0154; P9LE-NEXT: blr155;156; P9BE-LABEL: s2v_test5:157; P9BE: # %bb.0: # %entry158; P9BE-NEXT: lfd f0, 0(r5)159; P9BE-NEXT: xxpermdi v2, vs0, v2, 1160; P9BE-NEXT: blr161;162; P8LE-LABEL: s2v_test5:163; P8LE: # %bb.0: # %entry164; P8LE-NEXT: lfdx f0, 0, r5165; P8LE-NEXT: xxmrghd v2, v2, vs0166; P8LE-NEXT: blr167;168; P8BE-LABEL: s2v_test5:169; P8BE: # %bb.0: # %entry170; P8BE-NEXT: lfdx f0, 0, r5171; P8BE-NEXT: xxpermdi v2, vs0, v2, 1172; P8BE-NEXT: blr173 174entry:175 %0 = load i64, ptr %ptr1, align 8176 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0177 ret <2 x i64> %vecins178}179 180; Function Attrs: norecurse nounwind readonly181define <2 x double> @s2v_test_f1(ptr nocapture readonly %f64, <2 x double> %vec) {182; P9LE-LABEL: s2v_test_f1:183; P9LE: # %bb.0: # %entry184; P9LE-NEXT: lfd f0, 0(r3)185; P9LE-NEXT: xxmrghd v2, v2, vs0186; P9LE-NEXT: blr187;188; P9BE-LABEL: s2v_test_f1:189; P9BE: # %bb.0: # %entry190; P9BE-NEXT: lfd f0, 0(r3)191; P9BE-NEXT: xxpermdi v2, vs0, v2, 1192; P9BE-NEXT: blr193;194; P8LE-LABEL: s2v_test_f1:195; P8LE: # %bb.0: # %entry196; P8LE-NEXT: lfd f0, 0(r3)197; P8LE-NEXT: xxmrghd v2, v2, vs0198; P8LE-NEXT: blr199;200; P8BE-LABEL: s2v_test_f1:201; P8BE: # %bb.0: # %entry202; P8BE-NEXT: lfd f0, 0(r3)203; P8BE-NEXT: xxpermdi v2, vs0, v2, 1204; P8BE-NEXT: blr205 206 207 208entry:209 %0 = load double, ptr %f64, align 8210 %vecins = insertelement <2 x double> %vec, double %0, i32 0211 ret <2 x double> %vecins212}213 214; Function Attrs: norecurse nounwind readonly215define <2 x double> @s2v_test_f2(ptr nocapture readonly %f64, <2 x double> %vec) {216; P9LE-LABEL: s2v_test_f2:217; P9LE: # %bb.0: # %entry218; P9LE-NEXT: lfd f0, 8(r3)219; P9LE-NEXT: xxmrghd v2, v2, vs0220; P9LE-NEXT: blr221;222; P9BE-LABEL: s2v_test_f2:223; P9BE: # %bb.0: # %entry224; P9BE-NEXT: lfd f0, 8(r3)225; P9BE-NEXT: xxpermdi v2, vs0, v2, 1226; P9BE-NEXT: blr227;228; P8LE-LABEL: s2v_test_f2:229; P8LE: # %bb.0: # %entry230; P8LE-NEXT: lfd f0, 8(r3)231; P8LE-NEXT: xxmrghd v2, v2, vs0232; P8LE-NEXT: blr233;234; P8BE-LABEL: s2v_test_f2:235; P8BE: # %bb.0: # %entry236; P8BE-NEXT: lfd f0, 8(r3)237; P8BE-NEXT: xxpermdi v2, vs0, v2, 1238; P8BE-NEXT: blr239 240 241 242entry:243 %arrayidx = getelementptr inbounds double, ptr %f64, i64 1244 %0 = load double, ptr %arrayidx, align 8245 %vecins = insertelement <2 x double> %vec, double %0, i32 0246 ret <2 x double> %vecins247}248 249; Function Attrs: norecurse nounwind readonly250define <2 x double> @s2v_test_f3(ptr nocapture readonly %f64, <2 x double> %vec, i32 signext %Idx) {251; P9LE-LABEL: s2v_test_f3:252; P9LE: # %bb.0: # %entry253; P9LE-NEXT: sldi r4, r7, 3254; P9LE-NEXT: lfdx f0, r3, r4255; P9LE-NEXT: xxmrghd v2, v2, vs0256; P9LE-NEXT: blr257;258; P9BE-LABEL: s2v_test_f3:259; P9BE: # %bb.0: # %entry260; P9BE-NEXT: sldi r4, r7, 3261; P9BE-NEXT: lfdx f0, r3, r4262; P9BE-NEXT: xxpermdi v2, vs0, v2, 1263; P9BE-NEXT: blr264;265; P8LE-LABEL: s2v_test_f3:266; P8LE: # %bb.0: # %entry267; P8LE-NEXT: sldi r4, r7, 3268; P8LE-NEXT: lfdx f0, r3, r4269; P8LE-NEXT: xxmrghd v2, v2, vs0270; P8LE-NEXT: blr271;272; P8BE-LABEL: s2v_test_f3:273; P8BE: # %bb.0: # %entry274; P8BE-NEXT: sldi r4, r7, 3275; P8BE-NEXT: lfdx f0, r3, r4276; P8BE-NEXT: xxpermdi v2, vs0, v2, 1277; P8BE-NEXT: blr278 279 280 281entry:282 %idxprom = sext i32 %Idx to i64283 %arrayidx = getelementptr inbounds double, ptr %f64, i64 %idxprom284 %0 = load double, ptr %arrayidx, align 8285 %vecins = insertelement <2 x double> %vec, double %0, i32 0286 ret <2 x double> %vecins287}288 289; Function Attrs: norecurse nounwind readonly290define <2 x double> @s2v_test_f4(ptr nocapture readonly %f64, <2 x double> %vec) {291; P9LE-LABEL: s2v_test_f4:292; P9LE: # %bb.0: # %entry293; P9LE-NEXT: lfd f0, 8(r3)294; P9LE-NEXT: xxmrghd v2, v2, vs0295; P9LE-NEXT: blr296;297; P9BE-LABEL: s2v_test_f4:298; P9BE: # %bb.0: # %entry299; P9BE-NEXT: lfd f0, 8(r3)300; P9BE-NEXT: xxpermdi v2, vs0, v2, 1301; P9BE-NEXT: blr302;303; P8LE-LABEL: s2v_test_f4:304; P8LE: # %bb.0: # %entry305; P8LE-NEXT: lfd f0, 8(r3)306; P8LE-NEXT: xxmrghd v2, v2, vs0307; P8LE-NEXT: blr308;309; P8BE-LABEL: s2v_test_f4:310; P8BE: # %bb.0: # %entry311; P8BE-NEXT: lfd f0, 8(r3)312; P8BE-NEXT: xxpermdi v2, vs0, v2, 1313; P8BE-NEXT: blr314 315 316 317entry:318 %arrayidx = getelementptr inbounds double, ptr %f64, i64 1319 %0 = load double, ptr %arrayidx, align 8320 %vecins = insertelement <2 x double> %vec, double %0, i32 0321 ret <2 x double> %vecins322}323 324; Function Attrs: norecurse nounwind readonly325define <2 x double> @s2v_test_f5(<2 x double> %vec, ptr nocapture readonly %ptr1) {326; P9LE-LABEL: s2v_test_f5:327; P9LE: # %bb.0: # %entry328; P9LE-NEXT: lfd f0, 0(r5)329; P9LE-NEXT: xxmrghd v2, v2, vs0330; P9LE-NEXT: blr331;332; P9BE-LABEL: s2v_test_f5:333; P9BE: # %bb.0: # %entry334; P9BE-NEXT: lfd f0, 0(r5)335; P9BE-NEXT: xxpermdi v2, vs0, v2, 1336; P9BE-NEXT: blr337;338; P8LE-LABEL: s2v_test_f5:339; P8LE: # %bb.0: # %entry340; P8LE-NEXT: lfd f0, 0(r5)341; P8LE-NEXT: xxmrghd v2, v2, vs0342; P8LE-NEXT: blr343;344; P8BE-LABEL: s2v_test_f5:345; P8BE: # %bb.0: # %entry346; P8BE-NEXT: lfd f0, 0(r5)347; P8BE-NEXT: xxpermdi v2, vs0, v2, 1348; P8BE-NEXT: blr349 350 351 352entry:353 %0 = load double, ptr %ptr1, align 8354 %vecins = insertelement <2 x double> %vec, double %0, i32 0355 ret <2 x double> %vecins356}357 358