|  | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
|  | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ | 
|  | ; RUN:   -mcpu=pwr10  \ | 
|  | ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10 | 
|  | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ | 
|  | ; RUN:   -mcpu=pwr10  \ | 
|  | ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10 | 
|  | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ | 
|  | ; RUN:   -mcpu=pwr9  \ | 
|  | ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10 | 
|  | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ | 
|  | ; RUN:   -mcpu=pwr9  \ | 
|  | ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10 | 
|  | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ | 
|  | ; RUN:   -mcpu=pwr8  \ | 
|  | ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10 | 
|  | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ | 
|  | ; RUN:   -mcpu=pwr8  \ | 
|  | ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10 | 
|  | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff \ | 
|  | ; RUN:   -mcpu=pwr8  \ | 
|  | ; RUN:   < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10 | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_0___int128___int128(i64 %ptr) { | 
|  | ; CHECK-LABEL: ld_0___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    ld 5, 0(3) | 
|  | ; CHECK-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-NEXT:    mr 3, 5 | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %0 = inttoptr i64 %ptr to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_unalign16___int128___int128(ptr nocapture readonly %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_unalign16___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pld 5, 1(3), 0 | 
|  | ; CHECK-P10-NEXT:    pld 4, 9(3), 0 | 
|  | ; CHECK-P10-NEXT:    mr 3, 5 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_unalign16___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 4, 1 | 
|  | ; CHECK-PREP10-NEXT:    ldx 5, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    li 4, 9 | 
|  | ; CHECK-PREP10-NEXT:    ldx 4, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    mr 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1 | 
|  | %0 = load i128, ptr %add.ptr, align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_align16___int128___int128(ptr nocapture readonly %ptr) { | 
|  | ; CHECK-LABEL: ld_align16___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    ld 5, 8(3) | 
|  | ; CHECK-NEXT:    ld 4, 16(3) | 
|  | ; CHECK-NEXT:    mr 3, 5 | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 | 
|  | %0 = load i128, ptr %add.ptr, align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_unalign32___int128___int128(ptr nocapture readonly %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_unalign32___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 4, 99999 | 
|  | ; CHECK-P10-NEXT:    ldux 5, 3, 4 | 
|  | ; CHECK-P10-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-P10-NEXT:    mr 3, 5 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_unalign32___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 4, 1 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 34463 | 
|  | ; CHECK-PREP10-NEXT:    ldux 5, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    mr 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999 | 
|  | %0 = load i128, ptr %add.ptr, align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_align32___int128___int128(ptr nocapture readonly %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_align32___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 4, 99999000 | 
|  | ; CHECK-P10-NEXT:    ldux 5, 3, 4 | 
|  | ; CHECK-P10-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-P10-NEXT:    mr 3, 5 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_align32___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 4, 1525 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 56600 | 
|  | ; CHECK-PREP10-NEXT:    ldux 5, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    mr 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 | 
|  | %0 = load i128, ptr %add.ptr, align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_unalign64___int128___int128(ptr nocapture readonly %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_unalign64___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 4, 232 | 
|  | ; CHECK-P10-NEXT:    pli 5, 3567587329 | 
|  | ; CHECK-P10-NEXT:    rldimi 5, 4, 32, 0 | 
|  | ; CHECK-P10-NEXT:    ldux 5, 3, 5 | 
|  | ; CHECK-P10-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-P10-NEXT:    mr 3, 5 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_unalign64___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 4, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 4, 4, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 4, 4, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 4097 | 
|  | ; CHECK-PREP10-NEXT:    ldux 5, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    mr 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001 | 
|  | %0 = load i128, ptr %add.ptr, align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_align64___int128___int128(ptr nocapture readonly %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_align64___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 4, 244140625 | 
|  | ; CHECK-P10-NEXT:    rldic 4, 4, 12, 24 | 
|  | ; CHECK-P10-NEXT:    ldux 5, 3, 4 | 
|  | ; CHECK-P10-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-P10-NEXT:    mr 3, 5 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_align64___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 4, 3725 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 19025 | 
|  | ; CHECK-PREP10-NEXT:    rldic 4, 4, 12, 24 | 
|  | ; CHECK-PREP10-NEXT:    ldux 5, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    mr 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 | 
|  | %0 = load i128, ptr %add.ptr, align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_reg___int128___int128(ptr nocapture readonly %ptr, i64 %off) { | 
|  | ; CHECK-LABEL: ld_reg___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    ldux 5, 3, 4 | 
|  | ; CHECK-NEXT:    ld 4, 8(3) | 
|  | ; CHECK-NEXT:    mr 3, 5 | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off | 
|  | %0 = load i128, ptr %add.ptr, align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_or___int128___int128(i64 %ptr, i8 zeroext %off) { | 
|  | ; CHECK-LABEL: ld_or___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    or 4, 4, 3 | 
|  | ; CHECK-NEXT:    ld 3, 0(4) | 
|  | ; CHECK-NEXT:    ld 4, 8(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %conv = zext i8 %off to i64 | 
|  | %or = or i64 %conv, %ptr | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_or2___int128___int128(i64 %ptr, i8 zeroext %off) { | 
|  | ; CHECK-LABEL: ld_or2___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    rldicr 5, 3, 0, 51 | 
|  | ; CHECK-NEXT:    rotldi 6, 3, 52 | 
|  | ; CHECK-NEXT:    ldx 3, 5, 4 | 
|  | ; CHECK-NEXT:    rldimi 4, 6, 12, 0 | 
|  | ; CHECK-NEXT:    ld 4, 8(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -4096 | 
|  | %conv = zext i8 %off to i64 | 
|  | %or = or i64 %and, %conv | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_not_disjoint16___int128___int128(i64 %ptr) { | 
|  | ; CHECK-LABEL: ld_not_disjoint16___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    ori 4, 3, 6 | 
|  | ; CHECK-NEXT:    ld 3, 0(4) | 
|  | ; CHECK-NEXT:    ld 4, 8(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %or = or i64 %ptr, 6 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_disjoint_unalign16___int128___int128(i64 %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_disjoint_unalign16___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    rldicr 4, 3, 0, 51 | 
|  | ; CHECK-P10-NEXT:    pld 3, 6(4), 0 | 
|  | ; CHECK-P10-NEXT:    pld 4, 14(4), 0 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_disjoint_unalign16___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    rldicr 4, 3, 0, 51 | 
|  | ; CHECK-PREP10-NEXT:    li 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    li 5, 14 | 
|  | ; CHECK-PREP10-NEXT:    ldx 3, 4, 3 | 
|  | ; CHECK-PREP10-NEXT:    ldx 4, 4, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -4096 | 
|  | %or = or i64 %and, 6 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_disjoint_align16___int128___int128(i64 %ptr) { | 
|  | ; CHECK-LABEL: ld_disjoint_align16___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    rldicr 4, 3, 0, 51 | 
|  | ; CHECK-NEXT:    ld 3, 24(4) | 
|  | ; CHECK-NEXT:    ld 4, 32(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -4096 | 
|  | %or = or i64 %and, 24 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_not_disjoint32___int128___int128(i64 %ptr) { | 
|  | ; CHECK-LABEL: ld_not_disjoint32___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    ori 3, 3, 34463 | 
|  | ; CHECK-NEXT:    oris 4, 3, 1 | 
|  | ; CHECK-NEXT:    ld 3, 0(4) | 
|  | ; CHECK-NEXT:    ld 4, 8(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %or = or i64 %ptr, 99999 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_disjoint_unalign32___int128___int128(i64 %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_disjoint_unalign32___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    rldicr 4, 3, 0, 43 | 
|  | ; CHECK-P10-NEXT:    pld 3, 99999(4), 0 | 
|  | ; CHECK-P10-NEXT:    pld 4, 100007(4), 0 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_disjoint_unalign32___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 5, 1 | 
|  | ; CHECK-PREP10-NEXT:    rldicr 4, 3, 0, 43 | 
|  | ; CHECK-PREP10-NEXT:    ori 3, 5, 34463 | 
|  | ; CHECK-PREP10-NEXT:    ori 5, 5, 34471 | 
|  | ; CHECK-PREP10-NEXT:    ldx 3, 4, 3 | 
|  | ; CHECK-PREP10-NEXT:    ldx 4, 4, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -1048576 | 
|  | %or = or i64 %and, 99999 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_disjoint_align32___int128___int128(i64 %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_disjoint_align32___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    lis 4, -15264 | 
|  | ; CHECK-P10-NEXT:    and 4, 3, 4 | 
|  | ; CHECK-P10-NEXT:    pld 3, 999990000(4), 0 | 
|  | ; CHECK-P10-NEXT:    pld 4, 999990008(4), 0 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_disjoint_align32___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 4, -15264 | 
|  | ; CHECK-PREP10-NEXT:    lis 5, 15258 | 
|  | ; CHECK-PREP10-NEXT:    and 4, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    ori 3, 5, 41712 | 
|  | ; CHECK-PREP10-NEXT:    ori 5, 5, 41720 | 
|  | ; CHECK-PREP10-NEXT:    ldx 3, 4, 3 | 
|  | ; CHECK-PREP10-NEXT:    ldx 4, 4, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -1000341504 | 
|  | %or = or i64 %and, 999990000 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_not_disjoint64___int128___int128(i64 %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_not_disjoint64___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 4, 232 | 
|  | ; CHECK-P10-NEXT:    pli 5, 3567587329 | 
|  | ; CHECK-P10-NEXT:    rldimi 5, 4, 32, 0 | 
|  | ; CHECK-P10-NEXT:    or 4, 3, 5 | 
|  | ; CHECK-P10-NEXT:    ld 3, 0(4) | 
|  | ; CHECK-P10-NEXT:    ld 4, 8(4) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_not_disjoint64___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 4, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 4, 4, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 4, 4, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 4097 | 
|  | ; CHECK-PREP10-NEXT:    or 4, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    ld 3, 0(4) | 
|  | ; CHECK-PREP10-NEXT:    ld 4, 8(4) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %or = or i64 %ptr, 1000000000001 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_disjoint_unalign64___int128___int128(i64 %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_disjoint_unalign64___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    rldicr 4, 3, 0, 23 | 
|  | ; CHECK-P10-NEXT:    pli 5, 232 | 
|  | ; CHECK-P10-NEXT:    pli 3, 3567587329 | 
|  | ; CHECK-P10-NEXT:    rldimi 3, 5, 32, 0 | 
|  | ; CHECK-P10-NEXT:    pli 6, 3567587337 | 
|  | ; CHECK-P10-NEXT:    rldimi 6, 5, 32, 0 | 
|  | ; CHECK-P10-NEXT:    ldx 3, 4, 3 | 
|  | ; CHECK-P10-NEXT:    ldx 4, 4, 6 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_disjoint_unalign64___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    rldicr 4, 3, 0, 23 | 
|  | ; CHECK-PREP10-NEXT:    li 3, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 3, 3, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 5, 3, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 3, 5, 4097 | 
|  | ; CHECK-PREP10-NEXT:    ori 5, 5, 4105 | 
|  | ; CHECK-PREP10-NEXT:    ldx 3, 4, 3 | 
|  | ; CHECK-PREP10-NEXT:    ldx 4, 4, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -1099511627776 | 
|  | %or = or i64 %and, 1000000000001 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 16 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_disjoint_align64___int128___int128(i64 %ptr) { | 
|  | ; CHECK-P10-LABEL: ld_disjoint_align64___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    rldicr 4, 3, 0, 23 | 
|  | ; CHECK-P10-NEXT:    pli 3, 244140625 | 
|  | ; CHECK-P10-NEXT:    pli 5, 232 | 
|  | ; CHECK-P10-NEXT:    rldic 3, 3, 12, 24 | 
|  | ; CHECK-P10-NEXT:    pli 6, 3567587336 | 
|  | ; CHECK-P10-NEXT:    rldimi 6, 5, 32, 0 | 
|  | ; CHECK-P10-NEXT:    ldx 3, 4, 3 | 
|  | ; CHECK-P10-NEXT:    ldx 4, 4, 6 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_disjoint_align64___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 5, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldicr 4, 3, 0, 23 | 
|  | ; CHECK-PREP10-NEXT:    lis 3, 3725 | 
|  | ; CHECK-PREP10-NEXT:    rldic 5, 5, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    ori 3, 3, 19025 | 
|  | ; CHECK-PREP10-NEXT:    oris 5, 5, 54437 | 
|  | ; CHECK-PREP10-NEXT:    rldic 3, 3, 12, 24 | 
|  | ; CHECK-PREP10-NEXT:    ori 5, 5, 4104 | 
|  | ; CHECK-PREP10-NEXT:    ldx 3, 4, 3 | 
|  | ; CHECK-PREP10-NEXT:    ldx 4, 4, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -1099511627776 | 
|  | %or = or i64 %and, 1000000000000 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | %1 = load i128, ptr %0, align 4096 | 
|  | ret i128 %1 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_cst_unalign16___int128___int128() { | 
|  | ; CHECK-LABEL: ld_cst_unalign16___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    li 3, 255 | 
|  | ; CHECK-NEXT:    li 4, 263 | 
|  | ; CHECK-NEXT:    ld 3, 0(3) | 
|  | ; CHECK-NEXT:    ld 4, 0(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %0 = load i128, ptr inttoptr (i64 255 to ptr), align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_cst_align16___int128___int128() { | 
|  | ; CHECK-LABEL: ld_cst_align16___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    ld 3, 4080(0) | 
|  | ; CHECK-NEXT:    ld 4, 4088(0) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %0 = load i128, ptr inttoptr (i64 4080 to ptr), align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_cst_unalign32___int128___int128() { | 
|  | ; CHECK-P10-LABEL: ld_cst_unalign32___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 3, 99999 | 
|  | ; CHECK-P10-NEXT:    pli 4, 100007 | 
|  | ; CHECK-P10-NEXT:    ld 3, 0(3) | 
|  | ; CHECK-P10-NEXT:    ld 4, 0(4) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_cst_unalign32___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 4, 1 | 
|  | ; CHECK-PREP10-NEXT:    ori 3, 4, 34463 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 34471 | 
|  | ; CHECK-PREP10-NEXT:    ld 3, 0(3) | 
|  | ; CHECK-PREP10-NEXT:    ld 4, 0(4) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %0 = load i128, ptr inttoptr (i64 99999 to ptr), align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_cst_align32___int128___int128() { | 
|  | ; CHECK-LABEL: ld_cst_align32___int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lis 4, 153 | 
|  | ; CHECK-NEXT:    ld 3, -27108(4) | 
|  | ; CHECK-NEXT:    ld 4, -27100(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %0 = load i128, ptr inttoptr (i64 9999900 to ptr), align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_cst_unalign64___int128___int128() { | 
|  | ; CHECK-P10-LABEL: ld_cst_unalign64___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 4, 232 | 
|  | ; CHECK-P10-NEXT:    pli 3, 3567587329 | 
|  | ; CHECK-P10-NEXT:    rldimi 3, 4, 32, 0 | 
|  | ; CHECK-P10-NEXT:    pli 5, 3567587337 | 
|  | ; CHECK-P10-NEXT:    rldimi 5, 4, 32, 0 | 
|  | ; CHECK-P10-NEXT:    ld 3, 0(3) | 
|  | ; CHECK-P10-NEXT:    ld 4, 0(5) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_cst_unalign64___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 3, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 3, 3, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 4, 3, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 3, 4, 4097 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 4105 | 
|  | ; CHECK-PREP10-NEXT:    ld 3, 0(3) | 
|  | ; CHECK-PREP10-NEXT:    ld 4, 0(4) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %0 = load i128, ptr inttoptr (i64 1000000000001 to ptr), align 16 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: norecurse nounwind readonly uwtable willreturn | 
|  | define dso_local i128 @ld_cst_align64___int128___int128() { | 
|  | ; CHECK-P10-LABEL: ld_cst_align64___int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 3, 232 | 
|  | ; CHECK-P10-NEXT:    pli 4, 3567587336 | 
|  | ; CHECK-P10-NEXT:    rldimi 4, 3, 32, 0 | 
|  | ; CHECK-P10-NEXT:    pli 3, 244140625 | 
|  | ; CHECK-P10-NEXT:    rldic 3, 3, 12, 24 | 
|  | ; CHECK-P10-NEXT:    ld 4, 0(4) | 
|  | ; CHECK-P10-NEXT:    ld 3, 0(3) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: ld_cst_align64___int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 4, 29 | 
|  | ; CHECK-PREP10-NEXT:    lis 3, 3725 | 
|  | ; CHECK-PREP10-NEXT:    rldic 4, 4, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    ori 3, 3, 19025 | 
|  | ; CHECK-PREP10-NEXT:    oris 4, 4, 54437 | 
|  | ; CHECK-PREP10-NEXT:    rldic 3, 3, 12, 24 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 4104 | 
|  | ; CHECK-PREP10-NEXT:    ld 3, 0(3) | 
|  | ; CHECK-PREP10-NEXT:    ld 4, 0(4) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %0 = load i128, ptr inttoptr (i64 1000000000000 to ptr), align 4096 | 
|  | ret i128 %0 | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_0__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-LABEL: st_0__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    std 5, 8(3) | 
|  | ; CHECK-NEXT:    std 4, 0(3) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %0 = inttoptr i64 %ptr to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_unalign16__int128___int128(ptr nocapture %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_unalign16__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pstd 5, 9(3), 0 | 
|  | ; CHECK-P10-NEXT:    pstd 4, 1(3), 0 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_unalign16__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 6, 9 | 
|  | ; CHECK-PREP10-NEXT:    stdx 5, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    li 5, 1 | 
|  | ; CHECK-PREP10-NEXT:    stdx 4, 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1 | 
|  | store i128 %str, ptr %add.ptr, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_align16__int128___int128(ptr nocapture %ptr, i128 %str) { | 
|  | ; CHECK-LABEL: st_align16__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    std 5, 16(3) | 
|  | ; CHECK-NEXT:    std 4, 8(3) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 | 
|  | store i128 %str, ptr %add.ptr, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_unalign32__int128___int128(ptr nocapture %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_unalign32__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 6, 99999 | 
|  | ; CHECK-P10-NEXT:    stdux 4, 3, 6 | 
|  | ; CHECK-P10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_unalign32__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 6, 1 | 
|  | ; CHECK-PREP10-NEXT:    ori 6, 6, 34463 | 
|  | ; CHECK-PREP10-NEXT:    stdux 4, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999 | 
|  | store i128 %str, ptr %add.ptr, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_align32__int128___int128(ptr nocapture %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_align32__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 6, 99999000 | 
|  | ; CHECK-P10-NEXT:    stdux 4, 3, 6 | 
|  | ; CHECK-P10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_align32__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 6, 1525 | 
|  | ; CHECK-PREP10-NEXT:    ori 6, 6, 56600 | 
|  | ; CHECK-PREP10-NEXT:    stdux 4, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 | 
|  | store i128 %str, ptr %add.ptr, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_unalign64__int128___int128(ptr nocapture %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_unalign64__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 6, 232 | 
|  | ; CHECK-P10-NEXT:    pli 7, 3567587329 | 
|  | ; CHECK-P10-NEXT:    rldimi 7, 6, 32, 0 | 
|  | ; CHECK-P10-NEXT:    stdux 4, 3, 7 | 
|  | ; CHECK-P10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_unalign64__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 6, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 6, 6, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 6, 6, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 6, 6, 4097 | 
|  | ; CHECK-PREP10-NEXT:    stdux 4, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001 | 
|  | store i128 %str, ptr %add.ptr, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_align64__int128___int128(ptr nocapture %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_align64__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 6, 244140625 | 
|  | ; CHECK-P10-NEXT:    rldic 6, 6, 12, 24 | 
|  | ; CHECK-P10-NEXT:    stdux 4, 3, 6 | 
|  | ; CHECK-P10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_align64__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 6, 3725 | 
|  | ; CHECK-PREP10-NEXT:    ori 6, 6, 19025 | 
|  | ; CHECK-PREP10-NEXT:    rldic 6, 6, 12, 24 | 
|  | ; CHECK-PREP10-NEXT:    stdux 4, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 | 
|  | store i128 %str, ptr %add.ptr, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_reg__int128___int128(ptr nocapture %ptr, i64 %off, i128 %str) { | 
|  | ; CHECK-LABEL: st_reg__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    stdux 5, 3, 4 | 
|  | ; CHECK-NEXT:    std 6, 8(3) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off | 
|  | store i128 %str, ptr %add.ptr, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_or1__int128___int128(i64 %ptr, i8 zeroext %off, i128 %str) { | 
|  | ; CHECK-LABEL: st_or1__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    or 3, 4, 3 | 
|  | ; CHECK-NEXT:    std 6, 8(3) | 
|  | ; CHECK-NEXT:    std 5, 0(3) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %conv = zext i8 %off to i64 | 
|  | %or = or i64 %conv, %ptr | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_or2__int128___int128(i64 %ptr, i8 zeroext %off, i128 %str) { | 
|  | ; CHECK-LABEL: st_or2__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    rldicr 7, 3, 0, 51 | 
|  | ; CHECK-NEXT:    rotldi 3, 3, 52 | 
|  | ; CHECK-NEXT:    stdx 5, 7, 4 | 
|  | ; CHECK-NEXT:    rldimi 4, 3, 12, 0 | 
|  | ; CHECK-NEXT:    std 6, 8(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -4096 | 
|  | %conv = zext i8 %off to i64 | 
|  | %or = or i64 %and, %conv | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_not_disjoint16__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-LABEL: st_not_disjoint16__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    ori 3, 3, 6 | 
|  | ; CHECK-NEXT:    std 5, 8(3) | 
|  | ; CHECK-NEXT:    std 4, 0(3) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %or = or i64 %ptr, 6 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_disjoint_unalign16__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_disjoint_unalign16__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    rldicr 3, 3, 0, 51 | 
|  | ; CHECK-P10-NEXT:    pstd 5, 14(3), 0 | 
|  | ; CHECK-P10-NEXT:    pstd 4, 6(3), 0 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_disjoint_unalign16__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    rldicr 3, 3, 0, 51 | 
|  | ; CHECK-PREP10-NEXT:    li 6, 14 | 
|  | ; CHECK-PREP10-NEXT:    stdx 5, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    li 5, 6 | 
|  | ; CHECK-PREP10-NEXT:    stdx 4, 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -4096 | 
|  | %or = or i64 %and, 6 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_disjoint_align16__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-LABEL: st_disjoint_align16__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    rldicr 3, 3, 0, 51 | 
|  | ; CHECK-NEXT:    std 5, 32(3) | 
|  | ; CHECK-NEXT:    std 4, 24(3) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -4096 | 
|  | %or = or i64 %and, 24 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_not_disjoint32__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-LABEL: st_not_disjoint32__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    ori 3, 3, 34463 | 
|  | ; CHECK-NEXT:    oris 3, 3, 1 | 
|  | ; CHECK-NEXT:    std 5, 8(3) | 
|  | ; CHECK-NEXT:    std 4, 0(3) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | %or = or i64 %ptr, 99999 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_disjoint_unalign32__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_disjoint_unalign32__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    rldicr 3, 3, 0, 43 | 
|  | ; CHECK-P10-NEXT:    pstd 5, 100007(3), 0 | 
|  | ; CHECK-P10-NEXT:    pstd 4, 99999(3), 0 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_disjoint_unalign32__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 6, 1 | 
|  | ; CHECK-PREP10-NEXT:    rldicr 3, 3, 0, 43 | 
|  | ; CHECK-PREP10-NEXT:    ori 7, 6, 34471 | 
|  | ; CHECK-PREP10-NEXT:    stdx 5, 3, 7 | 
|  | ; CHECK-PREP10-NEXT:    ori 5, 6, 34463 | 
|  | ; CHECK-PREP10-NEXT:    stdx 4, 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -1048576 | 
|  | %or = or i64 %and, 99999 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_disjoint_align32__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_disjoint_align32__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    lis 6, -15264 | 
|  | ; CHECK-P10-NEXT:    and 3, 3, 6 | 
|  | ; CHECK-P10-NEXT:    pstd 5, 999990008(3), 0 | 
|  | ; CHECK-P10-NEXT:    pstd 4, 999990000(3), 0 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_disjoint_align32__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 6, -15264 | 
|  | ; CHECK-PREP10-NEXT:    and 3, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    lis 6, 15258 | 
|  | ; CHECK-PREP10-NEXT:    ori 7, 6, 41720 | 
|  | ; CHECK-PREP10-NEXT:    stdx 5, 3, 7 | 
|  | ; CHECK-PREP10-NEXT:    ori 5, 6, 41712 | 
|  | ; CHECK-PREP10-NEXT:    stdx 4, 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -1000341504 | 
|  | %or = or i64 %and, 999990000 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_not_disjoint64__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_not_disjoint64__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 6, 232 | 
|  | ; CHECK-P10-NEXT:    pli 7, 3567587329 | 
|  | ; CHECK-P10-NEXT:    rldimi 7, 6, 32, 0 | 
|  | ; CHECK-P10-NEXT:    or 3, 3, 7 | 
|  | ; CHECK-P10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-P10-NEXT:    std 4, 0(3) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_not_disjoint64__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 6, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 6, 6, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 6, 6, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 6, 6, 4097 | 
|  | ; CHECK-PREP10-NEXT:    or 3, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    std 5, 8(3) | 
|  | ; CHECK-PREP10-NEXT:    std 4, 0(3) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %or = or i64 %ptr, 1000000000001 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_disjoint_unalign64__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_disjoint_unalign64__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 6, 232 | 
|  | ; CHECK-P10-NEXT:    pli 7, 3567587337 | 
|  | ; CHECK-P10-NEXT:    rldicr 3, 3, 0, 23 | 
|  | ; CHECK-P10-NEXT:    rldimi 7, 6, 32, 0 | 
|  | ; CHECK-P10-NEXT:    stdx 5, 3, 7 | 
|  | ; CHECK-P10-NEXT:    pli 5, 3567587329 | 
|  | ; CHECK-P10-NEXT:    rldimi 5, 6, 32, 0 | 
|  | ; CHECK-P10-NEXT:    stdx 4, 3, 5 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_disjoint_unalign64__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 6, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldicr 3, 3, 0, 23 | 
|  | ; CHECK-PREP10-NEXT:    rldic 6, 6, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 6, 6, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 7, 6, 4105 | 
|  | ; CHECK-PREP10-NEXT:    stdx 5, 3, 7 | 
|  | ; CHECK-PREP10-NEXT:    ori 5, 6, 4097 | 
|  | ; CHECK-PREP10-NEXT:    stdx 4, 3, 5 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -1099511627776 | 
|  | %or = or i64 %and, 1000000000001 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_disjoint_align64__int128___int128(i64 %ptr, i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_disjoint_align64__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 6, 232 | 
|  | ; CHECK-P10-NEXT:    pli 7, 3567587336 | 
|  | ; CHECK-P10-NEXT:    rldicr 3, 3, 0, 23 | 
|  | ; CHECK-P10-NEXT:    rldimi 7, 6, 32, 0 | 
|  | ; CHECK-P10-NEXT:    stdx 5, 3, 7 | 
|  | ; CHECK-P10-NEXT:    pli 5, 244140625 | 
|  | ; CHECK-P10-NEXT:    rldic 5, 5, 12, 24 | 
|  | ; CHECK-P10-NEXT:    stdx 4, 3, 5 | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_disjoint_align64__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 6, 3725 | 
|  | ; CHECK-PREP10-NEXT:    rldicr 3, 3, 0, 23 | 
|  | ; CHECK-PREP10-NEXT:    ori 6, 6, 19025 | 
|  | ; CHECK-PREP10-NEXT:    rldic 6, 6, 12, 24 | 
|  | ; CHECK-PREP10-NEXT:    stdx 4, 3, 6 | 
|  | ; CHECK-PREP10-NEXT:    li 4, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 4, 4, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 4, 4, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 4, 4104 | 
|  | ; CHECK-PREP10-NEXT:    stdx 5, 3, 4 | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | %and = and i64 %ptr, -1099511627776 | 
|  | %or = or i64 %and, 1000000000000 | 
|  | %0 = inttoptr i64 %or to ptr | 
|  | store i128 %str, ptr %0, align 4096 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_cst_unalign16__int128___int128(i128 %str) { | 
|  | ; CHECK-LABEL: st_cst_unalign16__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    li 5, 263 | 
|  | ; CHECK-NEXT:    std 4, 0(5) | 
|  | ; CHECK-NEXT:    li 4, 255 | 
|  | ; CHECK-NEXT:    std 3, 0(4) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | store i128 %str, ptr inttoptr (i64 255 to ptr), align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_cst_align16__int128___int128(i128 %str) { | 
|  | ; CHECK-LABEL: st_cst_align16__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    std 4, 4088(0) | 
|  | ; CHECK-NEXT:    std 3, 4080(0) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | store i128 %str, ptr inttoptr (i64 4080 to ptr), align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_cst_unalign32__int128___int128(i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_cst_unalign32__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 5, 100007 | 
|  | ; CHECK-P10-NEXT:    std 4, 0(5) | 
|  | ; CHECK-P10-NEXT:    pli 4, 99999 | 
|  | ; CHECK-P10-NEXT:    std 3, 0(4) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_cst_unalign32__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 5, 1 | 
|  | ; CHECK-PREP10-NEXT:    ori 6, 5, 34471 | 
|  | ; CHECK-PREP10-NEXT:    std 4, 0(6) | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 5, 34463 | 
|  | ; CHECK-PREP10-NEXT:    std 3, 0(4) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | store i128 %str, ptr inttoptr (i64 99999 to ptr), align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_cst_align32__int128___int128(i128 %str) { | 
|  | ; CHECK-LABEL: st_cst_align32__int128___int128: | 
|  | ; CHECK:       # %bb.0: # %entry | 
|  | ; CHECK-NEXT:    lis 5, 153 | 
|  | ; CHECK-NEXT:    std 4, -27100(5) | 
|  | ; CHECK-NEXT:    std 3, -27108(5) | 
|  | ; CHECK-NEXT:    blr | 
|  | entry: | 
|  | store i128 %str, ptr inttoptr (i64 9999900 to ptr), align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_cst_unalign64__int128___int128(i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_cst_unalign64__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 5, 232 | 
|  | ; CHECK-P10-NEXT:    pli 6, 3567587337 | 
|  | ; CHECK-P10-NEXT:    rldimi 6, 5, 32, 0 | 
|  | ; CHECK-P10-NEXT:    std 4, 0(6) | 
|  | ; CHECK-P10-NEXT:    pli 4, 3567587329 | 
|  | ; CHECK-P10-NEXT:    rldimi 4, 5, 32, 0 | 
|  | ; CHECK-P10-NEXT:    std 3, 0(4) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_cst_unalign64__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    li 5, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 5, 5, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 5, 5, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 6, 5, 4105 | 
|  | ; CHECK-PREP10-NEXT:    std 4, 0(6) | 
|  | ; CHECK-PREP10-NEXT:    ori 4, 5, 4097 | 
|  | ; CHECK-PREP10-NEXT:    std 3, 0(4) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | store i128 %str, ptr inttoptr (i64 1000000000001 to ptr), align 16 | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly | 
|  | define dso_local void @st_cst_align64__int128___int128(i128 %str) { | 
|  | ; CHECK-P10-LABEL: st_cst_align64__int128___int128: | 
|  | ; CHECK-P10:       # %bb.0: # %entry | 
|  | ; CHECK-P10-NEXT:    pli 5, 232 | 
|  | ; CHECK-P10-NEXT:    pli 6, 3567587336 | 
|  | ; CHECK-P10-NEXT:    rldimi 6, 5, 32, 0 | 
|  | ; CHECK-P10-NEXT:    std 4, 0(6) | 
|  | ; CHECK-P10-NEXT:    pli 4, 244140625 | 
|  | ; CHECK-P10-NEXT:    rldic 4, 4, 12, 24 | 
|  | ; CHECK-P10-NEXT:    std 3, 0(4) | 
|  | ; CHECK-P10-NEXT:    blr | 
|  | ; | 
|  | ; CHECK-PREP10-LABEL: st_cst_align64__int128___int128: | 
|  | ; CHECK-PREP10:       # %bb.0: # %entry | 
|  | ; CHECK-PREP10-NEXT:    lis 5, 3725 | 
|  | ; CHECK-PREP10-NEXT:    ori 5, 5, 19025 | 
|  | ; CHECK-PREP10-NEXT:    rldic 5, 5, 12, 24 | 
|  | ; CHECK-PREP10-NEXT:    std 3, 0(5) | 
|  | ; CHECK-PREP10-NEXT:    li 3, 29 | 
|  | ; CHECK-PREP10-NEXT:    rldic 3, 3, 35, 24 | 
|  | ; CHECK-PREP10-NEXT:    oris 3, 3, 54437 | 
|  | ; CHECK-PREP10-NEXT:    ori 3, 3, 4104 | 
|  | ; CHECK-PREP10-NEXT:    std 4, 0(3) | 
|  | ; CHECK-PREP10-NEXT:    blr | 
|  | entry: | 
|  | store i128 %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096 | 
|  | ret void | 
|  | } |