1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 3; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 4; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10,CHECK-P10-LE 5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 6; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 7; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10,CHECK-P10-BE 8; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 9; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 10; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10 11; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 12; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 13; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10 14 15@GlobLd128 = dso_local local_unnamed_addr global [20 x fp128] zeroinitializer, align 16 16@GlobSt128 = dso_local local_unnamed_addr global [20 x fp128] zeroinitializer, align 16 17 18; Function Attrs: norecurse nounwind readonly willreturn 19define dso_local fp128 @ld_0___float128___float128(i64 %ptr) { 20; CHECK-LABEL: ld_0___float128___float128: 21; CHECK: # %bb.0: # %entry 22; CHECK-NEXT: lxv v2, 0(r3) 23; CHECK-NEXT: blr 24entry: 25 %0 = inttoptr i64 %ptr to fp128* 26 %1 = load fp128, fp128* %0, align 16 27 ret fp128 %1 28} 29 30; Function Attrs: norecurse nounwind readonly willreturn 31define dso_local fp128 @ld_unalign16___float128___float128(i8* nocapture readonly %ptr) { 32; CHECK-LABEL: ld_unalign16___float128___float128: 33; CHECK: # %bb.0: # %entry 34; CHECK-NEXT: addi r3, r3, 1 35; CHECK-NEXT: lxvx v2, 0, r3 36; CHECK-NEXT: blr 37entry: 38 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1 39 %0 = bitcast i8* %add.ptr to fp128* 40 %1 = load fp128, fp128* %0, align 16 41 ret fp128 %1 42} 43 44; Function Attrs: norecurse nounwind readonly willreturn 45define dso_local fp128 @ld_align16___float128___float128(i8* nocapture readonly %ptr) { 46; CHECK-LABEL: ld_align16___float128___float128: 47; CHECK: # %bb.0: # %entry 48; CHECK-NEXT: addi r3, r3, 8 49; CHECK-NEXT: lxvx v2, 0, r3 50; CHECK-NEXT: blr 51entry: 52 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 53 %0 = bitcast i8* %add.ptr to fp128* 54 %1 = load fp128, fp128* %0, align 16 55 ret fp128 %1 56} 57 58; Function Attrs: norecurse nounwind readonly willreturn 59define dso_local fp128 @ld_unalign32___float128___float128(i8* nocapture readonly %ptr) { 60; CHECK-P10-LABEL: ld_unalign32___float128___float128: 61; CHECK-P10: # %bb.0: # %entry 62; CHECK-P10-NEXT: pli r4, 99999 63; CHECK-P10-NEXT: lxvx v2, r3, r4 64; CHECK-P10-NEXT: blr 65; 66; CHECK-PREP10-LABEL: ld_unalign32___float128___float128: 67; CHECK-PREP10: # %bb.0: # %entry 68; CHECK-PREP10-NEXT: lis r4, 1 69; CHECK-PREP10-NEXT: ori r4, r4, 34463 70; CHECK-PREP10-NEXT: lxvx v2, r3, r4 71; CHECK-PREP10-NEXT: blr 72entry: 73 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999 74 %0 = bitcast i8* %add.ptr to fp128* 75 %1 = load fp128, fp128* %0, align 16 76 ret fp128 %1 77} 78 79; Function Attrs: norecurse nounwind readonly willreturn 80define dso_local fp128 @ld_align32___float128___float128(i8* nocapture readonly %ptr) { 81; CHECK-P10-LABEL: ld_align32___float128___float128: 82; CHECK-P10: # %bb.0: # %entry 83; CHECK-P10-NEXT: pli r4, 99999000 84; CHECK-P10-NEXT: lxvx v2, r3, r4 85; CHECK-P10-NEXT: blr 86; 87; CHECK-PREP10-LABEL: ld_align32___float128___float128: 88; CHECK-PREP10: # %bb.0: # %entry 89; CHECK-PREP10-NEXT: lis r4, 1525 90; CHECK-PREP10-NEXT: ori r4, r4, 56600 91; CHECK-PREP10-NEXT: lxvx v2, r3, r4 92; CHECK-PREP10-NEXT: blr 93entry: 94 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 95 %0 = bitcast i8* %add.ptr to fp128* 96 %1 = load fp128, fp128* %0, align 16 97 ret fp128 %1 98} 99 100; Function Attrs: norecurse nounwind readonly willreturn 101define dso_local fp128 @ld_unalign64___float128___float128(i8* nocapture readonly %ptr) { 102; CHECK-P10-LABEL: ld_unalign64___float128___float128: 103; CHECK-P10: # %bb.0: # %entry 104; CHECK-P10-NEXT: pli r4, 232 105; CHECK-P10-NEXT: pli r5, 3567587329 106; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 107; CHECK-P10-NEXT: lxvx v2, r3, r5 108; CHECK-P10-NEXT: blr 109; 110; CHECK-PREP10-LABEL: ld_unalign64___float128___float128: 111; CHECK-PREP10: # %bb.0: # %entry 112; CHECK-PREP10-NEXT: li r4, 29 113; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 114; CHECK-PREP10-NEXT: oris r4, r4, 54437 115; CHECK-PREP10-NEXT: ori r4, r4, 4097 116; CHECK-PREP10-NEXT: lxvx v2, r3, r4 117; CHECK-PREP10-NEXT: blr 118entry: 119 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000001 120 %0 = bitcast i8* %add.ptr to fp128* 121 %1 = load fp128, fp128* %0, align 16 122 ret fp128 %1 123} 124 125; Function Attrs: norecurse nounwind readonly willreturn 126define dso_local fp128 @ld_align64___float128___float128(i8* nocapture readonly %ptr) { 127; CHECK-P10-LABEL: ld_align64___float128___float128: 128; CHECK-P10: # %bb.0: # %entry 129; CHECK-P10-NEXT: pli r4, 244140625 130; CHECK-P10-NEXT: rldic r4, r4, 12, 24 131; CHECK-P10-NEXT: lxvx v2, r3, r4 132; CHECK-P10-NEXT: blr 133; 134; CHECK-PREP10-LABEL: ld_align64___float128___float128: 135; CHECK-PREP10: # %bb.0: # %entry 136; CHECK-PREP10-NEXT: lis r4, 3725 137; CHECK-PREP10-NEXT: ori r4, r4, 19025 138; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 139; CHECK-PREP10-NEXT: lxvx v2, r3, r4 140; CHECK-PREP10-NEXT: blr 141entry: 142 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 143 %0 = bitcast i8* %add.ptr to fp128* 144 %1 = load fp128, fp128* %0, align 16 145 ret fp128 %1 146} 147 148; Function Attrs: norecurse nounwind readonly willreturn 149define dso_local fp128 @ld_reg___float128___float128(i8* nocapture readonly %ptr, i64 %off) { 150; CHECK-LABEL: ld_reg___float128___float128: 151; CHECK: # %bb.0: # %entry 152; CHECK-NEXT: lxvx v2, r3, r4 153; CHECK-NEXT: blr 154entry: 155 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 156 %0 = bitcast i8* %add.ptr to fp128* 157 %1 = load fp128, fp128* %0, align 16 158 ret fp128 %1 159} 160 161; Function Attrs: norecurse nounwind readonly willreturn 162define dso_local fp128 @ld_or___float128___float128(i64 %ptr, i8 zeroext %off) { 163; CHECK-LABEL: ld_or___float128___float128: 164; CHECK: # %bb.0: # %entry 165; CHECK-NEXT: or r3, r4, r3 166; CHECK-NEXT: lxvx v2, 0, r3 167; CHECK-NEXT: blr 168entry: 169 %conv = zext i8 %off to i64 170 %or = or i64 %conv, %ptr 171 %0 = inttoptr i64 %or to fp128* 172 %1 = load fp128, fp128* %0, align 16 173 ret fp128 %1 174} 175 176; Function Attrs: norecurse nounwind readonly willreturn 177define dso_local fp128 @ld_or2___float128___float128(i64 %ptr, i8 zeroext %off) { 178; CHECK-LABEL: ld_or2___float128___float128: 179; CHECK: # %bb.0: # %entry 180; CHECK-NEXT: rldicr r3, r3, 0, 51 181; CHECK-NEXT: lxvx v2, r3, r4 182; CHECK-NEXT: blr 183entry: 184 %and = and i64 %ptr, -4096 185 %conv = zext i8 %off to i64 186 %or = or i64 %and, %conv 187 %0 = inttoptr i64 %or to fp128* 188 %1 = load fp128, fp128* %0, align 16 189 ret fp128 %1 190} 191 192; Function Attrs: norecurse nounwind readonly willreturn 193define dso_local fp128 @ld_not_disjoint16___float128___float128(i64 %ptr) { 194; CHECK-LABEL: ld_not_disjoint16___float128___float128: 195; CHECK: # %bb.0: # %entry 196; CHECK-NEXT: ori r3, r3, 6 197; CHECK-NEXT: lxvx v2, 0, r3 198; CHECK-NEXT: blr 199entry: 200 %or = or i64 %ptr, 6 201 %0 = inttoptr i64 %or to fp128* 202 %1 = load fp128, fp128* %0, align 16 203 ret fp128 %1 204} 205 206; Function Attrs: norecurse nounwind readonly willreturn 207define dso_local fp128 @ld_disjoint_unalign16___float128___float128(i64 %ptr) { 208; CHECK-LABEL: ld_disjoint_unalign16___float128___float128: 209; CHECK: # %bb.0: # %entry 210; CHECK-NEXT: rldicr r3, r3, 0, 51 211; CHECK-NEXT: ori r3, r3, 6 212; CHECK-NEXT: lxvx v2, 0, r3 213; CHECK-NEXT: blr 214entry: 215 %and = and i64 %ptr, -4096 216 %or = or i64 %and, 6 217 %0 = inttoptr i64 %or to fp128* 218 %1 = load fp128, fp128* %0, align 16 219 ret fp128 %1 220} 221 222; Function Attrs: norecurse nounwind readonly willreturn 223define dso_local fp128 @ld_disjoint_align16___float128___float128(i64 %ptr) { 224; CHECK-LABEL: ld_disjoint_align16___float128___float128: 225; CHECK: # %bb.0: # %entry 226; CHECK-NEXT: rldicr r3, r3, 0, 51 227; CHECK-NEXT: ori r3, r3, 24 228; CHECK-NEXT: lxvx v2, 0, r3 229; CHECK-NEXT: blr 230entry: 231 %and = and i64 %ptr, -4096 232 %or = or i64 %and, 24 233 %0 = inttoptr i64 %or to fp128* 234 %1 = load fp128, fp128* %0, align 16 235 ret fp128 %1 236} 237 238; Function Attrs: norecurse nounwind readonly willreturn 239define dso_local fp128 @ld_not_disjoint32___float128___float128(i64 %ptr) { 240; CHECK-LABEL: ld_not_disjoint32___float128___float128: 241; CHECK: # %bb.0: # %entry 242; CHECK-NEXT: ori r3, r3, 34463 243; CHECK-NEXT: oris r3, r3, 1 244; CHECK-NEXT: lxvx v2, 0, r3 245; CHECK-NEXT: blr 246entry: 247 %or = or i64 %ptr, 99999 248 %0 = inttoptr i64 %or to fp128* 249 %1 = load fp128, fp128* %0, align 16 250 ret fp128 %1 251} 252 253; Function Attrs: norecurse nounwind readonly willreturn 254define dso_local fp128 @ld_disjoint_unalign32___float128___float128(i64 %ptr) { 255; CHECK-P10-LABEL: ld_disjoint_unalign32___float128___float128: 256; CHECK-P10: # %bb.0: # %entry 257; CHECK-P10-NEXT: rldicr r3, r3, 0, 43 258; CHECK-P10-NEXT: pli r4, 99999 259; CHECK-P10-NEXT: lxvx v2, r3, r4 260; CHECK-P10-NEXT: blr 261; 262; CHECK-PREP10-LABEL: ld_disjoint_unalign32___float128___float128: 263; CHECK-PREP10: # %bb.0: # %entry 264; CHECK-PREP10-NEXT: lis r4, 1 265; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 43 266; CHECK-PREP10-NEXT: ori r4, r4, 34463 267; CHECK-PREP10-NEXT: lxvx v2, r3, r4 268; CHECK-PREP10-NEXT: blr 269entry: 270 %and = and i64 %ptr, -1048576 271 %or = or i64 %and, 99999 272 %0 = inttoptr i64 %or to fp128* 273 %1 = load fp128, fp128* %0, align 16 274 ret fp128 %1 275} 276 277; Function Attrs: norecurse nounwind readonly willreturn 278define dso_local fp128 @ld_disjoint_align32___float128___float128(i64 %ptr) { 279; CHECK-P10-LABEL: ld_disjoint_align32___float128___float128: 280; CHECK-P10: # %bb.0: # %entry 281; CHECK-P10-NEXT: lis r4, -15264 282; CHECK-P10-NEXT: and r3, r3, r4 283; CHECK-P10-NEXT: pli r4, 999990000 284; CHECK-P10-NEXT: lxvx v2, r3, r4 285; CHECK-P10-NEXT: blr 286; 287; CHECK-PREP10-LABEL: ld_disjoint_align32___float128___float128: 288; CHECK-PREP10: # %bb.0: # %entry 289; CHECK-PREP10-NEXT: lis r4, -15264 290; CHECK-PREP10-NEXT: and r3, r3, r4 291; CHECK-PREP10-NEXT: lis r4, 15258 292; CHECK-PREP10-NEXT: ori r4, r4, 41712 293; CHECK-PREP10-NEXT: lxvx v2, r3, r4 294; CHECK-PREP10-NEXT: blr 295entry: 296 %and = and i64 %ptr, -1000341504 297 %or = or i64 %and, 999990000 298 %0 = inttoptr i64 %or to fp128* 299 %1 = load fp128, fp128* %0, align 16 300 ret fp128 %1 301} 302 303; Function Attrs: norecurse nounwind readonly willreturn 304define dso_local fp128 @ld_not_disjoint64___float128___float128(i64 %ptr) { 305; CHECK-P10-LABEL: ld_not_disjoint64___float128___float128: 306; CHECK-P10: # %bb.0: # %entry 307; CHECK-P10-NEXT: pli r4, 232 308; CHECK-P10-NEXT: pli r5, 3567587329 309; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 310; CHECK-P10-NEXT: or r3, r3, r5 311; CHECK-P10-NEXT: lxvx v2, 0, r3 312; CHECK-P10-NEXT: blr 313; 314; CHECK-PREP10-LABEL: ld_not_disjoint64___float128___float128: 315; CHECK-PREP10: # %bb.0: # %entry 316; CHECK-PREP10-NEXT: li r4, 29 317; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 318; CHECK-PREP10-NEXT: oris r4, r4, 54437 319; CHECK-PREP10-NEXT: ori r4, r4, 4097 320; CHECK-PREP10-NEXT: or r3, r3, r4 321; CHECK-PREP10-NEXT: lxvx v2, 0, r3 322; CHECK-PREP10-NEXT: blr 323entry: 324 %or = or i64 %ptr, 1000000000001 325 %0 = inttoptr i64 %or to fp128* 326 %1 = load fp128, fp128* %0, align 16 327 ret fp128 %1 328} 329 330; Function Attrs: norecurse nounwind readonly willreturn 331define dso_local fp128 @ld_disjoint_unalign64___float128___float128(i64 %ptr) { 332; CHECK-P10-LABEL: ld_disjoint_unalign64___float128___float128: 333; CHECK-P10: # %bb.0: # %entry 334; CHECK-P10-NEXT: pli r4, 232 335; CHECK-P10-NEXT: pli r5, 3567587329 336; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 337; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 338; CHECK-P10-NEXT: lxvx v2, r3, r5 339; CHECK-P10-NEXT: blr 340; 341; CHECK-PREP10-LABEL: ld_disjoint_unalign64___float128___float128: 342; CHECK-PREP10: # %bb.0: # %entry 343; CHECK-PREP10-NEXT: li r4, 29 344; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 345; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 346; CHECK-PREP10-NEXT: oris r4, r4, 54437 347; CHECK-PREP10-NEXT: ori r4, r4, 4097 348; CHECK-PREP10-NEXT: lxvx v2, r3, r4 349; CHECK-PREP10-NEXT: blr 350entry: 351 %and = and i64 %ptr, -1099511627776 352 %or = or i64 %and, 1000000000001 353 %0 = inttoptr i64 %or to fp128* 354 %1 = load fp128, fp128* %0, align 16 355 ret fp128 %1 356} 357 358; Function Attrs: norecurse nounwind readonly willreturn 359define dso_local fp128 @ld_disjoint_align64___float128___float128(i64 %ptr) { 360; CHECK-P10-LABEL: ld_disjoint_align64___float128___float128: 361; CHECK-P10: # %bb.0: # %entry 362; CHECK-P10-NEXT: pli r4, 244140625 363; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 364; CHECK-P10-NEXT: rldic r4, r4, 12, 24 365; CHECK-P10-NEXT: lxvx v2, r3, r4 366; CHECK-P10-NEXT: blr 367; 368; CHECK-PREP10-LABEL: ld_disjoint_align64___float128___float128: 369; CHECK-PREP10: # %bb.0: # %entry 370; CHECK-PREP10-NEXT: lis r4, 3725 371; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 372; CHECK-PREP10-NEXT: ori r4, r4, 19025 373; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 374; CHECK-PREP10-NEXT: lxvx v2, r3, r4 375; CHECK-PREP10-NEXT: blr 376entry: 377 %and = and i64 %ptr, -1099511627776 378 %or = or i64 %and, 1000000000000 379 %0 = inttoptr i64 %or to fp128* 380 %1 = load fp128, fp128* %0, align 4096 381 ret fp128 %1 382} 383 384; Function Attrs: norecurse nounwind readonly willreturn 385define dso_local fp128 @ld_cst_unalign16___float128___float128() { 386; CHECK-LABEL: ld_cst_unalign16___float128___float128: 387; CHECK: # %bb.0: # %entry 388; CHECK-NEXT: li r3, 255 389; CHECK-NEXT: lxvx v2, 0, r3 390; CHECK-NEXT: blr 391entry: 392 %0 = load fp128, fp128* inttoptr (i64 255 to fp128*), align 16 393 ret fp128 %0 394} 395 396; Function Attrs: norecurse nounwind readonly willreturn 397define dso_local fp128 @ld_cst_align16___float128___float128() { 398; CHECK-LABEL: ld_cst_align16___float128___float128: 399; CHECK: # %bb.0: # %entry 400; CHECK-NEXT: lxv v2, 4080(0) 401; CHECK-NEXT: blr 402entry: 403 %0 = load fp128, fp128* inttoptr (i64 4080 to fp128*), align 16 404 ret fp128 %0 405} 406 407; Function Attrs: norecurse nounwind readonly willreturn 408define dso_local fp128 @ld_cst_unalign32___float128___float128() { 409; CHECK-P10-LABEL: ld_cst_unalign32___float128___float128: 410; CHECK-P10: # %bb.0: # %entry 411; CHECK-P10-NEXT: pli r3, 99999 412; CHECK-P10-NEXT: lxvx v2, 0, r3 413; CHECK-P10-NEXT: blr 414; 415; CHECK-PREP10-LABEL: ld_cst_unalign32___float128___float128: 416; CHECK-PREP10: # %bb.0: # %entry 417; CHECK-PREP10-NEXT: lis r3, 1 418; CHECK-PREP10-NEXT: ori r3, r3, 34463 419; CHECK-PREP10-NEXT: lxvx v2, 0, r3 420; CHECK-PREP10-NEXT: blr 421entry: 422 %0 = load fp128, fp128* inttoptr (i64 99999 to fp128*), align 16 423 ret fp128 %0 424} 425 426; Function Attrs: norecurse nounwind readonly willreturn 427define dso_local fp128 @ld_cst_align32___float128___float128() { 428; CHECK-P10-LABEL: ld_cst_align32___float128___float128: 429; CHECK-P10: # %bb.0: # %entry 430; CHECK-P10-NEXT: pli r3, 9999900 431; CHECK-P10-NEXT: lxvx v2, 0, r3 432; CHECK-P10-NEXT: blr 433; 434; CHECK-PREP10-LABEL: ld_cst_align32___float128___float128: 435; CHECK-PREP10: # %bb.0: # %entry 436; CHECK-PREP10-NEXT: lis r3, 152 437; CHECK-PREP10-NEXT: ori r3, r3, 38428 438; CHECK-PREP10-NEXT: lxvx v2, 0, r3 439; CHECK-PREP10-NEXT: blr 440entry: 441 %0 = load fp128, fp128* inttoptr (i64 9999900 to fp128*), align 16 442 ret fp128 %0 443} 444 445; Function Attrs: norecurse nounwind readonly willreturn 446define dso_local fp128 @ld_cst_unalign64___float128___float128() { 447; CHECK-P10-LABEL: ld_cst_unalign64___float128___float128: 448; CHECK-P10: # %bb.0: # %entry 449; CHECK-P10-NEXT: pli r3, 232 450; CHECK-P10-NEXT: pli r4, 3567587329 451; CHECK-P10-NEXT: rldimi r4, r3, 32, 0 452; CHECK-P10-NEXT: lxvx v2, 0, r4 453; CHECK-P10-NEXT: blr 454; 455; CHECK-PREP10-LABEL: ld_cst_unalign64___float128___float128: 456; CHECK-PREP10: # %bb.0: # %entry 457; CHECK-PREP10-NEXT: li r3, 29 458; CHECK-PREP10-NEXT: rldic r3, r3, 35, 24 459; CHECK-PREP10-NEXT: oris r3, r3, 54437 460; CHECK-PREP10-NEXT: ori r3, r3, 4097 461; CHECK-PREP10-NEXT: lxvx v2, 0, r3 462; CHECK-PREP10-NEXT: blr 463entry: 464 %0 = load fp128, fp128* inttoptr (i64 1000000000001 to fp128*), align 16 465 ret fp128 %0 466} 467 468; Function Attrs: norecurse nounwind readonly willreturn 469define dso_local fp128 @ld_cst_align64___float128___float128() { 470; CHECK-P10-LABEL: ld_cst_align64___float128___float128: 471; CHECK-P10: # %bb.0: # %entry 472; CHECK-P10-NEXT: pli r3, 244140625 473; CHECK-P10-NEXT: rldic r3, r3, 12, 24 474; CHECK-P10-NEXT: lxvx v2, 0, r3 475; CHECK-P10-NEXT: blr 476; 477; CHECK-PREP10-LABEL: ld_cst_align64___float128___float128: 478; CHECK-PREP10: # %bb.0: # %entry 479; CHECK-PREP10-NEXT: lis r3, 3725 480; CHECK-PREP10-NEXT: ori r3, r3, 19025 481; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 482; CHECK-PREP10-NEXT: lxvx v2, 0, r3 483; CHECK-PREP10-NEXT: blr 484entry: 485 %0 = load fp128, fp128* inttoptr (i64 1000000000000 to fp128*), align 4096 486 ret fp128 %0 487} 488 489; Function Attrs: nofree norecurse nounwind willreturn writeonly 490define dso_local void @st_0___float128___float128(i64 %ptr, fp128 %str) { 491; CHECK-LABEL: st_0___float128___float128: 492; CHECK: # %bb.0: # %entry 493; CHECK-NEXT: stxv v2, 0(r3) 494; CHECK-NEXT: blr 495entry: 496 %0 = inttoptr i64 %ptr to fp128* 497 store fp128 %str, fp128* %0, align 16 498 ret void 499} 500 501; Function Attrs: nofree norecurse nounwind willreturn writeonly 502define dso_local void @st_unalign16___float128___float128(i8* nocapture %ptr, fp128 %str) { 503; CHECK-LABEL: st_unalign16___float128___float128: 504; CHECK: # %bb.0: # %entry 505; CHECK-NEXT: addi r3, r3, 1 506; CHECK-NEXT: stxvx v2, 0, r3 507; CHECK-NEXT: blr 508entry: 509 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1 510 %0 = bitcast i8* %add.ptr to fp128* 511 store fp128 %str, fp128* %0, align 16 512 ret void 513} 514 515; Function Attrs: nofree norecurse nounwind willreturn writeonly 516define dso_local void @st_align16___float128___float128(i8* nocapture %ptr, fp128 %str) { 517; CHECK-LABEL: st_align16___float128___float128: 518; CHECK: # %bb.0: # %entry 519; CHECK-NEXT: addi r3, r3, 8 520; CHECK-NEXT: stxvx v2, 0, r3 521; CHECK-NEXT: blr 522entry: 523 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 524 %0 = bitcast i8* %add.ptr to fp128* 525 store fp128 %str, fp128* %0, align 16 526 ret void 527} 528 529; Function Attrs: nofree norecurse nounwind willreturn writeonly 530define dso_local void @st_unalign32___float128___float128(i8* nocapture %ptr, fp128 %str) { 531; CHECK-P10-LABEL: st_unalign32___float128___float128: 532; CHECK-P10: # %bb.0: # %entry 533; CHECK-P10-NEXT: pli r4, 99999 534; CHECK-P10-NEXT: stxvx v2, r3, r4 535; CHECK-P10-NEXT: blr 536; 537; CHECK-PREP10-LABEL: st_unalign32___float128___float128: 538; CHECK-PREP10: # %bb.0: # %entry 539; CHECK-PREP10-NEXT: lis r4, 1 540; CHECK-PREP10-NEXT: ori r4, r4, 34463 541; CHECK-PREP10-NEXT: stxvx v2, r3, r4 542; CHECK-PREP10-NEXT: blr 543entry: 544 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999 545 %0 = bitcast i8* %add.ptr to fp128* 546 store fp128 %str, fp128* %0, align 16 547 ret void 548} 549 550; Function Attrs: nofree norecurse nounwind willreturn writeonly 551define dso_local void @st_align32___float128___float128(i8* nocapture %ptr, fp128 %str) { 552; CHECK-P10-LABEL: st_align32___float128___float128: 553; CHECK-P10: # %bb.0: # %entry 554; CHECK-P10-NEXT: pli r4, 99999000 555; CHECK-P10-NEXT: stxvx v2, r3, r4 556; CHECK-P10-NEXT: blr 557; 558; CHECK-PREP10-LABEL: st_align32___float128___float128: 559; CHECK-PREP10: # %bb.0: # %entry 560; CHECK-PREP10-NEXT: lis r4, 1525 561; CHECK-PREP10-NEXT: ori r4, r4, 56600 562; CHECK-PREP10-NEXT: stxvx v2, r3, r4 563; CHECK-PREP10-NEXT: blr 564entry: 565 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 566 %0 = bitcast i8* %add.ptr to fp128* 567 store fp128 %str, fp128* %0, align 16 568 ret void 569} 570 571; Function Attrs: nofree norecurse nounwind willreturn writeonly 572define dso_local void @st_unalign64___float128___float128(i8* nocapture %ptr, fp128 %str) { 573; CHECK-P10-LABEL: st_unalign64___float128___float128: 574; CHECK-P10: # %bb.0: # %entry 575; CHECK-P10-NEXT: pli r4, 232 576; CHECK-P10-NEXT: pli r5, 3567587329 577; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 578; CHECK-P10-NEXT: stxvx v2, r3, r5 579; CHECK-P10-NEXT: blr 580; 581; CHECK-PREP10-LABEL: st_unalign64___float128___float128: 582; CHECK-PREP10: # %bb.0: # %entry 583; CHECK-PREP10-NEXT: li r4, 29 584; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 585; CHECK-PREP10-NEXT: oris r4, r4, 54437 586; CHECK-PREP10-NEXT: ori r4, r4, 4097 587; CHECK-PREP10-NEXT: stxvx v2, r3, r4 588; CHECK-PREP10-NEXT: blr 589entry: 590 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000001 591 %0 = bitcast i8* %add.ptr to fp128* 592 store fp128 %str, fp128* %0, align 16 593 ret void 594} 595 596; Function Attrs: nofree norecurse nounwind willreturn writeonly 597define dso_local void @st_align64___float128___float128(i8* nocapture %ptr, fp128 %str) { 598; CHECK-P10-LABEL: st_align64___float128___float128: 599; CHECK-P10: # %bb.0: # %entry 600; CHECK-P10-NEXT: pli r4, 244140625 601; CHECK-P10-NEXT: rldic r4, r4, 12, 24 602; CHECK-P10-NEXT: stxvx v2, r3, r4 603; CHECK-P10-NEXT: blr 604; 605; CHECK-PREP10-LABEL: st_align64___float128___float128: 606; CHECK-PREP10: # %bb.0: # %entry 607; CHECK-PREP10-NEXT: lis r4, 3725 608; CHECK-PREP10-NEXT: ori r4, r4, 19025 609; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 610; CHECK-PREP10-NEXT: stxvx v2, r3, r4 611; CHECK-PREP10-NEXT: blr 612entry: 613 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 614 %0 = bitcast i8* %add.ptr to fp128* 615 store fp128 %str, fp128* %0, align 16 616 ret void 617} 618 619; Function Attrs: nofree norecurse nounwind willreturn writeonly 620define dso_local void @st_reg___float128___float128(i8* nocapture %ptr, i64 %off, fp128 %str) { 621; CHECK-LABEL: st_reg___float128___float128: 622; CHECK: # %bb.0: # %entry 623; CHECK-NEXT: stxvx v2, r3, r4 624; CHECK-NEXT: blr 625entry: 626 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 627 %0 = bitcast i8* %add.ptr to fp128* 628 store fp128 %str, fp128* %0, align 16 629 ret void 630} 631 632; Function Attrs: nofree norecurse nounwind willreturn writeonly 633define dso_local void @st_or1___float128___float128(i64 %ptr, i8 zeroext %off, fp128 %str) { 634; CHECK-LABEL: st_or1___float128___float128: 635; CHECK: # %bb.0: # %entry 636; CHECK-NEXT: or r3, r4, r3 637; CHECK-NEXT: stxvx v2, 0, r3 638; CHECK-NEXT: blr 639entry: 640 %conv = zext i8 %off to i64 641 %or = or i64 %conv, %ptr 642 %0 = inttoptr i64 %or to fp128* 643 store fp128 %str, fp128* %0, align 16 644 ret void 645} 646 647; Function Attrs: nofree norecurse nounwind willreturn writeonly 648define dso_local void @st_or2___float128___float128(i64 %ptr, i8 zeroext %off, fp128 %str) { 649; CHECK-LABEL: st_or2___float128___float128: 650; CHECK: # %bb.0: # %entry 651; CHECK-NEXT: rldicr r3, r3, 0, 51 652; CHECK-NEXT: stxvx v2, r3, r4 653; CHECK-NEXT: blr 654entry: 655 %and = and i64 %ptr, -4096 656 %conv = zext i8 %off to i64 657 %or = or i64 %and, %conv 658 %0 = inttoptr i64 %or to fp128* 659 store fp128 %str, fp128* %0, align 16 660 ret void 661} 662 663; Function Attrs: nofree norecurse nounwind willreturn writeonly 664define dso_local void @st_not_disjoint16___float128___float128(i64 %ptr, fp128 %str) { 665; CHECK-LABEL: st_not_disjoint16___float128___float128: 666; CHECK: # %bb.0: # %entry 667; CHECK-NEXT: ori r3, r3, 6 668; CHECK-NEXT: stxvx v2, 0, r3 669; CHECK-NEXT: blr 670entry: 671 %or = or i64 %ptr, 6 672 %0 = inttoptr i64 %or to fp128* 673 store fp128 %str, fp128* %0, align 16 674 ret void 675} 676 677; Function Attrs: nofree norecurse nounwind willreturn writeonly 678define dso_local void @st_disjoint_unalign16___float128___float128(i64 %ptr, fp128 %str) { 679; CHECK-LABEL: st_disjoint_unalign16___float128___float128: 680; CHECK: # %bb.0: # %entry 681; CHECK-NEXT: rldicr r3, r3, 0, 51 682; CHECK-NEXT: ori r3, r3, 6 683; CHECK-NEXT: stxvx v2, 0, r3 684; CHECK-NEXT: blr 685entry: 686 %and = and i64 %ptr, -4096 687 %or = or i64 %and, 6 688 %0 = inttoptr i64 %or to fp128* 689 store fp128 %str, fp128* %0, align 16 690 ret void 691} 692 693; Function Attrs: nofree norecurse nounwind willreturn writeonly 694define dso_local void @st_disjoint_align16___float128___float128(i64 %ptr, fp128 %str) { 695; CHECK-LABEL: st_disjoint_align16___float128___float128: 696; CHECK: # %bb.0: # %entry 697; CHECK-NEXT: rldicr r3, r3, 0, 51 698; CHECK-NEXT: ori r3, r3, 24 699; CHECK-NEXT: stxvx v2, 0, r3 700; CHECK-NEXT: blr 701entry: 702 %and = and i64 %ptr, -4096 703 %or = or i64 %and, 24 704 %0 = inttoptr i64 %or to fp128* 705 store fp128 %str, fp128* %0, align 16 706 ret void 707} 708 709; Function Attrs: nofree norecurse nounwind willreturn writeonly 710define dso_local void @st_not_disjoint32___float128___float128(i64 %ptr, fp128 %str) { 711; CHECK-LABEL: st_not_disjoint32___float128___float128: 712; CHECK: # %bb.0: # %entry 713; CHECK-NEXT: ori r3, r3, 34463 714; CHECK-NEXT: oris r3, r3, 1 715; CHECK-NEXT: stxvx v2, 0, r3 716; CHECK-NEXT: blr 717entry: 718 %or = or i64 %ptr, 99999 719 %0 = inttoptr i64 %or to fp128* 720 store fp128 %str, fp128* %0, align 16 721 ret void 722} 723 724; Function Attrs: nofree norecurse nounwind willreturn writeonly 725define dso_local void @st_disjoint_unalign32___float128___float128(i64 %ptr, fp128 %str) { 726; CHECK-P10-LABEL: st_disjoint_unalign32___float128___float128: 727; CHECK-P10: # %bb.0: # %entry 728; CHECK-P10-NEXT: rldicr r3, r3, 0, 43 729; CHECK-P10-NEXT: pli r4, 99999 730; CHECK-P10-NEXT: stxvx v2, r3, r4 731; CHECK-P10-NEXT: blr 732; 733; CHECK-PREP10-LABEL: st_disjoint_unalign32___float128___float128: 734; CHECK-PREP10: # %bb.0: # %entry 735; CHECK-PREP10-NEXT: lis r4, 1 736; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 43 737; CHECK-PREP10-NEXT: ori r4, r4, 34463 738; CHECK-PREP10-NEXT: stxvx v2, r3, r4 739; CHECK-PREP10-NEXT: blr 740entry: 741 %and = and i64 %ptr, -1048576 742 %or = or i64 %and, 99999 743 %0 = inttoptr i64 %or to fp128* 744 store fp128 %str, fp128* %0, align 16 745 ret void 746} 747 748; Function Attrs: nofree norecurse nounwind willreturn writeonly 749define dso_local void @st_disjoint_align32___float128___float128(i64 %ptr, fp128 %str) { 750; CHECK-P10-LABEL: st_disjoint_align32___float128___float128: 751; CHECK-P10: # %bb.0: # %entry 752; CHECK-P10-NEXT: lis r4, -15264 753; CHECK-P10-NEXT: and r3, r3, r4 754; CHECK-P10-NEXT: pli r4, 999990000 755; CHECK-P10-NEXT: stxvx v2, r3, r4 756; CHECK-P10-NEXT: blr 757; 758; CHECK-PREP10-LABEL: st_disjoint_align32___float128___float128: 759; CHECK-PREP10: # %bb.0: # %entry 760; CHECK-PREP10-NEXT: lis r4, -15264 761; CHECK-PREP10-NEXT: and r3, r3, r4 762; CHECK-PREP10-NEXT: lis r4, 15258 763; CHECK-PREP10-NEXT: ori r4, r4, 41712 764; CHECK-PREP10-NEXT: stxvx v2, r3, r4 765; CHECK-PREP10-NEXT: blr 766entry: 767 %and = and i64 %ptr, -1000341504 768 %or = or i64 %and, 999990000 769 %0 = inttoptr i64 %or to fp128* 770 store fp128 %str, fp128* %0, align 16 771 ret void 772} 773 774; Function Attrs: nofree norecurse nounwind willreturn writeonly 775define dso_local void @st_not_disjoint64___float128___float128(i64 %ptr, fp128 %str) { 776; CHECK-P10-LABEL: st_not_disjoint64___float128___float128: 777; CHECK-P10: # %bb.0: # %entry 778; CHECK-P10-NEXT: pli r4, 232 779; CHECK-P10-NEXT: pli r5, 3567587329 780; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 781; CHECK-P10-NEXT: or r3, r3, r5 782; CHECK-P10-NEXT: stxvx v2, 0, r3 783; CHECK-P10-NEXT: blr 784; 785; CHECK-PREP10-LABEL: st_not_disjoint64___float128___float128: 786; CHECK-PREP10: # %bb.0: # %entry 787; CHECK-PREP10-NEXT: li r4, 29 788; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 789; CHECK-PREP10-NEXT: oris r4, r4, 54437 790; CHECK-PREP10-NEXT: ori r4, r4, 4097 791; CHECK-PREP10-NEXT: or r3, r3, r4 792; CHECK-PREP10-NEXT: stxvx v2, 0, r3 793; CHECK-PREP10-NEXT: blr 794entry: 795 %or = or i64 %ptr, 1000000000001 796 %0 = inttoptr i64 %or to fp128* 797 store fp128 %str, fp128* %0, align 16 798 ret void 799} 800 801; Function Attrs: nofree norecurse nounwind willreturn writeonly 802define dso_local void @st_disjoint_unalign64___float128___float128(i64 %ptr, fp128 %str) { 803; CHECK-P10-LABEL: st_disjoint_unalign64___float128___float128: 804; CHECK-P10: # %bb.0: # %entry 805; CHECK-P10-NEXT: pli r4, 232 806; CHECK-P10-NEXT: pli r5, 3567587329 807; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 808; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 809; CHECK-P10-NEXT: stxvx v2, r3, r5 810; CHECK-P10-NEXT: blr 811; 812; CHECK-PREP10-LABEL: st_disjoint_unalign64___float128___float128: 813; CHECK-PREP10: # %bb.0: # %entry 814; CHECK-PREP10-NEXT: li r4, 29 815; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 816; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 817; CHECK-PREP10-NEXT: oris r4, r4, 54437 818; CHECK-PREP10-NEXT: ori r4, r4, 4097 819; CHECK-PREP10-NEXT: stxvx v2, r3, r4 820; CHECK-PREP10-NEXT: blr 821entry: 822 %and = and i64 %ptr, -1099511627776 823 %or = or i64 %and, 1000000000001 824 %0 = inttoptr i64 %or to fp128* 825 store fp128 %str, fp128* %0, align 16 826 ret void 827} 828 829; Function Attrs: nofree norecurse nounwind willreturn writeonly 830define dso_local void @st_disjoint_align64___float128___float128(i64 %ptr, fp128 %str) { 831; CHECK-P10-LABEL: st_disjoint_align64___float128___float128: 832; CHECK-P10: # %bb.0: # %entry 833; CHECK-P10-NEXT: pli r4, 244140625 834; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 835; CHECK-P10-NEXT: rldic r4, r4, 12, 24 836; CHECK-P10-NEXT: stxvx v2, r3, r4 837; CHECK-P10-NEXT: blr 838; 839; CHECK-PREP10-LABEL: st_disjoint_align64___float128___float128: 840; CHECK-PREP10: # %bb.0: # %entry 841; CHECK-PREP10-NEXT: lis r4, 3725 842; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 843; CHECK-PREP10-NEXT: ori r4, r4, 19025 844; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 845; CHECK-PREP10-NEXT: stxvx v2, r3, r4 846; CHECK-PREP10-NEXT: blr 847entry: 848 %and = and i64 %ptr, -1099511627776 849 %or = or i64 %and, 1000000000000 850 %0 = inttoptr i64 %or to fp128* 851 store fp128 %str, fp128* %0, align 4096 852 ret void 853} 854 855; Function Attrs: nofree norecurse nounwind willreturn writeonly 856define dso_local void @st_cst_unalign16___float128___float128(fp128 %str) { 857; CHECK-LABEL: st_cst_unalign16___float128___float128: 858; CHECK: # %bb.0: # %entry 859; CHECK-NEXT: li r3, 255 860; CHECK-NEXT: stxvx v2, 0, r3 861; CHECK-NEXT: blr 862entry: 863 store fp128 %str, fp128* inttoptr (i64 255 to fp128*), align 16 864 ret void 865} 866 867; Function Attrs: nofree norecurse nounwind willreturn writeonly 868define dso_local void @st_cst_align16___float128___float128(fp128 %str) { 869; CHECK-LABEL: st_cst_align16___float128___float128: 870; CHECK: # %bb.0: # %entry 871; CHECK-NEXT: stxv v2, 4080(0) 872; CHECK-NEXT: blr 873entry: 874 store fp128 %str, fp128* inttoptr (i64 4080 to fp128*), align 16 875 ret void 876} 877 878; Function Attrs: nofree norecurse nounwind willreturn writeonly 879define dso_local void @st_cst_unalign32___float128___float128(fp128 %str) { 880; CHECK-P10-LABEL: st_cst_unalign32___float128___float128: 881; CHECK-P10: # %bb.0: # %entry 882; CHECK-P10-NEXT: pli r3, 99999 883; CHECK-P10-NEXT: stxvx v2, 0, r3 884; CHECK-P10-NEXT: blr 885; 886; CHECK-PREP10-LABEL: st_cst_unalign32___float128___float128: 887; CHECK-PREP10: # %bb.0: # %entry 888; CHECK-PREP10-NEXT: lis r3, 1 889; CHECK-PREP10-NEXT: ori r3, r3, 34463 890; CHECK-PREP10-NEXT: stxvx v2, 0, r3 891; CHECK-PREP10-NEXT: blr 892entry: 893 store fp128 %str, fp128* inttoptr (i64 99999 to fp128*), align 16 894 ret void 895} 896 897; Function Attrs: nofree norecurse nounwind willreturn writeonly 898define dso_local void @st_cst_align32___float128___float128(fp128 %str) { 899; CHECK-P10-LABEL: st_cst_align32___float128___float128: 900; CHECK-P10: # %bb.0: # %entry 901; CHECK-P10-NEXT: pli r3, 9999900 902; CHECK-P10-NEXT: stxvx v2, 0, r3 903; CHECK-P10-NEXT: blr 904; 905; CHECK-PREP10-LABEL: st_cst_align32___float128___float128: 906; CHECK-PREP10: # %bb.0: # %entry 907; CHECK-PREP10-NEXT: lis r3, 152 908; CHECK-PREP10-NEXT: ori r3, r3, 38428 909; CHECK-PREP10-NEXT: stxvx v2, 0, r3 910; CHECK-PREP10-NEXT: blr 911entry: 912 store fp128 %str, fp128* inttoptr (i64 9999900 to fp128*), align 16 913 ret void 914} 915 916; Function Attrs: nofree norecurse nounwind willreturn writeonly 917define dso_local void @st_cst_unalign64___float128___float128(fp128 %str) { 918; CHECK-P10-LABEL: st_cst_unalign64___float128___float128: 919; CHECK-P10: # %bb.0: # %entry 920; CHECK-P10-NEXT: pli r3, 232 921; CHECK-P10-NEXT: pli r4, 3567587329 922; CHECK-P10-NEXT: rldimi r4, r3, 32, 0 923; CHECK-P10-NEXT: stxvx v2, 0, r4 924; CHECK-P10-NEXT: blr 925; 926; CHECK-PREP10-LABEL: st_cst_unalign64___float128___float128: 927; CHECK-PREP10: # %bb.0: # %entry 928; CHECK-PREP10-NEXT: li r3, 29 929; CHECK-PREP10-NEXT: rldic r3, r3, 35, 24 930; CHECK-PREP10-NEXT: oris r3, r3, 54437 931; CHECK-PREP10-NEXT: ori r3, r3, 4097 932; CHECK-PREP10-NEXT: stxvx v2, 0, r3 933; CHECK-PREP10-NEXT: blr 934entry: 935 store fp128 %str, fp128* inttoptr (i64 1000000000001 to fp128*), align 16 936 ret void 937} 938 939; Function Attrs: nofree norecurse nounwind willreturn writeonly 940define dso_local void @st_cst_align64___float128___float128(fp128 %str) { 941; CHECK-P10-LABEL: st_cst_align64___float128___float128: 942; CHECK-P10: # %bb.0: # %entry 943; CHECK-P10-NEXT: pli r3, 244140625 944; CHECK-P10-NEXT: rldic r3, r3, 12, 24 945; CHECK-P10-NEXT: stxvx v2, 0, r3 946; CHECK-P10-NEXT: blr 947; 948; CHECK-PREP10-LABEL: st_cst_align64___float128___float128: 949; CHECK-PREP10: # %bb.0: # %entry 950; CHECK-PREP10-NEXT: lis r3, 3725 951; CHECK-PREP10-NEXT: ori r3, r3, 19025 952; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 953; CHECK-PREP10-NEXT: stxvx v2, 0, r3 954; CHECK-PREP10-NEXT: blr 955entry: 956 store fp128 %str, fp128* inttoptr (i64 1000000000000 to fp128*), align 4096 957 ret void 958} 959 960; Function Attrs: nofree norecurse nounwind willreturn 961define dso_local void @testGlob128PtrPlus0() { 962; CHECK-P10-LE-LABEL: testGlob128PtrPlus0: 963; CHECK-P10-LE: # %bb.0: # %entry 964; CHECK-P10-LE-NEXT: plxv vs0, GlobLd128@PCREL(0), 1 965; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt128@PCREL(0), 1 966; CHECK-P10-LE-NEXT: blr 967; 968; CHECK-P10-BE-LABEL: testGlob128PtrPlus0: 969; CHECK-P10-BE: # %bb.0: # %entry 970; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd128@toc@ha 971; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd128@toc@l 972; CHECK-P10-BE-NEXT: lxvx vs0, 0, r3 973; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt128@toc@ha 974; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt128@toc@l 975; CHECK-P10-BE-NEXT: stxvx vs0, 0, r3 976; CHECK-P10-BE-NEXT: blr 977; 978; CHECK-PREP10-LABEL: testGlob128PtrPlus0: 979; CHECK-PREP10: # %bb.0: # %entry 980; CHECK-PREP10-NEXT: addis r3, r2, GlobLd128@toc@ha 981; CHECK-PREP10-NEXT: addi r3, r3, GlobLd128@toc@l 982; CHECK-PREP10-NEXT: lxvx vs0, 0, r3 983; CHECK-PREP10-NEXT: addis r3, r2, GlobSt128@toc@ha 984; CHECK-PREP10-NEXT: addi r3, r3, GlobSt128@toc@l 985; CHECK-PREP10-NEXT: stxvx vs0, 0, r3 986; CHECK-PREP10-NEXT: blr 987entry: 988 %0 = load fp128, fp128* getelementptr inbounds ([20 x fp128], [20 x fp128]* @GlobLd128, i64 0, i64 0), align 16 989 store fp128 %0, fp128* getelementptr inbounds ([20 x fp128], [20 x fp128]* @GlobSt128, i64 0, i64 0), align 16 990 ret void 991} 992 993; Function Attrs: nofree norecurse nounwind willreturn 994define dso_local void @testGlob128PtrPlus3() { 995; CHECK-P10-LE-LABEL: testGlob128PtrPlus3: 996; CHECK-P10-LE: # %bb.0: # %entry 997; CHECK-P10-LE-NEXT: plxv vs0, GlobLd128@PCREL+3(0), 1 998; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt128@PCREL+3(0), 1 999; CHECK-P10-LE-NEXT: blr 1000; 1001; CHECK-P10-BE-LABEL: testGlob128PtrPlus3: 1002; CHECK-P10-BE: # %bb.0: # %entry 1003; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd128@toc@ha 1004; CHECK-P10-BE-NEXT: li r4, 3 1005; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd128@toc@l 1006; CHECK-P10-BE-NEXT: lxvx vs0, r3, r4 1007; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt128@toc@ha 1008; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt128@toc@l 1009; CHECK-P10-BE-NEXT: stxvx vs0, r3, r4 1010; CHECK-P10-BE-NEXT: blr 1011; 1012; CHECK-PREP10-LABEL: testGlob128PtrPlus3: 1013; CHECK-PREP10: # %bb.0: # %entry 1014; CHECK-PREP10-NEXT: addis r3, r2, GlobLd128@toc@ha 1015; CHECK-PREP10-NEXT: li r4, 3 1016; CHECK-PREP10-NEXT: addi r3, r3, GlobLd128@toc@l 1017; CHECK-PREP10-NEXT: lxvx vs0, r3, r4 1018; CHECK-PREP10-NEXT: addis r3, r2, GlobSt128@toc@ha 1019; CHECK-PREP10-NEXT: addi r3, r3, GlobSt128@toc@l 1020; CHECK-PREP10-NEXT: stxvx vs0, r3, r4 1021; CHECK-PREP10-NEXT: blr 1022entry: 1023 %0 = load fp128, fp128* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x fp128]* @GlobLd128 to i8*), i64 3) to fp128*), align 16 1024 store fp128 %0, fp128* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x fp128]* @GlobSt128 to i8*), i64 3) to fp128*), align 16 1025 ret void 1026} 1027 1028; Function Attrs: nofree norecurse nounwind willreturn 1029define dso_local void @testGlob128PtrPlus4() { 1030; CHECK-P10-LE-LABEL: testGlob128PtrPlus4: 1031; CHECK-P10-LE: # %bb.0: # %entry 1032; CHECK-P10-LE-NEXT: plxv vs0, GlobLd128@PCREL+4(0), 1 1033; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt128@PCREL+4(0), 1 1034; CHECK-P10-LE-NEXT: blr 1035; 1036; CHECK-P10-BE-LABEL: testGlob128PtrPlus4: 1037; CHECK-P10-BE: # %bb.0: # %entry 1038; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd128@toc@ha 1039; CHECK-P10-BE-NEXT: li r4, 4 1040; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd128@toc@l 1041; CHECK-P10-BE-NEXT: lxvx vs0, r3, r4 1042; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt128@toc@ha 1043; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt128@toc@l 1044; CHECK-P10-BE-NEXT: stxvx vs0, r3, r4 1045; CHECK-P10-BE-NEXT: blr 1046; 1047; CHECK-PREP10-LABEL: testGlob128PtrPlus4: 1048; CHECK-PREP10: # %bb.0: # %entry 1049; CHECK-PREP10-NEXT: addis r3, r2, GlobLd128@toc@ha 1050; CHECK-PREP10-NEXT: li r4, 4 1051; CHECK-PREP10-NEXT: addi r3, r3, GlobLd128@toc@l 1052; CHECK-PREP10-NEXT: lxvx vs0, r3, r4 1053; CHECK-PREP10-NEXT: addis r3, r2, GlobSt128@toc@ha 1054; CHECK-PREP10-NEXT: addi r3, r3, GlobSt128@toc@l 1055; CHECK-PREP10-NEXT: stxvx vs0, r3, r4 1056; CHECK-PREP10-NEXT: blr 1057entry: 1058 %0 = load fp128, fp128* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x fp128]* @GlobLd128 to i8*), i64 4) to fp128*), align 16 1059 store fp128 %0, fp128* bitcast (i8* getelementptr inbounds (i8, i8* bitcast ([20 x fp128]* @GlobSt128 to i8*), i64 4) to fp128*), align 16 1060 ret void 1061} 1062 1063; Function Attrs: nofree norecurse nounwind willreturn 1064define dso_local void @testGlob128PtrPlus16() { 1065; CHECK-P10-LE-LABEL: testGlob128PtrPlus16: 1066; CHECK-P10-LE: # %bb.0: # %entry 1067; CHECK-P10-LE-NEXT: plxv vs0, GlobLd128@PCREL+16(0), 1 1068; CHECK-P10-LE-NEXT: pstxv vs0, GlobSt128@PCREL+16(0), 1 1069; CHECK-P10-LE-NEXT: blr 1070; 1071; CHECK-P10-BE-LABEL: testGlob128PtrPlus16: 1072; CHECK-P10-BE: # %bb.0: # %entry 1073; CHECK-P10-BE-NEXT: addis r3, r2, GlobLd128@toc@ha 1074; CHECK-P10-BE-NEXT: addi r3, r3, GlobLd128@toc@l 1075; CHECK-P10-BE-NEXT: lxv vs0, 16(r3) 1076; CHECK-P10-BE-NEXT: addis r3, r2, GlobSt128@toc@ha 1077; CHECK-P10-BE-NEXT: addi r3, r3, GlobSt128@toc@l 1078; CHECK-P10-BE-NEXT: stxv vs0, 16(r3) 1079; CHECK-P10-BE-NEXT: blr 1080; 1081; CHECK-PREP10-LABEL: testGlob128PtrPlus16: 1082; CHECK-PREP10: # %bb.0: # %entry 1083; CHECK-PREP10-NEXT: addis r3, r2, GlobLd128@toc@ha 1084; CHECK-PREP10-NEXT: addi r3, r3, GlobLd128@toc@l 1085; CHECK-PREP10-NEXT: lxv vs0, 16(r3) 1086; CHECK-PREP10-NEXT: addis r3, r2, GlobSt128@toc@ha 1087; CHECK-PREP10-NEXT: addi r3, r3, GlobSt128@toc@l 1088; CHECK-PREP10-NEXT: stxv vs0, 16(r3) 1089; CHECK-PREP10-NEXT: blr 1090entry: 1091 %0 = load fp128, fp128* getelementptr inbounds ([20 x fp128], [20 x fp128]* @GlobLd128, i64 0, i64 1), align 16 1092 store fp128 %0, fp128* getelementptr inbounds ([20 x fp128], [20 x fp128]* @GlobSt128, i64 0, i64 1), align 16 1093 ret void 1094} 1095 1096; Function Attrs: nofree norecurse nounwind willreturn 1097define dso_local void @testGlob128PtrPlusVar(i64 %Idx) { 1098; CHECK-P10-LE-LABEL: testGlob128PtrPlusVar: 1099; CHECK-P10-LE: # %bb.0: # %entry 1100; CHECK-P10-LE-NEXT: sldi r3, r3, 4 1101; CHECK-P10-LE-NEXT: paddi r4, 0, GlobLd128@PCREL, 1 1102; CHECK-P10-LE-NEXT: lxvx vs0, r4, r3 1103; CHECK-P10-LE-NEXT: paddi r4, 0, GlobSt128@PCREL, 1 1104; CHECK-P10-LE-NEXT: stxvx vs0, r4, r3 1105; CHECK-P10-LE-NEXT: blr 1106; 1107; CHECK-P10-BE-LABEL: testGlob128PtrPlusVar: 1108; CHECK-P10-BE: # %bb.0: # %entry 1109; CHECK-P10-BE-NEXT: addis r4, r2, GlobLd128@toc@ha 1110; CHECK-P10-BE-NEXT: sldi r3, r3, 4 1111; CHECK-P10-BE-NEXT: addi r4, r4, GlobLd128@toc@l 1112; CHECK-P10-BE-NEXT: lxvx vs0, r4, r3 1113; CHECK-P10-BE-NEXT: addis r4, r2, GlobSt128@toc@ha 1114; CHECK-P10-BE-NEXT: addi r4, r4, GlobSt128@toc@l 1115; CHECK-P10-BE-NEXT: stxvx vs0, r4, r3 1116; CHECK-P10-BE-NEXT: blr 1117; 1118; CHECK-PREP10-LABEL: testGlob128PtrPlusVar: 1119; CHECK-PREP10: # %bb.0: # %entry 1120; CHECK-PREP10-NEXT: addis r4, r2, GlobLd128@toc@ha 1121; CHECK-PREP10-NEXT: sldi r3, r3, 4 1122; CHECK-PREP10-NEXT: addi r4, r4, GlobLd128@toc@l 1123; CHECK-PREP10-NEXT: lxvx vs0, r4, r3 1124; CHECK-PREP10-NEXT: addis r4, r2, GlobSt128@toc@ha 1125; CHECK-PREP10-NEXT: addi r4, r4, GlobSt128@toc@l 1126; CHECK-PREP10-NEXT: stxvx vs0, r4, r3 1127; CHECK-PREP10-NEXT: blr 1128entry: 1129 %arrayidx = getelementptr inbounds [20 x fp128], [20 x fp128]* @GlobLd128, i64 0, i64 %Idx 1130 %0 = load fp128, fp128* %arrayidx, align 16 1131 %arrayidx1 = getelementptr inbounds [20 x fp128], [20 x fp128]* @GlobSt128, i64 0, i64 %Idx 1132 store fp128 %0, fp128* %arrayidx1, align 16 1133 ret void 1134} 1135 1136