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