1; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 2; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P9LE 3; RUN: llc -mcpu=pwr9 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 4; RUN: -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P9BE 5; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 6; RUN: -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P8LE 7; RUN: llc -mcpu=pwr8 -verify-machineinstrs -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \ 8; RUN: -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s --check-prefix=P8BE 9 10 11; Function Attrs: norecurse nounwind readonly 12define <2 x i64> @s2v_test1(i64* nocapture readonly %int64, <2 x i64> %vec) { 13; P9LE-LABEL: s2v_test1: 14; P9LE: # %bb.0: # %entry 15; P9LE-NEXT: lfd f0, 0(r3) 16; P9LE-NEXT: xxmrghd v2, v2, vs0 17; P9LE-NEXT: blr 18 19; P9BE-LABEL: s2v_test1: 20; P9BE: # %bb.0: # %entry 21; P9BE-NEXT: lfd f0, 0(r3) 22; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 23; P9BE-NEXT: blr 24entry: 25 %0 = load i64, i64* %int64, align 8 26 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0 27 ret <2 x i64> %vecins 28} 29 30; Function Attrs: norecurse nounwind readonly 31define <2 x i64> @s2v_test2(i64* nocapture readonly %int64, <2 x i64> %vec) { 32; P9LE-LABEL: s2v_test2: 33; P9LE: # %bb.0: # %entry 34; P9LE-NEXT: lfd f0, 8(r3) 35; P9LE-NEXT: xxmrghd v2, v2, vs0 36; P9LE-NEXT: blr 37 38; P9BE-LABEL: s2v_test2: 39; P9BE: # %bb.0: # %entry 40; P9BE-NEXT: lfd f0, 8(r3) 41; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 42; P9BE-NEXT: blr 43entry: 44 %arrayidx = getelementptr inbounds i64, i64* %int64, i64 1 45 %0 = load i64, i64* %arrayidx, align 8 46 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0 47 ret <2 x i64> %vecins 48} 49 50; Function Attrs: norecurse nounwind readonly 51define <2 x i64> @s2v_test3(i64* nocapture readonly %int64, <2 x i64> %vec, i32 signext %Idx) { 52; P9LE-LABEL: s2v_test3: 53; P9LE: # %bb.0: # %entry 54; P9LE-NEXT: sldi r4, r7, 3 55; P9LE-NEXT: lfdx f0, r3, r4 56; P9LE-NEXT: xxmrghd v2, v2, vs0 57; P9LE-NEXT: blr 58 59; P9BE-LABEL: s2v_test3 60; P9BE: # %bb.0: # %entry 61; P9BE-NEXT: sldi r4, r7, 3 62; P9BE-NEXT: lfdx f0, r3, r4 63; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 64; P9BE-NEXT: blr 65entry: 66 %idxprom = sext i32 %Idx to i64 67 %arrayidx = getelementptr inbounds i64, i64* %int64, i64 %idxprom 68 %0 = load i64, i64* %arrayidx, align 8 69 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0 70 ret <2 x i64> %vecins 71} 72 73; Function Attrs: norecurse nounwind readonly 74define <2 x i64> @s2v_test4(i64* nocapture readonly %int64, <2 x i64> %vec) { 75; P9LE-LABEL: s2v_test4: 76; P9LE: # %bb.0: # %entry 77; P9LE-NEXT: lfd f0, 8(r3) 78; P9LE-NEXT: xxmrghd v2, v2, vs0 79; P9LE-NEXT: blr 80 81; P9BE-LABEL: s2v_test4: 82; P9BE: # %bb.0: # %entry 83; P9BE-NEXT: lfd f0, 8(r3) 84; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 85; P9BE-NEXT: blr 86entry: 87 %arrayidx = getelementptr inbounds i64, i64* %int64, i64 1 88 %0 = load i64, i64* %arrayidx, align 8 89 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0 90 ret <2 x i64> %vecins 91} 92 93; Function Attrs: norecurse nounwind readonly 94define <2 x i64> @s2v_test5(<2 x i64> %vec, i64* nocapture readonly %ptr1) { 95; P9LE-LABEL: s2v_test5: 96; P9LE: # %bb.0: # %entry 97; P9LE-NEXT: lfd f0, 0(r5) 98; P9LE-NEXT: xxmrghd v2, v2, vs0 99; P9LE-NEXT: blr 100 101; P9BE-LABEL: s2v_test5: 102; P9BE: # %bb.0: # %entry 103; P9BE-NEXT: lfd f0, 0(r5) 104; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 105; P9BE-NEXT: blr 106entry: 107 %0 = load i64, i64* %ptr1, align 8 108 %vecins = insertelement <2 x i64> %vec, i64 %0, i32 0 109 ret <2 x i64> %vecins 110} 111 112; Function Attrs: norecurse nounwind readonly 113define <2 x double> @s2v_test_f1(double* nocapture readonly %f64, <2 x double> %vec) { 114; P9LE-LABEL: s2v_test_f1: 115; P9LE: # %bb.0: # %entry 116; P9LE-NEXT: lfd f0, 0(r3) 117; P9LE-NEXT: xxmrghd v2, v2, vs0 118; P9LE-NEXT: blr 119 120; P9BE-LABEL: s2v_test_f1: 121; P9BE: # %bb.0: # %entry 122; P9BE-NEXT: lfd f0, 0(r3) 123; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 124; P9BE-NEXT: blr 125 126; P8LE-LABEL: s2v_test_f1: 127; P8LE: # %bb.0: # %entry 128; P8LE-NEXT: lfdx f0, 0, r3 129; P8LE-NEXT: xxmrghd v2, v2, vs0 130; P8LE-NEXT: blr 131 132; P8BE-LABEL: s2v_test_f1: 133; P8BE: # %bb.0: # %entry 134; P8BE-NEXT: lfdx f0, 0, r3 135; P8BE-NEXT: xxpermdi v2, vs0, v2, 1 136; P8BE-NEXT: blr 137entry: 138 %0 = load double, double* %f64, align 8 139 %vecins = insertelement <2 x double> %vec, double %0, i32 0 140 ret <2 x double> %vecins 141} 142 143; Function Attrs: norecurse nounwind readonly 144define <2 x double> @s2v_test_f2(double* nocapture readonly %f64, <2 x double> %vec) { 145; P9LE-LABEL: s2v_test_f2: 146; P9LE: # %bb.0: # %entry 147; P9LE-NEXT: lfd f0, 8(r3) 148; P9LE-NEXT: xxmrghd v2, v2, vs0 149; P9LE-NEXT: blr 150 151; P9BE-LABEL: s2v_test_f2: 152; P9BE: # %bb.0: # %entry 153; P9BE-NEXT: lfd f0, 8(r3) 154; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 155; P9BE-NEXT: blr 156 157; P8LE-LABEL: s2v_test_f2: 158; P8LE: # %bb.0: # %entry 159; P8LE-NEXT: lfd f0, 8(r3) 160; P8LE-NEXT: xxmrghd v2, v2, vs0 161; P8LE-NEXT: blr 162 163; P8BE-LABEL: s2v_test_f2: 164; P8BE: # %bb.0: # %entry 165; P8BE-NEXT: lfd f0, 8(r3) 166; P8BE-NEXT: xxpermdi v2, vs0, v2, 1 167; P8BE-NEXT: blr 168entry: 169 %arrayidx = getelementptr inbounds double, double* %f64, i64 1 170 %0 = load double, double* %arrayidx, align 8 171 %vecins = insertelement <2 x double> %vec, double %0, i32 0 172 ret <2 x double> %vecins 173} 174 175; Function Attrs: norecurse nounwind readonly 176define <2 x double> @s2v_test_f3(double* nocapture readonly %f64, <2 x double> %vec, i32 signext %Idx) { 177; P9LE-LABEL: s2v_test_f3: 178; P9LE: # %bb.0: # %entry 179; P9LE-NEXT: sldi r4, r7, 3 180; P9LE-NEXT: lfdx f0, r3, r4 181; P9LE-NEXT: xxmrghd v2, v2, vs0 182; P9LE-NEXT: blr 183 184; P9BE-LABEL: s2v_test_f3: 185; P9BE: # %bb.0: # %entry 186; P9BE-NEXT: sldi r4, r7, 3 187; P9BE-NEXT: lfdx f0, r3, r4 188; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 189; P9BE-NEXT: blr 190 191; P8LE-LABEL: s2v_test_f3: 192; P8LE: # %bb.0: # %entry 193; P8LE-NEXT: sldi r4, r7, 3 194; P8LE-NEXT: lfdx f0, r3, r4 195; P8LE-NEXT: xxmrghd v2, v2, vs0 196; P8LE-NEXT: blr 197 198; P8BE-LABEL: s2v_test_f3: 199; P8BE: # %bb.0: # %entry 200; P8BE-NEXT: sldi r4, r7, 3 201; P8BE-NEXT: lfdx f0, r3, r4 202; P8BE-NEXT: xxpermdi v2, vs0, v2, 1 203; P8BE-NEXT: blr 204entry: 205 %idxprom = sext i32 %Idx to i64 206 %arrayidx = getelementptr inbounds double, double* %f64, i64 %idxprom 207 %0 = load double, double* %arrayidx, align 8 208 %vecins = insertelement <2 x double> %vec, double %0, i32 0 209 ret <2 x double> %vecins 210} 211 212; Function Attrs: norecurse nounwind readonly 213define <2 x double> @s2v_test_f4(double* nocapture readonly %f64, <2 x double> %vec) { 214; P9LE-LABEL: s2v_test_f4: 215; P9LE: # %bb.0: # %entry 216; P9LE-NEXT: lfd f0, 8(r3) 217; P9LE-NEXT: xxmrghd v2, v2, vs0 218; P9LE-NEXT: blr 219 220; P9BE-LABEL: s2v_test_f4: 221; P9BE: # %bb.0: # %entry 222; P9BE-NEXT: lfd f0, 8(r3) 223; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 224; P9BE-NEXT: blr 225 226; P8LE-LABEL: s2v_test_f4: 227; P8LE: # %bb.0: # %entry 228; P8LE-NEXT: lfd f0, 8(r3) 229; P8LE-NEXT: xxmrghd v2, v2, vs0 230; P8LE-NEXT: blr 231 232; P8BE-LABEL: s2v_test_f4: 233; P8BE: # %bb.0: # %entry 234; P8BE-NEXT: lfd f0, 8(r3) 235; P8BE-NEXT: xxpermdi v2, vs0, v2, 1 236; P8BE-NEXT: blr 237entry: 238 %arrayidx = getelementptr inbounds double, double* %f64, i64 1 239 %0 = load double, double* %arrayidx, align 8 240 %vecins = insertelement <2 x double> %vec, double %0, i32 0 241 ret <2 x double> %vecins 242} 243 244; Function Attrs: norecurse nounwind readonly 245define <2 x double> @s2v_test_f5(<2 x double> %vec, double* nocapture readonly %ptr1) { 246; P9LE-LABEL: s2v_test_f5: 247; P9LE: # %bb.0: # %entry 248; P9LE-NEXT: lfd f0, 0(r5) 249; P9LE-NEXT: xxmrghd v2, v2, vs0 250; P9LE-NEXT: blr 251 252; P9BE-LABEL: s2v_test_f5: 253; P9BE: # %bb.0: # %entry 254; P9BE-NEXT: lfd f0, 0(r5) 255; P9BE-NEXT: xxpermdi v2, vs0, v2, 1 256; P9BE-NEXT: blr 257 258; P8LE-LABEL: s2v_test_f5: 259; P8LE: # %bb.0: # %entry 260; P8LE-NEXT: lfdx f0, 0, r5 261; P8LE-NEXT: xxmrghd v2, v2, vs0 262; P8LE-NEXT: blr 263 264; P8BE-LABEL: s2v_test_f5: 265; P8BE: # %bb.0: # %entry 266; P8BE-NEXT: lfdx f0, 0, r5 267; P8BE-NEXT: xxpermdi v2, vs0, v2, 1 268; P8BE-NEXT: blr 269entry: 270 %0 = load double, double* %ptr1, align 8 271 %vecins = insertelement <2 x double> %vec, double %0, i32 0 272 ret <2 x double> %vecins 273} 274 275