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