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