8231 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; 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-P105; 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-P108; 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,CHECK-P911; 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,CHECK-P914; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \15; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \16; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P817; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \18; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \19; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P820 21; Function Attrs: norecurse nounwind readonly uwtable willreturn22define dso_local i64 @ld_0_int64_t_float(i64 %ptr) {23; CHECK-LABEL: ld_0_int64_t_float:24; CHECK: # %bb.0: # %entry25; CHECK-NEXT: lfs f0, 0(r3)26; CHECK-NEXT: xscvdpsxds f0, f027; CHECK-NEXT: mffprd r3, f028; CHECK-NEXT: blr29entry:30 %0 = inttoptr i64 %ptr to ptr31 %1 = load float, ptr %0, align 432 %conv = fptosi float %1 to i6433 ret i64 %conv34}35 36; Function Attrs: norecurse nounwind readonly uwtable willreturn37define dso_local i64 @ld_align16_int64_t_float(ptr nocapture readonly %ptr) {38; CHECK-LABEL: ld_align16_int64_t_float:39; CHECK: # %bb.0: # %entry40; CHECK-NEXT: lfs f0, 8(r3)41; CHECK-NEXT: xscvdpsxds f0, f042; CHECK-NEXT: mffprd r3, f043; CHECK-NEXT: blr44entry:45 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 846 %0 = load float, ptr %add.ptr, align 447 %conv = fptosi float %0 to i6448 ret i64 %conv49}50 51; Function Attrs: norecurse nounwind readonly uwtable willreturn52define dso_local i64 @ld_align32_int64_t_float(ptr nocapture readonly %ptr) {53; CHECK-P10-LABEL: ld_align32_int64_t_float:54; CHECK-P10: # %bb.0: # %entry55; CHECK-P10-NEXT: plfs f0, 99999000(r3), 056; CHECK-P10-NEXT: xscvdpsxds f0, f057; CHECK-P10-NEXT: mffprd r3, f058; CHECK-P10-NEXT: blr59;60; CHECK-PREP10-LABEL: ld_align32_int64_t_float:61; CHECK-PREP10: # %bb.0: # %entry62; CHECK-PREP10-NEXT: lis r4, 152563; CHECK-PREP10-NEXT: ori r4, r4, 5660064; CHECK-PREP10-NEXT: lfsx f0, r3, r465; CHECK-PREP10-NEXT: xscvdpsxds f0, f066; CHECK-PREP10-NEXT: mffprd r3, f067; CHECK-PREP10-NEXT: blr68entry:69 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 9999900070 %0 = load float, ptr %add.ptr, align 471 %conv = fptosi float %0 to i6472 ret i64 %conv73}74 75; Function Attrs: norecurse nounwind readonly uwtable willreturn76define dso_local i64 @ld_align64_int64_t_float(ptr nocapture readonly %ptr) {77; CHECK-P10-LABEL: ld_align64_int64_t_float:78; CHECK-P10: # %bb.0: # %entry79; CHECK-P10-NEXT: pli r4, 24414062580; CHECK-P10-NEXT: rldic r4, r4, 12, 2481; CHECK-P10-NEXT: lfsx f0, r3, r482; CHECK-P10-NEXT: xscvdpsxds f0, f083; CHECK-P10-NEXT: mffprd r3, f084; CHECK-P10-NEXT: blr85;86; CHECK-PREP10-LABEL: ld_align64_int64_t_float:87; CHECK-PREP10: # %bb.0: # %entry88; CHECK-PREP10-NEXT: lis r4, 372589; CHECK-PREP10-NEXT: ori r4, r4, 1902590; CHECK-PREP10-NEXT: rldic r4, r4, 12, 2491; CHECK-PREP10-NEXT: lfsx f0, r3, r492; CHECK-PREP10-NEXT: xscvdpsxds f0, f093; CHECK-PREP10-NEXT: mffprd r3, f094; CHECK-PREP10-NEXT: blr95entry:96 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 100000000000097 %0 = load float, ptr %add.ptr, align 498 %conv = fptosi float %0 to i6499 ret i64 %conv100}101 102; Function Attrs: norecurse nounwind readonly uwtable willreturn103define dso_local i64 @ld_reg_int64_t_float(ptr nocapture readonly %ptr, i64 %off) {104; CHECK-LABEL: ld_reg_int64_t_float:105; CHECK: # %bb.0: # %entry106; CHECK-NEXT: lfsx f0, r3, r4107; CHECK-NEXT: xscvdpsxds f0, f0108; CHECK-NEXT: mffprd r3, f0109; CHECK-NEXT: blr110entry:111 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off112 %0 = load float, ptr %add.ptr, align 4113 %conv = fptosi float %0 to i64114 ret i64 %conv115}116 117; Function Attrs: norecurse nounwind readonly uwtable willreturn118define dso_local i64 @ld_or_int64_t_float(i64 %ptr, i8 zeroext %off) {119; CHECK-LABEL: ld_or_int64_t_float:120; CHECK: # %bb.0: # %entry121; CHECK-NEXT: or r3, r4, r3122; CHECK-NEXT: lfs f0, 0(r3)123; CHECK-NEXT: xscvdpsxds f0, f0124; CHECK-NEXT: mffprd r3, f0125; CHECK-NEXT: blr126entry:127 %conv = zext i8 %off to i64128 %or = or i64 %conv, %ptr129 %0 = inttoptr i64 %or to ptr130 %1 = load float, ptr %0, align 4131 %conv1 = fptosi float %1 to i64132 ret i64 %conv1133}134 135; Function Attrs: norecurse nounwind readonly uwtable willreturn136define dso_local i64 @ld_not_disjoint16_int64_t_float(i64 %ptr) {137; CHECK-LABEL: ld_not_disjoint16_int64_t_float:138; CHECK: # %bb.0: # %entry139; CHECK-NEXT: ori r3, r3, 6140; CHECK-NEXT: lfs f0, 0(r3)141; CHECK-NEXT: xscvdpsxds f0, f0142; CHECK-NEXT: mffprd r3, f0143; CHECK-NEXT: blr144entry:145 %or = or i64 %ptr, 6146 %0 = inttoptr i64 %or to ptr147 %1 = load float, ptr %0, align 4148 %conv = fptosi float %1 to i64149 ret i64 %conv150}151 152; Function Attrs: norecurse nounwind readonly uwtable willreturn153define dso_local i64 @ld_disjoint_align16_int64_t_float(i64 %ptr) {154; CHECK-LABEL: ld_disjoint_align16_int64_t_float:155; CHECK: # %bb.0: # %entry156; CHECK-NEXT: rldicr r3, r3, 0, 51157; CHECK-NEXT: lfs f0, 24(r3)158; CHECK-NEXT: xscvdpsxds f0, f0159; CHECK-NEXT: mffprd r3, f0160; CHECK-NEXT: blr161entry:162 %and = and i64 %ptr, -4096163 %or = or i64 %and, 24164 %0 = inttoptr i64 %or to ptr165 %1 = load float, ptr %0, align 8166 %conv = fptosi float %1 to i64167 ret i64 %conv168}169 170; Function Attrs: norecurse nounwind readonly uwtable willreturn171define dso_local i64 @ld_not_disjoint32_int64_t_float(i64 %ptr) {172; CHECK-LABEL: ld_not_disjoint32_int64_t_float:173; CHECK: # %bb.0: # %entry174; CHECK-NEXT: ori r3, r3, 34463175; CHECK-NEXT: oris r3, r3, 1176; CHECK-NEXT: lfs f0, 0(r3)177; CHECK-NEXT: xscvdpsxds f0, f0178; CHECK-NEXT: mffprd r3, f0179; CHECK-NEXT: blr180entry:181 %or = or i64 %ptr, 99999182 %0 = inttoptr i64 %or to ptr183 %1 = load float, ptr %0, align 4184 %conv = fptosi float %1 to i64185 ret i64 %conv186}187 188; Function Attrs: norecurse nounwind readonly uwtable willreturn189define dso_local i64 @ld_disjoint_align32_int64_t_float(i64 %ptr) {190; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_float:191; CHECK-P10: # %bb.0: # %entry192; CHECK-P10-NEXT: lis r4, -15264193; CHECK-P10-NEXT: and r3, r3, r4194; CHECK-P10-NEXT: plfs f0, 999990000(r3), 0195; CHECK-P10-NEXT: xscvdpsxds f0, f0196; CHECK-P10-NEXT: mffprd r3, f0197; CHECK-P10-NEXT: blr198;199; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_float:200; CHECK-PREP10: # %bb.0: # %entry201; CHECK-PREP10-NEXT: lis r4, -15264202; CHECK-PREP10-NEXT: and r3, r3, r4203; CHECK-PREP10-NEXT: lis r4, 15258204; CHECK-PREP10-NEXT: ori r4, r4, 41712205; CHECK-PREP10-NEXT: lfsx f0, r3, r4206; CHECK-PREP10-NEXT: xscvdpsxds f0, f0207; CHECK-PREP10-NEXT: mffprd r3, f0208; CHECK-PREP10-NEXT: blr209entry:210 %and = and i64 %ptr, -1000341504211 %or = or i64 %and, 999990000212 %0 = inttoptr i64 %or to ptr213 %1 = load float, ptr %0, align 16214 %conv = fptosi float %1 to i64215 ret i64 %conv216}217 218; Function Attrs: norecurse nounwind readonly uwtable willreturn219define dso_local i64 @ld_not_disjoint64_int64_t_float(i64 %ptr) {220; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_float:221; CHECK-P10: # %bb.0: # %entry222; CHECK-P10-NEXT: pli r4, 232223; CHECK-P10-NEXT: pli r5, 3567587329224; CHECK-P10-NEXT: rldimi r5, r4, 32, 0225; CHECK-P10-NEXT: or r3, r3, r5226; CHECK-P10-NEXT: lfs f0, 0(r3)227; CHECK-P10-NEXT: xscvdpsxds f0, f0228; CHECK-P10-NEXT: mffprd r3, f0229; CHECK-P10-NEXT: blr230;231; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_float:232; CHECK-PREP10: # %bb.0: # %entry233; CHECK-PREP10-NEXT: li r4, 29234; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24235; CHECK-PREP10-NEXT: oris r4, r4, 54437236; CHECK-PREP10-NEXT: ori r4, r4, 4097237; CHECK-PREP10-NEXT: or r3, r3, r4238; CHECK-PREP10-NEXT: lfs f0, 0(r3)239; CHECK-PREP10-NEXT: xscvdpsxds f0, f0240; CHECK-PREP10-NEXT: mffprd r3, f0241; CHECK-PREP10-NEXT: blr242entry:243 %or = or i64 %ptr, 1000000000001244 %0 = inttoptr i64 %or to ptr245 %1 = load float, ptr %0, align 4246 %conv = fptosi float %1 to i64247 ret i64 %conv248}249 250; Function Attrs: norecurse nounwind readonly uwtable willreturn251define dso_local i64 @ld_disjoint_align64_int64_t_float(i64 %ptr) {252; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_float:253; CHECK-P10: # %bb.0: # %entry254; CHECK-P10-NEXT: pli r4, 244140625255; CHECK-P10-NEXT: rldicr r3, r3, 0, 23256; CHECK-P10-NEXT: rldic r4, r4, 12, 24257; CHECK-P10-NEXT: lfsx f0, r3, r4258; CHECK-P10-NEXT: xscvdpsxds f0, f0259; CHECK-P10-NEXT: mffprd r3, f0260; CHECK-P10-NEXT: blr261;262; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_float:263; CHECK-PREP10: # %bb.0: # %entry264; CHECK-PREP10-NEXT: lis r4, 3725265; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23266; CHECK-PREP10-NEXT: ori r4, r4, 19025267; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24268; CHECK-PREP10-NEXT: lfsx f0, r3, r4269; CHECK-PREP10-NEXT: xscvdpsxds f0, f0270; CHECK-PREP10-NEXT: mffprd r3, f0271; CHECK-PREP10-NEXT: blr272entry:273 %and = and i64 %ptr, -1099511627776274 %or = or i64 %and, 1000000000000275 %0 = inttoptr i64 %or to ptr276 %1 = load float, ptr %0, align 4096277 %conv = fptosi float %1 to i64278 ret i64 %conv279}280 281; Function Attrs: norecurse nounwind readonly uwtable willreturn282define dso_local i64 @ld_cst_align16_int64_t_float() {283; CHECK-LABEL: ld_cst_align16_int64_t_float:284; CHECK: # %bb.0: # %entry285; CHECK-NEXT: lfs f0, 4080(0)286; CHECK-NEXT: xscvdpsxds f0, f0287; CHECK-NEXT: mffprd r3, f0288; CHECK-NEXT: blr289entry:290 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 16291 %conv = fptosi float %0 to i64292 ret i64 %conv293}294 295; Function Attrs: norecurse nounwind readonly uwtable willreturn296define dso_local i64 @ld_cst_align32_int64_t_float() {297; CHECK-LABEL: ld_cst_align32_int64_t_float:298; CHECK: # %bb.0: # %entry299; CHECK-NEXT: lis r3, 153300; CHECK-NEXT: lfs f0, -27108(r3)301; CHECK-NEXT: xscvdpsxds f0, f0302; CHECK-NEXT: mffprd r3, f0303; CHECK-NEXT: blr304entry:305 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 4306 %conv = fptosi float %0 to i64307 ret i64 %conv308}309 310; Function Attrs: norecurse nounwind readonly uwtable willreturn311define dso_local i64 @ld_cst_align64_int64_t_float() {312; CHECK-P10-LABEL: ld_cst_align64_int64_t_float:313; CHECK-P10: # %bb.0: # %entry314; CHECK-P10-NEXT: pli r3, 244140625315; CHECK-P10-NEXT: rldic r3, r3, 12, 24316; CHECK-P10-NEXT: lfs f0, 0(r3)317; CHECK-P10-NEXT: xscvdpsxds f0, f0318; CHECK-P10-NEXT: mffprd r3, f0319; CHECK-P10-NEXT: blr320;321; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_float:322; CHECK-PREP10: # %bb.0: # %entry323; CHECK-PREP10-NEXT: lis r3, 3725324; CHECK-PREP10-NEXT: ori r3, r3, 19025325; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24326; CHECK-PREP10-NEXT: lfs f0, 0(r3)327; CHECK-PREP10-NEXT: xscvdpsxds f0, f0328; CHECK-PREP10-NEXT: mffprd r3, f0329; CHECK-PREP10-NEXT: blr330entry:331 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 4096332 %conv = fptosi float %0 to i64333 ret i64 %conv334}335 336; Function Attrs: norecurse nounwind readonly uwtable willreturn337define dso_local i64 @ld_0_int64_t_double(i64 %ptr) {338; CHECK-LABEL: ld_0_int64_t_double:339; CHECK: # %bb.0: # %entry340; CHECK-NEXT: lfd f0, 0(r3)341; CHECK-NEXT: xscvdpsxds f0, f0342; CHECK-NEXT: mffprd r3, f0343; CHECK-NEXT: blr344entry:345 %0 = inttoptr i64 %ptr to ptr346 %1 = load double, ptr %0, align 8347 %conv = fptosi double %1 to i64348 ret i64 %conv349}350 351; Function Attrs: norecurse nounwind readonly uwtable willreturn352define dso_local i64 @ld_align16_int64_t_double(ptr nocapture readonly %ptr) {353; CHECK-LABEL: ld_align16_int64_t_double:354; CHECK: # %bb.0: # %entry355; CHECK-NEXT: lfd f0, 8(r3)356; CHECK-NEXT: xscvdpsxds f0, f0357; CHECK-NEXT: mffprd r3, f0358; CHECK-NEXT: blr359entry:360 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8361 %0 = load double, ptr %add.ptr, align 8362 %conv = fptosi double %0 to i64363 ret i64 %conv364}365 366; Function Attrs: norecurse nounwind readonly uwtable willreturn367define dso_local i64 @ld_align32_int64_t_double(ptr nocapture readonly %ptr) {368; CHECK-P10-LABEL: ld_align32_int64_t_double:369; CHECK-P10: # %bb.0: # %entry370; CHECK-P10-NEXT: plfd f0, 99999000(r3), 0371; CHECK-P10-NEXT: xscvdpsxds f0, f0372; CHECK-P10-NEXT: mffprd r3, f0373; CHECK-P10-NEXT: blr374;375; CHECK-PREP10-LABEL: ld_align32_int64_t_double:376; CHECK-PREP10: # %bb.0: # %entry377; CHECK-PREP10-NEXT: lis r4, 1525378; CHECK-PREP10-NEXT: ori r4, r4, 56600379; CHECK-PREP10-NEXT: lfdx f0, r3, r4380; CHECK-PREP10-NEXT: xscvdpsxds f0, f0381; CHECK-PREP10-NEXT: mffprd r3, f0382; CHECK-PREP10-NEXT: blr383entry:384 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000385 %0 = load double, ptr %add.ptr, align 8386 %conv = fptosi double %0 to i64387 ret i64 %conv388}389 390; Function Attrs: norecurse nounwind readonly uwtable willreturn391define dso_local i64 @ld_align64_int64_t_double(ptr nocapture readonly %ptr) {392; CHECK-P10-LABEL: ld_align64_int64_t_double:393; CHECK-P10: # %bb.0: # %entry394; CHECK-P10-NEXT: pli r4, 244140625395; CHECK-P10-NEXT: rldic r4, r4, 12, 24396; CHECK-P10-NEXT: lfdx f0, r3, r4397; CHECK-P10-NEXT: xscvdpsxds f0, f0398; CHECK-P10-NEXT: mffprd r3, f0399; CHECK-P10-NEXT: blr400;401; CHECK-PREP10-LABEL: ld_align64_int64_t_double:402; CHECK-PREP10: # %bb.0: # %entry403; CHECK-PREP10-NEXT: lis r4, 3725404; CHECK-PREP10-NEXT: ori r4, r4, 19025405; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24406; CHECK-PREP10-NEXT: lfdx f0, r3, r4407; CHECK-PREP10-NEXT: xscvdpsxds f0, f0408; CHECK-PREP10-NEXT: mffprd r3, f0409; CHECK-PREP10-NEXT: blr410entry:411 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000412 %0 = load double, ptr %add.ptr, align 8413 %conv = fptosi double %0 to i64414 ret i64 %conv415}416 417; Function Attrs: norecurse nounwind readonly uwtable willreturn418define dso_local i64 @ld_reg_int64_t_double(ptr nocapture readonly %ptr, i64 %off) {419; CHECK-LABEL: ld_reg_int64_t_double:420; CHECK: # %bb.0: # %entry421; CHECK-NEXT: lfdx f0, r3, r4422; CHECK-NEXT: xscvdpsxds f0, f0423; CHECK-NEXT: mffprd r3, f0424; CHECK-NEXT: blr425entry:426 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off427 %0 = load double, ptr %add.ptr, align 8428 %conv = fptosi double %0 to i64429 ret i64 %conv430}431 432; Function Attrs: norecurse nounwind readonly uwtable willreturn433define dso_local i64 @ld_or_int64_t_double(i64 %ptr, i8 zeroext %off) {434; CHECK-LABEL: ld_or_int64_t_double:435; CHECK: # %bb.0: # %entry436; CHECK-NEXT: or r3, r4, r3437; CHECK-NEXT: lfd f0, 0(r3)438; CHECK-NEXT: xscvdpsxds f0, f0439; CHECK-NEXT: mffprd r3, f0440; CHECK-NEXT: blr441entry:442 %conv = zext i8 %off to i64443 %or = or i64 %conv, %ptr444 %0 = inttoptr i64 %or to ptr445 %1 = load double, ptr %0, align 8446 %conv1 = fptosi double %1 to i64447 ret i64 %conv1448}449 450; Function Attrs: norecurse nounwind readonly uwtable willreturn451define dso_local i64 @ld_not_disjoint16_int64_t_double(i64 %ptr) {452; CHECK-LABEL: ld_not_disjoint16_int64_t_double:453; CHECK: # %bb.0: # %entry454; CHECK-NEXT: ori r3, r3, 6455; CHECK-NEXT: lfd f0, 0(r3)456; CHECK-NEXT: xscvdpsxds f0, f0457; CHECK-NEXT: mffprd r3, f0458; CHECK-NEXT: blr459entry:460 %or = or i64 %ptr, 6461 %0 = inttoptr i64 %or to ptr462 %1 = load double, ptr %0, align 8463 %conv = fptosi double %1 to i64464 ret i64 %conv465}466 467; Function Attrs: norecurse nounwind readonly uwtable willreturn468define dso_local i64 @ld_disjoint_align16_int64_t_double(i64 %ptr) {469; CHECK-LABEL: ld_disjoint_align16_int64_t_double:470; CHECK: # %bb.0: # %entry471; CHECK-NEXT: rldicr r3, r3, 0, 51472; CHECK-NEXT: lfd f0, 24(r3)473; CHECK-NEXT: xscvdpsxds f0, f0474; CHECK-NEXT: mffprd r3, f0475; CHECK-NEXT: blr476entry:477 %and = and i64 %ptr, -4096478 %or = or i64 %and, 24479 %0 = inttoptr i64 %or to ptr480 %1 = load double, ptr %0, align 8481 %conv = fptosi double %1 to i64482 ret i64 %conv483}484 485; Function Attrs: norecurse nounwind readonly uwtable willreturn486define dso_local i64 @ld_not_disjoint32_int64_t_double(i64 %ptr) {487; CHECK-LABEL: ld_not_disjoint32_int64_t_double:488; CHECK: # %bb.0: # %entry489; CHECK-NEXT: ori r3, r3, 34463490; CHECK-NEXT: oris r3, r3, 1491; CHECK-NEXT: lfd f0, 0(r3)492; CHECK-NEXT: xscvdpsxds f0, f0493; CHECK-NEXT: mffprd r3, f0494; CHECK-NEXT: blr495entry:496 %or = or i64 %ptr, 99999497 %0 = inttoptr i64 %or to ptr498 %1 = load double, ptr %0, align 8499 %conv = fptosi double %1 to i64500 ret i64 %conv501}502 503; Function Attrs: norecurse nounwind readonly uwtable willreturn504define dso_local i64 @ld_disjoint_align32_int64_t_double(i64 %ptr) {505; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_double:506; CHECK-P10: # %bb.0: # %entry507; CHECK-P10-NEXT: lis r4, -15264508; CHECK-P10-NEXT: and r3, r3, r4509; CHECK-P10-NEXT: plfd f0, 999990000(r3), 0510; CHECK-P10-NEXT: xscvdpsxds f0, f0511; CHECK-P10-NEXT: mffprd r3, f0512; CHECK-P10-NEXT: blr513;514; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_double:515; CHECK-PREP10: # %bb.0: # %entry516; CHECK-PREP10-NEXT: lis r4, -15264517; CHECK-PREP10-NEXT: and r3, r3, r4518; CHECK-PREP10-NEXT: lis r4, 15258519; CHECK-PREP10-NEXT: ori r4, r4, 41712520; CHECK-PREP10-NEXT: lfdx f0, r3, r4521; CHECK-PREP10-NEXT: xscvdpsxds f0, f0522; CHECK-PREP10-NEXT: mffprd r3, f0523; CHECK-PREP10-NEXT: blr524entry:525 %and = and i64 %ptr, -1000341504526 %or = or i64 %and, 999990000527 %0 = inttoptr i64 %or to ptr528 %1 = load double, ptr %0, align 16529 %conv = fptosi double %1 to i64530 ret i64 %conv531}532 533; Function Attrs: norecurse nounwind readonly uwtable willreturn534define dso_local i64 @ld_not_disjoint64_int64_t_double(i64 %ptr) {535; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_double:536; CHECK-P10: # %bb.0: # %entry537; CHECK-P10-NEXT: pli r4, 232538; CHECK-P10-NEXT: pli r5, 3567587329539; CHECK-P10-NEXT: rldimi r5, r4, 32, 0540; CHECK-P10-NEXT: or r3, r3, r5541; CHECK-P10-NEXT: lfd f0, 0(r3)542; CHECK-P10-NEXT: xscvdpsxds f0, f0543; CHECK-P10-NEXT: mffprd r3, f0544; CHECK-P10-NEXT: blr545;546; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_double:547; CHECK-PREP10: # %bb.0: # %entry548; CHECK-PREP10-NEXT: li r4, 29549; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24550; CHECK-PREP10-NEXT: oris r4, r4, 54437551; CHECK-PREP10-NEXT: ori r4, r4, 4097552; CHECK-PREP10-NEXT: or r3, r3, r4553; CHECK-PREP10-NEXT: lfd f0, 0(r3)554; CHECK-PREP10-NEXT: xscvdpsxds f0, f0555; CHECK-PREP10-NEXT: mffprd r3, f0556; CHECK-PREP10-NEXT: blr557entry:558 %or = or i64 %ptr, 1000000000001559 %0 = inttoptr i64 %or to ptr560 %1 = load double, ptr %0, align 8561 %conv = fptosi double %1 to i64562 ret i64 %conv563}564 565; Function Attrs: norecurse nounwind readonly uwtable willreturn566define dso_local i64 @ld_disjoint_align64_int64_t_double(i64 %ptr) {567; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_double:568; CHECK-P10: # %bb.0: # %entry569; CHECK-P10-NEXT: pli r4, 244140625570; CHECK-P10-NEXT: rldicr r3, r3, 0, 23571; CHECK-P10-NEXT: rldic r4, r4, 12, 24572; CHECK-P10-NEXT: lfdx f0, r3, r4573; CHECK-P10-NEXT: xscvdpsxds f0, f0574; CHECK-P10-NEXT: mffprd r3, f0575; CHECK-P10-NEXT: blr576;577; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_double:578; CHECK-PREP10: # %bb.0: # %entry579; CHECK-PREP10-NEXT: lis r4, 3725580; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23581; CHECK-PREP10-NEXT: ori r4, r4, 19025582; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24583; CHECK-PREP10-NEXT: lfdx f0, r3, r4584; CHECK-PREP10-NEXT: xscvdpsxds f0, f0585; CHECK-PREP10-NEXT: mffprd r3, f0586; CHECK-PREP10-NEXT: blr587entry:588 %and = and i64 %ptr, -1099511627776589 %or = or i64 %and, 1000000000000590 %0 = inttoptr i64 %or to ptr591 %1 = load double, ptr %0, align 4096592 %conv = fptosi double %1 to i64593 ret i64 %conv594}595 596; Function Attrs: norecurse nounwind readonly uwtable willreturn597define dso_local i64 @ld_cst_align16_int64_t_double() {598; CHECK-LABEL: ld_cst_align16_int64_t_double:599; CHECK: # %bb.0: # %entry600; CHECK-NEXT: lfd f0, 4080(0)601; CHECK-NEXT: xscvdpsxds f0, f0602; CHECK-NEXT: mffprd r3, f0603; CHECK-NEXT: blr604entry:605 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 16606 %conv = fptosi double %0 to i64607 ret i64 %conv608}609 610; Function Attrs: norecurse nounwind readonly uwtable willreturn611define dso_local i64 @ld_cst_align32_int64_t_double() {612; CHECK-LABEL: ld_cst_align32_int64_t_double:613; CHECK: # %bb.0: # %entry614; CHECK-NEXT: lis r3, 153615; CHECK-NEXT: lfd f0, -27108(r3)616; CHECK-NEXT: xscvdpsxds f0, f0617; CHECK-NEXT: mffprd r3, f0618; CHECK-NEXT: blr619entry:620 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 8621 %conv = fptosi double %0 to i64622 ret i64 %conv623}624 625; Function Attrs: norecurse nounwind readonly uwtable willreturn626define dso_local i64 @ld_cst_align64_int64_t_double() {627; CHECK-P10-LABEL: ld_cst_align64_int64_t_double:628; CHECK-P10: # %bb.0: # %entry629; CHECK-P10-NEXT: pli r3, 244140625630; CHECK-P10-NEXT: rldic r3, r3, 12, 24631; CHECK-P10-NEXT: lfd f0, 0(r3)632; CHECK-P10-NEXT: xscvdpsxds f0, f0633; CHECK-P10-NEXT: mffprd r3, f0634; CHECK-P10-NEXT: blr635;636; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_double:637; CHECK-PREP10: # %bb.0: # %entry638; CHECK-PREP10-NEXT: lis r3, 3725639; CHECK-PREP10-NEXT: ori r3, r3, 19025640; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24641; CHECK-PREP10-NEXT: lfd f0, 0(r3)642; CHECK-PREP10-NEXT: xscvdpsxds f0, f0643; CHECK-PREP10-NEXT: mffprd r3, f0644; CHECK-PREP10-NEXT: blr645entry:646 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 4096647 %conv = fptosi double %0 to i64648 ret i64 %conv649}650 651; Function Attrs: norecurse nounwind readonly uwtable willreturn652define dso_local i64 @ld_0_uint64_t_uint8_t(i64 %ptr) {653; CHECK-LABEL: ld_0_uint64_t_uint8_t:654; CHECK: # %bb.0: # %entry655; CHECK-NEXT: lbz r3, 0(r3)656; CHECK-NEXT: blr657entry:658 %0 = inttoptr i64 %ptr to ptr659 %1 = load i8, ptr %0, align 1660 %conv = zext i8 %1 to i64661 ret i64 %conv662}663 664; Function Attrs: norecurse nounwind readonly uwtable willreturn665define dso_local i64 @ld_unalign16_uint64_t_uint8_t(ptr nocapture readonly %ptr) {666; CHECK-LABEL: ld_unalign16_uint64_t_uint8_t:667; CHECK: # %bb.0: # %entry668; CHECK-NEXT: lbz r3, 1(r3)669; CHECK-NEXT: blr670entry:671 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1672 %0 = load i8, ptr %add.ptr, align 1673 %conv = zext i8 %0 to i64674 ret i64 %conv675}676 677; Function Attrs: norecurse nounwind readonly uwtable willreturn678define dso_local i64 @ld_align16_uint64_t_uint8_t(ptr nocapture readonly %ptr) {679; CHECK-LABEL: ld_align16_uint64_t_uint8_t:680; CHECK: # %bb.0: # %entry681; CHECK-NEXT: lbz r3, 8(r3)682; CHECK-NEXT: blr683entry:684 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8685 %0 = load i8, ptr %add.ptr, align 1686 %conv = zext i8 %0 to i64687 ret i64 %conv688}689 690; Function Attrs: norecurse nounwind readonly uwtable willreturn691define dso_local i64 @ld_unalign32_uint64_t_uint8_t(ptr nocapture readonly %ptr) {692; CHECK-P10-LABEL: ld_unalign32_uint64_t_uint8_t:693; CHECK-P10: # %bb.0: # %entry694; CHECK-P10-NEXT: plbz r3, 99999(r3), 0695; CHECK-P10-NEXT: blr696;697; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_uint8_t:698; CHECK-PREP10: # %bb.0: # %entry699; CHECK-PREP10-NEXT: lis r4, 1700; CHECK-PREP10-NEXT: ori r4, r4, 34463701; CHECK-PREP10-NEXT: lbzx r3, r3, r4702; CHECK-PREP10-NEXT: blr703entry:704 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999705 %0 = load i8, ptr %add.ptr, align 1706 %conv = zext i8 %0 to i64707 ret i64 %conv708}709 710; Function Attrs: norecurse nounwind readonly uwtable willreturn711define dso_local i64 @ld_align32_uint64_t_uint8_t(ptr nocapture readonly %ptr) {712; CHECK-P10-LABEL: ld_align32_uint64_t_uint8_t:713; CHECK-P10: # %bb.0: # %entry714; CHECK-P10-NEXT: plbz r3, 99999000(r3), 0715; CHECK-P10-NEXT: blr716;717; CHECK-PREP10-LABEL: ld_align32_uint64_t_uint8_t:718; CHECK-PREP10: # %bb.0: # %entry719; CHECK-PREP10-NEXT: lis r4, 1525720; CHECK-PREP10-NEXT: ori r4, r4, 56600721; CHECK-PREP10-NEXT: lbzx r3, r3, r4722; CHECK-PREP10-NEXT: blr723entry:724 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000725 %0 = load i8, ptr %add.ptr, align 1726 %conv = zext i8 %0 to i64727 ret i64 %conv728}729 730; Function Attrs: norecurse nounwind readonly uwtable willreturn731define dso_local i64 @ld_unalign64_uint64_t_uint8_t(ptr nocapture readonly %ptr) {732; CHECK-P10-LABEL: ld_unalign64_uint64_t_uint8_t:733; CHECK-P10: # %bb.0: # %entry734; CHECK-P10-NEXT: pli r4, 232735; CHECK-P10-NEXT: pli r5, 3567587329736; CHECK-P10-NEXT: rldimi r5, r4, 32, 0737; CHECK-P10-NEXT: lbzx r3, r3, r5738; CHECK-P10-NEXT: blr739;740; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_uint8_t:741; CHECK-PREP10: # %bb.0: # %entry742; CHECK-PREP10-NEXT: li r4, 29743; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24744; CHECK-PREP10-NEXT: oris r4, r4, 54437745; CHECK-PREP10-NEXT: ori r4, r4, 4097746; CHECK-PREP10-NEXT: lbzx r3, r3, r4747; CHECK-PREP10-NEXT: blr748entry:749 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001750 %0 = load i8, ptr %add.ptr, align 1751 %conv = zext i8 %0 to i64752 ret i64 %conv753}754 755; Function Attrs: norecurse nounwind readonly uwtable willreturn756define dso_local i64 @ld_align64_uint64_t_uint8_t(ptr nocapture readonly %ptr) {757; CHECK-P10-LABEL: ld_align64_uint64_t_uint8_t:758; CHECK-P10: # %bb.0: # %entry759; CHECK-P10-NEXT: pli r4, 244140625760; CHECK-P10-NEXT: rldic r4, r4, 12, 24761; CHECK-P10-NEXT: lbzx r3, r3, r4762; CHECK-P10-NEXT: blr763;764; CHECK-PREP10-LABEL: ld_align64_uint64_t_uint8_t:765; CHECK-PREP10: # %bb.0: # %entry766; CHECK-PREP10-NEXT: lis r4, 3725767; CHECK-PREP10-NEXT: ori r4, r4, 19025768; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24769; CHECK-PREP10-NEXT: lbzx r3, r3, r4770; CHECK-PREP10-NEXT: blr771entry:772 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000773 %0 = load i8, ptr %add.ptr, align 1774 %conv = zext i8 %0 to i64775 ret i64 %conv776}777 778; Function Attrs: norecurse nounwind readonly uwtable willreturn779define dso_local i64 @ld_reg_uint64_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) {780; CHECK-LABEL: ld_reg_uint64_t_uint8_t:781; CHECK: # %bb.0: # %entry782; CHECK-NEXT: lbzx r3, r3, r4783; CHECK-NEXT: blr784entry:785 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off786 %0 = load i8, ptr %add.ptr, align 1787 %conv = zext i8 %0 to i64788 ret i64 %conv789}790 791; Function Attrs: norecurse nounwind readonly uwtable willreturn792define dso_local i64 @ld_or_uint64_t_uint8_t(i64 %ptr, i8 zeroext %off) {793; CHECK-LABEL: ld_or_uint64_t_uint8_t:794; CHECK: # %bb.0: # %entry795; CHECK-NEXT: or r3, r4, r3796; CHECK-NEXT: lbz r3, 0(r3)797; CHECK-NEXT: blr798entry:799 %conv = zext i8 %off to i64800 %or = or i64 %conv, %ptr801 %0 = inttoptr i64 %or to ptr802 %1 = load i8, ptr %0, align 1803 %conv1 = zext i8 %1 to i64804 ret i64 %conv1805}806 807; Function Attrs: norecurse nounwind readonly uwtable willreturn808define dso_local i64 @ld_or2_uint64_t_uint8_t(i64 %ptr, i8 zeroext %off) {809; CHECK-LABEL: ld_or2_uint64_t_uint8_t:810; CHECK: # %bb.0: # %entry811; CHECK-NEXT: rldicr r3, r3, 0, 51812; CHECK-NEXT: lbzx r3, r3, r4813; CHECK-NEXT: blr814entry:815 %and = and i64 %ptr, -4096816 %conv = zext i8 %off to i64817 %or = or i64 %and, %conv818 %0 = inttoptr i64 %or to ptr819 %1 = load i8, ptr %0, align 1820 %conv1 = zext i8 %1 to i64821 ret i64 %conv1822}823 824; Function Attrs: norecurse nounwind readonly uwtable willreturn825define dso_local i64 @ld_not_disjoint16_uint64_t_uint8_t(i64 %ptr) {826; CHECK-LABEL: ld_not_disjoint16_uint64_t_uint8_t:827; CHECK: # %bb.0: # %entry828; CHECK-NEXT: ori r3, r3, 6829; CHECK-NEXT: lbz r3, 0(r3)830; CHECK-NEXT: blr831entry:832 %or = or i64 %ptr, 6833 %0 = inttoptr i64 %or to ptr834 %1 = load i8, ptr %0, align 1835 %conv = zext i8 %1 to i64836 ret i64 %conv837}838 839; Function Attrs: norecurse nounwind readonly uwtable willreturn840define dso_local i64 @ld_disjoint_unalign16_uint64_t_uint8_t(i64 %ptr) {841; CHECK-LABEL: ld_disjoint_unalign16_uint64_t_uint8_t:842; CHECK: # %bb.0: # %entry843; CHECK-NEXT: rldicr r3, r3, 0, 51844; CHECK-NEXT: lbz r3, 6(r3)845; CHECK-NEXT: blr846entry:847 %and = and i64 %ptr, -4096848 %or = or i64 %and, 6849 %0 = inttoptr i64 %or to ptr850 %1 = load i8, ptr %0, align 2851 %conv = zext i8 %1 to i64852 ret i64 %conv853}854 855; Function Attrs: norecurse nounwind readonly uwtable willreturn856define dso_local i64 @ld_disjoint_align16_uint64_t_uint8_t(i64 %ptr) {857; CHECK-LABEL: ld_disjoint_align16_uint64_t_uint8_t:858; CHECK: # %bb.0: # %entry859; CHECK-NEXT: rldicr r3, r3, 0, 51860; CHECK-NEXT: lbz r3, 24(r3)861; CHECK-NEXT: blr862entry:863 %and = and i64 %ptr, -4096864 %or = or i64 %and, 24865 %0 = inttoptr i64 %or to ptr866 %1 = load i8, ptr %0, align 8867 %conv = zext i8 %1 to i64868 ret i64 %conv869}870 871; Function Attrs: norecurse nounwind readonly uwtable willreturn872define dso_local i64 @ld_not_disjoint32_uint64_t_uint8_t(i64 %ptr) {873; CHECK-LABEL: ld_not_disjoint32_uint64_t_uint8_t:874; CHECK: # %bb.0: # %entry875; CHECK-NEXT: ori r3, r3, 34463876; CHECK-NEXT: oris r3, r3, 1877; CHECK-NEXT: lbz r3, 0(r3)878; CHECK-NEXT: blr879entry:880 %or = or i64 %ptr, 99999881 %0 = inttoptr i64 %or to ptr882 %1 = load i8, ptr %0, align 1883 %conv = zext i8 %1 to i64884 ret i64 %conv885}886 887; Function Attrs: norecurse nounwind readonly uwtable willreturn888define dso_local i64 @ld_disjoint_unalign32_uint64_t_uint8_t(i64 %ptr) {889; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_uint8_t:890; CHECK-P10: # %bb.0: # %entry891; CHECK-P10-NEXT: rldicr r3, r3, 0, 43892; CHECK-P10-NEXT: plbz r3, 99999(r3), 0893; CHECK-P10-NEXT: blr894;895; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_uint8_t:896; CHECK-PREP10: # %bb.0: # %entry897; CHECK-PREP10-NEXT: lis r4, 1898; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 43899; CHECK-PREP10-NEXT: ori r4, r4, 34463900; CHECK-PREP10-NEXT: lbzx r3, r3, r4901; CHECK-PREP10-NEXT: blr902entry:903 %and = and i64 %ptr, -1048576904 %or = or i64 %and, 99999905 %0 = inttoptr i64 %or to ptr906 %1 = load i8, ptr %0, align 1907 %conv = zext i8 %1 to i64908 ret i64 %conv909}910 911; Function Attrs: norecurse nounwind readonly uwtable willreturn912define dso_local i64 @ld_disjoint_align32_uint64_t_uint8_t(i64 %ptr) {913; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_uint8_t:914; CHECK-P10: # %bb.0: # %entry915; CHECK-P10-NEXT: lis r4, -15264916; CHECK-P10-NEXT: and r3, r3, r4917; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0918; CHECK-P10-NEXT: blr919;920; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_uint8_t:921; CHECK-PREP10: # %bb.0: # %entry922; CHECK-PREP10-NEXT: lis r4, -15264923; CHECK-PREP10-NEXT: and r3, r3, r4924; CHECK-PREP10-NEXT: lis r4, 15258925; CHECK-PREP10-NEXT: ori r4, r4, 41712926; CHECK-PREP10-NEXT: lbzx r3, r3, r4927; CHECK-PREP10-NEXT: blr928entry:929 %and = and i64 %ptr, -1000341504930 %or = or i64 %and, 999990000931 %0 = inttoptr i64 %or to ptr932 %1 = load i8, ptr %0, align 16933 %conv = zext i8 %1 to i64934 ret i64 %conv935}936 937; Function Attrs: norecurse nounwind readonly uwtable willreturn938define dso_local i64 @ld_not_disjoint64_uint64_t_uint8_t(i64 %ptr) {939; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_uint8_t:940; CHECK-P10: # %bb.0: # %entry941; CHECK-P10-NEXT: pli r4, 232942; CHECK-P10-NEXT: pli r5, 3567587329943; CHECK-P10-NEXT: rldimi r5, r4, 32, 0944; CHECK-P10-NEXT: or r3, r3, r5945; CHECK-P10-NEXT: lbz r3, 0(r3)946; CHECK-P10-NEXT: blr947;948; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_uint8_t:949; CHECK-PREP10: # %bb.0: # %entry950; CHECK-PREP10-NEXT: li r4, 29951; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24952; CHECK-PREP10-NEXT: oris r4, r4, 54437953; CHECK-PREP10-NEXT: ori r4, r4, 4097954; CHECK-PREP10-NEXT: or r3, r3, r4955; CHECK-PREP10-NEXT: lbz r3, 0(r3)956; CHECK-PREP10-NEXT: blr957entry:958 %or = or i64 %ptr, 1000000000001959 %0 = inttoptr i64 %or to ptr960 %1 = load i8, ptr %0, align 1961 %conv = zext i8 %1 to i64962 ret i64 %conv963}964 965; Function Attrs: norecurse nounwind readonly uwtable willreturn966define dso_local i64 @ld_disjoint_unalign64_uint64_t_uint8_t(i64 %ptr) {967; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_uint8_t:968; CHECK-P10: # %bb.0: # %entry969; CHECK-P10-NEXT: pli r4, 232970; CHECK-P10-NEXT: pli r5, 3567587329971; CHECK-P10-NEXT: rldicr r3, r3, 0, 23972; CHECK-P10-NEXT: rldimi r5, r4, 32, 0973; CHECK-P10-NEXT: lbzx r3, r3, r5974; CHECK-P10-NEXT: blr975;976; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_uint8_t:977; CHECK-PREP10: # %bb.0: # %entry978; CHECK-PREP10-NEXT: li r4, 29979; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23980; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24981; CHECK-PREP10-NEXT: oris r4, r4, 54437982; CHECK-PREP10-NEXT: ori r4, r4, 4097983; CHECK-PREP10-NEXT: lbzx r3, r3, r4984; CHECK-PREP10-NEXT: blr985entry:986 %and = and i64 %ptr, -1099511627776987 %or = or i64 %and, 1000000000001988 %0 = inttoptr i64 %or to ptr989 %1 = load i8, ptr %0, align 1990 %conv = zext i8 %1 to i64991 ret i64 %conv992}993 994; Function Attrs: norecurse nounwind readonly uwtable willreturn995define dso_local i64 @ld_disjoint_align64_uint64_t_uint8_t(i64 %ptr) {996; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_uint8_t:997; CHECK-P10: # %bb.0: # %entry998; CHECK-P10-NEXT: pli r4, 244140625999; CHECK-P10-NEXT: rldicr r3, r3, 0, 231000; CHECK-P10-NEXT: rldic r4, r4, 12, 241001; CHECK-P10-NEXT: lbzx r3, r3, r41002; CHECK-P10-NEXT: blr1003;1004; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_uint8_t:1005; CHECK-PREP10: # %bb.0: # %entry1006; CHECK-PREP10-NEXT: lis r4, 37251007; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231008; CHECK-PREP10-NEXT: ori r4, r4, 190251009; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241010; CHECK-PREP10-NEXT: lbzx r3, r3, r41011; CHECK-PREP10-NEXT: blr1012entry:1013 %and = and i64 %ptr, -10995116277761014 %or = or i64 %and, 10000000000001015 %0 = inttoptr i64 %or to ptr1016 %1 = load i8, ptr %0, align 40961017 %conv = zext i8 %1 to i641018 ret i64 %conv1019}1020 1021; Function Attrs: norecurse nounwind readonly uwtable willreturn1022define dso_local i64 @ld_cst_unalign16_uint64_t_uint8_t() {1023; CHECK-LABEL: ld_cst_unalign16_uint64_t_uint8_t:1024; CHECK: # %bb.0: # %entry1025; CHECK-NEXT: lbz r3, 255(0)1026; CHECK-NEXT: blr1027entry:1028 %0 = load i8, ptr inttoptr (i64 255 to ptr), align 11029 %conv = zext i8 %0 to i641030 ret i64 %conv1031}1032 1033; Function Attrs: norecurse nounwind readonly uwtable willreturn1034define dso_local i64 @ld_cst_align16_uint64_t_uint8_t() {1035; CHECK-LABEL: ld_cst_align16_uint64_t_uint8_t:1036; CHECK: # %bb.0: # %entry1037; CHECK-NEXT: lbz r3, 4080(0)1038; CHECK-NEXT: blr1039entry:1040 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 161041 %conv = zext i8 %0 to i641042 ret i64 %conv1043}1044 1045; Function Attrs: norecurse nounwind readonly uwtable willreturn1046define dso_local i64 @ld_cst_unalign32_uint64_t_uint8_t() {1047; CHECK-LABEL: ld_cst_unalign32_uint64_t_uint8_t:1048; CHECK: # %bb.0: # %entry1049; CHECK-NEXT: lis r3, 21050; CHECK-NEXT: lbz r3, -31073(r3)1051; CHECK-NEXT: blr1052entry:1053 %0 = load i8, ptr inttoptr (i64 99999 to ptr), align 11054 %conv = zext i8 %0 to i641055 ret i64 %conv1056}1057 1058; Function Attrs: norecurse nounwind readonly uwtable willreturn1059define dso_local i64 @ld_cst_align32_uint64_t_uint8_t() {1060; CHECK-LABEL: ld_cst_align32_uint64_t_uint8_t:1061; CHECK: # %bb.0: # %entry1062; CHECK-NEXT: lis r3, 1531063; CHECK-NEXT: lbz r3, -27108(r3)1064; CHECK-NEXT: blr1065entry:1066 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 41067 %conv = zext i8 %0 to i641068 ret i64 %conv1069}1070 1071; Function Attrs: norecurse nounwind readonly uwtable willreturn1072define dso_local i64 @ld_cst_unalign64_uint64_t_uint8_t() {1073; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_uint8_t:1074; CHECK-P10: # %bb.0: # %entry1075; CHECK-P10-NEXT: pli r3, 2321076; CHECK-P10-NEXT: pli r4, 35675873291077; CHECK-P10-NEXT: rldimi r4, r3, 32, 01078; CHECK-P10-NEXT: lbz r3, 0(r4)1079; CHECK-P10-NEXT: blr1080;1081; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_uint8_t:1082; CHECK-PREP10: # %bb.0: # %entry1083; CHECK-PREP10-NEXT: li r3, 291084; CHECK-PREP10-NEXT: rldic r3, r3, 35, 241085; CHECK-PREP10-NEXT: oris r3, r3, 544371086; CHECK-PREP10-NEXT: ori r3, r3, 40971087; CHECK-PREP10-NEXT: lbz r3, 0(r3)1088; CHECK-PREP10-NEXT: blr1089entry:1090 %0 = load i8, ptr inttoptr (i64 1000000000001 to ptr), align 11091 %conv = zext i8 %0 to i641092 ret i64 %conv1093}1094 1095; Function Attrs: norecurse nounwind readonly uwtable willreturn1096define dso_local i64 @ld_cst_align64_uint64_t_uint8_t() {1097; CHECK-P10-LABEL: ld_cst_align64_uint64_t_uint8_t:1098; CHECK-P10: # %bb.0: # %entry1099; CHECK-P10-NEXT: pli r3, 2441406251100; CHECK-P10-NEXT: rldic r3, r3, 12, 241101; CHECK-P10-NEXT: lbz r3, 0(r3)1102; CHECK-P10-NEXT: blr1103;1104; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_uint8_t:1105; CHECK-PREP10: # %bb.0: # %entry1106; CHECK-PREP10-NEXT: lis r3, 37251107; CHECK-PREP10-NEXT: ori r3, r3, 190251108; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241109; CHECK-PREP10-NEXT: lbz r3, 0(r3)1110; CHECK-PREP10-NEXT: blr1111entry:1112 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 40961113 %conv = zext i8 %0 to i641114 ret i64 %conv1115}1116 1117; Function Attrs: norecurse nounwind readonly uwtable willreturn1118define dso_local i64 @ld_0_uint64_t_int8_t(i64 %ptr) {1119; CHECK-LABEL: ld_0_uint64_t_int8_t:1120; CHECK: # %bb.0: # %entry1121; CHECK-NEXT: lbz r3, 0(r3)1122; CHECK-NEXT: extsb r3, r31123; CHECK-NEXT: blr1124entry:1125 %0 = inttoptr i64 %ptr to ptr1126 %1 = load i8, ptr %0, align 11127 %conv = sext i8 %1 to i641128 ret i64 %conv1129}1130 1131; Function Attrs: norecurse nounwind readonly uwtable willreturn1132define dso_local i64 @ld_unalign16_uint64_t_int8_t(ptr nocapture readonly %ptr) {1133; CHECK-LABEL: ld_unalign16_uint64_t_int8_t:1134; CHECK: # %bb.0: # %entry1135; CHECK-NEXT: lbz r3, 1(r3)1136; CHECK-NEXT: extsb r3, r31137; CHECK-NEXT: blr1138entry:1139 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 11140 %0 = load i8, ptr %add.ptr, align 11141 %conv = sext i8 %0 to i641142 ret i64 %conv1143}1144 1145; Function Attrs: norecurse nounwind readonly uwtable willreturn1146define dso_local i64 @ld_align16_uint64_t_int8_t(ptr nocapture readonly %ptr) {1147; CHECK-LABEL: ld_align16_uint64_t_int8_t:1148; CHECK: # %bb.0: # %entry1149; CHECK-NEXT: lbz r3, 8(r3)1150; CHECK-NEXT: extsb r3, r31151; CHECK-NEXT: blr1152entry:1153 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81154 %0 = load i8, ptr %add.ptr, align 11155 %conv = sext i8 %0 to i641156 ret i64 %conv1157}1158 1159; Function Attrs: norecurse nounwind readonly uwtable willreturn1160define dso_local i64 @ld_unalign32_uint64_t_int8_t(ptr nocapture readonly %ptr) {1161; CHECK-P10-LABEL: ld_unalign32_uint64_t_int8_t:1162; CHECK-P10: # %bb.0: # %entry1163; CHECK-P10-NEXT: plbz r3, 99999(r3), 01164; CHECK-P10-NEXT: extsb r3, r31165; CHECK-P10-NEXT: blr1166;1167; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_int8_t:1168; CHECK-PREP10: # %bb.0: # %entry1169; CHECK-PREP10-NEXT: lis r4, 11170; CHECK-PREP10-NEXT: ori r4, r4, 344631171; CHECK-PREP10-NEXT: lbzx r3, r3, r41172; CHECK-PREP10-NEXT: extsb r3, r31173; CHECK-PREP10-NEXT: blr1174entry:1175 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999991176 %0 = load i8, ptr %add.ptr, align 11177 %conv = sext i8 %0 to i641178 ret i64 %conv1179}1180 1181; Function Attrs: norecurse nounwind readonly uwtable willreturn1182define dso_local i64 @ld_align32_uint64_t_int8_t(ptr nocapture readonly %ptr) {1183; CHECK-P10-LABEL: ld_align32_uint64_t_int8_t:1184; CHECK-P10: # %bb.0: # %entry1185; CHECK-P10-NEXT: plbz r3, 99999000(r3), 01186; CHECK-P10-NEXT: extsb r3, r31187; CHECK-P10-NEXT: blr1188;1189; CHECK-PREP10-LABEL: ld_align32_uint64_t_int8_t:1190; CHECK-PREP10: # %bb.0: # %entry1191; CHECK-PREP10-NEXT: lis r4, 15251192; CHECK-PREP10-NEXT: ori r4, r4, 566001193; CHECK-PREP10-NEXT: lbzx r3, r3, r41194; CHECK-PREP10-NEXT: extsb r3, r31195; CHECK-PREP10-NEXT: blr1196entry:1197 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001198 %0 = load i8, ptr %add.ptr, align 11199 %conv = sext i8 %0 to i641200 ret i64 %conv1201}1202 1203; Function Attrs: norecurse nounwind readonly uwtable willreturn1204define dso_local i64 @ld_unalign64_uint64_t_int8_t(ptr nocapture readonly %ptr) {1205; CHECK-P10-LABEL: ld_unalign64_uint64_t_int8_t:1206; CHECK-P10: # %bb.0: # %entry1207; CHECK-P10-NEXT: pli r4, 2321208; CHECK-P10-NEXT: pli r5, 35675873291209; CHECK-P10-NEXT: rldimi r5, r4, 32, 01210; CHECK-P10-NEXT: lbzx r3, r3, r51211; CHECK-P10-NEXT: extsb r3, r31212; CHECK-P10-NEXT: blr1213;1214; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_int8_t:1215; CHECK-PREP10: # %bb.0: # %entry1216; CHECK-PREP10-NEXT: li r4, 291217; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241218; CHECK-PREP10-NEXT: oris r4, r4, 544371219; CHECK-PREP10-NEXT: ori r4, r4, 40971220; CHECK-PREP10-NEXT: lbzx r3, r3, r41221; CHECK-PREP10-NEXT: extsb r3, r31222; CHECK-PREP10-NEXT: blr1223entry:1224 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000011225 %0 = load i8, ptr %add.ptr, align 11226 %conv = sext i8 %0 to i641227 ret i64 %conv1228}1229 1230; Function Attrs: norecurse nounwind readonly uwtable willreturn1231define dso_local i64 @ld_align64_uint64_t_int8_t(ptr nocapture readonly %ptr) {1232; CHECK-P10-LABEL: ld_align64_uint64_t_int8_t:1233; CHECK-P10: # %bb.0: # %entry1234; CHECK-P10-NEXT: pli r4, 2441406251235; CHECK-P10-NEXT: rldic r4, r4, 12, 241236; CHECK-P10-NEXT: lbzx r3, r3, r41237; CHECK-P10-NEXT: extsb r3, r31238; CHECK-P10-NEXT: blr1239;1240; CHECK-PREP10-LABEL: ld_align64_uint64_t_int8_t:1241; CHECK-PREP10: # %bb.0: # %entry1242; CHECK-PREP10-NEXT: lis r4, 37251243; CHECK-PREP10-NEXT: ori r4, r4, 190251244; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241245; CHECK-PREP10-NEXT: lbzx r3, r3, r41246; CHECK-PREP10-NEXT: extsb r3, r31247; CHECK-PREP10-NEXT: blr1248entry:1249 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001250 %0 = load i8, ptr %add.ptr, align 11251 %conv = sext i8 %0 to i641252 ret i64 %conv1253}1254 1255; Function Attrs: norecurse nounwind readonly uwtable willreturn1256define dso_local i64 @ld_reg_uint64_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {1257; CHECK-LABEL: ld_reg_uint64_t_int8_t:1258; CHECK: # %bb.0: # %entry1259; CHECK-NEXT: lbzx r3, r3, r41260; CHECK-NEXT: extsb r3, r31261; CHECK-NEXT: blr1262entry:1263 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1264 %0 = load i8, ptr %add.ptr, align 11265 %conv = sext i8 %0 to i641266 ret i64 %conv1267}1268 1269; Function Attrs: norecurse nounwind readonly uwtable willreturn1270define dso_local i64 @ld_or_uint64_t_int8_t(i64 %ptr, i8 zeroext %off) {1271; CHECK-LABEL: ld_or_uint64_t_int8_t:1272; CHECK: # %bb.0: # %entry1273; CHECK-NEXT: or r3, r4, r31274; CHECK-NEXT: lbz r3, 0(r3)1275; CHECK-NEXT: extsb r3, r31276; CHECK-NEXT: blr1277entry:1278 %conv = zext i8 %off to i641279 %or = or i64 %conv, %ptr1280 %0 = inttoptr i64 %or to ptr1281 %1 = load i8, ptr %0, align 11282 %conv1 = sext i8 %1 to i641283 ret i64 %conv11284}1285 1286; Function Attrs: norecurse nounwind readonly uwtable willreturn1287define dso_local i64 @ld_or2_uint64_t_int8_t(i64 %ptr, i8 zeroext %off) {1288; CHECK-LABEL: ld_or2_uint64_t_int8_t:1289; CHECK: # %bb.0: # %entry1290; CHECK-NEXT: rldicr r3, r3, 0, 511291; CHECK-NEXT: lbzx r3, r3, r41292; CHECK-NEXT: extsb r3, r31293; CHECK-NEXT: blr1294entry:1295 %and = and i64 %ptr, -40961296 %conv = zext i8 %off to i641297 %or = or i64 %and, %conv1298 %0 = inttoptr i64 %or to ptr1299 %1 = load i8, ptr %0, align 11300 %conv1 = sext i8 %1 to i641301 ret i64 %conv11302}1303 1304; Function Attrs: norecurse nounwind readonly uwtable willreturn1305define dso_local i64 @ld_not_disjoint16_uint64_t_int8_t(i64 %ptr) {1306; CHECK-LABEL: ld_not_disjoint16_uint64_t_int8_t:1307; CHECK: # %bb.0: # %entry1308; CHECK-NEXT: ori r3, r3, 61309; CHECK-NEXT: lbz r3, 0(r3)1310; CHECK-NEXT: extsb r3, r31311; CHECK-NEXT: blr1312entry:1313 %or = or i64 %ptr, 61314 %0 = inttoptr i64 %or to ptr1315 %1 = load i8, ptr %0, align 11316 %conv = sext i8 %1 to i641317 ret i64 %conv1318}1319 1320; Function Attrs: norecurse nounwind readonly uwtable willreturn1321define dso_local i64 @ld_disjoint_unalign16_uint64_t_int8_t(i64 %ptr) {1322; CHECK-LABEL: ld_disjoint_unalign16_uint64_t_int8_t:1323; CHECK: # %bb.0: # %entry1324; CHECK-NEXT: rldicr r3, r3, 0, 511325; CHECK-NEXT: lbz r3, 6(r3)1326; CHECK-NEXT: extsb r3, r31327; CHECK-NEXT: blr1328entry:1329 %and = and i64 %ptr, -40961330 %or = or i64 %and, 61331 %0 = inttoptr i64 %or to ptr1332 %1 = load i8, ptr %0, align 21333 %conv = sext i8 %1 to i641334 ret i64 %conv1335}1336 1337; Function Attrs: norecurse nounwind readonly uwtable willreturn1338define dso_local i64 @ld_disjoint_align16_uint64_t_int8_t(i64 %ptr) {1339; CHECK-LABEL: ld_disjoint_align16_uint64_t_int8_t:1340; CHECK: # %bb.0: # %entry1341; CHECK-NEXT: rldicr r3, r3, 0, 511342; CHECK-NEXT: lbz r3, 24(r3)1343; CHECK-NEXT: extsb r3, r31344; CHECK-NEXT: blr1345entry:1346 %and = and i64 %ptr, -40961347 %or = or i64 %and, 241348 %0 = inttoptr i64 %or to ptr1349 %1 = load i8, ptr %0, align 81350 %conv = sext i8 %1 to i641351 ret i64 %conv1352}1353 1354; Function Attrs: norecurse nounwind readonly uwtable willreturn1355define dso_local i64 @ld_not_disjoint32_uint64_t_int8_t(i64 %ptr) {1356; CHECK-LABEL: ld_not_disjoint32_uint64_t_int8_t:1357; CHECK: # %bb.0: # %entry1358; CHECK-NEXT: ori r3, r3, 344631359; CHECK-NEXT: oris r3, r3, 11360; CHECK-NEXT: lbz r3, 0(r3)1361; CHECK-NEXT: extsb r3, r31362; CHECK-NEXT: blr1363entry:1364 %or = or i64 %ptr, 999991365 %0 = inttoptr i64 %or to ptr1366 %1 = load i8, ptr %0, align 11367 %conv = sext i8 %1 to i641368 ret i64 %conv1369}1370 1371; Function Attrs: norecurse nounwind readonly uwtable willreturn1372define dso_local i64 @ld_disjoint_unalign32_uint64_t_int8_t(i64 %ptr) {1373; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_int8_t:1374; CHECK-P10: # %bb.0: # %entry1375; CHECK-P10-NEXT: rldicr r3, r3, 0, 431376; CHECK-P10-NEXT: plbz r3, 99999(r3), 01377; CHECK-P10-NEXT: extsb r3, r31378; CHECK-P10-NEXT: blr1379;1380; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_int8_t:1381; CHECK-PREP10: # %bb.0: # %entry1382; CHECK-PREP10-NEXT: lis r4, 11383; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 431384; CHECK-PREP10-NEXT: ori r4, r4, 344631385; CHECK-PREP10-NEXT: lbzx r3, r3, r41386; CHECK-PREP10-NEXT: extsb r3, r31387; CHECK-PREP10-NEXT: blr1388entry:1389 %and = and i64 %ptr, -10485761390 %or = or i64 %and, 999991391 %0 = inttoptr i64 %or to ptr1392 %1 = load i8, ptr %0, align 11393 %conv = sext i8 %1 to i641394 ret i64 %conv1395}1396 1397; Function Attrs: norecurse nounwind readonly uwtable willreturn1398define dso_local i64 @ld_disjoint_align32_uint64_t_int8_t(i64 %ptr) {1399; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_int8_t:1400; CHECK-P10: # %bb.0: # %entry1401; CHECK-P10-NEXT: lis r4, -152641402; CHECK-P10-NEXT: and r3, r3, r41403; CHECK-P10-NEXT: plbz r3, 999990000(r3), 01404; CHECK-P10-NEXT: extsb r3, r31405; CHECK-P10-NEXT: blr1406;1407; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_int8_t:1408; CHECK-PREP10: # %bb.0: # %entry1409; CHECK-PREP10-NEXT: lis r4, -152641410; CHECK-PREP10-NEXT: and r3, r3, r41411; CHECK-PREP10-NEXT: lis r4, 152581412; CHECK-PREP10-NEXT: ori r4, r4, 417121413; CHECK-PREP10-NEXT: lbzx r3, r3, r41414; CHECK-PREP10-NEXT: extsb r3, r31415; CHECK-PREP10-NEXT: blr1416entry:1417 %and = and i64 %ptr, -10003415041418 %or = or i64 %and, 9999900001419 %0 = inttoptr i64 %or to ptr1420 %1 = load i8, ptr %0, align 161421 %conv = sext i8 %1 to i641422 ret i64 %conv1423}1424 1425; Function Attrs: norecurse nounwind readonly uwtable willreturn1426define dso_local i64 @ld_not_disjoint64_uint64_t_int8_t(i64 %ptr) {1427; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_int8_t:1428; CHECK-P10: # %bb.0: # %entry1429; CHECK-P10-NEXT: pli r4, 2321430; CHECK-P10-NEXT: pli r5, 35675873291431; CHECK-P10-NEXT: rldimi r5, r4, 32, 01432; CHECK-P10-NEXT: or r3, r3, r51433; CHECK-P10-NEXT: lbz r3, 0(r3)1434; CHECK-P10-NEXT: extsb r3, r31435; CHECK-P10-NEXT: blr1436;1437; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_int8_t:1438; CHECK-PREP10: # %bb.0: # %entry1439; CHECK-PREP10-NEXT: li r4, 291440; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241441; CHECK-PREP10-NEXT: oris r4, r4, 544371442; CHECK-PREP10-NEXT: ori r4, r4, 40971443; CHECK-PREP10-NEXT: or r3, r3, r41444; CHECK-PREP10-NEXT: lbz r3, 0(r3)1445; CHECK-PREP10-NEXT: extsb r3, r31446; CHECK-PREP10-NEXT: blr1447entry:1448 %or = or i64 %ptr, 10000000000011449 %0 = inttoptr i64 %or to ptr1450 %1 = load i8, ptr %0, align 11451 %conv = sext i8 %1 to i641452 ret i64 %conv1453}1454 1455; Function Attrs: norecurse nounwind readonly uwtable willreturn1456define dso_local i64 @ld_disjoint_unalign64_uint64_t_int8_t(i64 %ptr) {1457; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_int8_t:1458; CHECK-P10: # %bb.0: # %entry1459; CHECK-P10-NEXT: pli r4, 2321460; CHECK-P10-NEXT: pli r5, 35675873291461; CHECK-P10-NEXT: rldicr r3, r3, 0, 231462; CHECK-P10-NEXT: rldimi r5, r4, 32, 01463; CHECK-P10-NEXT: lbzx r3, r3, r51464; CHECK-P10-NEXT: extsb r3, r31465; CHECK-P10-NEXT: blr1466;1467; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_int8_t:1468; CHECK-PREP10: # %bb.0: # %entry1469; CHECK-PREP10-NEXT: li r4, 291470; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231471; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241472; CHECK-PREP10-NEXT: oris r4, r4, 544371473; CHECK-PREP10-NEXT: ori r4, r4, 40971474; CHECK-PREP10-NEXT: lbzx r3, r3, r41475; CHECK-PREP10-NEXT: extsb r3, r31476; CHECK-PREP10-NEXT: blr1477entry:1478 %and = and i64 %ptr, -10995116277761479 %or = or i64 %and, 10000000000011480 %0 = inttoptr i64 %or to ptr1481 %1 = load i8, ptr %0, align 11482 %conv = sext i8 %1 to i641483 ret i64 %conv1484}1485 1486; Function Attrs: norecurse nounwind readonly uwtable willreturn1487define dso_local i64 @ld_disjoint_align64_uint64_t_int8_t(i64 %ptr) {1488; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_int8_t:1489; CHECK-P10: # %bb.0: # %entry1490; CHECK-P10-NEXT: pli r4, 2441406251491; CHECK-P10-NEXT: rldicr r3, r3, 0, 231492; CHECK-P10-NEXT: rldic r4, r4, 12, 241493; CHECK-P10-NEXT: lbzx r3, r3, r41494; CHECK-P10-NEXT: extsb r3, r31495; CHECK-P10-NEXT: blr1496;1497; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_int8_t:1498; CHECK-PREP10: # %bb.0: # %entry1499; CHECK-PREP10-NEXT: lis r4, 37251500; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231501; CHECK-PREP10-NEXT: ori r4, r4, 190251502; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241503; CHECK-PREP10-NEXT: lbzx r3, r3, r41504; CHECK-PREP10-NEXT: extsb r3, r31505; CHECK-PREP10-NEXT: blr1506entry:1507 %and = and i64 %ptr, -10995116277761508 %or = or i64 %and, 10000000000001509 %0 = inttoptr i64 %or to ptr1510 %1 = load i8, ptr %0, align 40961511 %conv = sext i8 %1 to i641512 ret i64 %conv1513}1514 1515; Function Attrs: norecurse nounwind readonly uwtable willreturn1516define dso_local i64 @ld_cst_unalign16_uint64_t_int8_t() {1517; CHECK-LABEL: ld_cst_unalign16_uint64_t_int8_t:1518; CHECK: # %bb.0: # %entry1519; CHECK-NEXT: lbz r3, 255(0)1520; CHECK-NEXT: extsb r3, r31521; CHECK-NEXT: blr1522entry:1523 %0 = load i8, ptr inttoptr (i64 255 to ptr), align 11524 %conv = sext i8 %0 to i641525 ret i64 %conv1526}1527 1528; Function Attrs: norecurse nounwind readonly uwtable willreturn1529define dso_local i64 @ld_cst_align16_uint64_t_int8_t() {1530; CHECK-LABEL: ld_cst_align16_uint64_t_int8_t:1531; CHECK: # %bb.0: # %entry1532; CHECK-NEXT: lbz r3, 4080(0)1533; CHECK-NEXT: extsb r3, r31534; CHECK-NEXT: blr1535entry:1536 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 161537 %conv = sext i8 %0 to i641538 ret i64 %conv1539}1540 1541; Function Attrs: norecurse nounwind readonly uwtable willreturn1542define dso_local i64 @ld_cst_unalign32_uint64_t_int8_t() {1543; CHECK-LABEL: ld_cst_unalign32_uint64_t_int8_t:1544; CHECK: # %bb.0: # %entry1545; CHECK-NEXT: lis r3, 21546; CHECK-NEXT: lbz r3, -31073(r3)1547; CHECK-NEXT: extsb r3, r31548; CHECK-NEXT: blr1549entry:1550 %0 = load i8, ptr inttoptr (i64 99999 to ptr), align 11551 %conv = sext i8 %0 to i641552 ret i64 %conv1553}1554 1555; Function Attrs: norecurse nounwind readonly uwtable willreturn1556define dso_local i64 @ld_cst_align32_uint64_t_int8_t() {1557; CHECK-LABEL: ld_cst_align32_uint64_t_int8_t:1558; CHECK: # %bb.0: # %entry1559; CHECK-NEXT: lis r3, 1531560; CHECK-NEXT: lbz r3, -27108(r3)1561; CHECK-NEXT: extsb r3, r31562; CHECK-NEXT: blr1563entry:1564 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 41565 %conv = sext i8 %0 to i641566 ret i64 %conv1567}1568 1569; Function Attrs: norecurse nounwind readonly uwtable willreturn1570define dso_local i64 @ld_cst_unalign64_uint64_t_int8_t() {1571; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_int8_t:1572; CHECK-P10: # %bb.0: # %entry1573; CHECK-P10-NEXT: pli r3, 2321574; CHECK-P10-NEXT: pli r4, 35675873291575; CHECK-P10-NEXT: rldimi r4, r3, 32, 01576; CHECK-P10-NEXT: lbz r3, 0(r4)1577; CHECK-P10-NEXT: extsb r3, r31578; CHECK-P10-NEXT: blr1579;1580; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_int8_t:1581; CHECK-PREP10: # %bb.0: # %entry1582; CHECK-PREP10-NEXT: li r3, 291583; CHECK-PREP10-NEXT: rldic r3, r3, 35, 241584; CHECK-PREP10-NEXT: oris r3, r3, 544371585; CHECK-PREP10-NEXT: ori r3, r3, 40971586; CHECK-PREP10-NEXT: lbz r3, 0(r3)1587; CHECK-PREP10-NEXT: extsb r3, r31588; CHECK-PREP10-NEXT: blr1589entry:1590 %0 = load i8, ptr inttoptr (i64 1000000000001 to ptr), align 11591 %conv = sext i8 %0 to i641592 ret i64 %conv1593}1594 1595; Function Attrs: norecurse nounwind readonly uwtable willreturn1596define dso_local i64 @ld_cst_align64_uint64_t_int8_t() {1597; CHECK-P10-LABEL: ld_cst_align64_uint64_t_int8_t:1598; CHECK-P10: # %bb.0: # %entry1599; CHECK-P10-NEXT: pli r3, 2441406251600; CHECK-P10-NEXT: rldic r3, r3, 12, 241601; CHECK-P10-NEXT: lbz r3, 0(r3)1602; CHECK-P10-NEXT: extsb r3, r31603; CHECK-P10-NEXT: blr1604;1605; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_int8_t:1606; CHECK-PREP10: # %bb.0: # %entry1607; CHECK-PREP10-NEXT: lis r3, 37251608; CHECK-PREP10-NEXT: ori r3, r3, 190251609; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241610; CHECK-PREP10-NEXT: lbz r3, 0(r3)1611; CHECK-PREP10-NEXT: extsb r3, r31612; CHECK-PREP10-NEXT: blr1613entry:1614 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 40961615 %conv = sext i8 %0 to i641616 ret i64 %conv1617}1618 1619; Function Attrs: norecurse nounwind readonly uwtable willreturn1620define dso_local i64 @ld_0_uint64_t_uint16_t(i64 %ptr) {1621; CHECK-LABEL: ld_0_uint64_t_uint16_t:1622; CHECK: # %bb.0: # %entry1623; CHECK-NEXT: lhz r3, 0(r3)1624; CHECK-NEXT: blr1625entry:1626 %0 = inttoptr i64 %ptr to ptr1627 %1 = load i16, ptr %0, align 21628 %conv = zext i16 %1 to i641629 ret i64 %conv1630}1631 1632; Function Attrs: norecurse nounwind readonly uwtable willreturn1633define dso_local i64 @ld_unalign16_uint64_t_uint16_t(ptr nocapture readonly %ptr) {1634; CHECK-LABEL: ld_unalign16_uint64_t_uint16_t:1635; CHECK: # %bb.0: # %entry1636; CHECK-NEXT: lhz r3, 1(r3)1637; CHECK-NEXT: blr1638entry:1639 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 11640 %0 = load i16, ptr %add.ptr, align 21641 %conv = zext i16 %0 to i641642 ret i64 %conv1643}1644 1645; Function Attrs: norecurse nounwind readonly uwtable willreturn1646define dso_local i64 @ld_align16_uint64_t_uint16_t(ptr nocapture readonly %ptr) {1647; CHECK-LABEL: ld_align16_uint64_t_uint16_t:1648; CHECK: # %bb.0: # %entry1649; CHECK-NEXT: lhz r3, 8(r3)1650; CHECK-NEXT: blr1651entry:1652 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81653 %0 = load i16, ptr %add.ptr, align 21654 %conv = zext i16 %0 to i641655 ret i64 %conv1656}1657 1658; Function Attrs: norecurse nounwind readonly uwtable willreturn1659define dso_local i64 @ld_unalign32_uint64_t_uint16_t(ptr nocapture readonly %ptr) {1660; CHECK-P10-LABEL: ld_unalign32_uint64_t_uint16_t:1661; CHECK-P10: # %bb.0: # %entry1662; CHECK-P10-NEXT: plhz r3, 99999(r3), 01663; CHECK-P10-NEXT: blr1664;1665; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_uint16_t:1666; CHECK-PREP10: # %bb.0: # %entry1667; CHECK-PREP10-NEXT: lis r4, 11668; CHECK-PREP10-NEXT: ori r4, r4, 344631669; CHECK-PREP10-NEXT: lhzx r3, r3, r41670; CHECK-PREP10-NEXT: blr1671entry:1672 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999991673 %0 = load i16, ptr %add.ptr, align 21674 %conv = zext i16 %0 to i641675 ret i64 %conv1676}1677 1678; Function Attrs: norecurse nounwind readonly uwtable willreturn1679define dso_local i64 @ld_align32_uint64_t_uint16_t(ptr nocapture readonly %ptr) {1680; CHECK-P10-LABEL: ld_align32_uint64_t_uint16_t:1681; CHECK-P10: # %bb.0: # %entry1682; CHECK-P10-NEXT: plhz r3, 99999000(r3), 01683; CHECK-P10-NEXT: blr1684;1685; CHECK-PREP10-LABEL: ld_align32_uint64_t_uint16_t:1686; CHECK-PREP10: # %bb.0: # %entry1687; CHECK-PREP10-NEXT: lis r4, 15251688; CHECK-PREP10-NEXT: ori r4, r4, 566001689; CHECK-PREP10-NEXT: lhzx r3, r3, r41690; CHECK-PREP10-NEXT: blr1691entry:1692 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001693 %0 = load i16, ptr %add.ptr, align 21694 %conv = zext i16 %0 to i641695 ret i64 %conv1696}1697 1698; Function Attrs: norecurse nounwind readonly uwtable willreturn1699define dso_local i64 @ld_unalign64_uint64_t_uint16_t(ptr nocapture readonly %ptr) {1700; CHECK-P10-LABEL: ld_unalign64_uint64_t_uint16_t:1701; CHECK-P10: # %bb.0: # %entry1702; CHECK-P10-NEXT: pli r4, 2321703; CHECK-P10-NEXT: pli r5, 35675873291704; CHECK-P10-NEXT: rldimi r5, r4, 32, 01705; CHECK-P10-NEXT: lhzx r3, r3, r51706; CHECK-P10-NEXT: blr1707;1708; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_uint16_t:1709; CHECK-PREP10: # %bb.0: # %entry1710; CHECK-PREP10-NEXT: li r4, 291711; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241712; CHECK-PREP10-NEXT: oris r4, r4, 544371713; CHECK-PREP10-NEXT: ori r4, r4, 40971714; CHECK-PREP10-NEXT: lhzx r3, r3, r41715; CHECK-PREP10-NEXT: blr1716entry:1717 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000011718 %0 = load i16, ptr %add.ptr, align 21719 %conv = zext i16 %0 to i641720 ret i64 %conv1721}1722 1723; Function Attrs: norecurse nounwind readonly uwtable willreturn1724define dso_local i64 @ld_align64_uint64_t_uint16_t(ptr nocapture readonly %ptr) {1725; CHECK-P10-LABEL: ld_align64_uint64_t_uint16_t:1726; CHECK-P10: # %bb.0: # %entry1727; CHECK-P10-NEXT: pli r4, 2441406251728; CHECK-P10-NEXT: rldic r4, r4, 12, 241729; CHECK-P10-NEXT: lhzx r3, r3, r41730; CHECK-P10-NEXT: blr1731;1732; CHECK-PREP10-LABEL: ld_align64_uint64_t_uint16_t:1733; CHECK-PREP10: # %bb.0: # %entry1734; CHECK-PREP10-NEXT: lis r4, 37251735; CHECK-PREP10-NEXT: ori r4, r4, 190251736; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241737; CHECK-PREP10-NEXT: lhzx r3, r3, r41738; CHECK-PREP10-NEXT: blr1739entry:1740 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001741 %0 = load i16, ptr %add.ptr, align 21742 %conv = zext i16 %0 to i641743 ret i64 %conv1744}1745 1746; Function Attrs: norecurse nounwind readonly uwtable willreturn1747define dso_local i64 @ld_reg_uint64_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {1748; CHECK-LABEL: ld_reg_uint64_t_uint16_t:1749; CHECK: # %bb.0: # %entry1750; CHECK-NEXT: lhzx r3, r3, r41751; CHECK-NEXT: blr1752entry:1753 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1754 %0 = load i16, ptr %add.ptr, align 21755 %conv = zext i16 %0 to i641756 ret i64 %conv1757}1758 1759; Function Attrs: norecurse nounwind readonly uwtable willreturn1760define dso_local i64 @ld_or_uint64_t_uint16_t(i64 %ptr, i8 zeroext %off) {1761; CHECK-LABEL: ld_or_uint64_t_uint16_t:1762; CHECK: # %bb.0: # %entry1763; CHECK-NEXT: or r3, r4, r31764; CHECK-NEXT: lhz r3, 0(r3)1765; CHECK-NEXT: blr1766entry:1767 %conv = zext i8 %off to i641768 %or = or i64 %conv, %ptr1769 %0 = inttoptr i64 %or to ptr1770 %1 = load i16, ptr %0, align 21771 %conv1 = zext i16 %1 to i641772 ret i64 %conv11773}1774 1775; Function Attrs: norecurse nounwind readonly uwtable willreturn1776define dso_local i64 @ld_or2_uint64_t_uint16_t(i64 %ptr, i8 zeroext %off) {1777; CHECK-LABEL: ld_or2_uint64_t_uint16_t:1778; CHECK: # %bb.0: # %entry1779; CHECK-NEXT: rldicr r3, r3, 0, 511780; CHECK-NEXT: lhzx r3, r3, r41781; CHECK-NEXT: blr1782entry:1783 %and = and i64 %ptr, -40961784 %conv = zext i8 %off to i641785 %or = or i64 %and, %conv1786 %0 = inttoptr i64 %or to ptr1787 %1 = load i16, ptr %0, align 21788 %conv1 = zext i16 %1 to i641789 ret i64 %conv11790}1791 1792; Function Attrs: norecurse nounwind readonly uwtable willreturn1793define dso_local i64 @ld_not_disjoint16_uint64_t_uint16_t(i64 %ptr) {1794; CHECK-LABEL: ld_not_disjoint16_uint64_t_uint16_t:1795; CHECK: # %bb.0: # %entry1796; CHECK-NEXT: ori r3, r3, 61797; CHECK-NEXT: lhz r3, 0(r3)1798; CHECK-NEXT: blr1799entry:1800 %or = or i64 %ptr, 61801 %0 = inttoptr i64 %or to ptr1802 %1 = load i16, ptr %0, align 21803 %conv = zext i16 %1 to i641804 ret i64 %conv1805}1806 1807; Function Attrs: norecurse nounwind readonly uwtable willreturn1808define dso_local i64 @ld_disjoint_unalign16_uint64_t_uint16_t(i64 %ptr) {1809; CHECK-LABEL: ld_disjoint_unalign16_uint64_t_uint16_t:1810; CHECK: # %bb.0: # %entry1811; CHECK-NEXT: rldicr r3, r3, 0, 511812; CHECK-NEXT: lhz r3, 6(r3)1813; CHECK-NEXT: blr1814entry:1815 %and = and i64 %ptr, -40961816 %or = or i64 %and, 61817 %0 = inttoptr i64 %or to ptr1818 %1 = load i16, ptr %0, align 21819 %conv = zext i16 %1 to i641820 ret i64 %conv1821}1822 1823; Function Attrs: norecurse nounwind readonly uwtable willreturn1824define dso_local i64 @ld_disjoint_align16_uint64_t_uint16_t(i64 %ptr) {1825; CHECK-LABEL: ld_disjoint_align16_uint64_t_uint16_t:1826; CHECK: # %bb.0: # %entry1827; CHECK-NEXT: rldicr r3, r3, 0, 511828; CHECK-NEXT: lhz r3, 24(r3)1829; CHECK-NEXT: blr1830entry:1831 %and = and i64 %ptr, -40961832 %or = or i64 %and, 241833 %0 = inttoptr i64 %or to ptr1834 %1 = load i16, ptr %0, align 81835 %conv = zext i16 %1 to i641836 ret i64 %conv1837}1838 1839; Function Attrs: norecurse nounwind readonly uwtable willreturn1840define dso_local i64 @ld_not_disjoint32_uint64_t_uint16_t(i64 %ptr) {1841; CHECK-LABEL: ld_not_disjoint32_uint64_t_uint16_t:1842; CHECK: # %bb.0: # %entry1843; CHECK-NEXT: ori r3, r3, 344631844; CHECK-NEXT: oris r3, r3, 11845; CHECK-NEXT: lhz r3, 0(r3)1846; CHECK-NEXT: blr1847entry:1848 %or = or i64 %ptr, 999991849 %0 = inttoptr i64 %or to ptr1850 %1 = load i16, ptr %0, align 21851 %conv = zext i16 %1 to i641852 ret i64 %conv1853}1854 1855; Function Attrs: norecurse nounwind readonly uwtable willreturn1856define dso_local i64 @ld_disjoint_unalign32_uint64_t_uint16_t(i64 %ptr) {1857; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_uint16_t:1858; CHECK-P10: # %bb.0: # %entry1859; CHECK-P10-NEXT: rldicr r3, r3, 0, 431860; CHECK-P10-NEXT: plhz r3, 99999(r3), 01861; CHECK-P10-NEXT: blr1862;1863; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_uint16_t:1864; CHECK-PREP10: # %bb.0: # %entry1865; CHECK-PREP10-NEXT: lis r4, 11866; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 431867; CHECK-PREP10-NEXT: ori r4, r4, 344631868; CHECK-PREP10-NEXT: lhzx r3, r3, r41869; CHECK-PREP10-NEXT: blr1870entry:1871 %and = and i64 %ptr, -10485761872 %or = or i64 %and, 999991873 %0 = inttoptr i64 %or to ptr1874 %1 = load i16, ptr %0, align 21875 %conv = zext i16 %1 to i641876 ret i64 %conv1877}1878 1879; Function Attrs: norecurse nounwind readonly uwtable willreturn1880define dso_local i64 @ld_disjoint_align32_uint64_t_uint16_t(i64 %ptr) {1881; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_uint16_t:1882; CHECK-P10: # %bb.0: # %entry1883; CHECK-P10-NEXT: lis r4, -152641884; CHECK-P10-NEXT: and r3, r3, r41885; CHECK-P10-NEXT: plhz r3, 999990000(r3), 01886; CHECK-P10-NEXT: blr1887;1888; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_uint16_t:1889; CHECK-PREP10: # %bb.0: # %entry1890; CHECK-PREP10-NEXT: lis r4, -152641891; CHECK-PREP10-NEXT: and r3, r3, r41892; CHECK-PREP10-NEXT: lis r4, 152581893; CHECK-PREP10-NEXT: ori r4, r4, 417121894; CHECK-PREP10-NEXT: lhzx r3, r3, r41895; CHECK-PREP10-NEXT: blr1896entry:1897 %and = and i64 %ptr, -10003415041898 %or = or i64 %and, 9999900001899 %0 = inttoptr i64 %or to ptr1900 %1 = load i16, ptr %0, align 161901 %conv = zext i16 %1 to i641902 ret i64 %conv1903}1904 1905; Function Attrs: norecurse nounwind readonly uwtable willreturn1906define dso_local i64 @ld_not_disjoint64_uint64_t_uint16_t(i64 %ptr) {1907; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_uint16_t:1908; CHECK-P10: # %bb.0: # %entry1909; CHECK-P10-NEXT: pli r4, 2321910; CHECK-P10-NEXT: pli r5, 35675873291911; CHECK-P10-NEXT: rldimi r5, r4, 32, 01912; CHECK-P10-NEXT: or r3, r3, r51913; CHECK-P10-NEXT: lhz r3, 0(r3)1914; CHECK-P10-NEXT: blr1915;1916; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_uint16_t:1917; CHECK-PREP10: # %bb.0: # %entry1918; CHECK-PREP10-NEXT: li r4, 291919; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241920; CHECK-PREP10-NEXT: oris r4, r4, 544371921; CHECK-PREP10-NEXT: ori r4, r4, 40971922; CHECK-PREP10-NEXT: or r3, r3, r41923; CHECK-PREP10-NEXT: lhz r3, 0(r3)1924; CHECK-PREP10-NEXT: blr1925entry:1926 %or = or i64 %ptr, 10000000000011927 %0 = inttoptr i64 %or to ptr1928 %1 = load i16, ptr %0, align 21929 %conv = zext i16 %1 to i641930 ret i64 %conv1931}1932 1933; Function Attrs: norecurse nounwind readonly uwtable willreturn1934define dso_local i64 @ld_disjoint_unalign64_uint64_t_uint16_t(i64 %ptr) {1935; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_uint16_t:1936; CHECK-P10: # %bb.0: # %entry1937; CHECK-P10-NEXT: pli r4, 2321938; CHECK-P10-NEXT: pli r5, 35675873291939; CHECK-P10-NEXT: rldicr r3, r3, 0, 231940; CHECK-P10-NEXT: rldimi r5, r4, 32, 01941; CHECK-P10-NEXT: lhzx r3, r3, r51942; CHECK-P10-NEXT: blr1943;1944; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_uint16_t:1945; CHECK-PREP10: # %bb.0: # %entry1946; CHECK-PREP10-NEXT: li r4, 291947; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231948; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241949; CHECK-PREP10-NEXT: oris r4, r4, 544371950; CHECK-PREP10-NEXT: ori r4, r4, 40971951; CHECK-PREP10-NEXT: lhzx r3, r3, r41952; CHECK-PREP10-NEXT: blr1953entry:1954 %and = and i64 %ptr, -10995116277761955 %or = or i64 %and, 10000000000011956 %0 = inttoptr i64 %or to ptr1957 %1 = load i16, ptr %0, align 21958 %conv = zext i16 %1 to i641959 ret i64 %conv1960}1961 1962; Function Attrs: norecurse nounwind readonly uwtable willreturn1963define dso_local i64 @ld_disjoint_align64_uint64_t_uint16_t(i64 %ptr) {1964; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_uint16_t:1965; CHECK-P10: # %bb.0: # %entry1966; CHECK-P10-NEXT: pli r4, 2441406251967; CHECK-P10-NEXT: rldicr r3, r3, 0, 231968; CHECK-P10-NEXT: rldic r4, r4, 12, 241969; CHECK-P10-NEXT: lhzx r3, r3, r41970; CHECK-P10-NEXT: blr1971;1972; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_uint16_t:1973; CHECK-PREP10: # %bb.0: # %entry1974; CHECK-PREP10-NEXT: lis r4, 37251975; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231976; CHECK-PREP10-NEXT: ori r4, r4, 190251977; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241978; CHECK-PREP10-NEXT: lhzx r3, r3, r41979; CHECK-PREP10-NEXT: blr1980entry:1981 %and = and i64 %ptr, -10995116277761982 %or = or i64 %and, 10000000000001983 %0 = inttoptr i64 %or to ptr1984 %1 = load i16, ptr %0, align 40961985 %conv = zext i16 %1 to i641986 ret i64 %conv1987}1988 1989; Function Attrs: norecurse nounwind readonly uwtable willreturn1990define dso_local i64 @ld_cst_unalign16_uint64_t_uint16_t() {1991; CHECK-LABEL: ld_cst_unalign16_uint64_t_uint16_t:1992; CHECK: # %bb.0: # %entry1993; CHECK-NEXT: lhz r3, 255(0)1994; CHECK-NEXT: blr1995entry:1996 %0 = load i16, ptr inttoptr (i64 255 to ptr), align 21997 %conv = zext i16 %0 to i641998 ret i64 %conv1999}2000 2001; Function Attrs: norecurse nounwind readonly uwtable willreturn2002define dso_local i64 @ld_cst_align16_uint64_t_uint16_t() {2003; CHECK-LABEL: ld_cst_align16_uint64_t_uint16_t:2004; CHECK: # %bb.0: # %entry2005; CHECK-NEXT: lhz r3, 4080(0)2006; CHECK-NEXT: blr2007entry:2008 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 162009 %conv = zext i16 %0 to i642010 ret i64 %conv2011}2012 2013; Function Attrs: norecurse nounwind readonly uwtable willreturn2014define dso_local i64 @ld_cst_unalign32_uint64_t_uint16_t() {2015; CHECK-LABEL: ld_cst_unalign32_uint64_t_uint16_t:2016; CHECK: # %bb.0: # %entry2017; CHECK-NEXT: lis r3, 22018; CHECK-NEXT: lhz r3, -31073(r3)2019; CHECK-NEXT: blr2020entry:2021 %0 = load i16, ptr inttoptr (i64 99999 to ptr), align 22022 %conv = zext i16 %0 to i642023 ret i64 %conv2024}2025 2026; Function Attrs: norecurse nounwind readonly uwtable willreturn2027define dso_local i64 @ld_cst_align32_uint64_t_uint16_t() {2028; CHECK-LABEL: ld_cst_align32_uint64_t_uint16_t:2029; CHECK: # %bb.0: # %entry2030; CHECK-NEXT: lis r3, 1532031; CHECK-NEXT: lhz r3, -27108(r3)2032; CHECK-NEXT: blr2033entry:2034 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 42035 %conv = zext i16 %0 to i642036 ret i64 %conv2037}2038 2039; Function Attrs: norecurse nounwind readonly uwtable willreturn2040define dso_local i64 @ld_cst_unalign64_uint64_t_uint16_t() {2041; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_uint16_t:2042; CHECK-P10: # %bb.0: # %entry2043; CHECK-P10-NEXT: pli r3, 2322044; CHECK-P10-NEXT: pli r4, 35675873292045; CHECK-P10-NEXT: rldimi r4, r3, 32, 02046; CHECK-P10-NEXT: lhz r3, 0(r4)2047; CHECK-P10-NEXT: blr2048;2049; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_uint16_t:2050; CHECK-PREP10: # %bb.0: # %entry2051; CHECK-PREP10-NEXT: li r3, 292052; CHECK-PREP10-NEXT: rldic r3, r3, 35, 242053; CHECK-PREP10-NEXT: oris r3, r3, 544372054; CHECK-PREP10-NEXT: ori r3, r3, 40972055; CHECK-PREP10-NEXT: lhz r3, 0(r3)2056; CHECK-PREP10-NEXT: blr2057entry:2058 %0 = load i16, ptr inttoptr (i64 1000000000001 to ptr), align 22059 %conv = zext i16 %0 to i642060 ret i64 %conv2061}2062 2063; Function Attrs: norecurse nounwind readonly uwtable willreturn2064define dso_local i64 @ld_cst_align64_uint64_t_uint16_t() {2065; CHECK-P10-LABEL: ld_cst_align64_uint64_t_uint16_t:2066; CHECK-P10: # %bb.0: # %entry2067; CHECK-P10-NEXT: pli r3, 2441406252068; CHECK-P10-NEXT: rldic r3, r3, 12, 242069; CHECK-P10-NEXT: lhz r3, 0(r3)2070; CHECK-P10-NEXT: blr2071;2072; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_uint16_t:2073; CHECK-PREP10: # %bb.0: # %entry2074; CHECK-PREP10-NEXT: lis r3, 37252075; CHECK-PREP10-NEXT: ori r3, r3, 190252076; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242077; CHECK-PREP10-NEXT: lhz r3, 0(r3)2078; CHECK-PREP10-NEXT: blr2079entry:2080 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 40962081 %conv = zext i16 %0 to i642082 ret i64 %conv2083}2084 2085; Function Attrs: norecurse nounwind readonly uwtable willreturn2086define dso_local i64 @ld_0_uint64_t_int16_t(i64 %ptr) {2087; CHECK-LABEL: ld_0_uint64_t_int16_t:2088; CHECK: # %bb.0: # %entry2089; CHECK-NEXT: lha r3, 0(r3)2090; CHECK-NEXT: blr2091entry:2092 %0 = inttoptr i64 %ptr to ptr2093 %1 = load i16, ptr %0, align 22094 %conv = sext i16 %1 to i642095 ret i64 %conv2096}2097 2098; Function Attrs: norecurse nounwind readonly uwtable willreturn2099define dso_local i64 @ld_unalign16_uint64_t_int16_t(ptr nocapture readonly %ptr) {2100; CHECK-LABEL: ld_unalign16_uint64_t_int16_t:2101; CHECK: # %bb.0: # %entry2102; CHECK-NEXT: lha r3, 1(r3)2103; CHECK-NEXT: blr2104entry:2105 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 12106 %0 = load i16, ptr %add.ptr, align 22107 %conv = sext i16 %0 to i642108 ret i64 %conv2109}2110 2111; Function Attrs: norecurse nounwind readonly uwtable willreturn2112define dso_local i64 @ld_align16_uint64_t_int16_t(ptr nocapture readonly %ptr) {2113; CHECK-LABEL: ld_align16_uint64_t_int16_t:2114; CHECK: # %bb.0: # %entry2115; CHECK-NEXT: lha r3, 8(r3)2116; CHECK-NEXT: blr2117entry:2118 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82119 %0 = load i16, ptr %add.ptr, align 22120 %conv = sext i16 %0 to i642121 ret i64 %conv2122}2123 2124; Function Attrs: norecurse nounwind readonly uwtable willreturn2125define dso_local i64 @ld_unalign32_uint64_t_int16_t(ptr nocapture readonly %ptr) {2126; CHECK-P10-LABEL: ld_unalign32_uint64_t_int16_t:2127; CHECK-P10: # %bb.0: # %entry2128; CHECK-P10-NEXT: plha r3, 99999(r3), 02129; CHECK-P10-NEXT: blr2130;2131; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_int16_t:2132; CHECK-PREP10: # %bb.0: # %entry2133; CHECK-PREP10-NEXT: lis r4, 12134; CHECK-PREP10-NEXT: ori r4, r4, 344632135; CHECK-PREP10-NEXT: lhax r3, r3, r42136; CHECK-PREP10-NEXT: blr2137entry:2138 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999992139 %0 = load i16, ptr %add.ptr, align 22140 %conv = sext i16 %0 to i642141 ret i64 %conv2142}2143 2144; Function Attrs: norecurse nounwind readonly uwtable willreturn2145define dso_local i64 @ld_align32_uint64_t_int16_t(ptr nocapture readonly %ptr) {2146; CHECK-P10-LABEL: ld_align32_uint64_t_int16_t:2147; CHECK-P10: # %bb.0: # %entry2148; CHECK-P10-NEXT: plha r3, 99999000(r3), 02149; CHECK-P10-NEXT: blr2150;2151; CHECK-PREP10-LABEL: ld_align32_uint64_t_int16_t:2152; CHECK-PREP10: # %bb.0: # %entry2153; CHECK-PREP10-NEXT: lis r4, 15252154; CHECK-PREP10-NEXT: ori r4, r4, 566002155; CHECK-PREP10-NEXT: lhax r3, r3, r42156; CHECK-PREP10-NEXT: blr2157entry:2158 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002159 %0 = load i16, ptr %add.ptr, align 22160 %conv = sext i16 %0 to i642161 ret i64 %conv2162}2163 2164; Function Attrs: norecurse nounwind readonly uwtable willreturn2165define dso_local i64 @ld_unalign64_uint64_t_int16_t(ptr nocapture readonly %ptr) {2166; CHECK-P10-LABEL: ld_unalign64_uint64_t_int16_t:2167; CHECK-P10: # %bb.0: # %entry2168; CHECK-P10-NEXT: pli r4, 2322169; CHECK-P10-NEXT: pli r5, 35675873292170; CHECK-P10-NEXT: rldimi r5, r4, 32, 02171; CHECK-P10-NEXT: lhax r3, r3, r52172; CHECK-P10-NEXT: blr2173;2174; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_int16_t:2175; CHECK-PREP10: # %bb.0: # %entry2176; CHECK-PREP10-NEXT: li r4, 292177; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242178; CHECK-PREP10-NEXT: oris r4, r4, 544372179; CHECK-PREP10-NEXT: ori r4, r4, 40972180; CHECK-PREP10-NEXT: lhax r3, r3, r42181; CHECK-PREP10-NEXT: blr2182entry:2183 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000012184 %0 = load i16, ptr %add.ptr, align 22185 %conv = sext i16 %0 to i642186 ret i64 %conv2187}2188 2189; Function Attrs: norecurse nounwind readonly uwtable willreturn2190define dso_local i64 @ld_align64_uint64_t_int16_t(ptr nocapture readonly %ptr) {2191; CHECK-P10-LABEL: ld_align64_uint64_t_int16_t:2192; CHECK-P10: # %bb.0: # %entry2193; CHECK-P10-NEXT: pli r4, 2441406252194; CHECK-P10-NEXT: rldic r4, r4, 12, 242195; CHECK-P10-NEXT: lhax r3, r3, r42196; CHECK-P10-NEXT: blr2197;2198; CHECK-PREP10-LABEL: ld_align64_uint64_t_int16_t:2199; CHECK-PREP10: # %bb.0: # %entry2200; CHECK-PREP10-NEXT: lis r4, 37252201; CHECK-PREP10-NEXT: ori r4, r4, 190252202; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242203; CHECK-PREP10-NEXT: lhax r3, r3, r42204; CHECK-PREP10-NEXT: blr2205entry:2206 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002207 %0 = load i16, ptr %add.ptr, align 22208 %conv = sext i16 %0 to i642209 ret i64 %conv2210}2211 2212; Function Attrs: norecurse nounwind readonly uwtable willreturn2213define dso_local i64 @ld_reg_uint64_t_int16_t(ptr nocapture readonly %ptr, i64 %off) {2214; CHECK-LABEL: ld_reg_uint64_t_int16_t:2215; CHECK: # %bb.0: # %entry2216; CHECK-NEXT: lhax r3, r3, r42217; CHECK-NEXT: blr2218entry:2219 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2220 %0 = load i16, ptr %add.ptr, align 22221 %conv = sext i16 %0 to i642222 ret i64 %conv2223}2224 2225; Function Attrs: norecurse nounwind readonly uwtable willreturn2226define dso_local i64 @ld_or_uint64_t_int16_t(i64 %ptr, i8 zeroext %off) {2227; CHECK-LABEL: ld_or_uint64_t_int16_t:2228; CHECK: # %bb.0: # %entry2229; CHECK-NEXT: or r3, r4, r32230; CHECK-NEXT: lha r3, 0(r3)2231; CHECK-NEXT: blr2232entry:2233 %conv = zext i8 %off to i642234 %or = or i64 %conv, %ptr2235 %0 = inttoptr i64 %or to ptr2236 %1 = load i16, ptr %0, align 22237 %conv1 = sext i16 %1 to i642238 ret i64 %conv12239}2240 2241; Function Attrs: norecurse nounwind readonly uwtable willreturn2242define dso_local i64 @ld_or2_uint64_t_int16_t(i64 %ptr, i8 zeroext %off) {2243; CHECK-LABEL: ld_or2_uint64_t_int16_t:2244; CHECK: # %bb.0: # %entry2245; CHECK-NEXT: rldicr r3, r3, 0, 512246; CHECK-NEXT: lhax r3, r3, r42247; CHECK-NEXT: blr2248entry:2249 %and = and i64 %ptr, -40962250 %conv = zext i8 %off to i642251 %or = or i64 %and, %conv2252 %0 = inttoptr i64 %or to ptr2253 %1 = load i16, ptr %0, align 22254 %conv1 = sext i16 %1 to i642255 ret i64 %conv12256}2257 2258; Function Attrs: norecurse nounwind readonly uwtable willreturn2259define dso_local i64 @ld_not_disjoint16_uint64_t_int16_t(i64 %ptr) {2260; CHECK-LABEL: ld_not_disjoint16_uint64_t_int16_t:2261; CHECK: # %bb.0: # %entry2262; CHECK-NEXT: ori r3, r3, 62263; CHECK-NEXT: lha r3, 0(r3)2264; CHECK-NEXT: blr2265entry:2266 %or = or i64 %ptr, 62267 %0 = inttoptr i64 %or to ptr2268 %1 = load i16, ptr %0, align 22269 %conv = sext i16 %1 to i642270 ret i64 %conv2271}2272 2273; Function Attrs: norecurse nounwind readonly uwtable willreturn2274define dso_local i64 @ld_disjoint_unalign16_uint64_t_int16_t(i64 %ptr) {2275; CHECK-LABEL: ld_disjoint_unalign16_uint64_t_int16_t:2276; CHECK: # %bb.0: # %entry2277; CHECK-NEXT: rldicr r3, r3, 0, 512278; CHECK-NEXT: lha r3, 6(r3)2279; CHECK-NEXT: blr2280entry:2281 %and = and i64 %ptr, -40962282 %or = or i64 %and, 62283 %0 = inttoptr i64 %or to ptr2284 %1 = load i16, ptr %0, align 22285 %conv = sext i16 %1 to i642286 ret i64 %conv2287}2288 2289; Function Attrs: norecurse nounwind readonly uwtable willreturn2290define dso_local i64 @ld_disjoint_align16_uint64_t_int16_t(i64 %ptr) {2291; CHECK-LABEL: ld_disjoint_align16_uint64_t_int16_t:2292; CHECK: # %bb.0: # %entry2293; CHECK-NEXT: rldicr r3, r3, 0, 512294; CHECK-NEXT: lha r3, 24(r3)2295; CHECK-NEXT: blr2296entry:2297 %and = and i64 %ptr, -40962298 %or = or i64 %and, 242299 %0 = inttoptr i64 %or to ptr2300 %1 = load i16, ptr %0, align 82301 %conv = sext i16 %1 to i642302 ret i64 %conv2303}2304 2305; Function Attrs: norecurse nounwind readonly uwtable willreturn2306define dso_local i64 @ld_not_disjoint32_uint64_t_int16_t(i64 %ptr) {2307; CHECK-LABEL: ld_not_disjoint32_uint64_t_int16_t:2308; CHECK: # %bb.0: # %entry2309; CHECK-NEXT: ori r3, r3, 344632310; CHECK-NEXT: oris r3, r3, 12311; CHECK-NEXT: lha r3, 0(r3)2312; CHECK-NEXT: blr2313entry:2314 %or = or i64 %ptr, 999992315 %0 = inttoptr i64 %or to ptr2316 %1 = load i16, ptr %0, align 22317 %conv = sext i16 %1 to i642318 ret i64 %conv2319}2320 2321; Function Attrs: norecurse nounwind readonly uwtable willreturn2322define dso_local i64 @ld_disjoint_unalign32_uint64_t_int16_t(i64 %ptr) {2323; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_int16_t:2324; CHECK-P10: # %bb.0: # %entry2325; CHECK-P10-NEXT: rldicr r3, r3, 0, 432326; CHECK-P10-NEXT: plha r3, 99999(r3), 02327; CHECK-P10-NEXT: blr2328;2329; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_int16_t:2330; CHECK-PREP10: # %bb.0: # %entry2331; CHECK-PREP10-NEXT: lis r4, 12332; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 432333; CHECK-PREP10-NEXT: ori r4, r4, 344632334; CHECK-PREP10-NEXT: lhax r3, r3, r42335; CHECK-PREP10-NEXT: blr2336entry:2337 %and = and i64 %ptr, -10485762338 %or = or i64 %and, 999992339 %0 = inttoptr i64 %or to ptr2340 %1 = load i16, ptr %0, align 22341 %conv = sext i16 %1 to i642342 ret i64 %conv2343}2344 2345; Function Attrs: norecurse nounwind readonly uwtable willreturn2346define dso_local i64 @ld_disjoint_align32_uint64_t_int16_t(i64 %ptr) {2347; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_int16_t:2348; CHECK-P10: # %bb.0: # %entry2349; CHECK-P10-NEXT: lis r4, -152642350; CHECK-P10-NEXT: and r3, r3, r42351; CHECK-P10-NEXT: plha r3, 999990000(r3), 02352; CHECK-P10-NEXT: blr2353;2354; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_int16_t:2355; CHECK-PREP10: # %bb.0: # %entry2356; CHECK-PREP10-NEXT: lis r4, -152642357; CHECK-PREP10-NEXT: and r3, r3, r42358; CHECK-PREP10-NEXT: lis r4, 152582359; CHECK-PREP10-NEXT: ori r4, r4, 417122360; CHECK-PREP10-NEXT: lhax r3, r3, r42361; CHECK-PREP10-NEXT: blr2362entry:2363 %and = and i64 %ptr, -10003415042364 %or = or i64 %and, 9999900002365 %0 = inttoptr i64 %or to ptr2366 %1 = load i16, ptr %0, align 162367 %conv = sext i16 %1 to i642368 ret i64 %conv2369}2370 2371; Function Attrs: norecurse nounwind readonly uwtable willreturn2372define dso_local i64 @ld_not_disjoint64_uint64_t_int16_t(i64 %ptr) {2373; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_int16_t:2374; CHECK-P10: # %bb.0: # %entry2375; CHECK-P10-NEXT: pli r4, 2322376; CHECK-P10-NEXT: pli r5, 35675873292377; CHECK-P10-NEXT: rldimi r5, r4, 32, 02378; CHECK-P10-NEXT: or r3, r3, r52379; CHECK-P10-NEXT: lha r3, 0(r3)2380; CHECK-P10-NEXT: blr2381;2382; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_int16_t:2383; CHECK-PREP10: # %bb.0: # %entry2384; CHECK-PREP10-NEXT: li r4, 292385; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242386; CHECK-PREP10-NEXT: oris r4, r4, 544372387; CHECK-PREP10-NEXT: ori r4, r4, 40972388; CHECK-PREP10-NEXT: or r3, r3, r42389; CHECK-PREP10-NEXT: lha r3, 0(r3)2390; CHECK-PREP10-NEXT: blr2391entry:2392 %or = or i64 %ptr, 10000000000012393 %0 = inttoptr i64 %or to ptr2394 %1 = load i16, ptr %0, align 22395 %conv = sext i16 %1 to i642396 ret i64 %conv2397}2398 2399; Function Attrs: norecurse nounwind readonly uwtable willreturn2400define dso_local i64 @ld_disjoint_unalign64_uint64_t_int16_t(i64 %ptr) {2401; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_int16_t:2402; CHECK-P10: # %bb.0: # %entry2403; CHECK-P10-NEXT: pli r4, 2322404; CHECK-P10-NEXT: pli r5, 35675873292405; CHECK-P10-NEXT: rldicr r3, r3, 0, 232406; CHECK-P10-NEXT: rldimi r5, r4, 32, 02407; CHECK-P10-NEXT: lhax r3, r3, r52408; CHECK-P10-NEXT: blr2409;2410; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_int16_t:2411; CHECK-PREP10: # %bb.0: # %entry2412; CHECK-PREP10-NEXT: li r4, 292413; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232414; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242415; CHECK-PREP10-NEXT: oris r4, r4, 544372416; CHECK-PREP10-NEXT: ori r4, r4, 40972417; CHECK-PREP10-NEXT: lhax r3, r3, r42418; CHECK-PREP10-NEXT: blr2419entry:2420 %and = and i64 %ptr, -10995116277762421 %or = or i64 %and, 10000000000012422 %0 = inttoptr i64 %or to ptr2423 %1 = load i16, ptr %0, align 22424 %conv = sext i16 %1 to i642425 ret i64 %conv2426}2427 2428; Function Attrs: norecurse nounwind readonly uwtable willreturn2429define dso_local i64 @ld_disjoint_align64_uint64_t_int16_t(i64 %ptr) {2430; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_int16_t:2431; CHECK-P10: # %bb.0: # %entry2432; CHECK-P10-NEXT: pli r4, 2441406252433; CHECK-P10-NEXT: rldicr r3, r3, 0, 232434; CHECK-P10-NEXT: rldic r4, r4, 12, 242435; CHECK-P10-NEXT: lhax r3, r3, r42436; CHECK-P10-NEXT: blr2437;2438; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_int16_t:2439; CHECK-PREP10: # %bb.0: # %entry2440; CHECK-PREP10-NEXT: lis r4, 37252441; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232442; CHECK-PREP10-NEXT: ori r4, r4, 190252443; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242444; CHECK-PREP10-NEXT: lhax r3, r3, r42445; CHECK-PREP10-NEXT: blr2446entry:2447 %and = and i64 %ptr, -10995116277762448 %or = or i64 %and, 10000000000002449 %0 = inttoptr i64 %or to ptr2450 %1 = load i16, ptr %0, align 40962451 %conv = sext i16 %1 to i642452 ret i64 %conv2453}2454 2455; Function Attrs: norecurse nounwind readonly uwtable willreturn2456define dso_local i64 @ld_cst_unalign16_uint64_t_int16_t() {2457; CHECK-LABEL: ld_cst_unalign16_uint64_t_int16_t:2458; CHECK: # %bb.0: # %entry2459; CHECK-NEXT: lha r3, 255(0)2460; CHECK-NEXT: blr2461entry:2462 %0 = load i16, ptr inttoptr (i64 255 to ptr), align 22463 %conv = sext i16 %0 to i642464 ret i64 %conv2465}2466 2467; Function Attrs: norecurse nounwind readonly uwtable willreturn2468define dso_local i64 @ld_cst_align16_uint64_t_int16_t() {2469; CHECK-LABEL: ld_cst_align16_uint64_t_int16_t:2470; CHECK: # %bb.0: # %entry2471; CHECK-NEXT: lha r3, 4080(0)2472; CHECK-NEXT: blr2473entry:2474 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 162475 %conv = sext i16 %0 to i642476 ret i64 %conv2477}2478 2479; Function Attrs: norecurse nounwind readonly uwtable willreturn2480define dso_local i64 @ld_cst_unalign32_uint64_t_int16_t() {2481; CHECK-LABEL: ld_cst_unalign32_uint64_t_int16_t:2482; CHECK: # %bb.0: # %entry2483; CHECK-NEXT: lis r3, 22484; CHECK-NEXT: lha r3, -31073(r3)2485; CHECK-NEXT: blr2486entry:2487 %0 = load i16, ptr inttoptr (i64 99999 to ptr), align 22488 %conv = sext i16 %0 to i642489 ret i64 %conv2490}2491 2492; Function Attrs: norecurse nounwind readonly uwtable willreturn2493define dso_local i64 @ld_cst_align32_uint64_t_int16_t() {2494; CHECK-LABEL: ld_cst_align32_uint64_t_int16_t:2495; CHECK: # %bb.0: # %entry2496; CHECK-NEXT: lis r3, 1532497; CHECK-NEXT: lha r3, -27108(r3)2498; CHECK-NEXT: blr2499entry:2500 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 42501 %conv = sext i16 %0 to i642502 ret i64 %conv2503}2504 2505; Function Attrs: norecurse nounwind readonly uwtable willreturn2506define dso_local i64 @ld_cst_unalign64_uint64_t_int16_t() {2507; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_int16_t:2508; CHECK-P10: # %bb.0: # %entry2509; CHECK-P10-NEXT: pli r3, 2322510; CHECK-P10-NEXT: pli r4, 35675873292511; CHECK-P10-NEXT: rldimi r4, r3, 32, 02512; CHECK-P10-NEXT: lha r3, 0(r4)2513; CHECK-P10-NEXT: blr2514;2515; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_int16_t:2516; CHECK-PREP10: # %bb.0: # %entry2517; CHECK-PREP10-NEXT: li r3, 292518; CHECK-PREP10-NEXT: rldic r3, r3, 35, 242519; CHECK-PREP10-NEXT: oris r3, r3, 544372520; CHECK-PREP10-NEXT: ori r3, r3, 40972521; CHECK-PREP10-NEXT: lha r3, 0(r3)2522; CHECK-PREP10-NEXT: blr2523entry:2524 %0 = load i16, ptr inttoptr (i64 1000000000001 to ptr), align 22525 %conv = sext i16 %0 to i642526 ret i64 %conv2527}2528 2529; Function Attrs: norecurse nounwind readonly uwtable willreturn2530define dso_local i64 @ld_cst_align64_uint64_t_int16_t() {2531; CHECK-P10-LABEL: ld_cst_align64_uint64_t_int16_t:2532; CHECK-P10: # %bb.0: # %entry2533; CHECK-P10-NEXT: pli r3, 2441406252534; CHECK-P10-NEXT: rldic r3, r3, 12, 242535; CHECK-P10-NEXT: lha r3, 0(r3)2536; CHECK-P10-NEXT: blr2537;2538; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_int16_t:2539; CHECK-PREP10: # %bb.0: # %entry2540; CHECK-PREP10-NEXT: lis r3, 37252541; CHECK-PREP10-NEXT: ori r3, r3, 190252542; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242543; CHECK-PREP10-NEXT: lha r3, 0(r3)2544; CHECK-PREP10-NEXT: blr2545entry:2546 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 40962547 %conv = sext i16 %0 to i642548 ret i64 %conv2549}2550 2551; Function Attrs: norecurse nounwind readonly uwtable willreturn2552define dso_local i64 @ld_0_uint64_t_uint32_t(i64 %ptr) {2553; CHECK-LABEL: ld_0_uint64_t_uint32_t:2554; CHECK: # %bb.0: # %entry2555; CHECK-NEXT: lwz r3, 0(r3)2556; CHECK-NEXT: blr2557entry:2558 %0 = inttoptr i64 %ptr to ptr2559 %1 = load i32, ptr %0, align 42560 %conv = zext i32 %1 to i642561 ret i64 %conv2562}2563 2564; Function Attrs: norecurse nounwind readonly uwtable willreturn2565define dso_local i64 @ld_unalign16_uint64_t_uint32_t(ptr nocapture readonly %ptr) {2566; CHECK-LABEL: ld_unalign16_uint64_t_uint32_t:2567; CHECK: # %bb.0: # %entry2568; CHECK-NEXT: lwz r3, 1(r3)2569; CHECK-NEXT: blr2570entry:2571 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 12572 %0 = load i32, ptr %add.ptr, align 42573 %conv = zext i32 %0 to i642574 ret i64 %conv2575}2576 2577; Function Attrs: norecurse nounwind readonly uwtable willreturn2578define dso_local i64 @ld_align16_uint64_t_uint32_t(ptr nocapture readonly %ptr) {2579; CHECK-LABEL: ld_align16_uint64_t_uint32_t:2580; CHECK: # %bb.0: # %entry2581; CHECK-NEXT: lwz r3, 8(r3)2582; CHECK-NEXT: blr2583entry:2584 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82585 %0 = load i32, ptr %add.ptr, align 42586 %conv = zext i32 %0 to i642587 ret i64 %conv2588}2589 2590; Function Attrs: norecurse nounwind readonly uwtable willreturn2591define dso_local i64 @ld_unalign32_uint64_t_uint32_t(ptr nocapture readonly %ptr) {2592; CHECK-P10-LABEL: ld_unalign32_uint64_t_uint32_t:2593; CHECK-P10: # %bb.0: # %entry2594; CHECK-P10-NEXT: plwz r3, 99999(r3), 02595; CHECK-P10-NEXT: blr2596;2597; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_uint32_t:2598; CHECK-PREP10: # %bb.0: # %entry2599; CHECK-PREP10-NEXT: lis r4, 12600; CHECK-PREP10-NEXT: ori r4, r4, 344632601; CHECK-PREP10-NEXT: lwzx r3, r3, r42602; CHECK-PREP10-NEXT: blr2603entry:2604 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999992605 %0 = load i32, ptr %add.ptr, align 42606 %conv = zext i32 %0 to i642607 ret i64 %conv2608}2609 2610; Function Attrs: norecurse nounwind readonly uwtable willreturn2611define dso_local i64 @ld_align32_uint64_t_uint32_t(ptr nocapture readonly %ptr) {2612; CHECK-P10-LABEL: ld_align32_uint64_t_uint32_t:2613; CHECK-P10: # %bb.0: # %entry2614; CHECK-P10-NEXT: plwz r3, 99999000(r3), 02615; CHECK-P10-NEXT: blr2616;2617; CHECK-PREP10-LABEL: ld_align32_uint64_t_uint32_t:2618; CHECK-PREP10: # %bb.0: # %entry2619; CHECK-PREP10-NEXT: lis r4, 15252620; CHECK-PREP10-NEXT: ori r4, r4, 566002621; CHECK-PREP10-NEXT: lwzx r3, r3, r42622; CHECK-PREP10-NEXT: blr2623entry:2624 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002625 %0 = load i32, ptr %add.ptr, align 42626 %conv = zext i32 %0 to i642627 ret i64 %conv2628}2629 2630; Function Attrs: norecurse nounwind readonly uwtable willreturn2631define dso_local i64 @ld_unalign64_uint64_t_uint32_t(ptr nocapture readonly %ptr) {2632; CHECK-P10-LABEL: ld_unalign64_uint64_t_uint32_t:2633; CHECK-P10: # %bb.0: # %entry2634; CHECK-P10-NEXT: pli r4, 2322635; CHECK-P10-NEXT: pli r5, 35675873292636; CHECK-P10-NEXT: rldimi r5, r4, 32, 02637; CHECK-P10-NEXT: lwzx r3, r3, r52638; CHECK-P10-NEXT: blr2639;2640; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_uint32_t:2641; CHECK-PREP10: # %bb.0: # %entry2642; CHECK-PREP10-NEXT: li r4, 292643; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242644; CHECK-PREP10-NEXT: oris r4, r4, 544372645; CHECK-PREP10-NEXT: ori r4, r4, 40972646; CHECK-PREP10-NEXT: lwzx r3, r3, r42647; CHECK-PREP10-NEXT: blr2648entry:2649 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000012650 %0 = load i32, ptr %add.ptr, align 42651 %conv = zext i32 %0 to i642652 ret i64 %conv2653}2654 2655; Function Attrs: norecurse nounwind readonly uwtable willreturn2656define dso_local i64 @ld_align64_uint64_t_uint32_t(ptr nocapture readonly %ptr) {2657; CHECK-P10-LABEL: ld_align64_uint64_t_uint32_t:2658; CHECK-P10: # %bb.0: # %entry2659; CHECK-P10-NEXT: pli r4, 2441406252660; CHECK-P10-NEXT: rldic r4, r4, 12, 242661; CHECK-P10-NEXT: lwzx r3, r3, r42662; CHECK-P10-NEXT: blr2663;2664; CHECK-PREP10-LABEL: ld_align64_uint64_t_uint32_t:2665; CHECK-PREP10: # %bb.0: # %entry2666; CHECK-PREP10-NEXT: lis r4, 37252667; CHECK-PREP10-NEXT: ori r4, r4, 190252668; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242669; CHECK-PREP10-NEXT: lwzx r3, r3, r42670; CHECK-PREP10-NEXT: blr2671entry:2672 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002673 %0 = load i32, ptr %add.ptr, align 42674 %conv = zext i32 %0 to i642675 ret i64 %conv2676}2677 2678; Function Attrs: norecurse nounwind readonly uwtable willreturn2679define dso_local i64 @ld_reg_uint64_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {2680; CHECK-LABEL: ld_reg_uint64_t_uint32_t:2681; CHECK: # %bb.0: # %entry2682; CHECK-NEXT: lwzx r3, r3, r42683; CHECK-NEXT: blr2684entry:2685 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2686 %0 = load i32, ptr %add.ptr, align 42687 %conv = zext i32 %0 to i642688 ret i64 %conv2689}2690 2691; Function Attrs: norecurse nounwind readonly uwtable willreturn2692define dso_local i64 @ld_or_uint64_t_uint32_t(i64 %ptr, i8 zeroext %off) {2693; CHECK-LABEL: ld_or_uint64_t_uint32_t:2694; CHECK: # %bb.0: # %entry2695; CHECK-NEXT: or r3, r4, r32696; CHECK-NEXT: lwz r3, 0(r3)2697; CHECK-NEXT: blr2698entry:2699 %conv = zext i8 %off to i642700 %or = or i64 %conv, %ptr2701 %0 = inttoptr i64 %or to ptr2702 %1 = load i32, ptr %0, align 42703 %conv1 = zext i32 %1 to i642704 ret i64 %conv12705}2706 2707; Function Attrs: norecurse nounwind readonly uwtable willreturn2708define dso_local i64 @ld_or2_uint64_t_uint32_t(i64 %ptr, i8 zeroext %off) {2709; CHECK-LABEL: ld_or2_uint64_t_uint32_t:2710; CHECK: # %bb.0: # %entry2711; CHECK-NEXT: rldicr r3, r3, 0, 512712; CHECK-NEXT: lwzx r3, r3, r42713; CHECK-NEXT: blr2714entry:2715 %and = and i64 %ptr, -40962716 %conv = zext i8 %off to i642717 %or = or i64 %and, %conv2718 %0 = inttoptr i64 %or to ptr2719 %1 = load i32, ptr %0, align 42720 %conv1 = zext i32 %1 to i642721 ret i64 %conv12722}2723 2724; Function Attrs: norecurse nounwind readonly uwtable willreturn2725define dso_local i64 @ld_not_disjoint16_uint64_t_uint32_t(i64 %ptr) {2726; CHECK-LABEL: ld_not_disjoint16_uint64_t_uint32_t:2727; CHECK: # %bb.0: # %entry2728; CHECK-NEXT: ori r3, r3, 62729; CHECK-NEXT: lwz r3, 0(r3)2730; CHECK-NEXT: blr2731entry:2732 %or = or i64 %ptr, 62733 %0 = inttoptr i64 %or to ptr2734 %1 = load i32, ptr %0, align 42735 %conv = zext i32 %1 to i642736 ret i64 %conv2737}2738 2739; Function Attrs: norecurse nounwind readonly uwtable willreturn2740define dso_local i64 @ld_disjoint_unalign16_uint64_t_uint32_t(i64 %ptr) {2741; CHECK-LABEL: ld_disjoint_unalign16_uint64_t_uint32_t:2742; CHECK: # %bb.0: # %entry2743; CHECK-NEXT: rldicr r3, r3, 0, 512744; CHECK-NEXT: lwz r3, 6(r3)2745; CHECK-NEXT: blr2746entry:2747 %and = and i64 %ptr, -40962748 %or = or i64 %and, 62749 %0 = inttoptr i64 %or to ptr2750 %1 = load i32, ptr %0, align 42751 %conv = zext i32 %1 to i642752 ret i64 %conv2753}2754 2755; Function Attrs: norecurse nounwind readonly uwtable willreturn2756define dso_local i64 @ld_disjoint_align16_uint64_t_uint32_t(i64 %ptr) {2757; CHECK-LABEL: ld_disjoint_align16_uint64_t_uint32_t:2758; CHECK: # %bb.0: # %entry2759; CHECK-NEXT: rldicr r3, r3, 0, 512760; CHECK-NEXT: lwz r3, 24(r3)2761; CHECK-NEXT: blr2762entry:2763 %and = and i64 %ptr, -40962764 %or = or i64 %and, 242765 %0 = inttoptr i64 %or to ptr2766 %1 = load i32, ptr %0, align 82767 %conv = zext i32 %1 to i642768 ret i64 %conv2769}2770 2771; Function Attrs: norecurse nounwind readonly uwtable willreturn2772define dso_local i64 @ld_not_disjoint32_uint64_t_uint32_t(i64 %ptr) {2773; CHECK-LABEL: ld_not_disjoint32_uint64_t_uint32_t:2774; CHECK: # %bb.0: # %entry2775; CHECK-NEXT: ori r3, r3, 344632776; CHECK-NEXT: oris r3, r3, 12777; CHECK-NEXT: lwz r3, 0(r3)2778; CHECK-NEXT: blr2779entry:2780 %or = or i64 %ptr, 999992781 %0 = inttoptr i64 %or to ptr2782 %1 = load i32, ptr %0, align 42783 %conv = zext i32 %1 to i642784 ret i64 %conv2785}2786 2787; Function Attrs: norecurse nounwind readonly uwtable willreturn2788define dso_local i64 @ld_disjoint_unalign32_uint64_t_uint32_t(i64 %ptr) {2789; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_uint32_t:2790; CHECK-P10: # %bb.0: # %entry2791; CHECK-P10-NEXT: rldicr r3, r3, 0, 432792; CHECK-P10-NEXT: plwz r3, 99999(r3), 02793; CHECK-P10-NEXT: blr2794;2795; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_uint32_t:2796; CHECK-PREP10: # %bb.0: # %entry2797; CHECK-PREP10-NEXT: lis r4, 12798; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 432799; CHECK-PREP10-NEXT: ori r4, r4, 344632800; CHECK-PREP10-NEXT: lwzx r3, r3, r42801; CHECK-PREP10-NEXT: blr2802entry:2803 %and = and i64 %ptr, -10485762804 %or = or i64 %and, 999992805 %0 = inttoptr i64 %or to ptr2806 %1 = load i32, ptr %0, align 42807 %conv = zext i32 %1 to i642808 ret i64 %conv2809}2810 2811; Function Attrs: norecurse nounwind readonly uwtable willreturn2812define dso_local i64 @ld_disjoint_align32_uint64_t_uint32_t(i64 %ptr) {2813; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_uint32_t:2814; CHECK-P10: # %bb.0: # %entry2815; CHECK-P10-NEXT: lis r4, -152642816; CHECK-P10-NEXT: and r3, r3, r42817; CHECK-P10-NEXT: plwz r3, 999990000(r3), 02818; CHECK-P10-NEXT: blr2819;2820; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_uint32_t:2821; CHECK-PREP10: # %bb.0: # %entry2822; CHECK-PREP10-NEXT: lis r4, -152642823; CHECK-PREP10-NEXT: and r3, r3, r42824; CHECK-PREP10-NEXT: lis r4, 152582825; CHECK-PREP10-NEXT: ori r4, r4, 417122826; CHECK-PREP10-NEXT: lwzx r3, r3, r42827; CHECK-PREP10-NEXT: blr2828entry:2829 %and = and i64 %ptr, -10003415042830 %or = or i64 %and, 9999900002831 %0 = inttoptr i64 %or to ptr2832 %1 = load i32, ptr %0, align 162833 %conv = zext i32 %1 to i642834 ret i64 %conv2835}2836 2837; Function Attrs: norecurse nounwind readonly uwtable willreturn2838define dso_local i64 @ld_not_disjoint64_uint64_t_uint32_t(i64 %ptr) {2839; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_uint32_t:2840; CHECK-P10: # %bb.0: # %entry2841; CHECK-P10-NEXT: pli r4, 2322842; CHECK-P10-NEXT: pli r5, 35675873292843; CHECK-P10-NEXT: rldimi r5, r4, 32, 02844; CHECK-P10-NEXT: or r3, r3, r52845; CHECK-P10-NEXT: lwz r3, 0(r3)2846; CHECK-P10-NEXT: blr2847;2848; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_uint32_t:2849; CHECK-PREP10: # %bb.0: # %entry2850; CHECK-PREP10-NEXT: li r4, 292851; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242852; CHECK-PREP10-NEXT: oris r4, r4, 544372853; CHECK-PREP10-NEXT: ori r4, r4, 40972854; CHECK-PREP10-NEXT: or r3, r3, r42855; CHECK-PREP10-NEXT: lwz r3, 0(r3)2856; CHECK-PREP10-NEXT: blr2857entry:2858 %or = or i64 %ptr, 10000000000012859 %0 = inttoptr i64 %or to ptr2860 %1 = load i32, ptr %0, align 42861 %conv = zext i32 %1 to i642862 ret i64 %conv2863}2864 2865; Function Attrs: norecurse nounwind readonly uwtable willreturn2866define dso_local i64 @ld_disjoint_unalign64_uint64_t_uint32_t(i64 %ptr) {2867; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_uint32_t:2868; CHECK-P10: # %bb.0: # %entry2869; CHECK-P10-NEXT: pli r4, 2322870; CHECK-P10-NEXT: pli r5, 35675873292871; CHECK-P10-NEXT: rldicr r3, r3, 0, 232872; CHECK-P10-NEXT: rldimi r5, r4, 32, 02873; CHECK-P10-NEXT: lwzx r3, r3, r52874; CHECK-P10-NEXT: blr2875;2876; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_uint32_t:2877; CHECK-PREP10: # %bb.0: # %entry2878; CHECK-PREP10-NEXT: li r4, 292879; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232880; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242881; CHECK-PREP10-NEXT: oris r4, r4, 544372882; CHECK-PREP10-NEXT: ori r4, r4, 40972883; CHECK-PREP10-NEXT: lwzx r3, r3, r42884; CHECK-PREP10-NEXT: blr2885entry:2886 %and = and i64 %ptr, -10995116277762887 %or = or i64 %and, 10000000000012888 %0 = inttoptr i64 %or to ptr2889 %1 = load i32, ptr %0, align 42890 %conv = zext i32 %1 to i642891 ret i64 %conv2892}2893 2894; Function Attrs: norecurse nounwind readonly uwtable willreturn2895define dso_local i64 @ld_disjoint_align64_uint64_t_uint32_t(i64 %ptr) {2896; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_uint32_t:2897; CHECK-P10: # %bb.0: # %entry2898; CHECK-P10-NEXT: pli r4, 2441406252899; CHECK-P10-NEXT: rldicr r3, r3, 0, 232900; CHECK-P10-NEXT: rldic r4, r4, 12, 242901; CHECK-P10-NEXT: lwzx r3, r3, r42902; CHECK-P10-NEXT: blr2903;2904; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_uint32_t:2905; CHECK-PREP10: # %bb.0: # %entry2906; CHECK-PREP10-NEXT: lis r4, 37252907; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232908; CHECK-PREP10-NEXT: ori r4, r4, 190252909; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242910; CHECK-PREP10-NEXT: lwzx r3, r3, r42911; CHECK-PREP10-NEXT: blr2912entry:2913 %and = and i64 %ptr, -10995116277762914 %or = or i64 %and, 10000000000002915 %0 = inttoptr i64 %or to ptr2916 %1 = load i32, ptr %0, align 40962917 %conv = zext i32 %1 to i642918 ret i64 %conv2919}2920 2921; Function Attrs: norecurse nounwind readonly uwtable willreturn2922define dso_local i64 @ld_cst_unalign16_uint64_t_uint32_t() {2923; CHECK-LABEL: ld_cst_unalign16_uint64_t_uint32_t:2924; CHECK: # %bb.0: # %entry2925; CHECK-NEXT: lwz r3, 255(0)2926; CHECK-NEXT: blr2927entry:2928 %0 = load i32, ptr inttoptr (i64 255 to ptr), align 42929 %conv = zext i32 %0 to i642930 ret i64 %conv2931}2932 2933; Function Attrs: norecurse nounwind readonly uwtable willreturn2934define dso_local i64 @ld_cst_align16_uint64_t_uint32_t() {2935; CHECK-LABEL: ld_cst_align16_uint64_t_uint32_t:2936; CHECK: # %bb.0: # %entry2937; CHECK-NEXT: lwz r3, 4080(0)2938; CHECK-NEXT: blr2939entry:2940 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 162941 %conv = zext i32 %0 to i642942 ret i64 %conv2943}2944 2945; Function Attrs: norecurse nounwind readonly uwtable willreturn2946define dso_local i64 @ld_cst_unalign32_uint64_t_uint32_t() {2947; CHECK-LABEL: ld_cst_unalign32_uint64_t_uint32_t:2948; CHECK: # %bb.0: # %entry2949; CHECK-NEXT: lis r3, 22950; CHECK-NEXT: lwz r3, -31073(r3)2951; CHECK-NEXT: blr2952entry:2953 %0 = load i32, ptr inttoptr (i64 99999 to ptr), align 42954 %conv = zext i32 %0 to i642955 ret i64 %conv2956}2957 2958; Function Attrs: norecurse nounwind readonly uwtable willreturn2959define dso_local i64 @ld_cst_align32_uint64_t_uint32_t() {2960; CHECK-LABEL: ld_cst_align32_uint64_t_uint32_t:2961; CHECK: # %bb.0: # %entry2962; CHECK-NEXT: lis r3, 1532963; CHECK-NEXT: lwz r3, -27108(r3)2964; CHECK-NEXT: blr2965entry:2966 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 42967 %conv = zext i32 %0 to i642968 ret i64 %conv2969}2970 2971; Function Attrs: norecurse nounwind readonly uwtable willreturn2972define dso_local i64 @ld_cst_unalign64_uint64_t_uint32_t() {2973; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_uint32_t:2974; CHECK-P10: # %bb.0: # %entry2975; CHECK-P10-NEXT: pli r3, 2322976; CHECK-P10-NEXT: pli r4, 35675873292977; CHECK-P10-NEXT: rldimi r4, r3, 32, 02978; CHECK-P10-NEXT: lwz r3, 0(r4)2979; CHECK-P10-NEXT: blr2980;2981; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_uint32_t:2982; CHECK-PREP10: # %bb.0: # %entry2983; CHECK-PREP10-NEXT: li r3, 292984; CHECK-PREP10-NEXT: rldic r3, r3, 35, 242985; CHECK-PREP10-NEXT: oris r3, r3, 544372986; CHECK-PREP10-NEXT: ori r3, r3, 40972987; CHECK-PREP10-NEXT: lwz r3, 0(r3)2988; CHECK-PREP10-NEXT: blr2989entry:2990 %0 = load i32, ptr inttoptr (i64 1000000000001 to ptr), align 42991 %conv = zext i32 %0 to i642992 ret i64 %conv2993}2994 2995; Function Attrs: norecurse nounwind readonly uwtable willreturn2996define dso_local i64 @ld_cst_align64_uint64_t_uint32_t() {2997; CHECK-P10-LABEL: ld_cst_align64_uint64_t_uint32_t:2998; CHECK-P10: # %bb.0: # %entry2999; CHECK-P10-NEXT: pli r3, 2441406253000; CHECK-P10-NEXT: rldic r3, r3, 12, 243001; CHECK-P10-NEXT: lwz r3, 0(r3)3002; CHECK-P10-NEXT: blr3003;3004; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_uint32_t:3005; CHECK-PREP10: # %bb.0: # %entry3006; CHECK-PREP10-NEXT: lis r3, 37253007; CHECK-PREP10-NEXT: ori r3, r3, 190253008; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243009; CHECK-PREP10-NEXT: lwz r3, 0(r3)3010; CHECK-PREP10-NEXT: blr3011entry:3012 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 40963013 %conv = zext i32 %0 to i643014 ret i64 %conv3015}3016 3017; Function Attrs: norecurse nounwind readonly uwtable willreturn3018define dso_local i64 @ld_0_uint64_t_int32_t(i64 %ptr) {3019; CHECK-LABEL: ld_0_uint64_t_int32_t:3020; CHECK: # %bb.0: # %entry3021; CHECK-NEXT: lwa r3, 0(r3)3022; CHECK-NEXT: blr3023entry:3024 %0 = inttoptr i64 %ptr to ptr3025 %1 = load i32, ptr %0, align 43026 %conv = sext i32 %1 to i643027 ret i64 %conv3028}3029 3030; Function Attrs: norecurse nounwind readonly uwtable willreturn3031define dso_local i64 @ld_unalign16_uint64_t_int32_t(ptr nocapture readonly %ptr) {3032; CHECK-P10-LABEL: ld_unalign16_uint64_t_int32_t:3033; CHECK-P10: # %bb.0: # %entry3034; CHECK-P10-NEXT: plwa r3, 1(r3), 03035; CHECK-P10-NEXT: blr3036;3037; CHECK-PREP10-LABEL: ld_unalign16_uint64_t_int32_t:3038; CHECK-PREP10: # %bb.0: # %entry3039; CHECK-PREP10-NEXT: li r4, 13040; CHECK-PREP10-NEXT: lwax r3, r3, r43041; CHECK-PREP10-NEXT: blr3042entry:3043 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 13044 %0 = load i32, ptr %add.ptr, align 43045 %conv = sext i32 %0 to i643046 ret i64 %conv3047}3048 3049; Function Attrs: norecurse nounwind readonly uwtable willreturn3050define dso_local i64 @ld_align16_uint64_t_int32_t(ptr nocapture readonly %ptr) {3051; CHECK-LABEL: ld_align16_uint64_t_int32_t:3052; CHECK: # %bb.0: # %entry3053; CHECK-NEXT: lwa r3, 8(r3)3054; CHECK-NEXT: blr3055entry:3056 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83057 %0 = load i32, ptr %add.ptr, align 43058 %conv = sext i32 %0 to i643059 ret i64 %conv3060}3061 3062; Function Attrs: norecurse nounwind readonly uwtable willreturn3063define dso_local i64 @ld_unalign32_uint64_t_int32_t(ptr nocapture readonly %ptr) {3064; CHECK-P10-LABEL: ld_unalign32_uint64_t_int32_t:3065; CHECK-P10: # %bb.0: # %entry3066; CHECK-P10-NEXT: plwa r3, 99999(r3), 03067; CHECK-P10-NEXT: blr3068;3069; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_int32_t:3070; CHECK-PREP10: # %bb.0: # %entry3071; CHECK-PREP10-NEXT: lis r4, 13072; CHECK-PREP10-NEXT: ori r4, r4, 344633073; CHECK-PREP10-NEXT: lwax r3, r3, r43074; CHECK-PREP10-NEXT: blr3075entry:3076 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999993077 %0 = load i32, ptr %add.ptr, align 43078 %conv = sext i32 %0 to i643079 ret i64 %conv3080}3081 3082; Function Attrs: norecurse nounwind readonly uwtable willreturn3083define dso_local i64 @ld_align32_uint64_t_int32_t(ptr nocapture readonly %ptr) {3084; CHECK-P10-LABEL: ld_align32_uint64_t_int32_t:3085; CHECK-P10: # %bb.0: # %entry3086; CHECK-P10-NEXT: plwa r3, 99999000(r3), 03087; CHECK-P10-NEXT: blr3088;3089; CHECK-PREP10-LABEL: ld_align32_uint64_t_int32_t:3090; CHECK-PREP10: # %bb.0: # %entry3091; CHECK-PREP10-NEXT: lis r4, 15253092; CHECK-PREP10-NEXT: ori r4, r4, 566003093; CHECK-PREP10-NEXT: lwax r3, r3, r43094; CHECK-PREP10-NEXT: blr3095entry:3096 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003097 %0 = load i32, ptr %add.ptr, align 43098 %conv = sext i32 %0 to i643099 ret i64 %conv3100}3101 3102; Function Attrs: norecurse nounwind readonly uwtable willreturn3103define dso_local i64 @ld_unalign64_uint64_t_int32_t(ptr nocapture readonly %ptr) {3104; CHECK-P10-LABEL: ld_unalign64_uint64_t_int32_t:3105; CHECK-P10: # %bb.0: # %entry3106; CHECK-P10-NEXT: pli r4, 2323107; CHECK-P10-NEXT: pli r5, 35675873293108; CHECK-P10-NEXT: rldimi r5, r4, 32, 03109; CHECK-P10-NEXT: lwax r3, r3, r53110; CHECK-P10-NEXT: blr3111;3112; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_int32_t:3113; CHECK-PREP10: # %bb.0: # %entry3114; CHECK-PREP10-NEXT: li r4, 293115; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243116; CHECK-PREP10-NEXT: oris r4, r4, 544373117; CHECK-PREP10-NEXT: ori r4, r4, 40973118; CHECK-PREP10-NEXT: lwax r3, r3, r43119; CHECK-PREP10-NEXT: blr3120entry:3121 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000013122 %0 = load i32, ptr %add.ptr, align 43123 %conv = sext i32 %0 to i643124 ret i64 %conv3125}3126 3127; Function Attrs: norecurse nounwind readonly uwtable willreturn3128define dso_local i64 @ld_align64_uint64_t_int32_t(ptr nocapture readonly %ptr) {3129; CHECK-P10-LABEL: ld_align64_uint64_t_int32_t:3130; CHECK-P10: # %bb.0: # %entry3131; CHECK-P10-NEXT: pli r4, 2441406253132; CHECK-P10-NEXT: rldic r4, r4, 12, 243133; CHECK-P10-NEXT: lwax r3, r3, r43134; CHECK-P10-NEXT: blr3135;3136; CHECK-PREP10-LABEL: ld_align64_uint64_t_int32_t:3137; CHECK-PREP10: # %bb.0: # %entry3138; CHECK-PREP10-NEXT: lis r4, 37253139; CHECK-PREP10-NEXT: ori r4, r4, 190253140; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243141; CHECK-PREP10-NEXT: lwax r3, r3, r43142; CHECK-PREP10-NEXT: blr3143entry:3144 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003145 %0 = load i32, ptr %add.ptr, align 43146 %conv = sext i32 %0 to i643147 ret i64 %conv3148}3149 3150; Function Attrs: norecurse nounwind readonly uwtable willreturn3151define dso_local i64 @ld_reg_uint64_t_int32_t(ptr nocapture readonly %ptr, i64 %off) {3152; CHECK-LABEL: ld_reg_uint64_t_int32_t:3153; CHECK: # %bb.0: # %entry3154; CHECK-NEXT: lwax r3, r3, r43155; CHECK-NEXT: blr3156entry:3157 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3158 %0 = load i32, ptr %add.ptr, align 43159 %conv = sext i32 %0 to i643160 ret i64 %conv3161}3162 3163; Function Attrs: norecurse nounwind readonly uwtable willreturn3164define dso_local i64 @ld_or_uint64_t_int32_t(i64 %ptr, i8 zeroext %off) {3165; CHECK-LABEL: ld_or_uint64_t_int32_t:3166; CHECK: # %bb.0: # %entry3167; CHECK-NEXT: or r3, r4, r33168; CHECK-NEXT: lwa r3, 0(r3)3169; CHECK-NEXT: blr3170entry:3171 %conv = zext i8 %off to i643172 %or = or i64 %conv, %ptr3173 %0 = inttoptr i64 %or to ptr3174 %1 = load i32, ptr %0, align 43175 %conv1 = sext i32 %1 to i643176 ret i64 %conv13177}3178 3179; Function Attrs: norecurse nounwind readonly uwtable willreturn3180define dso_local i64 @ld_or2_uint64_t_int32_t(i64 %ptr, i8 zeroext %off) {3181; CHECK-LABEL: ld_or2_uint64_t_int32_t:3182; CHECK: # %bb.0: # %entry3183; CHECK-NEXT: rldicr r3, r3, 0, 513184; CHECK-NEXT: lwax r3, r3, r43185; CHECK-NEXT: blr3186entry:3187 %and = and i64 %ptr, -40963188 %conv = zext i8 %off to i643189 %or = or i64 %and, %conv3190 %0 = inttoptr i64 %or to ptr3191 %1 = load i32, ptr %0, align 43192 %conv1 = sext i32 %1 to i643193 ret i64 %conv13194}3195 3196; Function Attrs: norecurse nounwind readonly uwtable willreturn3197define dso_local i64 @ld_not_disjoint16_uint64_t_int32_t(i64 %ptr) {3198; CHECK-LABEL: ld_not_disjoint16_uint64_t_int32_t:3199; CHECK: # %bb.0: # %entry3200; CHECK-NEXT: ori r3, r3, 63201; CHECK-NEXT: lwa r3, 0(r3)3202; CHECK-NEXT: blr3203entry:3204 %or = or i64 %ptr, 63205 %0 = inttoptr i64 %or to ptr3206 %1 = load i32, ptr %0, align 43207 %conv = sext i32 %1 to i643208 ret i64 %conv3209}3210 3211; Function Attrs: norecurse nounwind readonly uwtable willreturn3212define dso_local i64 @ld_disjoint_unalign16_uint64_t_int32_t(i64 %ptr) {3213; CHECK-P10-LABEL: ld_disjoint_unalign16_uint64_t_int32_t:3214; CHECK-P10: # %bb.0: # %entry3215; CHECK-P10-NEXT: rldicr r3, r3, 0, 513216; CHECK-P10-NEXT: plwa r3, 6(r3), 03217; CHECK-P10-NEXT: blr3218;3219; CHECK-PREP10-LABEL: ld_disjoint_unalign16_uint64_t_int32_t:3220; CHECK-PREP10: # %bb.0: # %entry3221; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 513222; CHECK-PREP10-NEXT: li r4, 63223; CHECK-PREP10-NEXT: lwax r3, r3, r43224; CHECK-PREP10-NEXT: blr3225entry:3226 %and = and i64 %ptr, -40963227 %or = or i64 %and, 63228 %0 = inttoptr i64 %or to ptr3229 %1 = load i32, ptr %0, align 43230 %conv = sext i32 %1 to i643231 ret i64 %conv3232}3233 3234; Function Attrs: norecurse nounwind readonly uwtable willreturn3235define dso_local i64 @ld_disjoint_align16_uint64_t_int32_t(i64 %ptr) {3236; CHECK-LABEL: ld_disjoint_align16_uint64_t_int32_t:3237; CHECK: # %bb.0: # %entry3238; CHECK-NEXT: rldicr r3, r3, 0, 513239; CHECK-NEXT: lwa r3, 24(r3)3240; CHECK-NEXT: blr3241entry:3242 %and = and i64 %ptr, -40963243 %or = or i64 %and, 243244 %0 = inttoptr i64 %or to ptr3245 %1 = load i32, ptr %0, align 83246 %conv = sext i32 %1 to i643247 ret i64 %conv3248}3249 3250; Function Attrs: norecurse nounwind readonly uwtable willreturn3251define dso_local i64 @ld_not_disjoint32_uint64_t_int32_t(i64 %ptr) {3252; CHECK-LABEL: ld_not_disjoint32_uint64_t_int32_t:3253; CHECK: # %bb.0: # %entry3254; CHECK-NEXT: ori r3, r3, 344633255; CHECK-NEXT: oris r3, r3, 13256; CHECK-NEXT: lwa r3, 0(r3)3257; CHECK-NEXT: blr3258entry:3259 %or = or i64 %ptr, 999993260 %0 = inttoptr i64 %or to ptr3261 %1 = load i32, ptr %0, align 43262 %conv = sext i32 %1 to i643263 ret i64 %conv3264}3265 3266; Function Attrs: norecurse nounwind readonly uwtable willreturn3267define dso_local i64 @ld_disjoint_unalign32_uint64_t_int32_t(i64 %ptr) {3268; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_int32_t:3269; CHECK-P10: # %bb.0: # %entry3270; CHECK-P10-NEXT: rldicr r3, r3, 0, 433271; CHECK-P10-NEXT: plwa r3, 99999(r3), 03272; CHECK-P10-NEXT: blr3273;3274; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_int32_t:3275; CHECK-PREP10: # %bb.0: # %entry3276; CHECK-PREP10-NEXT: lis r4, 13277; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 433278; CHECK-PREP10-NEXT: ori r4, r4, 344633279; CHECK-PREP10-NEXT: lwax r3, r3, r43280; CHECK-PREP10-NEXT: blr3281entry:3282 %and = and i64 %ptr, -10485763283 %or = or i64 %and, 999993284 %0 = inttoptr i64 %or to ptr3285 %1 = load i32, ptr %0, align 43286 %conv = sext i32 %1 to i643287 ret i64 %conv3288}3289 3290; Function Attrs: norecurse nounwind readonly uwtable willreturn3291define dso_local i64 @ld_disjoint_align32_uint64_t_int32_t(i64 %ptr) {3292; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_int32_t:3293; CHECK-P10: # %bb.0: # %entry3294; CHECK-P10-NEXT: lis r4, -152643295; CHECK-P10-NEXT: and r3, r3, r43296; CHECK-P10-NEXT: plwa r3, 999990000(r3), 03297; CHECK-P10-NEXT: blr3298;3299; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_int32_t:3300; CHECK-PREP10: # %bb.0: # %entry3301; CHECK-PREP10-NEXT: lis r4, -152643302; CHECK-PREP10-NEXT: and r3, r3, r43303; CHECK-PREP10-NEXT: lis r4, 152583304; CHECK-PREP10-NEXT: ori r4, r4, 417123305; CHECK-PREP10-NEXT: lwax r3, r3, r43306; CHECK-PREP10-NEXT: blr3307entry:3308 %and = and i64 %ptr, -10003415043309 %or = or i64 %and, 9999900003310 %0 = inttoptr i64 %or to ptr3311 %1 = load i32, ptr %0, align 163312 %conv = sext i32 %1 to i643313 ret i64 %conv3314}3315 3316; Function Attrs: norecurse nounwind readonly uwtable willreturn3317define dso_local i64 @ld_not_disjoint64_uint64_t_int32_t(i64 %ptr) {3318; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_int32_t:3319; CHECK-P10: # %bb.0: # %entry3320; CHECK-P10-NEXT: pli r4, 2323321; CHECK-P10-NEXT: pli r5, 35675873293322; CHECK-P10-NEXT: rldimi r5, r4, 32, 03323; CHECK-P10-NEXT: or r3, r3, r53324; CHECK-P10-NEXT: lwa r3, 0(r3)3325; CHECK-P10-NEXT: blr3326;3327; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_int32_t:3328; CHECK-PREP10: # %bb.0: # %entry3329; CHECK-PREP10-NEXT: li r4, 293330; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243331; CHECK-PREP10-NEXT: oris r4, r4, 544373332; CHECK-PREP10-NEXT: ori r4, r4, 40973333; CHECK-PREP10-NEXT: or r3, r3, r43334; CHECK-PREP10-NEXT: lwa r3, 0(r3)3335; CHECK-PREP10-NEXT: blr3336entry:3337 %or = or i64 %ptr, 10000000000013338 %0 = inttoptr i64 %or to ptr3339 %1 = load i32, ptr %0, align 43340 %conv = sext i32 %1 to i643341 ret i64 %conv3342}3343 3344; Function Attrs: norecurse nounwind readonly uwtable willreturn3345define dso_local i64 @ld_disjoint_unalign64_uint64_t_int32_t(i64 %ptr) {3346; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_int32_t:3347; CHECK-P10: # %bb.0: # %entry3348; CHECK-P10-NEXT: pli r4, 2323349; CHECK-P10-NEXT: pli r5, 35675873293350; CHECK-P10-NEXT: rldicr r3, r3, 0, 233351; CHECK-P10-NEXT: rldimi r5, r4, 32, 03352; CHECK-P10-NEXT: lwax r3, r3, r53353; CHECK-P10-NEXT: blr3354;3355; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_int32_t:3356; CHECK-PREP10: # %bb.0: # %entry3357; CHECK-PREP10-NEXT: li r4, 293358; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233359; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243360; CHECK-PREP10-NEXT: oris r4, r4, 544373361; CHECK-PREP10-NEXT: ori r4, r4, 40973362; CHECK-PREP10-NEXT: lwax r3, r3, r43363; CHECK-PREP10-NEXT: blr3364entry:3365 %and = and i64 %ptr, -10995116277763366 %or = or i64 %and, 10000000000013367 %0 = inttoptr i64 %or to ptr3368 %1 = load i32, ptr %0, align 43369 %conv = sext i32 %1 to i643370 ret i64 %conv3371}3372 3373; Function Attrs: norecurse nounwind readonly uwtable willreturn3374define dso_local i64 @ld_disjoint_align64_uint64_t_int32_t(i64 %ptr) {3375; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_int32_t:3376; CHECK-P10: # %bb.0: # %entry3377; CHECK-P10-NEXT: pli r4, 2441406253378; CHECK-P10-NEXT: rldicr r3, r3, 0, 233379; CHECK-P10-NEXT: rldic r4, r4, 12, 243380; CHECK-P10-NEXT: lwax r3, r3, r43381; CHECK-P10-NEXT: blr3382;3383; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_int32_t:3384; CHECK-PREP10: # %bb.0: # %entry3385; CHECK-PREP10-NEXT: lis r4, 37253386; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233387; CHECK-PREP10-NEXT: ori r4, r4, 190253388; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243389; CHECK-PREP10-NEXT: lwax r3, r3, r43390; CHECK-PREP10-NEXT: blr3391entry:3392 %and = and i64 %ptr, -10995116277763393 %or = or i64 %and, 10000000000003394 %0 = inttoptr i64 %or to ptr3395 %1 = load i32, ptr %0, align 40963396 %conv = sext i32 %1 to i643397 ret i64 %conv3398}3399 3400; Function Attrs: norecurse nounwind readonly uwtable willreturn3401define dso_local i64 @ld_cst_unalign16_uint64_t_int32_t() {3402; CHECK-LABEL: ld_cst_unalign16_uint64_t_int32_t:3403; CHECK: # %bb.0: # %entry3404; CHECK-NEXT: li r3, 2553405; CHECK-NEXT: lwa r3, 0(r3)3406; CHECK-NEXT: blr3407entry:3408 %0 = load i32, ptr inttoptr (i64 255 to ptr), align 43409 %conv = sext i32 %0 to i643410 ret i64 %conv3411}3412 3413; Function Attrs: norecurse nounwind readonly uwtable willreturn3414define dso_local i64 @ld_cst_align16_uint64_t_int32_t() {3415; CHECK-LABEL: ld_cst_align16_uint64_t_int32_t:3416; CHECK: # %bb.0: # %entry3417; CHECK-NEXT: lwa r3, 4080(0)3418; CHECK-NEXT: blr3419entry:3420 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 163421 %conv = sext i32 %0 to i643422 ret i64 %conv3423}3424 3425; Function Attrs: norecurse nounwind readonly uwtable willreturn3426define dso_local i64 @ld_cst_unalign32_uint64_t_int32_t() {3427; CHECK-P10-LABEL: ld_cst_unalign32_uint64_t_int32_t:3428; CHECK-P10: # %bb.0: # %entry3429; CHECK-P10-NEXT: pli r3, 999993430; CHECK-P10-NEXT: lwa r3, 0(r3)3431; CHECK-P10-NEXT: blr3432;3433; CHECK-PREP10-LABEL: ld_cst_unalign32_uint64_t_int32_t:3434; CHECK-PREP10: # %bb.0: # %entry3435; CHECK-PREP10-NEXT: lis r3, 13436; CHECK-PREP10-NEXT: ori r3, r3, 344633437; CHECK-PREP10-NEXT: lwa r3, 0(r3)3438; CHECK-PREP10-NEXT: blr3439entry:3440 %0 = load i32, ptr inttoptr (i64 99999 to ptr), align 43441 %conv = sext i32 %0 to i643442 ret i64 %conv3443}3444 3445; Function Attrs: norecurse nounwind readonly uwtable willreturn3446define dso_local i64 @ld_cst_align32_uint64_t_int32_t() {3447; CHECK-LABEL: ld_cst_align32_uint64_t_int32_t:3448; CHECK: # %bb.0: # %entry3449; CHECK-NEXT: lis r3, 1533450; CHECK-NEXT: lwa r3, -27108(r3)3451; CHECK-NEXT: blr3452entry:3453 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 43454 %conv = sext i32 %0 to i643455 ret i64 %conv3456}3457 3458; Function Attrs: norecurse nounwind readonly uwtable willreturn3459define dso_local i64 @ld_cst_unalign64_uint64_t_int32_t() {3460; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_int32_t:3461; CHECK-P10: # %bb.0: # %entry3462; CHECK-P10-NEXT: pli r3, 2323463; CHECK-P10-NEXT: pli r4, 35675873293464; CHECK-P10-NEXT: rldimi r4, r3, 32, 03465; CHECK-P10-NEXT: lwa r3, 0(r4)3466; CHECK-P10-NEXT: blr3467;3468; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_int32_t:3469; CHECK-PREP10: # %bb.0: # %entry3470; CHECK-PREP10-NEXT: li r3, 293471; CHECK-PREP10-NEXT: rldic r3, r3, 35, 243472; CHECK-PREP10-NEXT: oris r3, r3, 544373473; CHECK-PREP10-NEXT: ori r3, r3, 40973474; CHECK-PREP10-NEXT: lwa r3, 0(r3)3475; CHECK-PREP10-NEXT: blr3476entry:3477 %0 = load i32, ptr inttoptr (i64 1000000000001 to ptr), align 43478 %conv = sext i32 %0 to i643479 ret i64 %conv3480}3481 3482; Function Attrs: norecurse nounwind readonly uwtable willreturn3483define dso_local i64 @ld_cst_align64_uint64_t_int32_t() {3484; CHECK-P10-LABEL: ld_cst_align64_uint64_t_int32_t:3485; CHECK-P10: # %bb.0: # %entry3486; CHECK-P10-NEXT: pli r3, 2441406253487; CHECK-P10-NEXT: rldic r3, r3, 12, 243488; CHECK-P10-NEXT: lwa r3, 0(r3)3489; CHECK-P10-NEXT: blr3490;3491; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_int32_t:3492; CHECK-PREP10: # %bb.0: # %entry3493; CHECK-PREP10-NEXT: lis r3, 37253494; CHECK-PREP10-NEXT: ori r3, r3, 190253495; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243496; CHECK-PREP10-NEXT: lwa r3, 0(r3)3497; CHECK-PREP10-NEXT: blr3498entry:3499 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 40963500 %conv = sext i32 %0 to i643501 ret i64 %conv3502}3503 3504; Function Attrs: norecurse nounwind readonly uwtable willreturn3505define dso_local i64 @ld_0_uint64_t_uint64_t(i64 %ptr) {3506; CHECK-LABEL: ld_0_uint64_t_uint64_t:3507; CHECK: # %bb.0: # %entry3508; CHECK-NEXT: ld r3, 0(r3)3509; CHECK-NEXT: blr3510entry:3511 %0 = inttoptr i64 %ptr to ptr3512 %1 = load i64, ptr %0, align 83513 ret i64 %13514}3515 3516; Function Attrs: norecurse nounwind readonly uwtable willreturn3517define dso_local i64 @ld_unalign16_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3518; CHECK-P10-LABEL: ld_unalign16_uint64_t_uint64_t:3519; CHECK-P10: # %bb.0: # %entry3520; CHECK-P10-NEXT: pld r3, 1(r3), 03521; CHECK-P10-NEXT: blr3522;3523; CHECK-PREP10-LABEL: ld_unalign16_uint64_t_uint64_t:3524; CHECK-PREP10: # %bb.0: # %entry3525; CHECK-PREP10-NEXT: li r4, 13526; CHECK-PREP10-NEXT: ldx r3, r3, r43527; CHECK-PREP10-NEXT: blr3528entry:3529 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 13530 %0 = load i64, ptr %add.ptr, align 83531 ret i64 %03532}3533 3534; Function Attrs: norecurse nounwind readonly uwtable willreturn3535define dso_local i64 @ld_align16_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3536; CHECK-LABEL: ld_align16_uint64_t_uint64_t:3537; CHECK: # %bb.0: # %entry3538; CHECK-NEXT: ld r3, 8(r3)3539; CHECK-NEXT: blr3540entry:3541 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83542 %0 = load i64, ptr %add.ptr, align 83543 ret i64 %03544}3545 3546; Function Attrs: norecurse nounwind readonly uwtable willreturn3547define dso_local i64 @ld_unalign32_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3548; CHECK-P10-LABEL: ld_unalign32_uint64_t_uint64_t:3549; CHECK-P10: # %bb.0: # %entry3550; CHECK-P10-NEXT: pld r3, 99999(r3), 03551; CHECK-P10-NEXT: blr3552;3553; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_uint64_t:3554; CHECK-PREP10: # %bb.0: # %entry3555; CHECK-PREP10-NEXT: lis r4, 13556; CHECK-PREP10-NEXT: ori r4, r4, 344633557; CHECK-PREP10-NEXT: ldx r3, r3, r43558; CHECK-PREP10-NEXT: blr3559entry:3560 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999993561 %0 = load i64, ptr %add.ptr, align 83562 ret i64 %03563}3564 3565; Function Attrs: norecurse nounwind readonly uwtable willreturn3566define dso_local i64 @ld_align32_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3567; CHECK-P10-LABEL: ld_align32_uint64_t_uint64_t:3568; CHECK-P10: # %bb.0: # %entry3569; CHECK-P10-NEXT: pld r3, 99999000(r3), 03570; CHECK-P10-NEXT: blr3571;3572; CHECK-PREP10-LABEL: ld_align32_uint64_t_uint64_t:3573; CHECK-PREP10: # %bb.0: # %entry3574; CHECK-PREP10-NEXT: lis r4, 15253575; CHECK-PREP10-NEXT: ori r4, r4, 566003576; CHECK-PREP10-NEXT: ldx r3, r3, r43577; CHECK-PREP10-NEXT: blr3578entry:3579 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003580 %0 = load i64, ptr %add.ptr, align 83581 ret i64 %03582}3583 3584; Function Attrs: norecurse nounwind readonly uwtable willreturn3585define dso_local i64 @ld_unalign64_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3586; CHECK-P10-LABEL: ld_unalign64_uint64_t_uint64_t:3587; CHECK-P10: # %bb.0: # %entry3588; CHECK-P10-NEXT: pli r4, 2323589; CHECK-P10-NEXT: pli r5, 35675873293590; CHECK-P10-NEXT: rldimi r5, r4, 32, 03591; CHECK-P10-NEXT: ldx r3, r3, r53592; CHECK-P10-NEXT: blr3593;3594; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_uint64_t:3595; CHECK-PREP10: # %bb.0: # %entry3596; CHECK-PREP10-NEXT: li r4, 293597; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243598; CHECK-PREP10-NEXT: oris r4, r4, 544373599; CHECK-PREP10-NEXT: ori r4, r4, 40973600; CHECK-PREP10-NEXT: ldx r3, r3, r43601; CHECK-PREP10-NEXT: blr3602entry:3603 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000013604 %0 = load i64, ptr %add.ptr, align 83605 ret i64 %03606}3607 3608; Function Attrs: norecurse nounwind readonly uwtable willreturn3609define dso_local i64 @ld_align64_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3610; CHECK-P10-LABEL: ld_align64_uint64_t_uint64_t:3611; CHECK-P10: # %bb.0: # %entry3612; CHECK-P10-NEXT: pli r4, 2441406253613; CHECK-P10-NEXT: rldic r4, r4, 12, 243614; CHECK-P10-NEXT: ldx r3, r3, r43615; CHECK-P10-NEXT: blr3616;3617; CHECK-PREP10-LABEL: ld_align64_uint64_t_uint64_t:3618; CHECK-PREP10: # %bb.0: # %entry3619; CHECK-PREP10-NEXT: lis r4, 37253620; CHECK-PREP10-NEXT: ori r4, r4, 190253621; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243622; CHECK-PREP10-NEXT: ldx r3, r3, r43623; CHECK-PREP10-NEXT: blr3624entry:3625 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003626 %0 = load i64, ptr %add.ptr, align 83627 ret i64 %03628}3629 3630; Function Attrs: norecurse nounwind readonly uwtable willreturn3631define dso_local i64 @ld_reg_uint64_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {3632; CHECK-LABEL: ld_reg_uint64_t_uint64_t:3633; CHECK: # %bb.0: # %entry3634; CHECK-NEXT: ldx r3, r3, r43635; CHECK-NEXT: blr3636entry:3637 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3638 %0 = load i64, ptr %add.ptr, align 83639 ret i64 %03640}3641 3642; Function Attrs: norecurse nounwind readonly uwtable willreturn3643define dso_local i64 @ld_or_uint64_t_uint64_t(i64 %ptr, i8 zeroext %off) {3644; CHECK-LABEL: ld_or_uint64_t_uint64_t:3645; CHECK: # %bb.0: # %entry3646; CHECK-NEXT: or r3, r4, r33647; CHECK-NEXT: ld r3, 0(r3)3648; CHECK-NEXT: blr3649entry:3650 %conv = zext i8 %off to i643651 %or = or i64 %conv, %ptr3652 %0 = inttoptr i64 %or to ptr3653 %1 = load i64, ptr %0, align 83654 ret i64 %13655}3656 3657; Function Attrs: norecurse nounwind readonly uwtable willreturn3658define dso_local i64 @ld_or2_uint64_t_uint64_t(i64 %ptr, i8 zeroext %off) {3659; CHECK-LABEL: ld_or2_uint64_t_uint64_t:3660; CHECK: # %bb.0: # %entry3661; CHECK-NEXT: rldicr r3, r3, 0, 513662; CHECK-NEXT: ldx r3, r3, r43663; CHECK-NEXT: blr3664entry:3665 %and = and i64 %ptr, -40963666 %conv = zext i8 %off to i643667 %or = or i64 %and, %conv3668 %0 = inttoptr i64 %or to ptr3669 %1 = load i64, ptr %0, align 83670 ret i64 %13671}3672 3673; Function Attrs: norecurse nounwind readonly uwtable willreturn3674define dso_local i64 @ld_not_disjoint16_uint64_t_uint64_t(i64 %ptr) {3675; CHECK-LABEL: ld_not_disjoint16_uint64_t_uint64_t:3676; CHECK: # %bb.0: # %entry3677; CHECK-NEXT: ori r3, r3, 63678; CHECK-NEXT: ld r3, 0(r3)3679; CHECK-NEXT: blr3680entry:3681 %or = or i64 %ptr, 63682 %0 = inttoptr i64 %or to ptr3683 %1 = load i64, ptr %0, align 83684 ret i64 %13685}3686 3687; Function Attrs: norecurse nounwind readonly uwtable willreturn3688define dso_local i64 @ld_disjoint_unalign16_uint64_t_uint64_t(i64 %ptr) {3689; CHECK-P10-LABEL: ld_disjoint_unalign16_uint64_t_uint64_t:3690; CHECK-P10: # %bb.0: # %entry3691; CHECK-P10-NEXT: rldicr r3, r3, 0, 513692; CHECK-P10-NEXT: pld r3, 6(r3), 03693; CHECK-P10-NEXT: blr3694;3695; CHECK-PREP10-LABEL: ld_disjoint_unalign16_uint64_t_uint64_t:3696; CHECK-PREP10: # %bb.0: # %entry3697; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 513698; CHECK-PREP10-NEXT: li r4, 63699; CHECK-PREP10-NEXT: ldx r3, r3, r43700; CHECK-PREP10-NEXT: blr3701entry:3702 %and = and i64 %ptr, -40963703 %or = or i64 %and, 63704 %0 = inttoptr i64 %or to ptr3705 %1 = load i64, ptr %0, align 83706 ret i64 %13707}3708 3709; Function Attrs: norecurse nounwind readonly uwtable willreturn3710define dso_local i64 @ld_disjoint_align16_uint64_t_uint64_t(i64 %ptr) {3711; CHECK-LABEL: ld_disjoint_align16_uint64_t_uint64_t:3712; CHECK: # %bb.0: # %entry3713; CHECK-NEXT: rldicr r3, r3, 0, 513714; CHECK-NEXT: ld r3, 24(r3)3715; CHECK-NEXT: blr3716entry:3717 %and = and i64 %ptr, -40963718 %or = or i64 %and, 243719 %0 = inttoptr i64 %or to ptr3720 %1 = load i64, ptr %0, align 83721 ret i64 %13722}3723 3724; Function Attrs: norecurse nounwind readonly uwtable willreturn3725define dso_local i64 @ld_not_disjoint32_uint64_t_uint64_t(i64 %ptr) {3726; CHECK-LABEL: ld_not_disjoint32_uint64_t_uint64_t:3727; CHECK: # %bb.0: # %entry3728; CHECK-NEXT: ori r3, r3, 344633729; CHECK-NEXT: oris r3, r3, 13730; CHECK-NEXT: ld r3, 0(r3)3731; CHECK-NEXT: blr3732entry:3733 %or = or i64 %ptr, 999993734 %0 = inttoptr i64 %or to ptr3735 %1 = load i64, ptr %0, align 83736 ret i64 %13737}3738 3739; Function Attrs: norecurse nounwind readonly uwtable willreturn3740define dso_local i64 @ld_disjoint_unalign32_uint64_t_uint64_t(i64 %ptr) {3741; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_uint64_t:3742; CHECK-P10: # %bb.0: # %entry3743; CHECK-P10-NEXT: rldicr r3, r3, 0, 433744; CHECK-P10-NEXT: pld r3, 99999(r3), 03745; CHECK-P10-NEXT: blr3746;3747; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_uint64_t:3748; CHECK-PREP10: # %bb.0: # %entry3749; CHECK-PREP10-NEXT: lis r4, 13750; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 433751; CHECK-PREP10-NEXT: ori r4, r4, 344633752; CHECK-PREP10-NEXT: ldx r3, r3, r43753; CHECK-PREP10-NEXT: blr3754entry:3755 %and = and i64 %ptr, -10485763756 %or = or i64 %and, 999993757 %0 = inttoptr i64 %or to ptr3758 %1 = load i64, ptr %0, align 83759 ret i64 %13760}3761 3762; Function Attrs: norecurse nounwind readonly uwtable willreturn3763define dso_local i64 @ld_disjoint_align32_uint64_t_uint64_t(i64 %ptr) {3764; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_uint64_t:3765; CHECK-P10: # %bb.0: # %entry3766; CHECK-P10-NEXT: lis r4, -152643767; CHECK-P10-NEXT: and r3, r3, r43768; CHECK-P10-NEXT: pld r3, 999990000(r3), 03769; CHECK-P10-NEXT: blr3770;3771; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_uint64_t:3772; CHECK-PREP10: # %bb.0: # %entry3773; CHECK-PREP10-NEXT: lis r4, -152643774; CHECK-PREP10-NEXT: and r3, r3, r43775; CHECK-PREP10-NEXT: lis r4, 152583776; CHECK-PREP10-NEXT: ori r4, r4, 417123777; CHECK-PREP10-NEXT: ldx r3, r3, r43778; CHECK-PREP10-NEXT: blr3779entry:3780 %and = and i64 %ptr, -10003415043781 %or = or i64 %and, 9999900003782 %0 = inttoptr i64 %or to ptr3783 %1 = load i64, ptr %0, align 163784 ret i64 %13785}3786 3787; Function Attrs: norecurse nounwind readonly uwtable willreturn3788define dso_local i64 @ld_not_disjoint64_uint64_t_uint64_t(i64 %ptr) {3789; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_uint64_t:3790; CHECK-P10: # %bb.0: # %entry3791; CHECK-P10-NEXT: pli r4, 2323792; CHECK-P10-NEXT: pli r5, 35675873293793; CHECK-P10-NEXT: rldimi r5, r4, 32, 03794; CHECK-P10-NEXT: or r3, r3, r53795; CHECK-P10-NEXT: ld r3, 0(r3)3796; CHECK-P10-NEXT: blr3797;3798; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_uint64_t:3799; CHECK-PREP10: # %bb.0: # %entry3800; CHECK-PREP10-NEXT: li r4, 293801; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243802; CHECK-PREP10-NEXT: oris r4, r4, 544373803; CHECK-PREP10-NEXT: ori r4, r4, 40973804; CHECK-PREP10-NEXT: or r3, r3, r43805; CHECK-PREP10-NEXT: ld r3, 0(r3)3806; CHECK-PREP10-NEXT: blr3807entry:3808 %or = or i64 %ptr, 10000000000013809 %0 = inttoptr i64 %or to ptr3810 %1 = load i64, ptr %0, align 83811 ret i64 %13812}3813 3814; Function Attrs: norecurse nounwind readonly uwtable willreturn3815define dso_local i64 @ld_disjoint_unalign64_uint64_t_uint64_t(i64 %ptr) {3816; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_uint64_t:3817; CHECK-P10: # %bb.0: # %entry3818; CHECK-P10-NEXT: pli r4, 2323819; CHECK-P10-NEXT: pli r5, 35675873293820; CHECK-P10-NEXT: rldicr r3, r3, 0, 233821; CHECK-P10-NEXT: rldimi r5, r4, 32, 03822; CHECK-P10-NEXT: ldx r3, r3, r53823; CHECK-P10-NEXT: blr3824;3825; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_uint64_t:3826; CHECK-PREP10: # %bb.0: # %entry3827; CHECK-PREP10-NEXT: li r4, 293828; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233829; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243830; CHECK-PREP10-NEXT: oris r4, r4, 544373831; CHECK-PREP10-NEXT: ori r4, r4, 40973832; CHECK-PREP10-NEXT: ldx r3, r3, r43833; CHECK-PREP10-NEXT: blr3834entry:3835 %and = and i64 %ptr, -10995116277763836 %or = or i64 %and, 10000000000013837 %0 = inttoptr i64 %or to ptr3838 %1 = load i64, ptr %0, align 83839 ret i64 %13840}3841 3842; Function Attrs: norecurse nounwind readonly uwtable willreturn3843define dso_local i64 @ld_disjoint_align64_uint64_t_uint64_t(i64 %ptr) {3844; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_uint64_t:3845; CHECK-P10: # %bb.0: # %entry3846; CHECK-P10-NEXT: pli r4, 2441406253847; CHECK-P10-NEXT: rldicr r3, r3, 0, 233848; CHECK-P10-NEXT: rldic r4, r4, 12, 243849; CHECK-P10-NEXT: ldx r3, r3, r43850; CHECK-P10-NEXT: blr3851;3852; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_uint64_t:3853; CHECK-PREP10: # %bb.0: # %entry3854; CHECK-PREP10-NEXT: lis r4, 37253855; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233856; CHECK-PREP10-NEXT: ori r4, r4, 190253857; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243858; CHECK-PREP10-NEXT: ldx r3, r3, r43859; CHECK-PREP10-NEXT: blr3860entry:3861 %and = and i64 %ptr, -10995116277763862 %or = or i64 %and, 10000000000003863 %0 = inttoptr i64 %or to ptr3864 %1 = load i64, ptr %0, align 40963865 ret i64 %13866}3867 3868; Function Attrs: norecurse nounwind readonly uwtable willreturn3869define dso_local i64 @ld_cst_unalign16_uint64_t_uint64_t() {3870; CHECK-LABEL: ld_cst_unalign16_uint64_t_uint64_t:3871; CHECK: # %bb.0: # %entry3872; CHECK-NEXT: li r3, 2553873; CHECK-NEXT: ld r3, 0(r3)3874; CHECK-NEXT: blr3875entry:3876 %0 = load i64, ptr inttoptr (i64 255 to ptr), align 83877 ret i64 %03878}3879 3880; Function Attrs: norecurse nounwind readonly uwtable willreturn3881define dso_local i64 @ld_cst_align16_uint64_t_uint64_t() {3882; CHECK-LABEL: ld_cst_align16_uint64_t_uint64_t:3883; CHECK: # %bb.0: # %entry3884; CHECK-NEXT: ld r3, 4080(0)3885; CHECK-NEXT: blr3886entry:3887 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 163888 ret i64 %03889}3890 3891; Function Attrs: norecurse nounwind readonly uwtable willreturn3892define dso_local i64 @ld_cst_unalign32_uint64_t_uint64_t() {3893; CHECK-P10-LABEL: ld_cst_unalign32_uint64_t_uint64_t:3894; CHECK-P10: # %bb.0: # %entry3895; CHECK-P10-NEXT: pli r3, 999993896; CHECK-P10-NEXT: ld r3, 0(r3)3897; CHECK-P10-NEXT: blr3898;3899; CHECK-PREP10-LABEL: ld_cst_unalign32_uint64_t_uint64_t:3900; CHECK-PREP10: # %bb.0: # %entry3901; CHECK-PREP10-NEXT: lis r3, 13902; CHECK-PREP10-NEXT: ori r3, r3, 344633903; CHECK-PREP10-NEXT: ld r3, 0(r3)3904; CHECK-PREP10-NEXT: blr3905entry:3906 %0 = load i64, ptr inttoptr (i64 99999 to ptr), align 83907 ret i64 %03908}3909 3910; Function Attrs: norecurse nounwind readonly uwtable willreturn3911define dso_local i64 @ld_cst_align32_uint64_t_uint64_t() {3912; CHECK-LABEL: ld_cst_align32_uint64_t_uint64_t:3913; CHECK: # %bb.0: # %entry3914; CHECK-NEXT: lis r3, 1533915; CHECK-NEXT: ld r3, -27108(r3)3916; CHECK-NEXT: blr3917entry:3918 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 83919 ret i64 %03920}3921 3922; Function Attrs: norecurse nounwind readonly uwtable willreturn3923define dso_local i64 @ld_cst_unalign64_uint64_t_uint64_t() {3924; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_uint64_t:3925; CHECK-P10: # %bb.0: # %entry3926; CHECK-P10-NEXT: pli r3, 2323927; CHECK-P10-NEXT: pli r4, 35675873293928; CHECK-P10-NEXT: rldimi r4, r3, 32, 03929; CHECK-P10-NEXT: ld r3, 0(r4)3930; CHECK-P10-NEXT: blr3931;3932; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_uint64_t:3933; CHECK-PREP10: # %bb.0: # %entry3934; CHECK-PREP10-NEXT: li r3, 293935; CHECK-PREP10-NEXT: rldic r3, r3, 35, 243936; CHECK-PREP10-NEXT: oris r3, r3, 544373937; CHECK-PREP10-NEXT: ori r3, r3, 40973938; CHECK-PREP10-NEXT: ld r3, 0(r3)3939; CHECK-PREP10-NEXT: blr3940entry:3941 %0 = load i64, ptr inttoptr (i64 1000000000001 to ptr), align 83942 ret i64 %03943}3944 3945; Function Attrs: norecurse nounwind readonly uwtable willreturn3946define dso_local i64 @ld_cst_align64_uint64_t_uint64_t() {3947; CHECK-P10-LABEL: ld_cst_align64_uint64_t_uint64_t:3948; CHECK-P10: # %bb.0: # %entry3949; CHECK-P10-NEXT: pli r3, 2441406253950; CHECK-P10-NEXT: rldic r3, r3, 12, 243951; CHECK-P10-NEXT: ld r3, 0(r3)3952; CHECK-P10-NEXT: blr3953;3954; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_uint64_t:3955; CHECK-PREP10: # %bb.0: # %entry3956; CHECK-PREP10-NEXT: lis r3, 37253957; CHECK-PREP10-NEXT: ori r3, r3, 190253958; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243959; CHECK-PREP10-NEXT: ld r3, 0(r3)3960; CHECK-PREP10-NEXT: blr3961entry:3962 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 40963963 ret i64 %03964}3965 3966; Function Attrs: norecurse nounwind readonly uwtable willreturn3967define dso_local i64 @ld_0_uint64_t_float(i64 %ptr) {3968; CHECK-LABEL: ld_0_uint64_t_float:3969; CHECK: # %bb.0: # %entry3970; CHECK-NEXT: lfs f0, 0(r3)3971; CHECK-NEXT: xscvdpuxds f0, f03972; CHECK-NEXT: mffprd r3, f03973; CHECK-NEXT: blr3974entry:3975 %0 = inttoptr i64 %ptr to ptr3976 %1 = load float, ptr %0, align 43977 %conv = fptoui float %1 to i643978 ret i64 %conv3979}3980 3981; Function Attrs: norecurse nounwind readonly uwtable willreturn3982define dso_local i64 @ld_unalign16_uint64_t_float(ptr nocapture readonly %ptr) {3983; CHECK-P10-LABEL: ld_unalign16_uint64_t_float:3984; CHECK-P10: # %bb.0: # %entry3985; CHECK-P10-NEXT: plfs f0, 1(r3), 03986; CHECK-P10-NEXT: xscvdpuxds f0, f03987; CHECK-P10-NEXT: mffprd r3, f03988; CHECK-P10-NEXT: blr3989;3990; CHECK-PREP10-LABEL: ld_unalign16_uint64_t_float:3991; CHECK-PREP10: # %bb.0: # %entry3992; CHECK-PREP10-NEXT: lfs f0, 1(r3)3993; CHECK-PREP10-NEXT: xscvdpuxds f0, f03994; CHECK-PREP10-NEXT: mffprd r3, f03995; CHECK-PREP10-NEXT: blr3996entry:3997 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 13998 %0 = load float, ptr %add.ptr, align 43999 %conv = fptoui float %0 to i644000 ret i64 %conv4001}4002 4003; Function Attrs: norecurse nounwind readonly uwtable willreturn4004define dso_local i64 @ld_align16_uint64_t_float(ptr nocapture readonly %ptr) {4005; CHECK-LABEL: ld_align16_uint64_t_float:4006; CHECK: # %bb.0: # %entry4007; CHECK-NEXT: lfs f0, 8(r3)4008; CHECK-NEXT: xscvdpuxds f0, f04009; CHECK-NEXT: mffprd r3, f04010; CHECK-NEXT: blr4011entry:4012 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84013 %0 = load float, ptr %add.ptr, align 44014 %conv = fptoui float %0 to i644015 ret i64 %conv4016}4017 4018; Function Attrs: norecurse nounwind readonly uwtable willreturn4019define dso_local i64 @ld_unalign32_uint64_t_float(ptr nocapture readonly %ptr) {4020; CHECK-P10-LABEL: ld_unalign32_uint64_t_float:4021; CHECK-P10: # %bb.0: # %entry4022; CHECK-P10-NEXT: plfs f0, 99999(r3), 04023; CHECK-P10-NEXT: xscvdpuxds f0, f04024; CHECK-P10-NEXT: mffprd r3, f04025; CHECK-P10-NEXT: blr4026;4027; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_float:4028; CHECK-PREP10: # %bb.0: # %entry4029; CHECK-PREP10-NEXT: lis r4, 14030; CHECK-PREP10-NEXT: ori r4, r4, 344634031; CHECK-PREP10-NEXT: lfsx f0, r3, r44032; CHECK-PREP10-NEXT: xscvdpuxds f0, f04033; CHECK-PREP10-NEXT: mffprd r3, f04034; CHECK-PREP10-NEXT: blr4035entry:4036 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999994037 %0 = load float, ptr %add.ptr, align 44038 %conv = fptoui float %0 to i644039 ret i64 %conv4040}4041 4042; Function Attrs: norecurse nounwind readonly uwtable willreturn4043define dso_local i64 @ld_align32_uint64_t_float(ptr nocapture readonly %ptr) {4044; CHECK-P10-LABEL: ld_align32_uint64_t_float:4045; CHECK-P10: # %bb.0: # %entry4046; CHECK-P10-NEXT: plfs f0, 99999000(r3), 04047; CHECK-P10-NEXT: xscvdpuxds f0, f04048; CHECK-P10-NEXT: mffprd r3, f04049; CHECK-P10-NEXT: blr4050;4051; CHECK-PREP10-LABEL: ld_align32_uint64_t_float:4052; CHECK-PREP10: # %bb.0: # %entry4053; CHECK-PREP10-NEXT: lis r4, 15254054; CHECK-PREP10-NEXT: ori r4, r4, 566004055; CHECK-PREP10-NEXT: lfsx f0, r3, r44056; CHECK-PREP10-NEXT: xscvdpuxds f0, f04057; CHECK-PREP10-NEXT: mffprd r3, f04058; CHECK-PREP10-NEXT: blr4059entry:4060 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004061 %0 = load float, ptr %add.ptr, align 44062 %conv = fptoui float %0 to i644063 ret i64 %conv4064}4065 4066; Function Attrs: norecurse nounwind readonly uwtable willreturn4067define dso_local i64 @ld_unalign64_uint64_t_float(ptr nocapture readonly %ptr) {4068; CHECK-P10-LABEL: ld_unalign64_uint64_t_float:4069; CHECK-P10: # %bb.0: # %entry4070; CHECK-P10-NEXT: pli r4, 2324071; CHECK-P10-NEXT: pli r5, 35675873294072; CHECK-P10-NEXT: rldimi r5, r4, 32, 04073; CHECK-P10-NEXT: lfsx f0, r3, r54074; CHECK-P10-NEXT: xscvdpuxds f0, f04075; CHECK-P10-NEXT: mffprd r3, f04076; CHECK-P10-NEXT: blr4077;4078; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_float:4079; CHECK-PREP10: # %bb.0: # %entry4080; CHECK-PREP10-NEXT: li r4, 294081; CHECK-PREP10-NEXT: rldic r4, r4, 35, 244082; CHECK-PREP10-NEXT: oris r4, r4, 544374083; CHECK-PREP10-NEXT: ori r4, r4, 40974084; CHECK-PREP10-NEXT: lfsx f0, r3, r44085; CHECK-PREP10-NEXT: xscvdpuxds f0, f04086; CHECK-PREP10-NEXT: mffprd r3, f04087; CHECK-PREP10-NEXT: blr4088entry:4089 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000014090 %0 = load float, ptr %add.ptr, align 44091 %conv = fptoui float %0 to i644092 ret i64 %conv4093}4094 4095; Function Attrs: norecurse nounwind readonly uwtable willreturn4096define dso_local i64 @ld_align64_uint64_t_float(ptr nocapture readonly %ptr) {4097; CHECK-P10-LABEL: ld_align64_uint64_t_float:4098; CHECK-P10: # %bb.0: # %entry4099; CHECK-P10-NEXT: pli r4, 2441406254100; CHECK-P10-NEXT: rldic r4, r4, 12, 244101; CHECK-P10-NEXT: lfsx f0, r3, r44102; CHECK-P10-NEXT: xscvdpuxds f0, f04103; CHECK-P10-NEXT: mffprd r3, f04104; CHECK-P10-NEXT: blr4105;4106; CHECK-PREP10-LABEL: ld_align64_uint64_t_float:4107; CHECK-PREP10: # %bb.0: # %entry4108; CHECK-PREP10-NEXT: lis r4, 37254109; CHECK-PREP10-NEXT: ori r4, r4, 190254110; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244111; CHECK-PREP10-NEXT: lfsx f0, r3, r44112; CHECK-PREP10-NEXT: xscvdpuxds f0, f04113; CHECK-PREP10-NEXT: mffprd r3, f04114; CHECK-PREP10-NEXT: blr4115entry:4116 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004117 %0 = load float, ptr %add.ptr, align 44118 %conv = fptoui float %0 to i644119 ret i64 %conv4120}4121 4122; Function Attrs: norecurse nounwind readonly uwtable willreturn4123define dso_local i64 @ld_reg_uint64_t_float(ptr nocapture readonly %ptr, i64 %off) {4124; CHECK-LABEL: ld_reg_uint64_t_float:4125; CHECK: # %bb.0: # %entry4126; CHECK-NEXT: lfsx f0, r3, r44127; CHECK-NEXT: xscvdpuxds f0, f04128; CHECK-NEXT: mffprd r3, f04129; CHECK-NEXT: blr4130entry:4131 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4132 %0 = load float, ptr %add.ptr, align 44133 %conv = fptoui float %0 to i644134 ret i64 %conv4135}4136 4137; Function Attrs: norecurse nounwind readonly uwtable willreturn4138define dso_local i64 @ld_or_uint64_t_float(i64 %ptr, i8 zeroext %off) {4139; CHECK-LABEL: ld_or_uint64_t_float:4140; CHECK: # %bb.0: # %entry4141; CHECK-NEXT: or r3, r4, r34142; CHECK-NEXT: lfs f0, 0(r3)4143; CHECK-NEXT: xscvdpuxds f0, f04144; CHECK-NEXT: mffprd r3, f04145; CHECK-NEXT: blr4146entry:4147 %conv = zext i8 %off to i644148 %or = or i64 %conv, %ptr4149 %0 = inttoptr i64 %or to ptr4150 %1 = load float, ptr %0, align 44151 %conv1 = fptoui float %1 to i644152 ret i64 %conv14153}4154 4155; Function Attrs: norecurse nounwind readonly uwtable willreturn4156define dso_local i64 @ld_or2_uint64_t_float(i64 %ptr, i8 zeroext %off) {4157; CHECK-LABEL: ld_or2_uint64_t_float:4158; CHECK: # %bb.0: # %entry4159; CHECK-NEXT: rldicr r3, r3, 0, 514160; CHECK-NEXT: lfsx f0, r3, r44161; CHECK-NEXT: xscvdpuxds f0, f04162; CHECK-NEXT: mffprd r3, f04163; CHECK-NEXT: blr4164entry:4165 %and = and i64 %ptr, -40964166 %conv = zext i8 %off to i644167 %or = or i64 %and, %conv4168 %0 = inttoptr i64 %or to ptr4169 %1 = load float, ptr %0, align 44170 %conv1 = fptoui float %1 to i644171 ret i64 %conv14172}4173 4174; Function Attrs: norecurse nounwind readonly uwtable willreturn4175define dso_local i64 @ld_not_disjoint16_uint64_t_float(i64 %ptr) {4176; CHECK-LABEL: ld_not_disjoint16_uint64_t_float:4177; CHECK: # %bb.0: # %entry4178; CHECK-NEXT: ori r3, r3, 64179; CHECK-NEXT: lfs f0, 0(r3)4180; CHECK-NEXT: xscvdpuxds f0, f04181; CHECK-NEXT: mffprd r3, f04182; CHECK-NEXT: blr4183entry:4184 %or = or i64 %ptr, 64185 %0 = inttoptr i64 %or to ptr4186 %1 = load float, ptr %0, align 44187 %conv = fptoui float %1 to i644188 ret i64 %conv4189}4190 4191; Function Attrs: norecurse nounwind readonly uwtable willreturn4192define dso_local i64 @ld_disjoint_unalign16_uint64_t_float(i64 %ptr) {4193; CHECK-P10-LABEL: ld_disjoint_unalign16_uint64_t_float:4194; CHECK-P10: # %bb.0: # %entry4195; CHECK-P10-NEXT: rldicr r3, r3, 0, 514196; CHECK-P10-NEXT: plfs f0, 6(r3), 04197; CHECK-P10-NEXT: xscvdpuxds f0, f04198; CHECK-P10-NEXT: mffprd r3, f04199; CHECK-P10-NEXT: blr4200;4201; CHECK-PREP10-LABEL: ld_disjoint_unalign16_uint64_t_float:4202; CHECK-PREP10: # %bb.0: # %entry4203; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 514204; CHECK-PREP10-NEXT: lfs f0, 6(r3)4205; CHECK-PREP10-NEXT: xscvdpuxds f0, f04206; CHECK-PREP10-NEXT: mffprd r3, f04207; CHECK-PREP10-NEXT: blr4208entry:4209 %and = and i64 %ptr, -40964210 %or = or i64 %and, 64211 %0 = inttoptr i64 %or to ptr4212 %1 = load float, ptr %0, align 44213 %conv = fptoui float %1 to i644214 ret i64 %conv4215}4216 4217; Function Attrs: norecurse nounwind readonly uwtable willreturn4218define dso_local i64 @ld_disjoint_align16_uint64_t_float(i64 %ptr) {4219; CHECK-LABEL: ld_disjoint_align16_uint64_t_float:4220; CHECK: # %bb.0: # %entry4221; CHECK-NEXT: rldicr r3, r3, 0, 514222; CHECK-NEXT: lfs f0, 24(r3)4223; CHECK-NEXT: xscvdpuxds f0, f04224; CHECK-NEXT: mffprd r3, f04225; CHECK-NEXT: blr4226entry:4227 %and = and i64 %ptr, -40964228 %or = or i64 %and, 244229 %0 = inttoptr i64 %or to ptr4230 %1 = load float, ptr %0, align 84231 %conv = fptoui float %1 to i644232 ret i64 %conv4233}4234 4235; Function Attrs: norecurse nounwind readonly uwtable willreturn4236define dso_local i64 @ld_not_disjoint32_uint64_t_float(i64 %ptr) {4237; CHECK-LABEL: ld_not_disjoint32_uint64_t_float:4238; CHECK: # %bb.0: # %entry4239; CHECK-NEXT: ori r3, r3, 344634240; CHECK-NEXT: oris r3, r3, 14241; CHECK-NEXT: lfs f0, 0(r3)4242; CHECK-NEXT: xscvdpuxds f0, f04243; CHECK-NEXT: mffprd r3, f04244; CHECK-NEXT: blr4245entry:4246 %or = or i64 %ptr, 999994247 %0 = inttoptr i64 %or to ptr4248 %1 = load float, ptr %0, align 44249 %conv = fptoui float %1 to i644250 ret i64 %conv4251}4252 4253; Function Attrs: norecurse nounwind readonly uwtable willreturn4254define dso_local i64 @ld_disjoint_unalign32_uint64_t_float(i64 %ptr) {4255; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_float:4256; CHECK-P10: # %bb.0: # %entry4257; CHECK-P10-NEXT: rldicr r3, r3, 0, 434258; CHECK-P10-NEXT: plfs f0, 99999(r3), 04259; CHECK-P10-NEXT: xscvdpuxds f0, f04260; CHECK-P10-NEXT: mffprd r3, f04261; CHECK-P10-NEXT: blr4262;4263; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_float:4264; CHECK-PREP10: # %bb.0: # %entry4265; CHECK-PREP10-NEXT: lis r4, 14266; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 434267; CHECK-PREP10-NEXT: ori r4, r4, 344634268; CHECK-PREP10-NEXT: lfsx f0, r3, r44269; CHECK-PREP10-NEXT: xscvdpuxds f0, f04270; CHECK-PREP10-NEXT: mffprd r3, f04271; CHECK-PREP10-NEXT: blr4272entry:4273 %and = and i64 %ptr, -10485764274 %or = or i64 %and, 999994275 %0 = inttoptr i64 %or to ptr4276 %1 = load float, ptr %0, align 44277 %conv = fptoui float %1 to i644278 ret i64 %conv4279}4280 4281; Function Attrs: norecurse nounwind readonly uwtable willreturn4282define dso_local i64 @ld_disjoint_align32_uint64_t_float(i64 %ptr) {4283; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_float:4284; CHECK-P10: # %bb.0: # %entry4285; CHECK-P10-NEXT: lis r4, -152644286; CHECK-P10-NEXT: and r3, r3, r44287; CHECK-P10-NEXT: plfs f0, 999990000(r3), 04288; CHECK-P10-NEXT: xscvdpuxds f0, f04289; CHECK-P10-NEXT: mffprd r3, f04290; CHECK-P10-NEXT: blr4291;4292; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_float:4293; CHECK-PREP10: # %bb.0: # %entry4294; CHECK-PREP10-NEXT: lis r4, -152644295; CHECK-PREP10-NEXT: and r3, r3, r44296; CHECK-PREP10-NEXT: lis r4, 152584297; CHECK-PREP10-NEXT: ori r4, r4, 417124298; CHECK-PREP10-NEXT: lfsx f0, r3, r44299; CHECK-PREP10-NEXT: xscvdpuxds f0, f04300; CHECK-PREP10-NEXT: mffprd r3, f04301; CHECK-PREP10-NEXT: blr4302entry:4303 %and = and i64 %ptr, -10003415044304 %or = or i64 %and, 9999900004305 %0 = inttoptr i64 %or to ptr4306 %1 = load float, ptr %0, align 164307 %conv = fptoui float %1 to i644308 ret i64 %conv4309}4310 4311; Function Attrs: norecurse nounwind readonly uwtable willreturn4312define dso_local i64 @ld_not_disjoint64_uint64_t_float(i64 %ptr) {4313; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_float:4314; CHECK-P10: # %bb.0: # %entry4315; CHECK-P10-NEXT: pli r4, 2324316; CHECK-P10-NEXT: pli r5, 35675873294317; CHECK-P10-NEXT: rldimi r5, r4, 32, 04318; CHECK-P10-NEXT: or r3, r3, r54319; CHECK-P10-NEXT: lfs f0, 0(r3)4320; CHECK-P10-NEXT: xscvdpuxds f0, f04321; CHECK-P10-NEXT: mffprd r3, f04322; CHECK-P10-NEXT: blr4323;4324; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_float:4325; CHECK-PREP10: # %bb.0: # %entry4326; CHECK-PREP10-NEXT: li r4, 294327; CHECK-PREP10-NEXT: rldic r4, r4, 35, 244328; CHECK-PREP10-NEXT: oris r4, r4, 544374329; CHECK-PREP10-NEXT: ori r4, r4, 40974330; CHECK-PREP10-NEXT: or r3, r3, r44331; CHECK-PREP10-NEXT: lfs f0, 0(r3)4332; CHECK-PREP10-NEXT: xscvdpuxds f0, f04333; CHECK-PREP10-NEXT: mffprd r3, f04334; CHECK-PREP10-NEXT: blr4335entry:4336 %or = or i64 %ptr, 10000000000014337 %0 = inttoptr i64 %or to ptr4338 %1 = load float, ptr %0, align 44339 %conv = fptoui float %1 to i644340 ret i64 %conv4341}4342 4343; Function Attrs: norecurse nounwind readonly uwtable willreturn4344define dso_local i64 @ld_disjoint_unalign64_uint64_t_float(i64 %ptr) {4345; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_float:4346; CHECK-P10: # %bb.0: # %entry4347; CHECK-P10-NEXT: pli r4, 2324348; CHECK-P10-NEXT: pli r5, 35675873294349; CHECK-P10-NEXT: rldicr r3, r3, 0, 234350; CHECK-P10-NEXT: rldimi r5, r4, 32, 04351; CHECK-P10-NEXT: lfsx f0, r3, r54352; CHECK-P10-NEXT: xscvdpuxds f0, f04353; CHECK-P10-NEXT: mffprd r3, f04354; CHECK-P10-NEXT: blr4355;4356; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_float:4357; CHECK-PREP10: # %bb.0: # %entry4358; CHECK-PREP10-NEXT: li r4, 294359; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234360; CHECK-PREP10-NEXT: rldic r4, r4, 35, 244361; CHECK-PREP10-NEXT: oris r4, r4, 544374362; CHECK-PREP10-NEXT: ori r4, r4, 40974363; CHECK-PREP10-NEXT: lfsx f0, r3, r44364; CHECK-PREP10-NEXT: xscvdpuxds f0, f04365; CHECK-PREP10-NEXT: mffprd r3, f04366; CHECK-PREP10-NEXT: blr4367entry:4368 %and = and i64 %ptr, -10995116277764369 %or = or i64 %and, 10000000000014370 %0 = inttoptr i64 %or to ptr4371 %1 = load float, ptr %0, align 44372 %conv = fptoui float %1 to i644373 ret i64 %conv4374}4375 4376; Function Attrs: norecurse nounwind readonly uwtable willreturn4377define dso_local i64 @ld_disjoint_align64_uint64_t_float(i64 %ptr) {4378; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_float:4379; CHECK-P10: # %bb.0: # %entry4380; CHECK-P10-NEXT: pli r4, 2441406254381; CHECK-P10-NEXT: rldicr r3, r3, 0, 234382; CHECK-P10-NEXT: rldic r4, r4, 12, 244383; CHECK-P10-NEXT: lfsx f0, r3, r44384; CHECK-P10-NEXT: xscvdpuxds f0, f04385; CHECK-P10-NEXT: mffprd r3, f04386; CHECK-P10-NEXT: blr4387;4388; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_float:4389; CHECK-PREP10: # %bb.0: # %entry4390; CHECK-PREP10-NEXT: lis r4, 37254391; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234392; CHECK-PREP10-NEXT: ori r4, r4, 190254393; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244394; CHECK-PREP10-NEXT: lfsx f0, r3, r44395; CHECK-PREP10-NEXT: xscvdpuxds f0, f04396; CHECK-PREP10-NEXT: mffprd r3, f04397; CHECK-PREP10-NEXT: blr4398entry:4399 %and = and i64 %ptr, -10995116277764400 %or = or i64 %and, 10000000000004401 %0 = inttoptr i64 %or to ptr4402 %1 = load float, ptr %0, align 40964403 %conv = fptoui float %1 to i644404 ret i64 %conv4405}4406 4407; Function Attrs: norecurse nounwind readonly uwtable willreturn4408define dso_local i64 @ld_cst_unalign16_uint64_t_float() {4409; CHECK-P10-LABEL: ld_cst_unalign16_uint64_t_float:4410; CHECK-P10: # %bb.0: # %entry4411; CHECK-P10-NEXT: li r3, 2554412; CHECK-P10-NEXT: lfs f0, 0(r3)4413; CHECK-P10-NEXT: xscvdpuxds f0, f04414; CHECK-P10-NEXT: mffprd r3, f04415; CHECK-P10-NEXT: blr4416;4417; CHECK-P9-LABEL: ld_cst_unalign16_uint64_t_float:4418; CHECK-P9: # %bb.0: # %entry4419; CHECK-P9-NEXT: li r3, 2554420; CHECK-P9-NEXT: lfs f0, 0(r3)4421; CHECK-P9-NEXT: xscvdpuxds f0, f04422; CHECK-P9-NEXT: mffprd r3, f04423; CHECK-P9-NEXT: blr4424;4425; CHECK-P8-LABEL: ld_cst_unalign16_uint64_t_float:4426; CHECK-P8: # %bb.0: # %entry4427; CHECK-P8-NEXT: lfs f0, 255(0)4428; CHECK-P8-NEXT: xscvdpuxds f0, f04429; CHECK-P8-NEXT: mffprd r3, f04430; CHECK-P8-NEXT: blr4431entry:4432 %0 = load float, ptr inttoptr (i64 255 to ptr), align 44433 %conv = fptoui float %0 to i644434 ret i64 %conv4435}4436 4437; Function Attrs: norecurse nounwind readonly uwtable willreturn4438define dso_local i64 @ld_cst_align16_uint64_t_float() {4439; CHECK-LABEL: ld_cst_align16_uint64_t_float:4440; CHECK: # %bb.0: # %entry4441; CHECK-NEXT: lfs f0, 4080(0)4442; CHECK-NEXT: xscvdpuxds f0, f04443; CHECK-NEXT: mffprd r3, f04444; CHECK-NEXT: blr4445entry:4446 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 164447 %conv = fptoui float %0 to i644448 ret i64 %conv4449}4450 4451; Function Attrs: norecurse nounwind readonly uwtable willreturn4452define dso_local i64 @ld_cst_unalign32_uint64_t_float() {4453; CHECK-P10-LABEL: ld_cst_unalign32_uint64_t_float:4454; CHECK-P10: # %bb.0: # %entry4455; CHECK-P10-NEXT: pli r3, 999994456; CHECK-P10-NEXT: lfs f0, 0(r3)4457; CHECK-P10-NEXT: xscvdpuxds f0, f04458; CHECK-P10-NEXT: mffprd r3, f04459; CHECK-P10-NEXT: blr4460;4461; CHECK-P9-LABEL: ld_cst_unalign32_uint64_t_float:4462; CHECK-P9: # %bb.0: # %entry4463; CHECK-P9-NEXT: lis r3, 14464; CHECK-P9-NEXT: ori r3, r3, 344634465; CHECK-P9-NEXT: lfs f0, 0(r3)4466; CHECK-P9-NEXT: xscvdpuxds f0, f04467; CHECK-P9-NEXT: mffprd r3, f04468; CHECK-P9-NEXT: blr4469;4470; CHECK-P8-LABEL: ld_cst_unalign32_uint64_t_float:4471; CHECK-P8: # %bb.0: # %entry4472; CHECK-P8-NEXT: lis r3, 24473; CHECK-P8-NEXT: lfs f0, -31073(r3)4474; CHECK-P8-NEXT: xscvdpuxds f0, f04475; CHECK-P8-NEXT: mffprd r3, f04476; CHECK-P8-NEXT: blr4477entry:4478 %0 = load float, ptr inttoptr (i64 99999 to ptr), align 44479 %conv = fptoui float %0 to i644480 ret i64 %conv4481}4482 4483; Function Attrs: norecurse nounwind readonly uwtable willreturn4484define dso_local i64 @ld_cst_align32_uint64_t_float() {4485; CHECK-LABEL: ld_cst_align32_uint64_t_float:4486; CHECK: # %bb.0: # %entry4487; CHECK-NEXT: lis r3, 1534488; CHECK-NEXT: lfs f0, -27108(r3)4489; CHECK-NEXT: xscvdpuxds f0, f04490; CHECK-NEXT: mffprd r3, f04491; CHECK-NEXT: blr4492entry:4493 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 44494 %conv = fptoui float %0 to i644495 ret i64 %conv4496}4497 4498; Function Attrs: norecurse nounwind readonly uwtable willreturn4499define dso_local i64 @ld_cst_unalign64_uint64_t_float() {4500; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_float:4501; CHECK-P10: # %bb.0: # %entry4502; CHECK-P10-NEXT: pli r3, 2324503; CHECK-P10-NEXT: pli r4, 35675873294504; CHECK-P10-NEXT: rldimi r4, r3, 32, 04505; CHECK-P10-NEXT: lfs f0, 0(r4)4506; CHECK-P10-NEXT: xscvdpuxds f0, f04507; CHECK-P10-NEXT: mffprd r3, f04508; CHECK-P10-NEXT: blr4509;4510; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_float:4511; CHECK-PREP10: # %bb.0: # %entry4512; CHECK-PREP10-NEXT: li r3, 294513; CHECK-PREP10-NEXT: rldic r3, r3, 35, 244514; CHECK-PREP10-NEXT: oris r3, r3, 544374515; CHECK-PREP10-NEXT: ori r3, r3, 40974516; CHECK-PREP10-NEXT: lfs f0, 0(r3)4517; CHECK-PREP10-NEXT: xscvdpuxds f0, f04518; CHECK-PREP10-NEXT: mffprd r3, f04519; CHECK-PREP10-NEXT: blr4520entry:4521 %0 = load float, ptr inttoptr (i64 1000000000001 to ptr), align 44522 %conv = fptoui float %0 to i644523 ret i64 %conv4524}4525 4526; Function Attrs: norecurse nounwind readonly uwtable willreturn4527define dso_local i64 @ld_cst_align64_uint64_t_float() {4528; CHECK-P10-LABEL: ld_cst_align64_uint64_t_float:4529; CHECK-P10: # %bb.0: # %entry4530; CHECK-P10-NEXT: pli r3, 2441406254531; CHECK-P10-NEXT: rldic r3, r3, 12, 244532; CHECK-P10-NEXT: lfs f0, 0(r3)4533; CHECK-P10-NEXT: xscvdpuxds f0, f04534; CHECK-P10-NEXT: mffprd r3, f04535; CHECK-P10-NEXT: blr4536;4537; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_float:4538; CHECK-PREP10: # %bb.0: # %entry4539; CHECK-PREP10-NEXT: lis r3, 37254540; CHECK-PREP10-NEXT: ori r3, r3, 190254541; CHECK-PREP10-NEXT: rldic r3, r3, 12, 244542; CHECK-PREP10-NEXT: lfs f0, 0(r3)4543; CHECK-PREP10-NEXT: xscvdpuxds f0, f04544; CHECK-PREP10-NEXT: mffprd r3, f04545; CHECK-PREP10-NEXT: blr4546entry:4547 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 40964548 %conv = fptoui float %0 to i644549 ret i64 %conv4550}4551 4552; Function Attrs: norecurse nounwind readonly uwtable willreturn4553define dso_local i64 @ld_0_uint64_t_double(i64 %ptr) {4554; CHECK-LABEL: ld_0_uint64_t_double:4555; CHECK: # %bb.0: # %entry4556; CHECK-NEXT: lfd f0, 0(r3)4557; CHECK-NEXT: xscvdpuxds f0, f04558; CHECK-NEXT: mffprd r3, f04559; CHECK-NEXT: blr4560entry:4561 %0 = inttoptr i64 %ptr to ptr4562 %1 = load double, ptr %0, align 84563 %conv = fptoui double %1 to i644564 ret i64 %conv4565}4566 4567; Function Attrs: norecurse nounwind readonly uwtable willreturn4568define dso_local i64 @ld_unalign16_uint64_t_double(ptr nocapture readonly %ptr) {4569; CHECK-P10-LABEL: ld_unalign16_uint64_t_double:4570; CHECK-P10: # %bb.0: # %entry4571; CHECK-P10-NEXT: plfd f0, 1(r3), 04572; CHECK-P10-NEXT: xscvdpuxds f0, f04573; CHECK-P10-NEXT: mffprd r3, f04574; CHECK-P10-NEXT: blr4575;4576; CHECK-PREP10-LABEL: ld_unalign16_uint64_t_double:4577; CHECK-PREP10: # %bb.0: # %entry4578; CHECK-PREP10-NEXT: lfd f0, 1(r3)4579; CHECK-PREP10-NEXT: xscvdpuxds f0, f04580; CHECK-PREP10-NEXT: mffprd r3, f04581; CHECK-PREP10-NEXT: blr4582entry:4583 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 14584 %0 = load double, ptr %add.ptr, align 84585 %conv = fptoui double %0 to i644586 ret i64 %conv4587}4588 4589; Function Attrs: norecurse nounwind readonly uwtable willreturn4590define dso_local i64 @ld_align16_uint64_t_double(ptr nocapture readonly %ptr) {4591; CHECK-LABEL: ld_align16_uint64_t_double:4592; CHECK: # %bb.0: # %entry4593; CHECK-NEXT: lfd f0, 8(r3)4594; CHECK-NEXT: xscvdpuxds f0, f04595; CHECK-NEXT: mffprd r3, f04596; CHECK-NEXT: blr4597entry:4598 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84599 %0 = load double, ptr %add.ptr, align 84600 %conv = fptoui double %0 to i644601 ret i64 %conv4602}4603 4604; Function Attrs: norecurse nounwind readonly uwtable willreturn4605define dso_local i64 @ld_unalign32_uint64_t_double(ptr nocapture readonly %ptr) {4606; CHECK-P10-LABEL: ld_unalign32_uint64_t_double:4607; CHECK-P10: # %bb.0: # %entry4608; CHECK-P10-NEXT: plfd f0, 99999(r3), 04609; CHECK-P10-NEXT: xscvdpuxds f0, f04610; CHECK-P10-NEXT: mffprd r3, f04611; CHECK-P10-NEXT: blr4612;4613; CHECK-PREP10-LABEL: ld_unalign32_uint64_t_double:4614; CHECK-PREP10: # %bb.0: # %entry4615; CHECK-PREP10-NEXT: lis r4, 14616; CHECK-PREP10-NEXT: ori r4, r4, 344634617; CHECK-PREP10-NEXT: lfdx f0, r3, r44618; CHECK-PREP10-NEXT: xscvdpuxds f0, f04619; CHECK-PREP10-NEXT: mffprd r3, f04620; CHECK-PREP10-NEXT: blr4621entry:4622 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999994623 %0 = load double, ptr %add.ptr, align 84624 %conv = fptoui double %0 to i644625 ret i64 %conv4626}4627 4628; Function Attrs: norecurse nounwind readonly uwtable willreturn4629define dso_local i64 @ld_align32_uint64_t_double(ptr nocapture readonly %ptr) {4630; CHECK-P10-LABEL: ld_align32_uint64_t_double:4631; CHECK-P10: # %bb.0: # %entry4632; CHECK-P10-NEXT: plfd f0, 99999000(r3), 04633; CHECK-P10-NEXT: xscvdpuxds f0, f04634; CHECK-P10-NEXT: mffprd r3, f04635; CHECK-P10-NEXT: blr4636;4637; CHECK-PREP10-LABEL: ld_align32_uint64_t_double:4638; CHECK-PREP10: # %bb.0: # %entry4639; CHECK-PREP10-NEXT: lis r4, 15254640; CHECK-PREP10-NEXT: ori r4, r4, 566004641; CHECK-PREP10-NEXT: lfdx f0, r3, r44642; CHECK-PREP10-NEXT: xscvdpuxds f0, f04643; CHECK-PREP10-NEXT: mffprd r3, f04644; CHECK-PREP10-NEXT: blr4645entry:4646 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004647 %0 = load double, ptr %add.ptr, align 84648 %conv = fptoui double %0 to i644649 ret i64 %conv4650}4651 4652; Function Attrs: norecurse nounwind readonly uwtable willreturn4653define dso_local i64 @ld_unalign64_uint64_t_double(ptr nocapture readonly %ptr) {4654; CHECK-P10-LABEL: ld_unalign64_uint64_t_double:4655; CHECK-P10: # %bb.0: # %entry4656; CHECK-P10-NEXT: pli r4, 2324657; CHECK-P10-NEXT: pli r5, 35675873294658; CHECK-P10-NEXT: rldimi r5, r4, 32, 04659; CHECK-P10-NEXT: lfdx f0, r3, r54660; CHECK-P10-NEXT: xscvdpuxds f0, f04661; CHECK-P10-NEXT: mffprd r3, f04662; CHECK-P10-NEXT: blr4663;4664; CHECK-PREP10-LABEL: ld_unalign64_uint64_t_double:4665; CHECK-PREP10: # %bb.0: # %entry4666; CHECK-PREP10-NEXT: li r4, 294667; CHECK-PREP10-NEXT: rldic r4, r4, 35, 244668; CHECK-PREP10-NEXT: oris r4, r4, 544374669; CHECK-PREP10-NEXT: ori r4, r4, 40974670; CHECK-PREP10-NEXT: lfdx f0, r3, r44671; CHECK-PREP10-NEXT: xscvdpuxds f0, f04672; CHECK-PREP10-NEXT: mffprd r3, f04673; CHECK-PREP10-NEXT: blr4674entry:4675 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000014676 %0 = load double, ptr %add.ptr, align 84677 %conv = fptoui double %0 to i644678 ret i64 %conv4679}4680 4681; Function Attrs: norecurse nounwind readonly uwtable willreturn4682define dso_local i64 @ld_align64_uint64_t_double(ptr nocapture readonly %ptr) {4683; CHECK-P10-LABEL: ld_align64_uint64_t_double:4684; CHECK-P10: # %bb.0: # %entry4685; CHECK-P10-NEXT: pli r4, 2441406254686; CHECK-P10-NEXT: rldic r4, r4, 12, 244687; CHECK-P10-NEXT: lfdx f0, r3, r44688; CHECK-P10-NEXT: xscvdpuxds f0, f04689; CHECK-P10-NEXT: mffprd r3, f04690; CHECK-P10-NEXT: blr4691;4692; CHECK-PREP10-LABEL: ld_align64_uint64_t_double:4693; CHECK-PREP10: # %bb.0: # %entry4694; CHECK-PREP10-NEXT: lis r4, 37254695; CHECK-PREP10-NEXT: ori r4, r4, 190254696; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244697; CHECK-PREP10-NEXT: lfdx f0, r3, r44698; CHECK-PREP10-NEXT: xscvdpuxds f0, f04699; CHECK-PREP10-NEXT: mffprd r3, f04700; CHECK-PREP10-NEXT: blr4701entry:4702 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004703 %0 = load double, ptr %add.ptr, align 84704 %conv = fptoui double %0 to i644705 ret i64 %conv4706}4707 4708; Function Attrs: norecurse nounwind readonly uwtable willreturn4709define dso_local i64 @ld_reg_uint64_t_double(ptr nocapture readonly %ptr, i64 %off) {4710; CHECK-LABEL: ld_reg_uint64_t_double:4711; CHECK: # %bb.0: # %entry4712; CHECK-NEXT: lfdx f0, r3, r44713; CHECK-NEXT: xscvdpuxds f0, f04714; CHECK-NEXT: mffprd r3, f04715; CHECK-NEXT: blr4716entry:4717 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4718 %0 = load double, ptr %add.ptr, align 84719 %conv = fptoui double %0 to i644720 ret i64 %conv4721}4722 4723; Function Attrs: norecurse nounwind readonly uwtable willreturn4724define dso_local i64 @ld_or_uint64_t_double(i64 %ptr, i8 zeroext %off) {4725; CHECK-LABEL: ld_or_uint64_t_double:4726; CHECK: # %bb.0: # %entry4727; CHECK-NEXT: or r3, r4, r34728; CHECK-NEXT: lfd f0, 0(r3)4729; CHECK-NEXT: xscvdpuxds f0, f04730; CHECK-NEXT: mffprd r3, f04731; CHECK-NEXT: blr4732entry:4733 %conv = zext i8 %off to i644734 %or = or i64 %conv, %ptr4735 %0 = inttoptr i64 %or to ptr4736 %1 = load double, ptr %0, align 84737 %conv1 = fptoui double %1 to i644738 ret i64 %conv14739}4740 4741; Function Attrs: norecurse nounwind readonly uwtable willreturn4742define dso_local i64 @ld_or2_uint64_t_double(i64 %ptr, i8 zeroext %off) {4743; CHECK-LABEL: ld_or2_uint64_t_double:4744; CHECK: # %bb.0: # %entry4745; CHECK-NEXT: rldicr r3, r3, 0, 514746; CHECK-NEXT: lfdx f0, r3, r44747; CHECK-NEXT: xscvdpuxds f0, f04748; CHECK-NEXT: mffprd r3, f04749; CHECK-NEXT: blr4750entry:4751 %and = and i64 %ptr, -40964752 %conv = zext i8 %off to i644753 %or = or i64 %and, %conv4754 %0 = inttoptr i64 %or to ptr4755 %1 = load double, ptr %0, align 84756 %conv1 = fptoui double %1 to i644757 ret i64 %conv14758}4759 4760; Function Attrs: norecurse nounwind readonly uwtable willreturn4761define dso_local i64 @ld_not_disjoint16_uint64_t_double(i64 %ptr) {4762; CHECK-LABEL: ld_not_disjoint16_uint64_t_double:4763; CHECK: # %bb.0: # %entry4764; CHECK-NEXT: ori r3, r3, 64765; CHECK-NEXT: lfd f0, 0(r3)4766; CHECK-NEXT: xscvdpuxds f0, f04767; CHECK-NEXT: mffprd r3, f04768; CHECK-NEXT: blr4769entry:4770 %or = or i64 %ptr, 64771 %0 = inttoptr i64 %or to ptr4772 %1 = load double, ptr %0, align 84773 %conv = fptoui double %1 to i644774 ret i64 %conv4775}4776 4777; Function Attrs: norecurse nounwind readonly uwtable willreturn4778define dso_local i64 @ld_disjoint_unalign16_uint64_t_double(i64 %ptr) {4779; CHECK-P10-LABEL: ld_disjoint_unalign16_uint64_t_double:4780; CHECK-P10: # %bb.0: # %entry4781; CHECK-P10-NEXT: rldicr r3, r3, 0, 514782; CHECK-P10-NEXT: plfd f0, 6(r3), 04783; CHECK-P10-NEXT: xscvdpuxds f0, f04784; CHECK-P10-NEXT: mffprd r3, f04785; CHECK-P10-NEXT: blr4786;4787; CHECK-PREP10-LABEL: ld_disjoint_unalign16_uint64_t_double:4788; CHECK-PREP10: # %bb.0: # %entry4789; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 514790; CHECK-PREP10-NEXT: lfd f0, 6(r3)4791; CHECK-PREP10-NEXT: xscvdpuxds f0, f04792; CHECK-PREP10-NEXT: mffprd r3, f04793; CHECK-PREP10-NEXT: blr4794entry:4795 %and = and i64 %ptr, -40964796 %or = or i64 %and, 64797 %0 = inttoptr i64 %or to ptr4798 %1 = load double, ptr %0, align 84799 %conv = fptoui double %1 to i644800 ret i64 %conv4801}4802 4803; Function Attrs: norecurse nounwind readonly uwtable willreturn4804define dso_local i64 @ld_disjoint_align16_uint64_t_double(i64 %ptr) {4805; CHECK-LABEL: ld_disjoint_align16_uint64_t_double:4806; CHECK: # %bb.0: # %entry4807; CHECK-NEXT: rldicr r3, r3, 0, 514808; CHECK-NEXT: lfd f0, 24(r3)4809; CHECK-NEXT: xscvdpuxds f0, f04810; CHECK-NEXT: mffprd r3, f04811; CHECK-NEXT: blr4812entry:4813 %and = and i64 %ptr, -40964814 %or = or i64 %and, 244815 %0 = inttoptr i64 %or to ptr4816 %1 = load double, ptr %0, align 84817 %conv = fptoui double %1 to i644818 ret i64 %conv4819}4820 4821; Function Attrs: norecurse nounwind readonly uwtable willreturn4822define dso_local i64 @ld_not_disjoint32_uint64_t_double(i64 %ptr) {4823; CHECK-LABEL: ld_not_disjoint32_uint64_t_double:4824; CHECK: # %bb.0: # %entry4825; CHECK-NEXT: ori r3, r3, 344634826; CHECK-NEXT: oris r3, r3, 14827; CHECK-NEXT: lfd f0, 0(r3)4828; CHECK-NEXT: xscvdpuxds f0, f04829; CHECK-NEXT: mffprd r3, f04830; CHECK-NEXT: blr4831entry:4832 %or = or i64 %ptr, 999994833 %0 = inttoptr i64 %or to ptr4834 %1 = load double, ptr %0, align 84835 %conv = fptoui double %1 to i644836 ret i64 %conv4837}4838 4839; Function Attrs: norecurse nounwind readonly uwtable willreturn4840define dso_local i64 @ld_disjoint_unalign32_uint64_t_double(i64 %ptr) {4841; CHECK-P10-LABEL: ld_disjoint_unalign32_uint64_t_double:4842; CHECK-P10: # %bb.0: # %entry4843; CHECK-P10-NEXT: rldicr r3, r3, 0, 434844; CHECK-P10-NEXT: plfd f0, 99999(r3), 04845; CHECK-P10-NEXT: xscvdpuxds f0, f04846; CHECK-P10-NEXT: mffprd r3, f04847; CHECK-P10-NEXT: blr4848;4849; CHECK-PREP10-LABEL: ld_disjoint_unalign32_uint64_t_double:4850; CHECK-PREP10: # %bb.0: # %entry4851; CHECK-PREP10-NEXT: lis r4, 14852; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 434853; CHECK-PREP10-NEXT: ori r4, r4, 344634854; CHECK-PREP10-NEXT: lfdx f0, r3, r44855; CHECK-PREP10-NEXT: xscvdpuxds f0, f04856; CHECK-PREP10-NEXT: mffprd r3, f04857; CHECK-PREP10-NEXT: blr4858entry:4859 %and = and i64 %ptr, -10485764860 %or = or i64 %and, 999994861 %0 = inttoptr i64 %or to ptr4862 %1 = load double, ptr %0, align 84863 %conv = fptoui double %1 to i644864 ret i64 %conv4865}4866 4867; Function Attrs: norecurse nounwind readonly uwtable willreturn4868define dso_local i64 @ld_disjoint_align32_uint64_t_double(i64 %ptr) {4869; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_double:4870; CHECK-P10: # %bb.0: # %entry4871; CHECK-P10-NEXT: lis r4, -152644872; CHECK-P10-NEXT: and r3, r3, r44873; CHECK-P10-NEXT: plfd f0, 999990000(r3), 04874; CHECK-P10-NEXT: xscvdpuxds f0, f04875; CHECK-P10-NEXT: mffprd r3, f04876; CHECK-P10-NEXT: blr4877;4878; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_double:4879; CHECK-PREP10: # %bb.0: # %entry4880; CHECK-PREP10-NEXT: lis r4, -152644881; CHECK-PREP10-NEXT: and r3, r3, r44882; CHECK-PREP10-NEXT: lis r4, 152584883; CHECK-PREP10-NEXT: ori r4, r4, 417124884; CHECK-PREP10-NEXT: lfdx f0, r3, r44885; CHECK-PREP10-NEXT: xscvdpuxds f0, f04886; CHECK-PREP10-NEXT: mffprd r3, f04887; CHECK-PREP10-NEXT: blr4888entry:4889 %and = and i64 %ptr, -10003415044890 %or = or i64 %and, 9999900004891 %0 = inttoptr i64 %or to ptr4892 %1 = load double, ptr %0, align 164893 %conv = fptoui double %1 to i644894 ret i64 %conv4895}4896 4897; Function Attrs: norecurse nounwind readonly uwtable willreturn4898define dso_local i64 @ld_not_disjoint64_uint64_t_double(i64 %ptr) {4899; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_double:4900; CHECK-P10: # %bb.0: # %entry4901; CHECK-P10-NEXT: pli r4, 2324902; CHECK-P10-NEXT: pli r5, 35675873294903; CHECK-P10-NEXT: rldimi r5, r4, 32, 04904; CHECK-P10-NEXT: or r3, r3, r54905; CHECK-P10-NEXT: lfd f0, 0(r3)4906; CHECK-P10-NEXT: xscvdpuxds f0, f04907; CHECK-P10-NEXT: mffprd r3, f04908; CHECK-P10-NEXT: blr4909;4910; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_double:4911; CHECK-PREP10: # %bb.0: # %entry4912; CHECK-PREP10-NEXT: li r4, 294913; CHECK-PREP10-NEXT: rldic r4, r4, 35, 244914; CHECK-PREP10-NEXT: oris r4, r4, 544374915; CHECK-PREP10-NEXT: ori r4, r4, 40974916; CHECK-PREP10-NEXT: or r3, r3, r44917; CHECK-PREP10-NEXT: lfd f0, 0(r3)4918; CHECK-PREP10-NEXT: xscvdpuxds f0, f04919; CHECK-PREP10-NEXT: mffprd r3, f04920; CHECK-PREP10-NEXT: blr4921entry:4922 %or = or i64 %ptr, 10000000000014923 %0 = inttoptr i64 %or to ptr4924 %1 = load double, ptr %0, align 84925 %conv = fptoui double %1 to i644926 ret i64 %conv4927}4928 4929; Function Attrs: norecurse nounwind readonly uwtable willreturn4930define dso_local i64 @ld_disjoint_unalign64_uint64_t_double(i64 %ptr) {4931; CHECK-P10-LABEL: ld_disjoint_unalign64_uint64_t_double:4932; CHECK-P10: # %bb.0: # %entry4933; CHECK-P10-NEXT: pli r4, 2324934; CHECK-P10-NEXT: pli r5, 35675873294935; CHECK-P10-NEXT: rldicr r3, r3, 0, 234936; CHECK-P10-NEXT: rldimi r5, r4, 32, 04937; CHECK-P10-NEXT: lfdx f0, r3, r54938; CHECK-P10-NEXT: xscvdpuxds f0, f04939; CHECK-P10-NEXT: mffprd r3, f04940; CHECK-P10-NEXT: blr4941;4942; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint64_t_double:4943; CHECK-PREP10: # %bb.0: # %entry4944; CHECK-PREP10-NEXT: li r4, 294945; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234946; CHECK-PREP10-NEXT: rldic r4, r4, 35, 244947; CHECK-PREP10-NEXT: oris r4, r4, 544374948; CHECK-PREP10-NEXT: ori r4, r4, 40974949; CHECK-PREP10-NEXT: lfdx f0, r3, r44950; CHECK-PREP10-NEXT: xscvdpuxds f0, f04951; CHECK-PREP10-NEXT: mffprd r3, f04952; CHECK-PREP10-NEXT: blr4953entry:4954 %and = and i64 %ptr, -10995116277764955 %or = or i64 %and, 10000000000014956 %0 = inttoptr i64 %or to ptr4957 %1 = load double, ptr %0, align 84958 %conv = fptoui double %1 to i644959 ret i64 %conv4960}4961 4962; Function Attrs: norecurse nounwind readonly uwtable willreturn4963define dso_local i64 @ld_disjoint_align64_uint64_t_double(i64 %ptr) {4964; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_double:4965; CHECK-P10: # %bb.0: # %entry4966; CHECK-P10-NEXT: pli r4, 2441406254967; CHECK-P10-NEXT: rldicr r3, r3, 0, 234968; CHECK-P10-NEXT: rldic r4, r4, 12, 244969; CHECK-P10-NEXT: lfdx f0, r3, r44970; CHECK-P10-NEXT: xscvdpuxds f0, f04971; CHECK-P10-NEXT: mffprd r3, f04972; CHECK-P10-NEXT: blr4973;4974; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_double:4975; CHECK-PREP10: # %bb.0: # %entry4976; CHECK-PREP10-NEXT: lis r4, 37254977; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234978; CHECK-PREP10-NEXT: ori r4, r4, 190254979; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244980; CHECK-PREP10-NEXT: lfdx f0, r3, r44981; CHECK-PREP10-NEXT: xscvdpuxds f0, f04982; CHECK-PREP10-NEXT: mffprd r3, f04983; CHECK-PREP10-NEXT: blr4984entry:4985 %and = and i64 %ptr, -10995116277764986 %or = or i64 %and, 10000000000004987 %0 = inttoptr i64 %or to ptr4988 %1 = load double, ptr %0, align 40964989 %conv = fptoui double %1 to i644990 ret i64 %conv4991}4992 4993; Function Attrs: norecurse nounwind readonly uwtable willreturn4994define dso_local i64 @ld_cst_unalign16_uint64_t_double() {4995; CHECK-P10-LABEL: ld_cst_unalign16_uint64_t_double:4996; CHECK-P10: # %bb.0: # %entry4997; CHECK-P10-NEXT: li r3, 2554998; CHECK-P10-NEXT: lfd f0, 0(r3)4999; CHECK-P10-NEXT: xscvdpuxds f0, f05000; CHECK-P10-NEXT: mffprd r3, f05001; CHECK-P10-NEXT: blr5002;5003; CHECK-P9-LABEL: ld_cst_unalign16_uint64_t_double:5004; CHECK-P9: # %bb.0: # %entry5005; CHECK-P9-NEXT: li r3, 2555006; CHECK-P9-NEXT: lfd f0, 0(r3)5007; CHECK-P9-NEXT: xscvdpuxds f0, f05008; CHECK-P9-NEXT: mffprd r3, f05009; CHECK-P9-NEXT: blr5010;5011; CHECK-P8-LABEL: ld_cst_unalign16_uint64_t_double:5012; CHECK-P8: # %bb.0: # %entry5013; CHECK-P8-NEXT: lfd f0, 255(0)5014; CHECK-P8-NEXT: xscvdpuxds f0, f05015; CHECK-P8-NEXT: mffprd r3, f05016; CHECK-P8-NEXT: blr5017entry:5018 %0 = load double, ptr inttoptr (i64 255 to ptr), align 85019 %conv = fptoui double %0 to i645020 ret i64 %conv5021}5022 5023; Function Attrs: norecurse nounwind readonly uwtable willreturn5024define dso_local i64 @ld_cst_align16_uint64_t_double() {5025; CHECK-LABEL: ld_cst_align16_uint64_t_double:5026; CHECK: # %bb.0: # %entry5027; CHECK-NEXT: lfd f0, 4080(0)5028; CHECK-NEXT: xscvdpuxds f0, f05029; CHECK-NEXT: mffprd r3, f05030; CHECK-NEXT: blr5031entry:5032 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 165033 %conv = fptoui double %0 to i645034 ret i64 %conv5035}5036 5037; Function Attrs: norecurse nounwind readonly uwtable willreturn5038define dso_local i64 @ld_cst_unalign32_uint64_t_double() {5039; CHECK-P10-LABEL: ld_cst_unalign32_uint64_t_double:5040; CHECK-P10: # %bb.0: # %entry5041; CHECK-P10-NEXT: pli r3, 999995042; CHECK-P10-NEXT: lfd f0, 0(r3)5043; CHECK-P10-NEXT: xscvdpuxds f0, f05044; CHECK-P10-NEXT: mffprd r3, f05045; CHECK-P10-NEXT: blr5046;5047; CHECK-P9-LABEL: ld_cst_unalign32_uint64_t_double:5048; CHECK-P9: # %bb.0: # %entry5049; CHECK-P9-NEXT: lis r3, 15050; CHECK-P9-NEXT: ori r3, r3, 344635051; CHECK-P9-NEXT: lfd f0, 0(r3)5052; CHECK-P9-NEXT: xscvdpuxds f0, f05053; CHECK-P9-NEXT: mffprd r3, f05054; CHECK-P9-NEXT: blr5055;5056; CHECK-P8-LABEL: ld_cst_unalign32_uint64_t_double:5057; CHECK-P8: # %bb.0: # %entry5058; CHECK-P8-NEXT: lis r3, 25059; CHECK-P8-NEXT: lfd f0, -31073(r3)5060; CHECK-P8-NEXT: xscvdpuxds f0, f05061; CHECK-P8-NEXT: mffprd r3, f05062; CHECK-P8-NEXT: blr5063entry:5064 %0 = load double, ptr inttoptr (i64 99999 to ptr), align 85065 %conv = fptoui double %0 to i645066 ret i64 %conv5067}5068 5069; Function Attrs: norecurse nounwind readonly uwtable willreturn5070define dso_local i64 @ld_cst_align32_uint64_t_double() {5071; CHECK-LABEL: ld_cst_align32_uint64_t_double:5072; CHECK: # %bb.0: # %entry5073; CHECK-NEXT: lis r3, 1535074; CHECK-NEXT: lfd f0, -27108(r3)5075; CHECK-NEXT: xscvdpuxds f0, f05076; CHECK-NEXT: mffprd r3, f05077; CHECK-NEXT: blr5078entry:5079 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 85080 %conv = fptoui double %0 to i645081 ret i64 %conv5082}5083 5084; Function Attrs: norecurse nounwind readonly uwtable willreturn5085define dso_local i64 @ld_cst_unalign64_uint64_t_double() {5086; CHECK-P10-LABEL: ld_cst_unalign64_uint64_t_double:5087; CHECK-P10: # %bb.0: # %entry5088; CHECK-P10-NEXT: pli r3, 2325089; CHECK-P10-NEXT: pli r4, 35675873295090; CHECK-P10-NEXT: rldimi r4, r3, 32, 05091; CHECK-P10-NEXT: lfd f0, 0(r4)5092; CHECK-P10-NEXT: xscvdpuxds f0, f05093; CHECK-P10-NEXT: mffprd r3, f05094; CHECK-P10-NEXT: blr5095;5096; CHECK-PREP10-LABEL: ld_cst_unalign64_uint64_t_double:5097; CHECK-PREP10: # %bb.0: # %entry5098; CHECK-PREP10-NEXT: li r3, 295099; CHECK-PREP10-NEXT: rldic r3, r3, 35, 245100; CHECK-PREP10-NEXT: oris r3, r3, 544375101; CHECK-PREP10-NEXT: ori r3, r3, 40975102; CHECK-PREP10-NEXT: lfd f0, 0(r3)5103; CHECK-PREP10-NEXT: xscvdpuxds f0, f05104; CHECK-PREP10-NEXT: mffprd r3, f05105; CHECK-PREP10-NEXT: blr5106entry:5107 %0 = load double, ptr inttoptr (i64 1000000000001 to ptr), align 85108 %conv = fptoui double %0 to i645109 ret i64 %conv5110}5111 5112; Function Attrs: norecurse nounwind readonly uwtable willreturn5113define dso_local i64 @ld_cst_align64_uint64_t_double() {5114; CHECK-P10-LABEL: ld_cst_align64_uint64_t_double:5115; CHECK-P10: # %bb.0: # %entry5116; CHECK-P10-NEXT: pli r3, 2441406255117; CHECK-P10-NEXT: rldic r3, r3, 12, 245118; CHECK-P10-NEXT: lfd f0, 0(r3)5119; CHECK-P10-NEXT: xscvdpuxds f0, f05120; CHECK-P10-NEXT: mffprd r3, f05121; CHECK-P10-NEXT: blr5122;5123; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_double:5124; CHECK-PREP10: # %bb.0: # %entry5125; CHECK-PREP10-NEXT: lis r3, 37255126; CHECK-PREP10-NEXT: ori r3, r3, 190255127; CHECK-PREP10-NEXT: rldic r3, r3, 12, 245128; CHECK-PREP10-NEXT: lfd f0, 0(r3)5129; CHECK-PREP10-NEXT: xscvdpuxds f0, f05130; CHECK-PREP10-NEXT: mffprd r3, f05131; CHECK-PREP10-NEXT: blr5132entry:5133 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 40965134 %conv = fptoui double %0 to i645135 ret i64 %conv5136}5137 5138; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5139define dso_local void @st_0_uint64_t_uint8_t(i64 %ptr, i64 %str) {5140; CHECK-LABEL: st_0_uint64_t_uint8_t:5141; CHECK: # %bb.0: # %entry5142; CHECK-NEXT: stb r4, 0(r3)5143; CHECK-NEXT: blr5144entry:5145 %conv = trunc i64 %str to i85146 %0 = inttoptr i64 %ptr to ptr5147 store i8 %conv, ptr %0, align 15148 ret void5149}5150 5151; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5152define dso_local void @st_align16_uint64_t_uint8_t(ptr nocapture %ptr, i64 %str) {5153; CHECK-LABEL: st_align16_uint64_t_uint8_t:5154; CHECK: # %bb.0: # %entry5155; CHECK-NEXT: stb r4, 8(r3)5156; CHECK-NEXT: blr5157entry:5158 %conv = trunc i64 %str to i85159 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 85160 store i8 %conv, ptr %add.ptr, align 15161 ret void5162}5163 5164; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5165define dso_local void @st_align32_uint64_t_uint8_t(ptr nocapture %ptr, i64 %str) {5166; CHECK-P10-LABEL: st_align32_uint64_t_uint8_t:5167; CHECK-P10: # %bb.0: # %entry5168; CHECK-P10-NEXT: pstb r4, 99999000(r3), 05169; CHECK-P10-NEXT: blr5170;5171; CHECK-PREP10-LABEL: st_align32_uint64_t_uint8_t:5172; CHECK-PREP10: # %bb.0: # %entry5173; CHECK-PREP10-NEXT: lis r5, 15255174; CHECK-PREP10-NEXT: ori r5, r5, 566005175; CHECK-PREP10-NEXT: stbx r4, r3, r55176; CHECK-PREP10-NEXT: blr5177entry:5178 %conv = trunc i64 %str to i85179 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990005180 store i8 %conv, ptr %add.ptr, align 15181 ret void5182}5183 5184; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5185define dso_local void @st_align64_uint64_t_uint8_t(ptr nocapture %ptr, i64 %str) {5186; CHECK-P10-LABEL: st_align64_uint64_t_uint8_t:5187; CHECK-P10: # %bb.0: # %entry5188; CHECK-P10-NEXT: pli r5, 2441406255189; CHECK-P10-NEXT: rldic r5, r5, 12, 245190; CHECK-P10-NEXT: stbx r4, r3, r55191; CHECK-P10-NEXT: blr5192;5193; CHECK-PREP10-LABEL: st_align64_uint64_t_uint8_t:5194; CHECK-PREP10: # %bb.0: # %entry5195; CHECK-PREP10-NEXT: lis r5, 37255196; CHECK-PREP10-NEXT: ori r5, r5, 190255197; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245198; CHECK-PREP10-NEXT: stbx r4, r3, r55199; CHECK-PREP10-NEXT: blr5200entry:5201 %conv = trunc i64 %str to i85202 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000005203 store i8 %conv, ptr %add.ptr, align 15204 ret void5205}5206 5207; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5208define dso_local void @st_reg_uint64_t_uint8_t(ptr nocapture %ptr, i64 %off, i64 %str) {5209; CHECK-LABEL: st_reg_uint64_t_uint8_t:5210; CHECK: # %bb.0: # %entry5211; CHECK-NEXT: stbx r5, r3, r45212; CHECK-NEXT: blr5213entry:5214 %conv = trunc i64 %str to i85215 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off5216 store i8 %conv, ptr %add.ptr, align 15217 ret void5218}5219 5220; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5221define dso_local void @st_or1_uint64_t_uint8_t(i64 %ptr, i8 zeroext %off, i64 %str) {5222; CHECK-LABEL: st_or1_uint64_t_uint8_t:5223; CHECK: # %bb.0: # %entry5224; CHECK-NEXT: or r3, r4, r35225; CHECK-NEXT: stb r5, 0(r3)5226; CHECK-NEXT: blr5227entry:5228 %conv = trunc i64 %str to i85229 %conv1 = zext i8 %off to i645230 %or = or i64 %conv1, %ptr5231 %0 = inttoptr i64 %or to ptr5232 store i8 %conv, ptr %0, align 15233 ret void5234}5235 5236; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5237define dso_local void @st_or2_uint64_t_uint8_t(i64 %ptr, i8 zeroext %off, i64 %str) {5238; CHECK-LABEL: st_or2_uint64_t_uint8_t:5239; CHECK: # %bb.0: # %entry5240; CHECK-NEXT: rldicr r3, r3, 0, 515241; CHECK-NEXT: stbx r5, r3, r45242; CHECK-NEXT: blr5243entry:5244 %and = and i64 %ptr, -40965245 %conv = trunc i64 %str to i85246 %conv1 = zext i8 %off to i645247 %or = or i64 %and, %conv15248 %0 = inttoptr i64 %or to ptr5249 store i8 %conv, ptr %0, align 15250 ret void5251}5252 5253; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5254define dso_local void @st_not_disjoint16_uint64_t_uint8_t(i64 %ptr, i64 %str) {5255; CHECK-LABEL: st_not_disjoint16_uint64_t_uint8_t:5256; CHECK: # %bb.0: # %entry5257; CHECK-NEXT: ori r3, r3, 65258; CHECK-NEXT: stb r4, 0(r3)5259; CHECK-NEXT: blr5260entry:5261 %conv = trunc i64 %str to i85262 %or = or i64 %ptr, 65263 %0 = inttoptr i64 %or to ptr5264 store i8 %conv, ptr %0, align 15265 ret void5266}5267 5268; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5269define dso_local void @st_disjoint_align16_uint64_t_uint8_t(i64 %ptr, i64 %str) {5270; CHECK-LABEL: st_disjoint_align16_uint64_t_uint8_t:5271; CHECK: # %bb.0: # %entry5272; CHECK-NEXT: rldicr r3, r3, 0, 515273; CHECK-NEXT: stb r4, 24(r3)5274; CHECK-NEXT: blr5275entry:5276 %and = and i64 %ptr, -40965277 %conv = trunc i64 %str to i85278 %or = or i64 %and, 245279 %0 = inttoptr i64 %or to ptr5280 store i8 %conv, ptr %0, align 85281 ret void5282}5283 5284; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5285define dso_local void @st_not_disjoint32_uint64_t_uint8_t(i64 %ptr, i64 %str) {5286; CHECK-LABEL: st_not_disjoint32_uint64_t_uint8_t:5287; CHECK: # %bb.0: # %entry5288; CHECK-NEXT: ori r3, r3, 344635289; CHECK-NEXT: oris r3, r3, 15290; CHECK-NEXT: stb r4, 0(r3)5291; CHECK-NEXT: blr5292entry:5293 %conv = trunc i64 %str to i85294 %or = or i64 %ptr, 999995295 %0 = inttoptr i64 %or to ptr5296 store i8 %conv, ptr %0, align 15297 ret void5298}5299 5300; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5301define dso_local void @st_disjoint_align32_uint64_t_uint8_t(i64 %ptr, i64 %str) {5302; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_uint8_t:5303; CHECK-P10: # %bb.0: # %entry5304; CHECK-P10-NEXT: lis r5, -152645305; CHECK-P10-NEXT: and r3, r3, r55306; CHECK-P10-NEXT: pstb r4, 999990000(r3), 05307; CHECK-P10-NEXT: blr5308;5309; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_uint8_t:5310; CHECK-PREP10: # %bb.0: # %entry5311; CHECK-PREP10-NEXT: lis r5, -152645312; CHECK-PREP10-NEXT: and r3, r3, r55313; CHECK-PREP10-NEXT: lis r5, 152585314; CHECK-PREP10-NEXT: ori r5, r5, 417125315; CHECK-PREP10-NEXT: stbx r4, r3, r55316; CHECK-PREP10-NEXT: blr5317entry:5318 %and = and i64 %ptr, -10003415045319 %conv = trunc i64 %str to i85320 %or = or i64 %and, 9999900005321 %0 = inttoptr i64 %or to ptr5322 store i8 %conv, ptr %0, align 165323 ret void5324}5325 5326; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5327define dso_local void @st_not_disjoint64_uint64_t_uint8_t(i64 %ptr, i64 %str) {5328; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_uint8_t:5329; CHECK-P10: # %bb.0: # %entry5330; CHECK-P10-NEXT: pli r5, 2325331; CHECK-P10-NEXT: pli r6, 35675873295332; CHECK-P10-NEXT: rldimi r6, r5, 32, 05333; CHECK-P10-NEXT: or r3, r3, r65334; CHECK-P10-NEXT: stb r4, 0(r3)5335; CHECK-P10-NEXT: blr5336;5337; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_uint8_t:5338; CHECK-PREP10: # %bb.0: # %entry5339; CHECK-PREP10-NEXT: li r5, 295340; CHECK-PREP10-NEXT: rldic r5, r5, 35, 245341; CHECK-PREP10-NEXT: oris r5, r5, 544375342; CHECK-PREP10-NEXT: ori r5, r5, 40975343; CHECK-PREP10-NEXT: or r3, r3, r55344; CHECK-PREP10-NEXT: stb r4, 0(r3)5345; CHECK-PREP10-NEXT: blr5346entry:5347 %conv = trunc i64 %str to i85348 %or = or i64 %ptr, 10000000000015349 %0 = inttoptr i64 %or to ptr5350 store i8 %conv, ptr %0, align 15351 ret void5352}5353 5354; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5355define dso_local void @st_disjoint_align64_uint64_t_uint8_t(i64 %ptr, i64 %str) {5356; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_uint8_t:5357; CHECK-P10: # %bb.0: # %entry5358; CHECK-P10-NEXT: pli r5, 2441406255359; CHECK-P10-NEXT: rldicr r3, r3, 0, 235360; CHECK-P10-NEXT: rldic r5, r5, 12, 245361; CHECK-P10-NEXT: stbx r4, r3, r55362; CHECK-P10-NEXT: blr5363;5364; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_uint8_t:5365; CHECK-PREP10: # %bb.0: # %entry5366; CHECK-PREP10-NEXT: lis r5, 37255367; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 235368; CHECK-PREP10-NEXT: ori r5, r5, 190255369; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245370; CHECK-PREP10-NEXT: stbx r4, r3, r55371; CHECK-PREP10-NEXT: blr5372entry:5373 %and = and i64 %ptr, -10995116277765374 %conv = trunc i64 %str to i85375 %or = or i64 %and, 10000000000005376 %0 = inttoptr i64 %or to ptr5377 store i8 %conv, ptr %0, align 40965378 ret void5379}5380 5381; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5382define dso_local void @st_cst_align16_uint64_t_uint8_t(i64 %str) {5383; CHECK-LABEL: st_cst_align16_uint64_t_uint8_t:5384; CHECK: # %bb.0: # %entry5385; CHECK-NEXT: stb r3, 4080(0)5386; CHECK-NEXT: blr5387entry:5388 %conv = trunc i64 %str to i85389 store i8 %conv, ptr inttoptr (i64 4080 to ptr), align 165390 ret void5391}5392 5393; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5394define dso_local void @st_cst_align32_uint64_t_uint8_t(i64 %str) {5395; CHECK-LABEL: st_cst_align32_uint64_t_uint8_t:5396; CHECK: # %bb.0: # %entry5397; CHECK-NEXT: lis r4, 1535398; CHECK-NEXT: stb r3, -27108(r4)5399; CHECK-NEXT: blr5400entry:5401 %conv = trunc i64 %str to i85402 store i8 %conv, ptr inttoptr (i64 9999900 to ptr), align 45403 ret void5404}5405 5406; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5407define dso_local void @st_cst_align64_uint64_t_uint8_t(i64 %str) {5408; CHECK-P10-LABEL: st_cst_align64_uint64_t_uint8_t:5409; CHECK-P10: # %bb.0: # %entry5410; CHECK-P10-NEXT: pli r4, 2441406255411; CHECK-P10-NEXT: rldic r4, r4, 12, 245412; CHECK-P10-NEXT: stb r3, 0(r4)5413; CHECK-P10-NEXT: blr5414;5415; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_uint8_t:5416; CHECK-PREP10: # %bb.0: # %entry5417; CHECK-PREP10-NEXT: lis r4, 37255418; CHECK-PREP10-NEXT: ori r4, r4, 190255419; CHECK-PREP10-NEXT: rldic r4, r4, 12, 245420; CHECK-PREP10-NEXT: stb r3, 0(r4)5421; CHECK-PREP10-NEXT: blr5422entry:5423 %conv = trunc i64 %str to i85424 store i8 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40965425 ret void5426}5427 5428; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5429define dso_local void @st_0_uint64_t_uint16_t(i64 %ptr, i64 %str) {5430; CHECK-LABEL: st_0_uint64_t_uint16_t:5431; CHECK: # %bb.0: # %entry5432; CHECK-NEXT: sth r4, 0(r3)5433; CHECK-NEXT: blr5434entry:5435 %conv = trunc i64 %str to i165436 %0 = inttoptr i64 %ptr to ptr5437 store i16 %conv, ptr %0, align 25438 ret void5439}5440 5441; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5442define dso_local void @st_align16_uint64_t_uint16_t(ptr nocapture %ptr, i64 %str) {5443; CHECK-LABEL: st_align16_uint64_t_uint16_t:5444; CHECK: # %bb.0: # %entry5445; CHECK-NEXT: sth r4, 8(r3)5446; CHECK-NEXT: blr5447entry:5448 %conv = trunc i64 %str to i165449 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 85450 store i16 %conv, ptr %add.ptr, align 25451 ret void5452}5453 5454; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5455define dso_local void @st_align32_uint64_t_uint16_t(ptr nocapture %ptr, i64 %str) {5456; CHECK-P10-LABEL: st_align32_uint64_t_uint16_t:5457; CHECK-P10: # %bb.0: # %entry5458; CHECK-P10-NEXT: psth r4, 99999000(r3), 05459; CHECK-P10-NEXT: blr5460;5461; CHECK-PREP10-LABEL: st_align32_uint64_t_uint16_t:5462; CHECK-PREP10: # %bb.0: # %entry5463; CHECK-PREP10-NEXT: lis r5, 15255464; CHECK-PREP10-NEXT: ori r5, r5, 566005465; CHECK-PREP10-NEXT: sthx r4, r3, r55466; CHECK-PREP10-NEXT: blr5467entry:5468 %conv = trunc i64 %str to i165469 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990005470 store i16 %conv, ptr %add.ptr, align 25471 ret void5472}5473 5474; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5475define dso_local void @st_align64_uint64_t_uint16_t(ptr nocapture %ptr, i64 %str) {5476; CHECK-P10-LABEL: st_align64_uint64_t_uint16_t:5477; CHECK-P10: # %bb.0: # %entry5478; CHECK-P10-NEXT: pli r5, 2441406255479; CHECK-P10-NEXT: rldic r5, r5, 12, 245480; CHECK-P10-NEXT: sthx r4, r3, r55481; CHECK-P10-NEXT: blr5482;5483; CHECK-PREP10-LABEL: st_align64_uint64_t_uint16_t:5484; CHECK-PREP10: # %bb.0: # %entry5485; CHECK-PREP10-NEXT: lis r5, 37255486; CHECK-PREP10-NEXT: ori r5, r5, 190255487; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245488; CHECK-PREP10-NEXT: sthx r4, r3, r55489; CHECK-PREP10-NEXT: blr5490entry:5491 %conv = trunc i64 %str to i165492 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000005493 store i16 %conv, ptr %add.ptr, align 25494 ret void5495}5496 5497; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5498define dso_local void @st_reg_uint64_t_uint16_t(ptr nocapture %ptr, i64 %off, i64 %str) {5499; CHECK-LABEL: st_reg_uint64_t_uint16_t:5500; CHECK: # %bb.0: # %entry5501; CHECK-NEXT: sthx r5, r3, r45502; CHECK-NEXT: blr5503entry:5504 %conv = trunc i64 %str to i165505 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off5506 store i16 %conv, ptr %add.ptr, align 25507 ret void5508}5509 5510; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5511define dso_local void @st_or1_uint64_t_uint16_t(i64 %ptr, i8 zeroext %off, i64 %str) {5512; CHECK-LABEL: st_or1_uint64_t_uint16_t:5513; CHECK: # %bb.0: # %entry5514; CHECK-NEXT: or r3, r4, r35515; CHECK-NEXT: sth r5, 0(r3)5516; CHECK-NEXT: blr5517entry:5518 %conv = trunc i64 %str to i165519 %conv1 = zext i8 %off to i645520 %or = or i64 %conv1, %ptr5521 %0 = inttoptr i64 %or to ptr5522 store i16 %conv, ptr %0, align 25523 ret void5524}5525 5526; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5527define dso_local void @st_or2_uint64_t_uint16_t(i64 %ptr, i8 zeroext %off, i64 %str) {5528; CHECK-LABEL: st_or2_uint64_t_uint16_t:5529; CHECK: # %bb.0: # %entry5530; CHECK-NEXT: rldicr r3, r3, 0, 515531; CHECK-NEXT: sthx r5, r3, r45532; CHECK-NEXT: blr5533entry:5534 %and = and i64 %ptr, -40965535 %conv = trunc i64 %str to i165536 %conv1 = zext i8 %off to i645537 %or = or i64 %and, %conv15538 %0 = inttoptr i64 %or to ptr5539 store i16 %conv, ptr %0, align 25540 ret void5541}5542 5543; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5544define dso_local void @st_not_disjoint16_uint64_t_uint16_t(i64 %ptr, i64 %str) {5545; CHECK-LABEL: st_not_disjoint16_uint64_t_uint16_t:5546; CHECK: # %bb.0: # %entry5547; CHECK-NEXT: ori r3, r3, 65548; CHECK-NEXT: sth r4, 0(r3)5549; CHECK-NEXT: blr5550entry:5551 %conv = trunc i64 %str to i165552 %or = or i64 %ptr, 65553 %0 = inttoptr i64 %or to ptr5554 store i16 %conv, ptr %0, align 25555 ret void5556}5557 5558; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5559define dso_local void @st_disjoint_align16_uint64_t_uint16_t(i64 %ptr, i64 %str) {5560; CHECK-LABEL: st_disjoint_align16_uint64_t_uint16_t:5561; CHECK: # %bb.0: # %entry5562; CHECK-NEXT: rldicr r3, r3, 0, 515563; CHECK-NEXT: sth r4, 24(r3)5564; CHECK-NEXT: blr5565entry:5566 %and = and i64 %ptr, -40965567 %conv = trunc i64 %str to i165568 %or = or i64 %and, 245569 %0 = inttoptr i64 %or to ptr5570 store i16 %conv, ptr %0, align 85571 ret void5572}5573 5574; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5575define dso_local void @st_not_disjoint32_uint64_t_uint16_t(i64 %ptr, i64 %str) {5576; CHECK-LABEL: st_not_disjoint32_uint64_t_uint16_t:5577; CHECK: # %bb.0: # %entry5578; CHECK-NEXT: ori r3, r3, 344635579; CHECK-NEXT: oris r3, r3, 15580; CHECK-NEXT: sth r4, 0(r3)5581; CHECK-NEXT: blr5582entry:5583 %conv = trunc i64 %str to i165584 %or = or i64 %ptr, 999995585 %0 = inttoptr i64 %or to ptr5586 store i16 %conv, ptr %0, align 25587 ret void5588}5589 5590; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5591define dso_local void @st_disjoint_align32_uint64_t_uint16_t(i64 %ptr, i64 %str) {5592; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_uint16_t:5593; CHECK-P10: # %bb.0: # %entry5594; CHECK-P10-NEXT: lis r5, -152645595; CHECK-P10-NEXT: and r3, r3, r55596; CHECK-P10-NEXT: psth r4, 999990000(r3), 05597; CHECK-P10-NEXT: blr5598;5599; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_uint16_t:5600; CHECK-PREP10: # %bb.0: # %entry5601; CHECK-PREP10-NEXT: lis r5, -152645602; CHECK-PREP10-NEXT: and r3, r3, r55603; CHECK-PREP10-NEXT: lis r5, 152585604; CHECK-PREP10-NEXT: ori r5, r5, 417125605; CHECK-PREP10-NEXT: sthx r4, r3, r55606; CHECK-PREP10-NEXT: blr5607entry:5608 %and = and i64 %ptr, -10003415045609 %conv = trunc i64 %str to i165610 %or = or i64 %and, 9999900005611 %0 = inttoptr i64 %or to ptr5612 store i16 %conv, ptr %0, align 165613 ret void5614}5615 5616; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5617define dso_local void @st_not_disjoint64_uint64_t_uint16_t(i64 %ptr, i64 %str) {5618; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_uint16_t:5619; CHECK-P10: # %bb.0: # %entry5620; CHECK-P10-NEXT: pli r5, 2325621; CHECK-P10-NEXT: pli r6, 35675873295622; CHECK-P10-NEXT: rldimi r6, r5, 32, 05623; CHECK-P10-NEXT: or r3, r3, r65624; CHECK-P10-NEXT: sth r4, 0(r3)5625; CHECK-P10-NEXT: blr5626;5627; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_uint16_t:5628; CHECK-PREP10: # %bb.0: # %entry5629; CHECK-PREP10-NEXT: li r5, 295630; CHECK-PREP10-NEXT: rldic r5, r5, 35, 245631; CHECK-PREP10-NEXT: oris r5, r5, 544375632; CHECK-PREP10-NEXT: ori r5, r5, 40975633; CHECK-PREP10-NEXT: or r3, r3, r55634; CHECK-PREP10-NEXT: sth r4, 0(r3)5635; CHECK-PREP10-NEXT: blr5636entry:5637 %conv = trunc i64 %str to i165638 %or = or i64 %ptr, 10000000000015639 %0 = inttoptr i64 %or to ptr5640 store i16 %conv, ptr %0, align 25641 ret void5642}5643 5644; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5645define dso_local void @st_disjoint_align64_uint64_t_uint16_t(i64 %ptr, i64 %str) {5646; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_uint16_t:5647; CHECK-P10: # %bb.0: # %entry5648; CHECK-P10-NEXT: pli r5, 2441406255649; CHECK-P10-NEXT: rldicr r3, r3, 0, 235650; CHECK-P10-NEXT: rldic r5, r5, 12, 245651; CHECK-P10-NEXT: sthx r4, r3, r55652; CHECK-P10-NEXT: blr5653;5654; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_uint16_t:5655; CHECK-PREP10: # %bb.0: # %entry5656; CHECK-PREP10-NEXT: lis r5, 37255657; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 235658; CHECK-PREP10-NEXT: ori r5, r5, 190255659; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245660; CHECK-PREP10-NEXT: sthx r4, r3, r55661; CHECK-PREP10-NEXT: blr5662entry:5663 %and = and i64 %ptr, -10995116277765664 %conv = trunc i64 %str to i165665 %or = or i64 %and, 10000000000005666 %0 = inttoptr i64 %or to ptr5667 store i16 %conv, ptr %0, align 40965668 ret void5669}5670 5671; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5672define dso_local void @st_cst_align16_uint64_t_uint16_t(i64 %str) {5673; CHECK-LABEL: st_cst_align16_uint64_t_uint16_t:5674; CHECK: # %bb.0: # %entry5675; CHECK-NEXT: sth r3, 4080(0)5676; CHECK-NEXT: blr5677entry:5678 %conv = trunc i64 %str to i165679 store i16 %conv, ptr inttoptr (i64 4080 to ptr), align 165680 ret void5681}5682 5683; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5684define dso_local void @st_cst_align32_uint64_t_uint16_t(i64 %str) {5685; CHECK-LABEL: st_cst_align32_uint64_t_uint16_t:5686; CHECK: # %bb.0: # %entry5687; CHECK-NEXT: lis r4, 1535688; CHECK-NEXT: sth r3, -27108(r4)5689; CHECK-NEXT: blr5690entry:5691 %conv = trunc i64 %str to i165692 store i16 %conv, ptr inttoptr (i64 9999900 to ptr), align 45693 ret void5694}5695 5696; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5697define dso_local void @st_cst_align64_uint64_t_uint16_t(i64 %str) {5698; CHECK-P10-LABEL: st_cst_align64_uint64_t_uint16_t:5699; CHECK-P10: # %bb.0: # %entry5700; CHECK-P10-NEXT: pli r4, 2441406255701; CHECK-P10-NEXT: rldic r4, r4, 12, 245702; CHECK-P10-NEXT: sth r3, 0(r4)5703; CHECK-P10-NEXT: blr5704;5705; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_uint16_t:5706; CHECK-PREP10: # %bb.0: # %entry5707; CHECK-PREP10-NEXT: lis r4, 37255708; CHECK-PREP10-NEXT: ori r4, r4, 190255709; CHECK-PREP10-NEXT: rldic r4, r4, 12, 245710; CHECK-PREP10-NEXT: sth r3, 0(r4)5711; CHECK-PREP10-NEXT: blr5712entry:5713 %conv = trunc i64 %str to i165714 store i16 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40965715 ret void5716}5717 5718; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5719define dso_local void @st_0_uint64_t_int16_t(i64 %ptr, i64 %str) {5720; CHECK-LABEL: st_0_uint64_t_int16_t:5721; CHECK: # %bb.0: # %entry5722; CHECK-NEXT: sth r4, 0(r3)5723; CHECK-NEXT: blr5724entry:5725 %conv = trunc i64 %str to i165726 %0 = inttoptr i64 %ptr to ptr5727 store i16 %conv, ptr %0, align 25728 ret void5729}5730 5731; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5732define dso_local void @st_align16_uint64_t_int16_t(ptr nocapture %ptr, i64 %str) {5733; CHECK-LABEL: st_align16_uint64_t_int16_t:5734; CHECK: # %bb.0: # %entry5735; CHECK-NEXT: sth r4, 8(r3)5736; CHECK-NEXT: blr5737entry:5738 %conv = trunc i64 %str to i165739 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 85740 store i16 %conv, ptr %add.ptr, align 25741 ret void5742}5743 5744; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5745define dso_local void @st_align32_uint64_t_int16_t(ptr nocapture %ptr, i64 %str) {5746; CHECK-P10-LABEL: st_align32_uint64_t_int16_t:5747; CHECK-P10: # %bb.0: # %entry5748; CHECK-P10-NEXT: psth r4, 99999000(r3), 05749; CHECK-P10-NEXT: blr5750;5751; CHECK-PREP10-LABEL: st_align32_uint64_t_int16_t:5752; CHECK-PREP10: # %bb.0: # %entry5753; CHECK-PREP10-NEXT: lis r5, 15255754; CHECK-PREP10-NEXT: ori r5, r5, 566005755; CHECK-PREP10-NEXT: sthx r4, r3, r55756; CHECK-PREP10-NEXT: blr5757entry:5758 %conv = trunc i64 %str to i165759 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990005760 store i16 %conv, ptr %add.ptr, align 25761 ret void5762}5763 5764; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5765define dso_local void @st_align64_uint64_t_int16_t(ptr nocapture %ptr, i64 %str) {5766; CHECK-P10-LABEL: st_align64_uint64_t_int16_t:5767; CHECK-P10: # %bb.0: # %entry5768; CHECK-P10-NEXT: pli r5, 2441406255769; CHECK-P10-NEXT: rldic r5, r5, 12, 245770; CHECK-P10-NEXT: sthx r4, r3, r55771; CHECK-P10-NEXT: blr5772;5773; CHECK-PREP10-LABEL: st_align64_uint64_t_int16_t:5774; CHECK-PREP10: # %bb.0: # %entry5775; CHECK-PREP10-NEXT: lis r5, 37255776; CHECK-PREP10-NEXT: ori r5, r5, 190255777; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245778; CHECK-PREP10-NEXT: sthx r4, r3, r55779; CHECK-PREP10-NEXT: blr5780entry:5781 %conv = trunc i64 %str to i165782 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000005783 store i16 %conv, ptr %add.ptr, align 25784 ret void5785}5786 5787; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5788define dso_local void @st_reg_uint64_t_int16_t(ptr nocapture %ptr, i64 %off, i64 %str) {5789; CHECK-LABEL: st_reg_uint64_t_int16_t:5790; CHECK: # %bb.0: # %entry5791; CHECK-NEXT: sthx r5, r3, r45792; CHECK-NEXT: blr5793entry:5794 %conv = trunc i64 %str to i165795 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off5796 store i16 %conv, ptr %add.ptr, align 25797 ret void5798}5799 5800; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5801define dso_local void @st_or1_uint64_t_int16_t(i64 %ptr, i8 zeroext %off, i64 %str) {5802; CHECK-LABEL: st_or1_uint64_t_int16_t:5803; CHECK: # %bb.0: # %entry5804; CHECK-NEXT: or r3, r4, r35805; CHECK-NEXT: sth r5, 0(r3)5806; CHECK-NEXT: blr5807entry:5808 %conv = trunc i64 %str to i165809 %conv1 = zext i8 %off to i645810 %or = or i64 %conv1, %ptr5811 %0 = inttoptr i64 %or to ptr5812 store i16 %conv, ptr %0, align 25813 ret void5814}5815 5816; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5817define dso_local void @st_or2_uint64_t_int16_t(i64 %ptr, i8 zeroext %off, i64 %str) {5818; CHECK-LABEL: st_or2_uint64_t_int16_t:5819; CHECK: # %bb.0: # %entry5820; CHECK-NEXT: rldicr r3, r3, 0, 515821; CHECK-NEXT: sthx r5, r3, r45822; CHECK-NEXT: blr5823entry:5824 %and = and i64 %ptr, -40965825 %conv = trunc i64 %str to i165826 %conv1 = zext i8 %off to i645827 %or = or i64 %and, %conv15828 %0 = inttoptr i64 %or to ptr5829 store i16 %conv, ptr %0, align 25830 ret void5831}5832 5833; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5834define dso_local void @st_not_disjoint16_uint64_t_int16_t(i64 %ptr, i64 %str) {5835; CHECK-LABEL: st_not_disjoint16_uint64_t_int16_t:5836; CHECK: # %bb.0: # %entry5837; CHECK-NEXT: ori r3, r3, 65838; CHECK-NEXT: sth r4, 0(r3)5839; CHECK-NEXT: blr5840entry:5841 %conv = trunc i64 %str to i165842 %or = or i64 %ptr, 65843 %0 = inttoptr i64 %or to ptr5844 store i16 %conv, ptr %0, align 25845 ret void5846}5847 5848; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5849define dso_local void @st_disjoint_align16_uint64_t_int16_t(i64 %ptr, i64 %str) {5850; CHECK-LABEL: st_disjoint_align16_uint64_t_int16_t:5851; CHECK: # %bb.0: # %entry5852; CHECK-NEXT: rldicr r3, r3, 0, 515853; CHECK-NEXT: sth r4, 24(r3)5854; CHECK-NEXT: blr5855entry:5856 %and = and i64 %ptr, -40965857 %conv = trunc i64 %str to i165858 %or = or i64 %and, 245859 %0 = inttoptr i64 %or to ptr5860 store i16 %conv, ptr %0, align 85861 ret void5862}5863 5864; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5865define dso_local void @st_not_disjoint32_uint64_t_int16_t(i64 %ptr, i64 %str) {5866; CHECK-LABEL: st_not_disjoint32_uint64_t_int16_t:5867; CHECK: # %bb.0: # %entry5868; CHECK-NEXT: ori r3, r3, 344635869; CHECK-NEXT: oris r3, r3, 15870; CHECK-NEXT: sth r4, 0(r3)5871; CHECK-NEXT: blr5872entry:5873 %conv = trunc i64 %str to i165874 %or = or i64 %ptr, 999995875 %0 = inttoptr i64 %or to ptr5876 store i16 %conv, ptr %0, align 25877 ret void5878}5879 5880; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5881define dso_local void @st_disjoint_align32_uint64_t_int16_t(i64 %ptr, i64 %str) {5882; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_int16_t:5883; CHECK-P10: # %bb.0: # %entry5884; CHECK-P10-NEXT: lis r5, -152645885; CHECK-P10-NEXT: and r3, r3, r55886; CHECK-P10-NEXT: psth r4, 999990000(r3), 05887; CHECK-P10-NEXT: blr5888;5889; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_int16_t:5890; CHECK-PREP10: # %bb.0: # %entry5891; CHECK-PREP10-NEXT: lis r5, -152645892; CHECK-PREP10-NEXT: and r3, r3, r55893; CHECK-PREP10-NEXT: lis r5, 152585894; CHECK-PREP10-NEXT: ori r5, r5, 417125895; CHECK-PREP10-NEXT: sthx r4, r3, r55896; CHECK-PREP10-NEXT: blr5897entry:5898 %and = and i64 %ptr, -10003415045899 %conv = trunc i64 %str to i165900 %or = or i64 %and, 9999900005901 %0 = inttoptr i64 %or to ptr5902 store i16 %conv, ptr %0, align 165903 ret void5904}5905 5906; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5907define dso_local void @st_not_disjoint64_uint64_t_int16_t(i64 %ptr, i64 %str) {5908; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_int16_t:5909; CHECK-P10: # %bb.0: # %entry5910; CHECK-P10-NEXT: pli r5, 2325911; CHECK-P10-NEXT: pli r6, 35675873295912; CHECK-P10-NEXT: rldimi r6, r5, 32, 05913; CHECK-P10-NEXT: or r3, r3, r65914; CHECK-P10-NEXT: sth r4, 0(r3)5915; CHECK-P10-NEXT: blr5916;5917; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_int16_t:5918; CHECK-PREP10: # %bb.0: # %entry5919; CHECK-PREP10-NEXT: li r5, 295920; CHECK-PREP10-NEXT: rldic r5, r5, 35, 245921; CHECK-PREP10-NEXT: oris r5, r5, 544375922; CHECK-PREP10-NEXT: ori r5, r5, 40975923; CHECK-PREP10-NEXT: or r3, r3, r55924; CHECK-PREP10-NEXT: sth r4, 0(r3)5925; CHECK-PREP10-NEXT: blr5926entry:5927 %conv = trunc i64 %str to i165928 %or = or i64 %ptr, 10000000000015929 %0 = inttoptr i64 %or to ptr5930 store i16 %conv, ptr %0, align 25931 ret void5932}5933 5934; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5935define dso_local void @st_disjoint_align64_uint64_t_int16_t(i64 %ptr, i64 %str) {5936; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_int16_t:5937; CHECK-P10: # %bb.0: # %entry5938; CHECK-P10-NEXT: pli r5, 2441406255939; CHECK-P10-NEXT: rldicr r3, r3, 0, 235940; CHECK-P10-NEXT: rldic r5, r5, 12, 245941; CHECK-P10-NEXT: sthx r4, r3, r55942; CHECK-P10-NEXT: blr5943;5944; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_int16_t:5945; CHECK-PREP10: # %bb.0: # %entry5946; CHECK-PREP10-NEXT: lis r5, 37255947; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 235948; CHECK-PREP10-NEXT: ori r5, r5, 190255949; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245950; CHECK-PREP10-NEXT: sthx r4, r3, r55951; CHECK-PREP10-NEXT: blr5952entry:5953 %and = and i64 %ptr, -10995116277765954 %conv = trunc i64 %str to i165955 %or = or i64 %and, 10000000000005956 %0 = inttoptr i64 %or to ptr5957 store i16 %conv, ptr %0, align 40965958 ret void5959}5960 5961; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5962define dso_local void @st_cst_align16_uint64_t_int16_t(i64 %str) {5963; CHECK-LABEL: st_cst_align16_uint64_t_int16_t:5964; CHECK: # %bb.0: # %entry5965; CHECK-NEXT: sth r3, 4080(0)5966; CHECK-NEXT: blr5967entry:5968 %conv = trunc i64 %str to i165969 store i16 %conv, ptr inttoptr (i64 4080 to ptr), align 165970 ret void5971}5972 5973; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5974define dso_local void @st_cst_align32_uint64_t_int16_t(i64 %str) {5975; CHECK-LABEL: st_cst_align32_uint64_t_int16_t:5976; CHECK: # %bb.0: # %entry5977; CHECK-NEXT: lis r4, 1535978; CHECK-NEXT: sth r3, -27108(r4)5979; CHECK-NEXT: blr5980entry:5981 %conv = trunc i64 %str to i165982 store i16 %conv, ptr inttoptr (i64 9999900 to ptr), align 45983 ret void5984}5985 5986; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5987define dso_local void @st_cst_align64_uint64_t_int16_t(i64 %str) {5988; CHECK-P10-LABEL: st_cst_align64_uint64_t_int16_t:5989; CHECK-P10: # %bb.0: # %entry5990; CHECK-P10-NEXT: pli r4, 2441406255991; CHECK-P10-NEXT: rldic r4, r4, 12, 245992; CHECK-P10-NEXT: sth r3, 0(r4)5993; CHECK-P10-NEXT: blr5994;5995; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_int16_t:5996; CHECK-PREP10: # %bb.0: # %entry5997; CHECK-PREP10-NEXT: lis r4, 37255998; CHECK-PREP10-NEXT: ori r4, r4, 190255999; CHECK-PREP10-NEXT: rldic r4, r4, 12, 246000; CHECK-PREP10-NEXT: sth r3, 0(r4)6001; CHECK-PREP10-NEXT: blr6002entry:6003 %conv = trunc i64 %str to i166004 store i16 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40966005 ret void6006}6007 6008; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6009define dso_local void @st_0_uint64_t_uint32_t(i64 %ptr, i64 %str) {6010; CHECK-LABEL: st_0_uint64_t_uint32_t:6011; CHECK: # %bb.0: # %entry6012; CHECK-NEXT: stw r4, 0(r3)6013; CHECK-NEXT: blr6014entry:6015 %conv = trunc i64 %str to i326016 %0 = inttoptr i64 %ptr to ptr6017 store i32 %conv, ptr %0, align 46018 ret void6019}6020 6021; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6022define dso_local void @st_align16_uint64_t_uint32_t(ptr nocapture %ptr, i64 %str) {6023; CHECK-LABEL: st_align16_uint64_t_uint32_t:6024; CHECK: # %bb.0: # %entry6025; CHECK-NEXT: stw r4, 8(r3)6026; CHECK-NEXT: blr6027entry:6028 %conv = trunc i64 %str to i326029 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 86030 store i32 %conv, ptr %add.ptr, align 46031 ret void6032}6033 6034; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6035define dso_local void @st_align32_uint64_t_uint32_t(ptr nocapture %ptr, i64 %str) {6036; CHECK-P10-LABEL: st_align32_uint64_t_uint32_t:6037; CHECK-P10: # %bb.0: # %entry6038; CHECK-P10-NEXT: pstw r4, 99999000(r3), 06039; CHECK-P10-NEXT: blr6040;6041; CHECK-PREP10-LABEL: st_align32_uint64_t_uint32_t:6042; CHECK-PREP10: # %bb.0: # %entry6043; CHECK-PREP10-NEXT: lis r5, 15256044; CHECK-PREP10-NEXT: ori r5, r5, 566006045; CHECK-PREP10-NEXT: stwx r4, r3, r56046; CHECK-PREP10-NEXT: blr6047entry:6048 %conv = trunc i64 %str to i326049 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990006050 store i32 %conv, ptr %add.ptr, align 46051 ret void6052}6053 6054; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6055define dso_local void @st_align64_uint64_t_uint32_t(ptr nocapture %ptr, i64 %str) {6056; CHECK-P10-LABEL: st_align64_uint64_t_uint32_t:6057; CHECK-P10: # %bb.0: # %entry6058; CHECK-P10-NEXT: pli r5, 2441406256059; CHECK-P10-NEXT: rldic r5, r5, 12, 246060; CHECK-P10-NEXT: stwx r4, r3, r56061; CHECK-P10-NEXT: blr6062;6063; CHECK-PREP10-LABEL: st_align64_uint64_t_uint32_t:6064; CHECK-PREP10: # %bb.0: # %entry6065; CHECK-PREP10-NEXT: lis r5, 37256066; CHECK-PREP10-NEXT: ori r5, r5, 190256067; CHECK-PREP10-NEXT: rldic r5, r5, 12, 246068; CHECK-PREP10-NEXT: stwx r4, r3, r56069; CHECK-PREP10-NEXT: blr6070entry:6071 %conv = trunc i64 %str to i326072 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000006073 store i32 %conv, ptr %add.ptr, align 46074 ret void6075}6076 6077; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6078define dso_local void @st_reg_uint64_t_uint32_t(ptr nocapture %ptr, i64 %off, i64 %str) {6079; CHECK-LABEL: st_reg_uint64_t_uint32_t:6080; CHECK: # %bb.0: # %entry6081; CHECK-NEXT: stwx r5, r3, r46082; CHECK-NEXT: blr6083entry:6084 %conv = trunc i64 %str to i326085 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off6086 store i32 %conv, ptr %add.ptr, align 46087 ret void6088}6089 6090; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6091define dso_local void @st_or1_uint64_t_uint32_t(i64 %ptr, i8 zeroext %off, i64 %str) {6092; CHECK-LABEL: st_or1_uint64_t_uint32_t:6093; CHECK: # %bb.0: # %entry6094; CHECK-NEXT: or r3, r4, r36095; CHECK-NEXT: stw r5, 0(r3)6096; CHECK-NEXT: blr6097entry:6098 %conv = trunc i64 %str to i326099 %conv1 = zext i8 %off to i646100 %or = or i64 %conv1, %ptr6101 %0 = inttoptr i64 %or to ptr6102 store i32 %conv, ptr %0, align 46103 ret void6104}6105 6106; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6107define dso_local void @st_or2_uint64_t_uint32_t(i64 %ptr, i8 zeroext %off, i64 %str) {6108; CHECK-LABEL: st_or2_uint64_t_uint32_t:6109; CHECK: # %bb.0: # %entry6110; CHECK-NEXT: rldicr r3, r3, 0, 516111; CHECK-NEXT: stwx r5, r3, r46112; CHECK-NEXT: blr6113entry:6114 %and = and i64 %ptr, -40966115 %conv = trunc i64 %str to i326116 %conv1 = zext i8 %off to i646117 %or = or i64 %and, %conv16118 %0 = inttoptr i64 %or to ptr6119 store i32 %conv, ptr %0, align 46120 ret void6121}6122 6123; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6124define dso_local void @st_not_disjoint16_uint64_t_uint32_t(i64 %ptr, i64 %str) {6125; CHECK-LABEL: st_not_disjoint16_uint64_t_uint32_t:6126; CHECK: # %bb.0: # %entry6127; CHECK-NEXT: ori r3, r3, 66128; CHECK-NEXT: stw r4, 0(r3)6129; CHECK-NEXT: blr6130entry:6131 %conv = trunc i64 %str to i326132 %or = or i64 %ptr, 66133 %0 = inttoptr i64 %or to ptr6134 store i32 %conv, ptr %0, align 46135 ret void6136}6137 6138; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6139define dso_local void @st_disjoint_align16_uint64_t_uint32_t(i64 %ptr, i64 %str) {6140; CHECK-LABEL: st_disjoint_align16_uint64_t_uint32_t:6141; CHECK: # %bb.0: # %entry6142; CHECK-NEXT: rldicr r3, r3, 0, 516143; CHECK-NEXT: stw r4, 24(r3)6144; CHECK-NEXT: blr6145entry:6146 %and = and i64 %ptr, -40966147 %conv = trunc i64 %str to i326148 %or = or i64 %and, 246149 %0 = inttoptr i64 %or to ptr6150 store i32 %conv, ptr %0, align 86151 ret void6152}6153 6154; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6155define dso_local void @st_not_disjoint32_uint64_t_uint32_t(i64 %ptr, i64 %str) {6156; CHECK-LABEL: st_not_disjoint32_uint64_t_uint32_t:6157; CHECK: # %bb.0: # %entry6158; CHECK-NEXT: ori r3, r3, 344636159; CHECK-NEXT: oris r3, r3, 16160; CHECK-NEXT: stw r4, 0(r3)6161; CHECK-NEXT: blr6162entry:6163 %conv = trunc i64 %str to i326164 %or = or i64 %ptr, 999996165 %0 = inttoptr i64 %or to ptr6166 store i32 %conv, ptr %0, align 46167 ret void6168}6169 6170; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6171define dso_local void @st_disjoint_align32_uint64_t_uint32_t(i64 %ptr, i64 %str) {6172; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_uint32_t:6173; CHECK-P10: # %bb.0: # %entry6174; CHECK-P10-NEXT: lis r5, -152646175; CHECK-P10-NEXT: and r3, r3, r56176; CHECK-P10-NEXT: pstw r4, 999990000(r3), 06177; CHECK-P10-NEXT: blr6178;6179; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_uint32_t:6180; CHECK-PREP10: # %bb.0: # %entry6181; CHECK-PREP10-NEXT: lis r5, -152646182; CHECK-PREP10-NEXT: and r3, r3, r56183; CHECK-PREP10-NEXT: lis r5, 152586184; CHECK-PREP10-NEXT: ori r5, r5, 417126185; CHECK-PREP10-NEXT: stwx r4, r3, r56186; CHECK-PREP10-NEXT: blr6187entry:6188 %and = and i64 %ptr, -10003415046189 %conv = trunc i64 %str to i326190 %or = or i64 %and, 9999900006191 %0 = inttoptr i64 %or to ptr6192 store i32 %conv, ptr %0, align 166193 ret void6194}6195 6196; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6197define dso_local void @st_not_disjoint64_uint64_t_uint32_t(i64 %ptr, i64 %str) {6198; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_uint32_t:6199; CHECK-P10: # %bb.0: # %entry6200; CHECK-P10-NEXT: pli r5, 2326201; CHECK-P10-NEXT: pli r6, 35675873296202; CHECK-P10-NEXT: rldimi r6, r5, 32, 06203; CHECK-P10-NEXT: or r3, r3, r66204; CHECK-P10-NEXT: stw r4, 0(r3)6205; CHECK-P10-NEXT: blr6206;6207; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_uint32_t:6208; CHECK-PREP10: # %bb.0: # %entry6209; CHECK-PREP10-NEXT: li r5, 296210; CHECK-PREP10-NEXT: rldic r5, r5, 35, 246211; CHECK-PREP10-NEXT: oris r5, r5, 544376212; CHECK-PREP10-NEXT: ori r5, r5, 40976213; CHECK-PREP10-NEXT: or r3, r3, r56214; CHECK-PREP10-NEXT: stw r4, 0(r3)6215; CHECK-PREP10-NEXT: blr6216entry:6217 %conv = trunc i64 %str to i326218 %or = or i64 %ptr, 10000000000016219 %0 = inttoptr i64 %or to ptr6220 store i32 %conv, ptr %0, align 46221 ret void6222}6223 6224; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6225define dso_local void @st_disjoint_align64_uint64_t_uint32_t(i64 %ptr, i64 %str) {6226; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_uint32_t:6227; CHECK-P10: # %bb.0: # %entry6228; CHECK-P10-NEXT: pli r5, 2441406256229; CHECK-P10-NEXT: rldicr r3, r3, 0, 236230; CHECK-P10-NEXT: rldic r5, r5, 12, 246231; CHECK-P10-NEXT: stwx r4, r3, r56232; CHECK-P10-NEXT: blr6233;6234; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_uint32_t:6235; CHECK-PREP10: # %bb.0: # %entry6236; CHECK-PREP10-NEXT: lis r5, 37256237; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 236238; CHECK-PREP10-NEXT: ori r5, r5, 190256239; CHECK-PREP10-NEXT: rldic r5, r5, 12, 246240; CHECK-PREP10-NEXT: stwx r4, r3, r56241; CHECK-PREP10-NEXT: blr6242entry:6243 %and = and i64 %ptr, -10995116277766244 %conv = trunc i64 %str to i326245 %or = or i64 %and, 10000000000006246 %0 = inttoptr i64 %or to ptr6247 store i32 %conv, ptr %0, align 40966248 ret void6249}6250 6251; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6252define dso_local void @st_cst_align16_uint64_t_uint32_t(i64 %str) {6253; CHECK-LABEL: st_cst_align16_uint64_t_uint32_t:6254; CHECK: # %bb.0: # %entry6255; CHECK-NEXT: stw r3, 4080(0)6256; CHECK-NEXT: blr6257entry:6258 %conv = trunc i64 %str to i326259 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 166260 ret void6261}6262 6263; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6264define dso_local void @st_cst_align32_uint64_t_uint32_t(i64 %str) {6265; CHECK-LABEL: st_cst_align32_uint64_t_uint32_t:6266; CHECK: # %bb.0: # %entry6267; CHECK-NEXT: lis r4, 1536268; CHECK-NEXT: stw r3, -27108(r4)6269; CHECK-NEXT: blr6270entry:6271 %conv = trunc i64 %str to i326272 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 46273 ret void6274}6275 6276; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6277define dso_local void @st_cst_align64_uint64_t_uint32_t(i64 %str) {6278; CHECK-P10-LABEL: st_cst_align64_uint64_t_uint32_t:6279; CHECK-P10: # %bb.0: # %entry6280; CHECK-P10-NEXT: pli r4, 2441406256281; CHECK-P10-NEXT: rldic r4, r4, 12, 246282; CHECK-P10-NEXT: stw r3, 0(r4)6283; CHECK-P10-NEXT: blr6284;6285; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_uint32_t:6286; CHECK-PREP10: # %bb.0: # %entry6287; CHECK-PREP10-NEXT: lis r4, 37256288; CHECK-PREP10-NEXT: ori r4, r4, 190256289; CHECK-PREP10-NEXT: rldic r4, r4, 12, 246290; CHECK-PREP10-NEXT: stw r3, 0(r4)6291; CHECK-PREP10-NEXT: blr6292entry:6293 %conv = trunc i64 %str to i326294 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40966295 ret void6296}6297 6298; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6299define dso_local void @st_0_uint64_t_uint64_t(i64 %ptr, i64 %str) {6300; CHECK-LABEL: st_0_uint64_t_uint64_t:6301; CHECK: # %bb.0: # %entry6302; CHECK-NEXT: std r4, 0(r3)6303; CHECK-NEXT: blr6304entry:6305 %0 = inttoptr i64 %ptr to ptr6306 store i64 %str, ptr %0, align 86307 ret void6308}6309 6310; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6311define dso_local void @st_align16_uint64_t_uint64_t(ptr nocapture %ptr, i64 %str) {6312; CHECK-LABEL: st_align16_uint64_t_uint64_t:6313; CHECK: # %bb.0: # %entry6314; CHECK-NEXT: std r4, 8(r3)6315; CHECK-NEXT: blr6316entry:6317 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 86318 store i64 %str, ptr %add.ptr, align 86319 ret void6320}6321 6322; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6323define dso_local void @st_align32_uint64_t_uint64_t(ptr nocapture %ptr, i64 %str) {6324; CHECK-P10-LABEL: st_align32_uint64_t_uint64_t:6325; CHECK-P10: # %bb.0: # %entry6326; CHECK-P10-NEXT: pstd r4, 99999000(r3), 06327; CHECK-P10-NEXT: blr6328;6329; CHECK-PREP10-LABEL: st_align32_uint64_t_uint64_t:6330; CHECK-PREP10: # %bb.0: # %entry6331; CHECK-PREP10-NEXT: lis r5, 15256332; CHECK-PREP10-NEXT: ori r5, r5, 566006333; CHECK-PREP10-NEXT: stdx r4, r3, r56334; CHECK-PREP10-NEXT: blr6335entry:6336 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990006337 store i64 %str, ptr %add.ptr, align 86338 ret void6339}6340 6341; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6342define dso_local void @st_align64_uint64_t_uint64_t(ptr nocapture %ptr, i64 %str) {6343; CHECK-P10-LABEL: st_align64_uint64_t_uint64_t:6344; CHECK-P10: # %bb.0: # %entry6345; CHECK-P10-NEXT: pli r5, 2441406256346; CHECK-P10-NEXT: rldic r5, r5, 12, 246347; CHECK-P10-NEXT: stdx r4, r3, r56348; CHECK-P10-NEXT: blr6349;6350; CHECK-PREP10-LABEL: st_align64_uint64_t_uint64_t:6351; CHECK-PREP10: # %bb.0: # %entry6352; CHECK-PREP10-NEXT: lis r5, 37256353; CHECK-PREP10-NEXT: ori r5, r5, 190256354; CHECK-PREP10-NEXT: rldic r5, r5, 12, 246355; CHECK-PREP10-NEXT: stdx r4, r3, r56356; CHECK-PREP10-NEXT: blr6357entry:6358 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000006359 store i64 %str, ptr %add.ptr, align 86360 ret void6361}6362 6363; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6364define dso_local void @st_reg_uint64_t_uint64_t(ptr nocapture %ptr, i64 %off, i64 %str) {6365; CHECK-LABEL: st_reg_uint64_t_uint64_t:6366; CHECK: # %bb.0: # %entry6367; CHECK-NEXT: stdx r5, r3, r46368; CHECK-NEXT: blr6369entry:6370 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off6371 store i64 %str, ptr %add.ptr, align 86372 ret void6373}6374 6375; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6376define dso_local void @st_or1_uint64_t_uint64_t(i64 %ptr, i8 zeroext %off, i64 %str) {6377; CHECK-LABEL: st_or1_uint64_t_uint64_t:6378; CHECK: # %bb.0: # %entry6379; CHECK-NEXT: or r3, r4, r36380; CHECK-NEXT: std r5, 0(r3)6381; CHECK-NEXT: blr6382entry:6383 %conv = zext i8 %off to i646384 %or = or i64 %conv, %ptr6385 %0 = inttoptr i64 %or to ptr6386 store i64 %str, ptr %0, align 86387 ret void6388}6389 6390; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6391define dso_local void @st_or2_uint64_t_uint64_t(i64 %ptr, i8 zeroext %off, i64 %str) {6392; CHECK-LABEL: st_or2_uint64_t_uint64_t:6393; CHECK: # %bb.0: # %entry6394; CHECK-NEXT: rldicr r3, r3, 0, 516395; CHECK-NEXT: stdx r5, r3, r46396; CHECK-NEXT: blr6397entry:6398 %and = and i64 %ptr, -40966399 %conv = zext i8 %off to i646400 %or = or i64 %and, %conv6401 %0 = inttoptr i64 %or to ptr6402 store i64 %str, ptr %0, align 86403 ret void6404}6405 6406; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6407define dso_local void @st_not_disjoint16_uint64_t_uint64_t(i64 %ptr, i64 %str) {6408; CHECK-LABEL: st_not_disjoint16_uint64_t_uint64_t:6409; CHECK: # %bb.0: # %entry6410; CHECK-NEXT: ori r3, r3, 66411; CHECK-NEXT: std r4, 0(r3)6412; CHECK-NEXT: blr6413entry:6414 %or = or i64 %ptr, 66415 %0 = inttoptr i64 %or to ptr6416 store i64 %str, ptr %0, align 86417 ret void6418}6419 6420; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6421define dso_local void @st_disjoint_align16_uint64_t_uint64_t(i64 %ptr, i64 %str) {6422; CHECK-LABEL: st_disjoint_align16_uint64_t_uint64_t:6423; CHECK: # %bb.0: # %entry6424; CHECK-NEXT: rldicr r3, r3, 0, 516425; CHECK-NEXT: std r4, 24(r3)6426; CHECK-NEXT: blr6427entry:6428 %and = and i64 %ptr, -40966429 %or = or i64 %and, 246430 %0 = inttoptr i64 %or to ptr6431 store i64 %str, ptr %0, align 86432 ret void6433}6434 6435; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6436define dso_local void @st_not_disjoint32_uint64_t_uint64_t(i64 %ptr, i64 %str) {6437; CHECK-LABEL: st_not_disjoint32_uint64_t_uint64_t:6438; CHECK: # %bb.0: # %entry6439; CHECK-NEXT: ori r3, r3, 344636440; CHECK-NEXT: oris r3, r3, 16441; CHECK-NEXT: std r4, 0(r3)6442; CHECK-NEXT: blr6443entry:6444 %or = or i64 %ptr, 999996445 %0 = inttoptr i64 %or to ptr6446 store i64 %str, ptr %0, align 86447 ret void6448}6449 6450; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6451define dso_local void @st_disjoint_align32_uint64_t_uint64_t(i64 %ptr, i64 %str) {6452; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_uint64_t:6453; CHECK-P10: # %bb.0: # %entry6454; CHECK-P10-NEXT: lis r5, -152646455; CHECK-P10-NEXT: and r3, r3, r56456; CHECK-P10-NEXT: pstd r4, 999990000(r3), 06457; CHECK-P10-NEXT: blr6458;6459; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_uint64_t:6460; CHECK-PREP10: # %bb.0: # %entry6461; CHECK-PREP10-NEXT: lis r5, -152646462; CHECK-PREP10-NEXT: and r3, r3, r56463; CHECK-PREP10-NEXT: lis r5, 152586464; CHECK-PREP10-NEXT: ori r5, r5, 417126465; CHECK-PREP10-NEXT: stdx r4, r3, r56466; CHECK-PREP10-NEXT: blr6467entry:6468 %and = and i64 %ptr, -10003415046469 %or = or i64 %and, 9999900006470 %0 = inttoptr i64 %or to ptr6471 store i64 %str, ptr %0, align 166472 ret void6473}6474 6475; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6476define dso_local void @st_not_disjoint64_uint64_t_uint64_t(i64 %ptr, i64 %str) {6477; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_uint64_t:6478; CHECK-P10: # %bb.0: # %entry6479; CHECK-P10-NEXT: pli r5, 2326480; CHECK-P10-NEXT: pli r6, 35675873296481; CHECK-P10-NEXT: rldimi r6, r5, 32, 06482; CHECK-P10-NEXT: or r3, r3, r66483; CHECK-P10-NEXT: std r4, 0(r3)6484; CHECK-P10-NEXT: blr6485;6486; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_uint64_t:6487; CHECK-PREP10: # %bb.0: # %entry6488; CHECK-PREP10-NEXT: li r5, 296489; CHECK-PREP10-NEXT: rldic r5, r5, 35, 246490; CHECK-PREP10-NEXT: oris r5, r5, 544376491; CHECK-PREP10-NEXT: ori r5, r5, 40976492; CHECK-PREP10-NEXT: or r3, r3, r56493; CHECK-PREP10-NEXT: std r4, 0(r3)6494; CHECK-PREP10-NEXT: blr6495entry:6496 %or = or i64 %ptr, 10000000000016497 %0 = inttoptr i64 %or to ptr6498 store i64 %str, ptr %0, align 86499 ret void6500}6501 6502; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6503define dso_local void @st_disjoint_align64_uint64_t_uint64_t(i64 %ptr, i64 %str) {6504; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_uint64_t:6505; CHECK-P10: # %bb.0: # %entry6506; CHECK-P10-NEXT: pli r5, 2441406256507; CHECK-P10-NEXT: rldicr r3, r3, 0, 236508; CHECK-P10-NEXT: rldic r5, r5, 12, 246509; CHECK-P10-NEXT: stdx r4, r3, r56510; CHECK-P10-NEXT: blr6511;6512; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_uint64_t:6513; CHECK-PREP10: # %bb.0: # %entry6514; CHECK-PREP10-NEXT: lis r5, 37256515; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 236516; CHECK-PREP10-NEXT: ori r5, r5, 190256517; CHECK-PREP10-NEXT: rldic r5, r5, 12, 246518; CHECK-PREP10-NEXT: stdx r4, r3, r56519; CHECK-PREP10-NEXT: blr6520entry:6521 %and = and i64 %ptr, -10995116277766522 %or = or i64 %and, 10000000000006523 %0 = inttoptr i64 %or to ptr6524 store i64 %str, ptr %0, align 40966525 ret void6526}6527 6528; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6529define dso_local void @st_cst_align16_uint64_t_uint64_t(i64 %str) {6530; CHECK-LABEL: st_cst_align16_uint64_t_uint64_t:6531; CHECK: # %bb.0: # %entry6532; CHECK-NEXT: std r3, 4080(0)6533; CHECK-NEXT: blr6534entry:6535 store i64 %str, ptr inttoptr (i64 4080 to ptr), align 166536 ret void6537}6538 6539; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6540define dso_local void @st_cst_align32_uint64_t_uint64_t(i64 %str) {6541; CHECK-LABEL: st_cst_align32_uint64_t_uint64_t:6542; CHECK: # %bb.0: # %entry6543; CHECK-NEXT: lis r4, 1536544; CHECK-NEXT: std r3, -27108(r4)6545; CHECK-NEXT: blr6546entry:6547 store i64 %str, ptr inttoptr (i64 9999900 to ptr), align 86548 ret void6549}6550 6551; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6552define dso_local void @st_cst_align64_uint64_t_uint64_t(i64 %str) {6553; CHECK-P10-LABEL: st_cst_align64_uint64_t_uint64_t:6554; CHECK-P10: # %bb.0: # %entry6555; CHECK-P10-NEXT: pli r4, 2441406256556; CHECK-P10-NEXT: rldic r4, r4, 12, 246557; CHECK-P10-NEXT: std r3, 0(r4)6558; CHECK-P10-NEXT: blr6559;6560; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_uint64_t:6561; CHECK-PREP10: # %bb.0: # %entry6562; CHECK-PREP10-NEXT: lis r4, 37256563; CHECK-PREP10-NEXT: ori r4, r4, 190256564; CHECK-PREP10-NEXT: rldic r4, r4, 12, 246565; CHECK-PREP10-NEXT: std r3, 0(r4)6566; CHECK-PREP10-NEXT: blr6567entry:6568 store i64 %str, ptr inttoptr (i64 1000000000000 to ptr), align 40966569 ret void6570}6571 6572; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6573define dso_local void @st_0_uint64_t_float(i64 %ptr, i64 %str) {6574; CHECK-LABEL: st_0_uint64_t_float:6575; CHECK: # %bb.0: # %entry6576; CHECK-NEXT: mtfprd f0, r46577; CHECK-NEXT: xscvuxdsp f0, f06578; CHECK-NEXT: stfs f0, 0(r3)6579; CHECK-NEXT: blr6580entry:6581 %conv = uitofp i64 %str to float6582 %0 = inttoptr i64 %ptr to ptr6583 store float %conv, ptr %0, align 46584 ret void6585}6586 6587; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6588define dso_local void @st_align16_uint64_t_float(ptr nocapture %ptr, i64 %str) {6589; CHECK-LABEL: st_align16_uint64_t_float:6590; CHECK: # %bb.0: # %entry6591; CHECK-NEXT: mtfprd f0, r46592; CHECK-NEXT: xscvuxdsp f0, f06593; CHECK-NEXT: stfs f0, 8(r3)6594; CHECK-NEXT: blr6595entry:6596 %conv = uitofp i64 %str to float6597 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 86598 store float %conv, ptr %add.ptr, align 46599 ret void6600}6601 6602; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6603define dso_local void @st_align32_uint64_t_float(ptr nocapture %ptr, i64 %str) {6604; CHECK-P10-LABEL: st_align32_uint64_t_float:6605; CHECK-P10: # %bb.0: # %entry6606; CHECK-P10-NEXT: mtfprd f0, r46607; CHECK-P10-NEXT: xscvuxdsp f0, f06608; CHECK-P10-NEXT: pstfs f0, 99999000(r3), 06609; CHECK-P10-NEXT: blr6610;6611; CHECK-P9-LABEL: st_align32_uint64_t_float:6612; CHECK-P9: # %bb.0: # %entry6613; CHECK-P9-NEXT: mtfprd f0, r46614; CHECK-P9-NEXT: lis r4, 15256615; CHECK-P9-NEXT: xscvuxdsp f0, f06616; CHECK-P9-NEXT: ori r4, r4, 566006617; CHECK-P9-NEXT: stfsx f0, r3, r46618; CHECK-P9-NEXT: blr6619;6620; CHECK-P8-LABEL: st_align32_uint64_t_float:6621; CHECK-P8: # %bb.0: # %entry6622; CHECK-P8-NEXT: mtfprd f0, r46623; CHECK-P8-NEXT: lis r4, 15256624; CHECK-P8-NEXT: ori r4, r4, 566006625; CHECK-P8-NEXT: xscvuxdsp f0, f06626; CHECK-P8-NEXT: stfsx f0, r3, r46627; CHECK-P8-NEXT: blr6628entry:6629 %conv = uitofp i64 %str to float6630 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990006631 store float %conv, ptr %add.ptr, align 46632 ret void6633}6634 6635; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6636define dso_local void @st_align64_uint64_t_float(ptr nocapture %ptr, i64 %str) {6637; CHECK-P10-LABEL: st_align64_uint64_t_float:6638; CHECK-P10: # %bb.0: # %entry6639; CHECK-P10-NEXT: mtfprd f0, r46640; CHECK-P10-NEXT: pli r4, 2441406256641; CHECK-P10-NEXT: rldic r4, r4, 12, 246642; CHECK-P10-NEXT: xscvuxdsp f0, f06643; CHECK-P10-NEXT: stfsx f0, r3, r46644; CHECK-P10-NEXT: blr6645;6646; CHECK-P9-LABEL: st_align64_uint64_t_float:6647; CHECK-P9: # %bb.0: # %entry6648; CHECK-P9-NEXT: mtfprd f0, r46649; CHECK-P9-NEXT: lis r4, 37256650; CHECK-P9-NEXT: xscvuxdsp f0, f06651; CHECK-P9-NEXT: ori r4, r4, 190256652; CHECK-P9-NEXT: rldic r4, r4, 12, 246653; CHECK-P9-NEXT: stfsx f0, r3, r46654; CHECK-P9-NEXT: blr6655;6656; CHECK-P8-LABEL: st_align64_uint64_t_float:6657; CHECK-P8: # %bb.0: # %entry6658; CHECK-P8-NEXT: mtfprd f0, r46659; CHECK-P8-NEXT: lis r4, 37256660; CHECK-P8-NEXT: ori r4, r4, 190256661; CHECK-P8-NEXT: rldic r4, r4, 12, 246662; CHECK-P8-NEXT: xscvuxdsp f0, f06663; CHECK-P8-NEXT: stfsx f0, r3, r46664; CHECK-P8-NEXT: blr6665entry:6666 %conv = uitofp i64 %str to float6667 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000006668 store float %conv, ptr %add.ptr, align 46669 ret void6670}6671 6672; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6673define dso_local void @st_reg_uint64_t_float(ptr nocapture %ptr, i64 %off, i64 %str) {6674; CHECK-LABEL: st_reg_uint64_t_float:6675; CHECK: # %bb.0: # %entry6676; CHECK-NEXT: mtfprd f0, r56677; CHECK-NEXT: xscvuxdsp f0, f06678; CHECK-NEXT: stfsx f0, r3, r46679; CHECK-NEXT: blr6680entry:6681 %conv = uitofp i64 %str to float6682 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off6683 store float %conv, ptr %add.ptr, align 46684 ret void6685}6686 6687; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6688define dso_local void @st_or1_uint64_t_float(i64 %ptr, i8 zeroext %off, i64 %str) {6689; CHECK-LABEL: st_or1_uint64_t_float:6690; CHECK: # %bb.0: # %entry6691; CHECK-NEXT: mtfprd f0, r56692; CHECK-NEXT: or r3, r4, r36693; CHECK-NEXT: xscvuxdsp f0, f06694; CHECK-NEXT: stfs f0, 0(r3)6695; CHECK-NEXT: blr6696entry:6697 %conv = uitofp i64 %str to float6698 %conv1 = zext i8 %off to i646699 %or = or i64 %conv1, %ptr6700 %0 = inttoptr i64 %or to ptr6701 store float %conv, ptr %0, align 46702 ret void6703}6704 6705; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6706define dso_local void @st_or2_uint64_t_float(i64 %ptr, i8 zeroext %off, i64 %str) {6707; CHECK-LABEL: st_or2_uint64_t_float:6708; CHECK: # %bb.0: # %entry6709; CHECK-NEXT: mtfprd f0, r56710; CHECK-NEXT: rldicr r3, r3, 0, 516711; CHECK-NEXT: xscvuxdsp f0, f06712; CHECK-NEXT: stfsx f0, r3, r46713; CHECK-NEXT: blr6714entry:6715 %and = and i64 %ptr, -40966716 %conv = uitofp i64 %str to float6717 %conv1 = zext i8 %off to i646718 %or = or i64 %and, %conv16719 %0 = inttoptr i64 %or to ptr6720 store float %conv, ptr %0, align 46721 ret void6722}6723 6724; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6725define dso_local void @st_not_disjoint16_uint64_t_float(i64 %ptr, i64 %str) {6726; CHECK-LABEL: st_not_disjoint16_uint64_t_float:6727; CHECK: # %bb.0: # %entry6728; CHECK-NEXT: mtfprd f0, r46729; CHECK-NEXT: ori r3, r3, 66730; CHECK-NEXT: xscvuxdsp f0, f06731; CHECK-NEXT: stfs f0, 0(r3)6732; CHECK-NEXT: blr6733entry:6734 %conv = uitofp i64 %str to float6735 %or = or i64 %ptr, 66736 %0 = inttoptr i64 %or to ptr6737 store float %conv, ptr %0, align 46738 ret void6739}6740 6741; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6742define dso_local void @st_disjoint_align16_uint64_t_float(i64 %ptr, i64 %str) {6743; CHECK-LABEL: st_disjoint_align16_uint64_t_float:6744; CHECK: # %bb.0: # %entry6745; CHECK-NEXT: mtfprd f0, r46746; CHECK-NEXT: rldicr r3, r3, 0, 516747; CHECK-NEXT: xscvuxdsp f0, f06748; CHECK-NEXT: stfs f0, 24(r3)6749; CHECK-NEXT: blr6750entry:6751 %and = and i64 %ptr, -40966752 %conv = uitofp i64 %str to float6753 %or = or i64 %and, 246754 %0 = inttoptr i64 %or to ptr6755 store float %conv, ptr %0, align 86756 ret void6757}6758 6759; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6760define dso_local void @st_not_disjoint32_uint64_t_float(i64 %ptr, i64 %str) {6761; CHECK-P10-LABEL: st_not_disjoint32_uint64_t_float:6762; CHECK-P10: # %bb.0: # %entry6763; CHECK-P10-NEXT: mtfprd f0, r46764; CHECK-P10-NEXT: ori r3, r3, 344636765; CHECK-P10-NEXT: oris r3, r3, 16766; CHECK-P10-NEXT: xscvuxdsp f0, f06767; CHECK-P10-NEXT: stfs f0, 0(r3)6768; CHECK-P10-NEXT: blr6769;6770; CHECK-P9-LABEL: st_not_disjoint32_uint64_t_float:6771; CHECK-P9: # %bb.0: # %entry6772; CHECK-P9-NEXT: mtfprd f0, r46773; CHECK-P9-NEXT: ori r3, r3, 344636774; CHECK-P9-NEXT: xscvuxdsp f0, f06775; CHECK-P9-NEXT: oris r3, r3, 16776; CHECK-P9-NEXT: stfs f0, 0(r3)6777; CHECK-P9-NEXT: blr6778;6779; CHECK-P8-LABEL: st_not_disjoint32_uint64_t_float:6780; CHECK-P8: # %bb.0: # %entry6781; CHECK-P8-NEXT: mtfprd f0, r46782; CHECK-P8-NEXT: ori r3, r3, 344636783; CHECK-P8-NEXT: oris r3, r3, 16784; CHECK-P8-NEXT: xscvuxdsp f0, f06785; CHECK-P8-NEXT: stfs f0, 0(r3)6786; CHECK-P8-NEXT: blr6787entry:6788 %conv = uitofp i64 %str to float6789 %or = or i64 %ptr, 999996790 %0 = inttoptr i64 %or to ptr6791 store float %conv, ptr %0, align 46792 ret void6793}6794 6795; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6796define dso_local void @st_disjoint_align32_uint64_t_float(i64 %ptr, i64 %str) {6797; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_float:6798; CHECK-P10: # %bb.0: # %entry6799; CHECK-P10-NEXT: mtfprd f0, r46800; CHECK-P10-NEXT: lis r5, -152646801; CHECK-P10-NEXT: and r3, r3, r56802; CHECK-P10-NEXT: xscvuxdsp f0, f06803; CHECK-P10-NEXT: pstfs f0, 999990000(r3), 06804; CHECK-P10-NEXT: blr6805;6806; CHECK-P9-LABEL: st_disjoint_align32_uint64_t_float:6807; CHECK-P9: # %bb.0: # %entry6808; CHECK-P9-NEXT: mtfprd f0, r46809; CHECK-P9-NEXT: lis r5, -152646810; CHECK-P9-NEXT: lis r4, 152586811; CHECK-P9-NEXT: xscvuxdsp f0, f06812; CHECK-P9-NEXT: and r3, r3, r56813; CHECK-P9-NEXT: ori r4, r4, 417126814; CHECK-P9-NEXT: stfsx f0, r3, r46815; CHECK-P9-NEXT: blr6816;6817; CHECK-P8-LABEL: st_disjoint_align32_uint64_t_float:6818; CHECK-P8: # %bb.0: # %entry6819; CHECK-P8-NEXT: mtfprd f0, r46820; CHECK-P8-NEXT: lis r5, -152646821; CHECK-P8-NEXT: lis r4, 152586822; CHECK-P8-NEXT: and r3, r3, r56823; CHECK-P8-NEXT: ori r4, r4, 417126824; CHECK-P8-NEXT: xscvuxdsp f0, f06825; CHECK-P8-NEXT: stfsx f0, r3, r46826; CHECK-P8-NEXT: blr6827entry:6828 %and = and i64 %ptr, -10003415046829 %conv = uitofp i64 %str to float6830 %or = or i64 %and, 9999900006831 %0 = inttoptr i64 %or to ptr6832 store float %conv, ptr %0, align 166833 ret void6834}6835 6836; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6837define dso_local void @st_not_disjoint64_uint64_t_float(i64 %ptr, i64 %str) {6838; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_float:6839; CHECK-P10: # %bb.0: # %entry6840; CHECK-P10-NEXT: mtfprd f0, r46841; CHECK-P10-NEXT: pli r4, 2326842; CHECK-P10-NEXT: pli r5, 35675873296843; CHECK-P10-NEXT: rldimi r5, r4, 32, 06844; CHECK-P10-NEXT: xscvuxdsp f0, f06845; CHECK-P10-NEXT: or r3, r3, r56846; CHECK-P10-NEXT: stfs f0, 0(r3)6847; CHECK-P10-NEXT: blr6848;6849; CHECK-P9-LABEL: st_not_disjoint64_uint64_t_float:6850; CHECK-P9: # %bb.0: # %entry6851; CHECK-P9-NEXT: mtfprd f0, r46852; CHECK-P9-NEXT: li r4, 296853; CHECK-P9-NEXT: rldic r4, r4, 35, 246854; CHECK-P9-NEXT: xscvuxdsp f0, f06855; CHECK-P9-NEXT: oris r4, r4, 544376856; CHECK-P9-NEXT: ori r4, r4, 40976857; CHECK-P9-NEXT: or r3, r3, r46858; CHECK-P9-NEXT: stfs f0, 0(r3)6859; CHECK-P9-NEXT: blr6860;6861; CHECK-P8-LABEL: st_not_disjoint64_uint64_t_float:6862; CHECK-P8: # %bb.0: # %entry6863; CHECK-P8-NEXT: mtfprd f0, r46864; CHECK-P8-NEXT: li r4, 296865; CHECK-P8-NEXT: rldic r4, r4, 35, 246866; CHECK-P8-NEXT: oris r4, r4, 544376867; CHECK-P8-NEXT: xscvuxdsp f0, f06868; CHECK-P8-NEXT: ori r4, r4, 40976869; CHECK-P8-NEXT: or r3, r3, r46870; CHECK-P8-NEXT: stfs f0, 0(r3)6871; CHECK-P8-NEXT: blr6872entry:6873 %conv = uitofp i64 %str to float6874 %or = or i64 %ptr, 10000000000016875 %0 = inttoptr i64 %or to ptr6876 store float %conv, ptr %0, align 46877 ret void6878}6879 6880; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6881define dso_local void @st_disjoint_align64_uint64_t_float(i64 %ptr, i64 %str) {6882; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_float:6883; CHECK-P10: # %bb.0: # %entry6884; CHECK-P10-NEXT: mtfprd f0, r46885; CHECK-P10-NEXT: pli r4, 2441406256886; CHECK-P10-NEXT: rldicr r3, r3, 0, 236887; CHECK-P10-NEXT: rldic r4, r4, 12, 246888; CHECK-P10-NEXT: xscvuxdsp f0, f06889; CHECK-P10-NEXT: stfsx f0, r3, r46890; CHECK-P10-NEXT: blr6891;6892; CHECK-P9-LABEL: st_disjoint_align64_uint64_t_float:6893; CHECK-P9: # %bb.0: # %entry6894; CHECK-P9-NEXT: mtfprd f0, r46895; CHECK-P9-NEXT: lis r4, 37256896; CHECK-P9-NEXT: rldicr r3, r3, 0, 236897; CHECK-P9-NEXT: xscvuxdsp f0, f06898; CHECK-P9-NEXT: ori r4, r4, 190256899; CHECK-P9-NEXT: rldic r4, r4, 12, 246900; CHECK-P9-NEXT: stfsx f0, r3, r46901; CHECK-P9-NEXT: blr6902;6903; CHECK-P8-LABEL: st_disjoint_align64_uint64_t_float:6904; CHECK-P8: # %bb.0: # %entry6905; CHECK-P8-NEXT: mtfprd f0, r46906; CHECK-P8-NEXT: lis r4, 37256907; CHECK-P8-NEXT: rldicr r3, r3, 0, 236908; CHECK-P8-NEXT: ori r4, r4, 190256909; CHECK-P8-NEXT: rldic r4, r4, 12, 246910; CHECK-P8-NEXT: xscvuxdsp f0, f06911; CHECK-P8-NEXT: stfsx f0, r3, r46912; CHECK-P8-NEXT: blr6913entry:6914 %and = and i64 %ptr, -10995116277766915 %conv = uitofp i64 %str to float6916 %or = or i64 %and, 10000000000006917 %0 = inttoptr i64 %or to ptr6918 store float %conv, ptr %0, align 40966919 ret void6920}6921 6922; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6923define dso_local void @st_cst_align16_uint64_t_float(i64 %str) {6924; CHECK-LABEL: st_cst_align16_uint64_t_float:6925; CHECK: # %bb.0: # %entry6926; CHECK-NEXT: mtfprd f0, r36927; CHECK-NEXT: xscvuxdsp f0, f06928; CHECK-NEXT: stfs f0, 4080(0)6929; CHECK-NEXT: blr6930entry:6931 %conv = uitofp i64 %str to float6932 store float %conv, ptr inttoptr (i64 4080 to ptr), align 166933 ret void6934}6935 6936; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6937define dso_local void @st_cst_align32_uint64_t_float(i64 %str) {6938; CHECK-LABEL: st_cst_align32_uint64_t_float:6939; CHECK: # %bb.0: # %entry6940; CHECK-NEXT: mtfprd f0, r36941; CHECK-NEXT: lis r3, 1536942; CHECK-NEXT: xscvuxdsp f0, f06943; CHECK-NEXT: stfs f0, -27108(r3)6944; CHECK-NEXT: blr6945entry:6946 %conv = uitofp i64 %str to float6947 store float %conv, ptr inttoptr (i64 9999900 to ptr), align 46948 ret void6949}6950 6951; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6952define dso_local void @st_cst_align64_uint64_t_float(i64 %str) {6953; CHECK-P10-LABEL: st_cst_align64_uint64_t_float:6954; CHECK-P10: # %bb.0: # %entry6955; CHECK-P10-NEXT: mtfprd f0, r36956; CHECK-P10-NEXT: pli r3, 2441406256957; CHECK-P10-NEXT: rldic r3, r3, 12, 246958; CHECK-P10-NEXT: xscvuxdsp f0, f06959; CHECK-P10-NEXT: stfs f0, 0(r3)6960; CHECK-P10-NEXT: blr6961;6962; CHECK-P9-LABEL: st_cst_align64_uint64_t_float:6963; CHECK-P9: # %bb.0: # %entry6964; CHECK-P9-NEXT: mtfprd f0, r36965; CHECK-P9-NEXT: lis r3, 37256966; CHECK-P9-NEXT: xscvuxdsp f0, f06967; CHECK-P9-NEXT: ori r3, r3, 190256968; CHECK-P9-NEXT: rldic r3, r3, 12, 246969; CHECK-P9-NEXT: stfs f0, 0(r3)6970; CHECK-P9-NEXT: blr6971;6972; CHECK-P8-LABEL: st_cst_align64_uint64_t_float:6973; CHECK-P8: # %bb.0: # %entry6974; CHECK-P8-NEXT: mtfprd f0, r36975; CHECK-P8-NEXT: lis r3, 37256976; CHECK-P8-NEXT: ori r3, r3, 190256977; CHECK-P8-NEXT: rldic r3, r3, 12, 246978; CHECK-P8-NEXT: xscvuxdsp f0, f06979; CHECK-P8-NEXT: stfs f0, 0(r3)6980; CHECK-P8-NEXT: blr6981entry:6982 %conv = uitofp i64 %str to float6983 store float %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40966984 ret void6985}6986 6987; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6988define dso_local void @st_0_uint64_t_double(i64 %ptr, i64 %str) {6989; CHECK-LABEL: st_0_uint64_t_double:6990; CHECK: # %bb.0: # %entry6991; CHECK-NEXT: mtfprd f0, r46992; CHECK-NEXT: xscvuxddp f0, f06993; CHECK-NEXT: stfd f0, 0(r3)6994; CHECK-NEXT: blr6995entry:6996 %conv = uitofp i64 %str to double6997 %0 = inttoptr i64 %ptr to ptr6998 store double %conv, ptr %0, align 86999 ret void7000}7001 7002; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7003define dso_local void @st_align16_uint64_t_double(ptr nocapture %ptr, i64 %str) {7004; CHECK-LABEL: st_align16_uint64_t_double:7005; CHECK: # %bb.0: # %entry7006; CHECK-NEXT: mtfprd f0, r47007; CHECK-NEXT: xscvuxddp f0, f07008; CHECK-NEXT: stfd f0, 8(r3)7009; CHECK-NEXT: blr7010entry:7011 %conv = uitofp i64 %str to double7012 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 87013 store double %conv, ptr %add.ptr, align 87014 ret void7015}7016 7017; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7018define dso_local void @st_align32_uint64_t_double(ptr nocapture %ptr, i64 %str) {7019; CHECK-P10-LABEL: st_align32_uint64_t_double:7020; CHECK-P10: # %bb.0: # %entry7021; CHECK-P10-NEXT: mtfprd f0, r47022; CHECK-P10-NEXT: xscvuxddp f0, f07023; CHECK-P10-NEXT: pstfd f0, 99999000(r3), 07024; CHECK-P10-NEXT: blr7025;7026; CHECK-P9-LABEL: st_align32_uint64_t_double:7027; CHECK-P9: # %bb.0: # %entry7028; CHECK-P9-NEXT: mtfprd f0, r47029; CHECK-P9-NEXT: lis r4, 15257030; CHECK-P9-NEXT: xscvuxddp f0, f07031; CHECK-P9-NEXT: ori r4, r4, 566007032; CHECK-P9-NEXT: stfdx f0, r3, r47033; CHECK-P9-NEXT: blr7034;7035; CHECK-P8-LABEL: st_align32_uint64_t_double:7036; CHECK-P8: # %bb.0: # %entry7037; CHECK-P8-NEXT: mtfprd f0, r47038; CHECK-P8-NEXT: lis r4, 15257039; CHECK-P8-NEXT: ori r4, r4, 566007040; CHECK-P8-NEXT: xscvuxddp f0, f07041; CHECK-P8-NEXT: stfdx f0, r3, r47042; CHECK-P8-NEXT: blr7043entry:7044 %conv = uitofp i64 %str to double7045 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990007046 store double %conv, ptr %add.ptr, align 87047 ret void7048}7049 7050; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7051define dso_local void @st_align64_uint64_t_double(ptr nocapture %ptr, i64 %str) {7052; CHECK-P10-LABEL: st_align64_uint64_t_double:7053; CHECK-P10: # %bb.0: # %entry7054; CHECK-P10-NEXT: mtfprd f0, r47055; CHECK-P10-NEXT: pli r4, 2441406257056; CHECK-P10-NEXT: rldic r4, r4, 12, 247057; CHECK-P10-NEXT: xscvuxddp f0, f07058; CHECK-P10-NEXT: stfdx f0, r3, r47059; CHECK-P10-NEXT: blr7060;7061; CHECK-P9-LABEL: st_align64_uint64_t_double:7062; CHECK-P9: # %bb.0: # %entry7063; CHECK-P9-NEXT: mtfprd f0, r47064; CHECK-P9-NEXT: lis r4, 37257065; CHECK-P9-NEXT: xscvuxddp f0, f07066; CHECK-P9-NEXT: ori r4, r4, 190257067; CHECK-P9-NEXT: rldic r4, r4, 12, 247068; CHECK-P9-NEXT: stfdx f0, r3, r47069; CHECK-P9-NEXT: blr7070;7071; CHECK-P8-LABEL: st_align64_uint64_t_double:7072; CHECK-P8: # %bb.0: # %entry7073; CHECK-P8-NEXT: mtfprd f0, r47074; CHECK-P8-NEXT: lis r4, 37257075; CHECK-P8-NEXT: ori r4, r4, 190257076; CHECK-P8-NEXT: rldic r4, r4, 12, 247077; CHECK-P8-NEXT: xscvuxddp f0, f07078; CHECK-P8-NEXT: stfdx f0, r3, r47079; CHECK-P8-NEXT: blr7080entry:7081 %conv = uitofp i64 %str to double7082 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000007083 store double %conv, ptr %add.ptr, align 87084 ret void7085}7086 7087; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7088define dso_local void @st_reg_uint64_t_double(ptr nocapture %ptr, i64 %off, i64 %str) {7089; CHECK-LABEL: st_reg_uint64_t_double:7090; CHECK: # %bb.0: # %entry7091; CHECK-NEXT: mtfprd f0, r57092; CHECK-NEXT: xscvuxddp f0, f07093; CHECK-NEXT: stfdx f0, r3, r47094; CHECK-NEXT: blr7095entry:7096 %conv = uitofp i64 %str to double7097 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off7098 store double %conv, ptr %add.ptr, align 87099 ret void7100}7101 7102; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7103define dso_local void @st_or1_uint64_t_double(i64 %ptr, i8 zeroext %off, i64 %str) {7104; CHECK-LABEL: st_or1_uint64_t_double:7105; CHECK: # %bb.0: # %entry7106; CHECK-NEXT: mtfprd f0, r57107; CHECK-NEXT: or r3, r4, r37108; CHECK-NEXT: xscvuxddp f0, f07109; CHECK-NEXT: stfd f0, 0(r3)7110; CHECK-NEXT: blr7111entry:7112 %conv = uitofp i64 %str to double7113 %conv1 = zext i8 %off to i647114 %or = or i64 %conv1, %ptr7115 %0 = inttoptr i64 %or to ptr7116 store double %conv, ptr %0, align 87117 ret void7118}7119 7120; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7121define dso_local void @st_or2_uint64_t_double(i64 %ptr, i8 zeroext %off, i64 %str) {7122; CHECK-LABEL: st_or2_uint64_t_double:7123; CHECK: # %bb.0: # %entry7124; CHECK-NEXT: mtfprd f0, r57125; CHECK-NEXT: rldicr r3, r3, 0, 517126; CHECK-NEXT: xscvuxddp f0, f07127; CHECK-NEXT: stfdx f0, r3, r47128; CHECK-NEXT: blr7129entry:7130 %and = and i64 %ptr, -40967131 %conv = uitofp i64 %str to double7132 %conv1 = zext i8 %off to i647133 %or = or i64 %and, %conv17134 %0 = inttoptr i64 %or to ptr7135 store double %conv, ptr %0, align 87136 ret void7137}7138 7139; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7140define dso_local void @st_not_disjoint16_uint64_t_double(i64 %ptr, i64 %str) {7141; CHECK-LABEL: st_not_disjoint16_uint64_t_double:7142; CHECK: # %bb.0: # %entry7143; CHECK-NEXT: mtfprd f0, r47144; CHECK-NEXT: ori r3, r3, 67145; CHECK-NEXT: xscvuxddp f0, f07146; CHECK-NEXT: stfd f0, 0(r3)7147; CHECK-NEXT: blr7148entry:7149 %conv = uitofp i64 %str to double7150 %or = or i64 %ptr, 67151 %0 = inttoptr i64 %or to ptr7152 store double %conv, ptr %0, align 87153 ret void7154}7155 7156; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7157define dso_local void @st_disjoint_align16_uint64_t_double(i64 %ptr, i64 %str) {7158; CHECK-LABEL: st_disjoint_align16_uint64_t_double:7159; CHECK: # %bb.0: # %entry7160; CHECK-NEXT: mtfprd f0, r47161; CHECK-NEXT: rldicr r3, r3, 0, 517162; CHECK-NEXT: xscvuxddp f0, f07163; CHECK-NEXT: stfd f0, 24(r3)7164; CHECK-NEXT: blr7165entry:7166 %and = and i64 %ptr, -40967167 %conv = uitofp i64 %str to double7168 %or = or i64 %and, 247169 %0 = inttoptr i64 %or to ptr7170 store double %conv, ptr %0, align 87171 ret void7172}7173 7174; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7175define dso_local void @st_not_disjoint32_uint64_t_double(i64 %ptr, i64 %str) {7176; CHECK-P10-LABEL: st_not_disjoint32_uint64_t_double:7177; CHECK-P10: # %bb.0: # %entry7178; CHECK-P10-NEXT: mtfprd f0, r47179; CHECK-P10-NEXT: ori r3, r3, 344637180; CHECK-P10-NEXT: oris r3, r3, 17181; CHECK-P10-NEXT: xscvuxddp f0, f07182; CHECK-P10-NEXT: stfd f0, 0(r3)7183; CHECK-P10-NEXT: blr7184;7185; CHECK-P9-LABEL: st_not_disjoint32_uint64_t_double:7186; CHECK-P9: # %bb.0: # %entry7187; CHECK-P9-NEXT: mtfprd f0, r47188; CHECK-P9-NEXT: ori r3, r3, 344637189; CHECK-P9-NEXT: xscvuxddp f0, f07190; CHECK-P9-NEXT: oris r3, r3, 17191; CHECK-P9-NEXT: stfd f0, 0(r3)7192; CHECK-P9-NEXT: blr7193;7194; CHECK-P8-LABEL: st_not_disjoint32_uint64_t_double:7195; CHECK-P8: # %bb.0: # %entry7196; CHECK-P8-NEXT: mtfprd f0, r47197; CHECK-P8-NEXT: ori r3, r3, 344637198; CHECK-P8-NEXT: oris r3, r3, 17199; CHECK-P8-NEXT: xscvuxddp f0, f07200; CHECK-P8-NEXT: stfd f0, 0(r3)7201; CHECK-P8-NEXT: blr7202entry:7203 %conv = uitofp i64 %str to double7204 %or = or i64 %ptr, 999997205 %0 = inttoptr i64 %or to ptr7206 store double %conv, ptr %0, align 87207 ret void7208}7209 7210; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7211define dso_local void @st_disjoint_align32_uint64_t_double(i64 %ptr, i64 %str) {7212; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_double:7213; CHECK-P10: # %bb.0: # %entry7214; CHECK-P10-NEXT: mtfprd f0, r47215; CHECK-P10-NEXT: lis r5, -152647216; CHECK-P10-NEXT: and r3, r3, r57217; CHECK-P10-NEXT: xscvuxddp f0, f07218; CHECK-P10-NEXT: pstfd f0, 999990000(r3), 07219; CHECK-P10-NEXT: blr7220;7221; CHECK-P9-LABEL: st_disjoint_align32_uint64_t_double:7222; CHECK-P9: # %bb.0: # %entry7223; CHECK-P9-NEXT: mtfprd f0, r47224; CHECK-P9-NEXT: lis r5, -152647225; CHECK-P9-NEXT: lis r4, 152587226; CHECK-P9-NEXT: xscvuxddp f0, f07227; CHECK-P9-NEXT: and r3, r3, r57228; CHECK-P9-NEXT: ori r4, r4, 417127229; CHECK-P9-NEXT: stfdx f0, r3, r47230; CHECK-P9-NEXT: blr7231;7232; CHECK-P8-LABEL: st_disjoint_align32_uint64_t_double:7233; CHECK-P8: # %bb.0: # %entry7234; CHECK-P8-NEXT: mtfprd f0, r47235; CHECK-P8-NEXT: lis r5, -152647236; CHECK-P8-NEXT: lis r4, 152587237; CHECK-P8-NEXT: and r3, r3, r57238; CHECK-P8-NEXT: ori r4, r4, 417127239; CHECK-P8-NEXT: xscvuxddp f0, f07240; CHECK-P8-NEXT: stfdx f0, r3, r47241; CHECK-P8-NEXT: blr7242entry:7243 %and = and i64 %ptr, -10003415047244 %conv = uitofp i64 %str to double7245 %or = or i64 %and, 9999900007246 %0 = inttoptr i64 %or to ptr7247 store double %conv, ptr %0, align 167248 ret void7249}7250 7251; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7252define dso_local void @st_not_disjoint64_uint64_t_double(i64 %ptr, i64 %str) {7253; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_double:7254; CHECK-P10: # %bb.0: # %entry7255; CHECK-P10-NEXT: mtfprd f0, r47256; CHECK-P10-NEXT: pli r4, 2327257; CHECK-P10-NEXT: pli r5, 35675873297258; CHECK-P10-NEXT: rldimi r5, r4, 32, 07259; CHECK-P10-NEXT: xscvuxddp f0, f07260; CHECK-P10-NEXT: or r3, r3, r57261; CHECK-P10-NEXT: stfd f0, 0(r3)7262; CHECK-P10-NEXT: blr7263;7264; CHECK-P9-LABEL: st_not_disjoint64_uint64_t_double:7265; CHECK-P9: # %bb.0: # %entry7266; CHECK-P9-NEXT: mtfprd f0, r47267; CHECK-P9-NEXT: li r4, 297268; CHECK-P9-NEXT: rldic r4, r4, 35, 247269; CHECK-P9-NEXT: xscvuxddp f0, f07270; CHECK-P9-NEXT: oris r4, r4, 544377271; CHECK-P9-NEXT: ori r4, r4, 40977272; CHECK-P9-NEXT: or r3, r3, r47273; CHECK-P9-NEXT: stfd f0, 0(r3)7274; CHECK-P9-NEXT: blr7275;7276; CHECK-P8-LABEL: st_not_disjoint64_uint64_t_double:7277; CHECK-P8: # %bb.0: # %entry7278; CHECK-P8-NEXT: mtfprd f0, r47279; CHECK-P8-NEXT: li r4, 297280; CHECK-P8-NEXT: rldic r4, r4, 35, 247281; CHECK-P8-NEXT: oris r4, r4, 544377282; CHECK-P8-NEXT: xscvuxddp f0, f07283; CHECK-P8-NEXT: ori r4, r4, 40977284; CHECK-P8-NEXT: or r3, r3, r47285; CHECK-P8-NEXT: stfd f0, 0(r3)7286; CHECK-P8-NEXT: blr7287entry:7288 %conv = uitofp i64 %str to double7289 %or = or i64 %ptr, 10000000000017290 %0 = inttoptr i64 %or to ptr7291 store double %conv, ptr %0, align 87292 ret void7293}7294 7295; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7296define dso_local void @st_disjoint_align64_uint64_t_double(i64 %ptr, i64 %str) {7297; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_double:7298; CHECK-P10: # %bb.0: # %entry7299; CHECK-P10-NEXT: mtfprd f0, r47300; CHECK-P10-NEXT: pli r4, 2441406257301; CHECK-P10-NEXT: rldicr r3, r3, 0, 237302; CHECK-P10-NEXT: rldic r4, r4, 12, 247303; CHECK-P10-NEXT: xscvuxddp f0, f07304; CHECK-P10-NEXT: stfdx f0, r3, r47305; CHECK-P10-NEXT: blr7306;7307; CHECK-P9-LABEL: st_disjoint_align64_uint64_t_double:7308; CHECK-P9: # %bb.0: # %entry7309; CHECK-P9-NEXT: mtfprd f0, r47310; CHECK-P9-NEXT: lis r4, 37257311; CHECK-P9-NEXT: rldicr r3, r3, 0, 237312; CHECK-P9-NEXT: xscvuxddp f0, f07313; CHECK-P9-NEXT: ori r4, r4, 190257314; CHECK-P9-NEXT: rldic r4, r4, 12, 247315; CHECK-P9-NEXT: stfdx f0, r3, r47316; CHECK-P9-NEXT: blr7317;7318; CHECK-P8-LABEL: st_disjoint_align64_uint64_t_double:7319; CHECK-P8: # %bb.0: # %entry7320; CHECK-P8-NEXT: mtfprd f0, r47321; CHECK-P8-NEXT: lis r4, 37257322; CHECK-P8-NEXT: rldicr r3, r3, 0, 237323; CHECK-P8-NEXT: ori r4, r4, 190257324; CHECK-P8-NEXT: rldic r4, r4, 12, 247325; CHECK-P8-NEXT: xscvuxddp f0, f07326; CHECK-P8-NEXT: stfdx f0, r3, r47327; CHECK-P8-NEXT: blr7328entry:7329 %and = and i64 %ptr, -10995116277767330 %conv = uitofp i64 %str to double7331 %or = or i64 %and, 10000000000007332 %0 = inttoptr i64 %or to ptr7333 store double %conv, ptr %0, align 40967334 ret void7335}7336 7337; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7338define dso_local void @st_cst_align16_uint64_t_double(i64 %str) {7339; CHECK-LABEL: st_cst_align16_uint64_t_double:7340; CHECK: # %bb.0: # %entry7341; CHECK-NEXT: mtfprd f0, r37342; CHECK-NEXT: xscvuxddp f0, f07343; CHECK-NEXT: stfd f0, 4080(0)7344; CHECK-NEXT: blr7345entry:7346 %conv = uitofp i64 %str to double7347 store double %conv, ptr inttoptr (i64 4080 to ptr), align 167348 ret void7349}7350 7351; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7352define dso_local void @st_cst_align32_uint64_t_double(i64 %str) {7353; CHECK-LABEL: st_cst_align32_uint64_t_double:7354; CHECK: # %bb.0: # %entry7355; CHECK-NEXT: mtfprd f0, r37356; CHECK-NEXT: lis r3, 1537357; CHECK-NEXT: xscvuxddp f0, f07358; CHECK-NEXT: stfd f0, -27108(r3)7359; CHECK-NEXT: blr7360entry:7361 %conv = uitofp i64 %str to double7362 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 87363 ret void7364}7365 7366; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7367define dso_local void @st_cst_align64_uint64_t_double(i64 %str) {7368; CHECK-P10-LABEL: st_cst_align64_uint64_t_double:7369; CHECK-P10: # %bb.0: # %entry7370; CHECK-P10-NEXT: mtfprd f0, r37371; CHECK-P10-NEXT: pli r3, 2441406257372; CHECK-P10-NEXT: rldic r3, r3, 12, 247373; CHECK-P10-NEXT: xscvuxddp f0, f07374; CHECK-P10-NEXT: stfd f0, 0(r3)7375; CHECK-P10-NEXT: blr7376;7377; CHECK-P9-LABEL: st_cst_align64_uint64_t_double:7378; CHECK-P9: # %bb.0: # %entry7379; CHECK-P9-NEXT: mtfprd f0, r37380; CHECK-P9-NEXT: lis r3, 37257381; CHECK-P9-NEXT: xscvuxddp f0, f07382; CHECK-P9-NEXT: ori r3, r3, 190257383; CHECK-P9-NEXT: rldic r3, r3, 12, 247384; CHECK-P9-NEXT: stfd f0, 0(r3)7385; CHECK-P9-NEXT: blr7386;7387; CHECK-P8-LABEL: st_cst_align64_uint64_t_double:7388; CHECK-P8: # %bb.0: # %entry7389; CHECK-P8-NEXT: mtfprd f0, r37390; CHECK-P8-NEXT: lis r3, 37257391; CHECK-P8-NEXT: ori r3, r3, 190257392; CHECK-P8-NEXT: rldic r3, r3, 12, 247393; CHECK-P8-NEXT: xscvuxddp f0, f07394; CHECK-P8-NEXT: stfd f0, 0(r3)7395; CHECK-P8-NEXT: blr7396entry:7397 %conv = uitofp i64 %str to double7398 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40967399 ret void7400}7401 7402; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7403define dso_local void @st_0_int64_t_float(i64 %ptr, i64 %str) {7404; CHECK-LABEL: st_0_int64_t_float:7405; CHECK: # %bb.0: # %entry7406; CHECK-NEXT: mtfprd f0, r47407; CHECK-NEXT: xscvsxdsp f0, f07408; CHECK-NEXT: stfs f0, 0(r3)7409; CHECK-NEXT: blr7410entry:7411 %conv = sitofp i64 %str to float7412 %0 = inttoptr i64 %ptr to ptr7413 store float %conv, ptr %0, align 47414 ret void7415}7416 7417; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7418define dso_local void @st_align16_int64_t_float(ptr nocapture %ptr, i64 %str) {7419; CHECK-LABEL: st_align16_int64_t_float:7420; CHECK: # %bb.0: # %entry7421; CHECK-NEXT: mtfprd f0, r47422; CHECK-NEXT: xscvsxdsp f0, f07423; CHECK-NEXT: stfs f0, 8(r3)7424; CHECK-NEXT: blr7425entry:7426 %conv = sitofp i64 %str to float7427 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 87428 store float %conv, ptr %add.ptr, align 47429 ret void7430}7431 7432; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7433define dso_local void @st_align32_int64_t_float(ptr nocapture %ptr, i64 %str) {7434; CHECK-P10-LABEL: st_align32_int64_t_float:7435; CHECK-P10: # %bb.0: # %entry7436; CHECK-P10-NEXT: mtfprd f0, r47437; CHECK-P10-NEXT: xscvsxdsp f0, f07438; CHECK-P10-NEXT: pstfs f0, 99999000(r3), 07439; CHECK-P10-NEXT: blr7440;7441; CHECK-P9-LABEL: st_align32_int64_t_float:7442; CHECK-P9: # %bb.0: # %entry7443; CHECK-P9-NEXT: mtfprd f0, r47444; CHECK-P9-NEXT: lis r4, 15257445; CHECK-P9-NEXT: xscvsxdsp f0, f07446; CHECK-P9-NEXT: ori r4, r4, 566007447; CHECK-P9-NEXT: stfsx f0, r3, r47448; CHECK-P9-NEXT: blr7449;7450; CHECK-P8-LABEL: st_align32_int64_t_float:7451; CHECK-P8: # %bb.0: # %entry7452; CHECK-P8-NEXT: mtfprd f0, r47453; CHECK-P8-NEXT: lis r4, 15257454; CHECK-P8-NEXT: ori r4, r4, 566007455; CHECK-P8-NEXT: xscvsxdsp f0, f07456; CHECK-P8-NEXT: stfsx f0, r3, r47457; CHECK-P8-NEXT: blr7458entry:7459 %conv = sitofp i64 %str to float7460 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990007461 store float %conv, ptr %add.ptr, align 47462 ret void7463}7464 7465; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7466define dso_local void @st_align64_int64_t_float(ptr nocapture %ptr, i64 %str) {7467; CHECK-P10-LABEL: st_align64_int64_t_float:7468; CHECK-P10: # %bb.0: # %entry7469; CHECK-P10-NEXT: mtfprd f0, r47470; CHECK-P10-NEXT: pli r4, 2441406257471; CHECK-P10-NEXT: rldic r4, r4, 12, 247472; CHECK-P10-NEXT: xscvsxdsp f0, f07473; CHECK-P10-NEXT: stfsx f0, r3, r47474; CHECK-P10-NEXT: blr7475;7476; CHECK-P9-LABEL: st_align64_int64_t_float:7477; CHECK-P9: # %bb.0: # %entry7478; CHECK-P9-NEXT: mtfprd f0, r47479; CHECK-P9-NEXT: lis r4, 37257480; CHECK-P9-NEXT: xscvsxdsp f0, f07481; CHECK-P9-NEXT: ori r4, r4, 190257482; CHECK-P9-NEXT: rldic r4, r4, 12, 247483; CHECK-P9-NEXT: stfsx f0, r3, r47484; CHECK-P9-NEXT: blr7485;7486; CHECK-P8-LABEL: st_align64_int64_t_float:7487; CHECK-P8: # %bb.0: # %entry7488; CHECK-P8-NEXT: mtfprd f0, r47489; CHECK-P8-NEXT: lis r4, 37257490; CHECK-P8-NEXT: ori r4, r4, 190257491; CHECK-P8-NEXT: rldic r4, r4, 12, 247492; CHECK-P8-NEXT: xscvsxdsp f0, f07493; CHECK-P8-NEXT: stfsx f0, r3, r47494; CHECK-P8-NEXT: blr7495entry:7496 %conv = sitofp i64 %str to float7497 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000007498 store float %conv, ptr %add.ptr, align 47499 ret void7500}7501 7502; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7503define dso_local void @st_reg_int64_t_float(ptr nocapture %ptr, i64 %off, i64 %str) {7504; CHECK-LABEL: st_reg_int64_t_float:7505; CHECK: # %bb.0: # %entry7506; CHECK-NEXT: mtfprd f0, r57507; CHECK-NEXT: xscvsxdsp f0, f07508; CHECK-NEXT: stfsx f0, r3, r47509; CHECK-NEXT: blr7510entry:7511 %conv = sitofp i64 %str to float7512 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off7513 store float %conv, ptr %add.ptr, align 47514 ret void7515}7516 7517; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7518define dso_local void @st_or1_int64_t_float(i64 %ptr, i8 zeroext %off, i64 %str) {7519; CHECK-LABEL: st_or1_int64_t_float:7520; CHECK: # %bb.0: # %entry7521; CHECK-NEXT: mtfprd f0, r57522; CHECK-NEXT: or r3, r4, r37523; CHECK-NEXT: xscvsxdsp f0, f07524; CHECK-NEXT: stfs f0, 0(r3)7525; CHECK-NEXT: blr7526entry:7527 %conv = sitofp i64 %str to float7528 %conv1 = zext i8 %off to i647529 %or = or i64 %conv1, %ptr7530 %0 = inttoptr i64 %or to ptr7531 store float %conv, ptr %0, align 47532 ret void7533}7534 7535; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7536define dso_local void @st_or2_int64_t_float(i64 %ptr, i8 zeroext %off, i64 %str) {7537; CHECK-LABEL: st_or2_int64_t_float:7538; CHECK: # %bb.0: # %entry7539; CHECK-NEXT: mtfprd f0, r57540; CHECK-NEXT: rldicr r3, r3, 0, 517541; CHECK-NEXT: xscvsxdsp f0, f07542; CHECK-NEXT: stfsx f0, r3, r47543; CHECK-NEXT: blr7544entry:7545 %and = and i64 %ptr, -40967546 %conv = sitofp i64 %str to float7547 %conv1 = zext i8 %off to i647548 %or = or i64 %and, %conv17549 %0 = inttoptr i64 %or to ptr7550 store float %conv, ptr %0, align 47551 ret void7552}7553 7554; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7555define dso_local void @st_not_disjoint16_int64_t_float(i64 %ptr, i64 %str) {7556; CHECK-LABEL: st_not_disjoint16_int64_t_float:7557; CHECK: # %bb.0: # %entry7558; CHECK-NEXT: mtfprd f0, r47559; CHECK-NEXT: ori r3, r3, 67560; CHECK-NEXT: xscvsxdsp f0, f07561; CHECK-NEXT: stfs f0, 0(r3)7562; CHECK-NEXT: blr7563entry:7564 %conv = sitofp i64 %str to float7565 %or = or i64 %ptr, 67566 %0 = inttoptr i64 %or to ptr7567 store float %conv, ptr %0, align 47568 ret void7569}7570 7571; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7572define dso_local void @st_disjoint_align16_int64_t_float(i64 %ptr, i64 %str) {7573; CHECK-LABEL: st_disjoint_align16_int64_t_float:7574; CHECK: # %bb.0: # %entry7575; CHECK-NEXT: mtfprd f0, r47576; CHECK-NEXT: rldicr r3, r3, 0, 517577; CHECK-NEXT: xscvsxdsp f0, f07578; CHECK-NEXT: stfs f0, 24(r3)7579; CHECK-NEXT: blr7580entry:7581 %and = and i64 %ptr, -40967582 %conv = sitofp i64 %str to float7583 %or = or i64 %and, 247584 %0 = inttoptr i64 %or to ptr7585 store float %conv, ptr %0, align 87586 ret void7587}7588 7589; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7590define dso_local void @st_not_disjoint32_int64_t_float(i64 %ptr, i64 %str) {7591; CHECK-P10-LABEL: st_not_disjoint32_int64_t_float:7592; CHECK-P10: # %bb.0: # %entry7593; CHECK-P10-NEXT: mtfprd f0, r47594; CHECK-P10-NEXT: ori r3, r3, 344637595; CHECK-P10-NEXT: oris r3, r3, 17596; CHECK-P10-NEXT: xscvsxdsp f0, f07597; CHECK-P10-NEXT: stfs f0, 0(r3)7598; CHECK-P10-NEXT: blr7599;7600; CHECK-P9-LABEL: st_not_disjoint32_int64_t_float:7601; CHECK-P9: # %bb.0: # %entry7602; CHECK-P9-NEXT: mtfprd f0, r47603; CHECK-P9-NEXT: ori r3, r3, 344637604; CHECK-P9-NEXT: xscvsxdsp f0, f07605; CHECK-P9-NEXT: oris r3, r3, 17606; CHECK-P9-NEXT: stfs f0, 0(r3)7607; CHECK-P9-NEXT: blr7608;7609; CHECK-P8-LABEL: st_not_disjoint32_int64_t_float:7610; CHECK-P8: # %bb.0: # %entry7611; CHECK-P8-NEXT: mtfprd f0, r47612; CHECK-P8-NEXT: ori r3, r3, 344637613; CHECK-P8-NEXT: oris r3, r3, 17614; CHECK-P8-NEXT: xscvsxdsp f0, f07615; CHECK-P8-NEXT: stfs f0, 0(r3)7616; CHECK-P8-NEXT: blr7617entry:7618 %conv = sitofp i64 %str to float7619 %or = or i64 %ptr, 999997620 %0 = inttoptr i64 %or to ptr7621 store float %conv, ptr %0, align 47622 ret void7623}7624 7625; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7626define dso_local void @st_disjoint_align32_int64_t_float(i64 %ptr, i64 %str) {7627; CHECK-P10-LABEL: st_disjoint_align32_int64_t_float:7628; CHECK-P10: # %bb.0: # %entry7629; CHECK-P10-NEXT: mtfprd f0, r47630; CHECK-P10-NEXT: lis r5, -152647631; CHECK-P10-NEXT: and r3, r3, r57632; CHECK-P10-NEXT: xscvsxdsp f0, f07633; CHECK-P10-NEXT: pstfs f0, 999990000(r3), 07634; CHECK-P10-NEXT: blr7635;7636; CHECK-P9-LABEL: st_disjoint_align32_int64_t_float:7637; CHECK-P9: # %bb.0: # %entry7638; CHECK-P9-NEXT: mtfprd f0, r47639; CHECK-P9-NEXT: lis r5, -152647640; CHECK-P9-NEXT: lis r4, 152587641; CHECK-P9-NEXT: xscvsxdsp f0, f07642; CHECK-P9-NEXT: and r3, r3, r57643; CHECK-P9-NEXT: ori r4, r4, 417127644; CHECK-P9-NEXT: stfsx f0, r3, r47645; CHECK-P9-NEXT: blr7646;7647; CHECK-P8-LABEL: st_disjoint_align32_int64_t_float:7648; CHECK-P8: # %bb.0: # %entry7649; CHECK-P8-NEXT: mtfprd f0, r47650; CHECK-P8-NEXT: lis r5, -152647651; CHECK-P8-NEXT: lis r4, 152587652; CHECK-P8-NEXT: and r3, r3, r57653; CHECK-P8-NEXT: ori r4, r4, 417127654; CHECK-P8-NEXT: xscvsxdsp f0, f07655; CHECK-P8-NEXT: stfsx f0, r3, r47656; CHECK-P8-NEXT: blr7657entry:7658 %and = and i64 %ptr, -10003415047659 %conv = sitofp i64 %str to float7660 %or = or i64 %and, 9999900007661 %0 = inttoptr i64 %or to ptr7662 store float %conv, ptr %0, align 167663 ret void7664}7665 7666; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7667define dso_local void @st_not_disjoint64_int64_t_float(i64 %ptr, i64 %str) {7668; CHECK-P10-LABEL: st_not_disjoint64_int64_t_float:7669; CHECK-P10: # %bb.0: # %entry7670; CHECK-P10-NEXT: mtfprd f0, r47671; CHECK-P10-NEXT: pli r4, 2327672; CHECK-P10-NEXT: pli r5, 35675873297673; CHECK-P10-NEXT: rldimi r5, r4, 32, 07674; CHECK-P10-NEXT: xscvsxdsp f0, f07675; CHECK-P10-NEXT: or r3, r3, r57676; CHECK-P10-NEXT: stfs f0, 0(r3)7677; CHECK-P10-NEXT: blr7678;7679; CHECK-P9-LABEL: st_not_disjoint64_int64_t_float:7680; CHECK-P9: # %bb.0: # %entry7681; CHECK-P9-NEXT: mtfprd f0, r47682; CHECK-P9-NEXT: li r4, 297683; CHECK-P9-NEXT: rldic r4, r4, 35, 247684; CHECK-P9-NEXT: xscvsxdsp f0, f07685; CHECK-P9-NEXT: oris r4, r4, 544377686; CHECK-P9-NEXT: ori r4, r4, 40977687; CHECK-P9-NEXT: or r3, r3, r47688; CHECK-P9-NEXT: stfs f0, 0(r3)7689; CHECK-P9-NEXT: blr7690;7691; CHECK-P8-LABEL: st_not_disjoint64_int64_t_float:7692; CHECK-P8: # %bb.0: # %entry7693; CHECK-P8-NEXT: mtfprd f0, r47694; CHECK-P8-NEXT: li r4, 297695; CHECK-P8-NEXT: rldic r4, r4, 35, 247696; CHECK-P8-NEXT: oris r4, r4, 544377697; CHECK-P8-NEXT: xscvsxdsp f0, f07698; CHECK-P8-NEXT: ori r4, r4, 40977699; CHECK-P8-NEXT: or r3, r3, r47700; CHECK-P8-NEXT: stfs f0, 0(r3)7701; CHECK-P8-NEXT: blr7702entry:7703 %conv = sitofp i64 %str to float7704 %or = or i64 %ptr, 10000000000017705 %0 = inttoptr i64 %or to ptr7706 store float %conv, ptr %0, align 47707 ret void7708}7709 7710; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7711define dso_local void @st_disjoint_align64_int64_t_float(i64 %ptr, i64 %str) {7712; CHECK-P10-LABEL: st_disjoint_align64_int64_t_float:7713; CHECK-P10: # %bb.0: # %entry7714; CHECK-P10-NEXT: mtfprd f0, r47715; CHECK-P10-NEXT: pli r4, 2441406257716; CHECK-P10-NEXT: rldicr r3, r3, 0, 237717; CHECK-P10-NEXT: rldic r4, r4, 12, 247718; CHECK-P10-NEXT: xscvsxdsp f0, f07719; CHECK-P10-NEXT: stfsx f0, r3, r47720; CHECK-P10-NEXT: blr7721;7722; CHECK-P9-LABEL: st_disjoint_align64_int64_t_float:7723; CHECK-P9: # %bb.0: # %entry7724; CHECK-P9-NEXT: mtfprd f0, r47725; CHECK-P9-NEXT: lis r4, 37257726; CHECK-P9-NEXT: rldicr r3, r3, 0, 237727; CHECK-P9-NEXT: xscvsxdsp f0, f07728; CHECK-P9-NEXT: ori r4, r4, 190257729; CHECK-P9-NEXT: rldic r4, r4, 12, 247730; CHECK-P9-NEXT: stfsx f0, r3, r47731; CHECK-P9-NEXT: blr7732;7733; CHECK-P8-LABEL: st_disjoint_align64_int64_t_float:7734; CHECK-P8: # %bb.0: # %entry7735; CHECK-P8-NEXT: mtfprd f0, r47736; CHECK-P8-NEXT: lis r4, 37257737; CHECK-P8-NEXT: rldicr r3, r3, 0, 237738; CHECK-P8-NEXT: ori r4, r4, 190257739; CHECK-P8-NEXT: rldic r4, r4, 12, 247740; CHECK-P8-NEXT: xscvsxdsp f0, f07741; CHECK-P8-NEXT: stfsx f0, r3, r47742; CHECK-P8-NEXT: blr7743entry:7744 %and = and i64 %ptr, -10995116277767745 %conv = sitofp i64 %str to float7746 %or = or i64 %and, 10000000000007747 %0 = inttoptr i64 %or to ptr7748 store float %conv, ptr %0, align 40967749 ret void7750}7751 7752; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7753define dso_local void @st_cst_align16_int64_t_float(i64 %str) {7754; CHECK-LABEL: st_cst_align16_int64_t_float:7755; CHECK: # %bb.0: # %entry7756; CHECK-NEXT: mtfprd f0, r37757; CHECK-NEXT: xscvsxdsp f0, f07758; CHECK-NEXT: stfs f0, 4080(0)7759; CHECK-NEXT: blr7760entry:7761 %conv = sitofp i64 %str to float7762 store float %conv, ptr inttoptr (i64 4080 to ptr), align 167763 ret void7764}7765 7766; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7767define dso_local void @st_cst_align32_int64_t_float(i64 %str) {7768; CHECK-LABEL: st_cst_align32_int64_t_float:7769; CHECK: # %bb.0: # %entry7770; CHECK-NEXT: mtfprd f0, r37771; CHECK-NEXT: lis r3, 1537772; CHECK-NEXT: xscvsxdsp f0, f07773; CHECK-NEXT: stfs f0, -27108(r3)7774; CHECK-NEXT: blr7775entry:7776 %conv = sitofp i64 %str to float7777 store float %conv, ptr inttoptr (i64 9999900 to ptr), align 47778 ret void7779}7780 7781; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7782define dso_local void @st_cst_align64_int64_t_float(i64 %str) {7783; CHECK-P10-LABEL: st_cst_align64_int64_t_float:7784; CHECK-P10: # %bb.0: # %entry7785; CHECK-P10-NEXT: mtfprd f0, r37786; CHECK-P10-NEXT: pli r3, 2441406257787; CHECK-P10-NEXT: rldic r3, r3, 12, 247788; CHECK-P10-NEXT: xscvsxdsp f0, f07789; CHECK-P10-NEXT: stfs f0, 0(r3)7790; CHECK-P10-NEXT: blr7791;7792; CHECK-P9-LABEL: st_cst_align64_int64_t_float:7793; CHECK-P9: # %bb.0: # %entry7794; CHECK-P9-NEXT: mtfprd f0, r37795; CHECK-P9-NEXT: lis r3, 37257796; CHECK-P9-NEXT: xscvsxdsp f0, f07797; CHECK-P9-NEXT: ori r3, r3, 190257798; CHECK-P9-NEXT: rldic r3, r3, 12, 247799; CHECK-P9-NEXT: stfs f0, 0(r3)7800; CHECK-P9-NEXT: blr7801;7802; CHECK-P8-LABEL: st_cst_align64_int64_t_float:7803; CHECK-P8: # %bb.0: # %entry7804; CHECK-P8-NEXT: mtfprd f0, r37805; CHECK-P8-NEXT: lis r3, 37257806; CHECK-P8-NEXT: ori r3, r3, 190257807; CHECK-P8-NEXT: rldic r3, r3, 12, 247808; CHECK-P8-NEXT: xscvsxdsp f0, f07809; CHECK-P8-NEXT: stfs f0, 0(r3)7810; CHECK-P8-NEXT: blr7811entry:7812 %conv = sitofp i64 %str to float7813 store float %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40967814 ret void7815}7816 7817; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7818define dso_local void @st_0_int64_t_double(i64 %ptr, i64 %str) {7819; CHECK-LABEL: st_0_int64_t_double:7820; CHECK: # %bb.0: # %entry7821; CHECK-NEXT: mtfprd f0, r47822; CHECK-NEXT: xscvsxddp f0, f07823; CHECK-NEXT: stfd f0, 0(r3)7824; CHECK-NEXT: blr7825entry:7826 %conv = sitofp i64 %str to double7827 %0 = inttoptr i64 %ptr to ptr7828 store double %conv, ptr %0, align 87829 ret void7830}7831 7832; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7833define dso_local void @st_align16_int64_t_double(ptr nocapture %ptr, i64 %str) {7834; CHECK-LABEL: st_align16_int64_t_double:7835; CHECK: # %bb.0: # %entry7836; CHECK-NEXT: mtfprd f0, r47837; CHECK-NEXT: xscvsxddp f0, f07838; CHECK-NEXT: stfd f0, 8(r3)7839; CHECK-NEXT: blr7840entry:7841 %conv = sitofp i64 %str to double7842 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 87843 store double %conv, ptr %add.ptr, align 87844 ret void7845}7846 7847; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7848define dso_local void @st_align32_int64_t_double(ptr nocapture %ptr, i64 %str) {7849; CHECK-P10-LABEL: st_align32_int64_t_double:7850; CHECK-P10: # %bb.0: # %entry7851; CHECK-P10-NEXT: mtfprd f0, r47852; CHECK-P10-NEXT: xscvsxddp f0, f07853; CHECK-P10-NEXT: pstfd f0, 99999000(r3), 07854; CHECK-P10-NEXT: blr7855;7856; CHECK-P9-LABEL: st_align32_int64_t_double:7857; CHECK-P9: # %bb.0: # %entry7858; CHECK-P9-NEXT: mtfprd f0, r47859; CHECK-P9-NEXT: lis r4, 15257860; CHECK-P9-NEXT: xscvsxddp f0, f07861; CHECK-P9-NEXT: ori r4, r4, 566007862; CHECK-P9-NEXT: stfdx f0, r3, r47863; CHECK-P9-NEXT: blr7864;7865; CHECK-P8-LABEL: st_align32_int64_t_double:7866; CHECK-P8: # %bb.0: # %entry7867; CHECK-P8-NEXT: mtfprd f0, r47868; CHECK-P8-NEXT: lis r4, 15257869; CHECK-P8-NEXT: ori r4, r4, 566007870; CHECK-P8-NEXT: xscvsxddp f0, f07871; CHECK-P8-NEXT: stfdx f0, r3, r47872; CHECK-P8-NEXT: blr7873entry:7874 %conv = sitofp i64 %str to double7875 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990007876 store double %conv, ptr %add.ptr, align 87877 ret void7878}7879 7880; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7881define dso_local void @st_align64_int64_t_double(ptr nocapture %ptr, i64 %str) {7882; CHECK-P10-LABEL: st_align64_int64_t_double:7883; CHECK-P10: # %bb.0: # %entry7884; CHECK-P10-NEXT: mtfprd f0, r47885; CHECK-P10-NEXT: pli r4, 2441406257886; CHECK-P10-NEXT: rldic r4, r4, 12, 247887; CHECK-P10-NEXT: xscvsxddp f0, f07888; CHECK-P10-NEXT: stfdx f0, r3, r47889; CHECK-P10-NEXT: blr7890;7891; CHECK-P9-LABEL: st_align64_int64_t_double:7892; CHECK-P9: # %bb.0: # %entry7893; CHECK-P9-NEXT: mtfprd f0, r47894; CHECK-P9-NEXT: lis r4, 37257895; CHECK-P9-NEXT: xscvsxddp f0, f07896; CHECK-P9-NEXT: ori r4, r4, 190257897; CHECK-P9-NEXT: rldic r4, r4, 12, 247898; CHECK-P9-NEXT: stfdx f0, r3, r47899; CHECK-P9-NEXT: blr7900;7901; CHECK-P8-LABEL: st_align64_int64_t_double:7902; CHECK-P8: # %bb.0: # %entry7903; CHECK-P8-NEXT: mtfprd f0, r47904; CHECK-P8-NEXT: lis r4, 37257905; CHECK-P8-NEXT: ori r4, r4, 190257906; CHECK-P8-NEXT: rldic r4, r4, 12, 247907; CHECK-P8-NEXT: xscvsxddp f0, f07908; CHECK-P8-NEXT: stfdx f0, r3, r47909; CHECK-P8-NEXT: blr7910entry:7911 %conv = sitofp i64 %str to double7912 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000007913 store double %conv, ptr %add.ptr, align 87914 ret void7915}7916 7917; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7918define dso_local void @st_reg_int64_t_double(ptr nocapture %ptr, i64 %off, i64 %str) {7919; CHECK-LABEL: st_reg_int64_t_double:7920; CHECK: # %bb.0: # %entry7921; CHECK-NEXT: mtfprd f0, r57922; CHECK-NEXT: xscvsxddp f0, f07923; CHECK-NEXT: stfdx f0, r3, r47924; CHECK-NEXT: blr7925entry:7926 %conv = sitofp i64 %str to double7927 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off7928 store double %conv, ptr %add.ptr, align 87929 ret void7930}7931 7932; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7933define dso_local void @st_or1_int64_t_double(i64 %ptr, i8 zeroext %off, i64 %str) {7934; CHECK-LABEL: st_or1_int64_t_double:7935; CHECK: # %bb.0: # %entry7936; CHECK-NEXT: mtfprd f0, r57937; CHECK-NEXT: or r3, r4, r37938; CHECK-NEXT: xscvsxddp f0, f07939; CHECK-NEXT: stfd f0, 0(r3)7940; CHECK-NEXT: blr7941entry:7942 %conv = sitofp i64 %str to double7943 %conv1 = zext i8 %off to i647944 %or = or i64 %conv1, %ptr7945 %0 = inttoptr i64 %or to ptr7946 store double %conv, ptr %0, align 87947 ret void7948}7949 7950; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7951define dso_local void @st_or2_int64_t_double(i64 %ptr, i8 zeroext %off, i64 %str) {7952; CHECK-LABEL: st_or2_int64_t_double:7953; CHECK: # %bb.0: # %entry7954; CHECK-NEXT: mtfprd f0, r57955; CHECK-NEXT: rldicr r3, r3, 0, 517956; CHECK-NEXT: xscvsxddp f0, f07957; CHECK-NEXT: stfdx f0, r3, r47958; CHECK-NEXT: blr7959entry:7960 %and = and i64 %ptr, -40967961 %conv = sitofp i64 %str to double7962 %conv1 = zext i8 %off to i647963 %or = or i64 %and, %conv17964 %0 = inttoptr i64 %or to ptr7965 store double %conv, ptr %0, align 87966 ret void7967}7968 7969; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7970define dso_local void @st_not_disjoint16_int64_t_double(i64 %ptr, i64 %str) {7971; CHECK-LABEL: st_not_disjoint16_int64_t_double:7972; CHECK: # %bb.0: # %entry7973; CHECK-NEXT: mtfprd f0, r47974; CHECK-NEXT: ori r3, r3, 67975; CHECK-NEXT: xscvsxddp f0, f07976; CHECK-NEXT: stfd f0, 0(r3)7977; CHECK-NEXT: blr7978entry:7979 %conv = sitofp i64 %str to double7980 %or = or i64 %ptr, 67981 %0 = inttoptr i64 %or to ptr7982 store double %conv, ptr %0, align 87983 ret void7984}7985 7986; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7987define dso_local void @st_disjoint_align16_int64_t_double(i64 %ptr, i64 %str) {7988; CHECK-LABEL: st_disjoint_align16_int64_t_double:7989; CHECK: # %bb.0: # %entry7990; CHECK-NEXT: mtfprd f0, r47991; CHECK-NEXT: rldicr r3, r3, 0, 517992; CHECK-NEXT: xscvsxddp f0, f07993; CHECK-NEXT: stfd f0, 24(r3)7994; CHECK-NEXT: blr7995entry:7996 %and = and i64 %ptr, -40967997 %conv = sitofp i64 %str to double7998 %or = or i64 %and, 247999 %0 = inttoptr i64 %or to ptr8000 store double %conv, ptr %0, align 88001 ret void8002}8003 8004; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly8005define dso_local void @st_not_disjoint32_int64_t_double(i64 %ptr, i64 %str) {8006; CHECK-P10-LABEL: st_not_disjoint32_int64_t_double:8007; CHECK-P10: # %bb.0: # %entry8008; CHECK-P10-NEXT: mtfprd f0, r48009; CHECK-P10-NEXT: ori r3, r3, 344638010; CHECK-P10-NEXT: oris r3, r3, 18011; CHECK-P10-NEXT: xscvsxddp f0, f08012; CHECK-P10-NEXT: stfd f0, 0(r3)8013; CHECK-P10-NEXT: blr8014;8015; CHECK-P9-LABEL: st_not_disjoint32_int64_t_double:8016; CHECK-P9: # %bb.0: # %entry8017; CHECK-P9-NEXT: mtfprd f0, r48018; CHECK-P9-NEXT: ori r3, r3, 344638019; CHECK-P9-NEXT: xscvsxddp f0, f08020; CHECK-P9-NEXT: oris r3, r3, 18021; CHECK-P9-NEXT: stfd f0, 0(r3)8022; CHECK-P9-NEXT: blr8023;8024; CHECK-P8-LABEL: st_not_disjoint32_int64_t_double:8025; CHECK-P8: # %bb.0: # %entry8026; CHECK-P8-NEXT: mtfprd f0, r48027; CHECK-P8-NEXT: ori r3, r3, 344638028; CHECK-P8-NEXT: oris r3, r3, 18029; CHECK-P8-NEXT: xscvsxddp f0, f08030; CHECK-P8-NEXT: stfd f0, 0(r3)8031; CHECK-P8-NEXT: blr8032entry:8033 %conv = sitofp i64 %str to double8034 %or = or i64 %ptr, 999998035 %0 = inttoptr i64 %or to ptr8036 store double %conv, ptr %0, align 88037 ret void8038}8039 8040; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly8041define dso_local void @st_disjoint_align32_int64_t_double(i64 %ptr, i64 %str) {8042; CHECK-P10-LABEL: st_disjoint_align32_int64_t_double:8043; CHECK-P10: # %bb.0: # %entry8044; CHECK-P10-NEXT: mtfprd f0, r48045; CHECK-P10-NEXT: lis r5, -152648046; CHECK-P10-NEXT: and r3, r3, r58047; CHECK-P10-NEXT: xscvsxddp f0, f08048; CHECK-P10-NEXT: pstfd f0, 999990000(r3), 08049; CHECK-P10-NEXT: blr8050;8051; CHECK-P9-LABEL: st_disjoint_align32_int64_t_double:8052; CHECK-P9: # %bb.0: # %entry8053; CHECK-P9-NEXT: mtfprd f0, r48054; CHECK-P9-NEXT: lis r5, -152648055; CHECK-P9-NEXT: lis r4, 152588056; CHECK-P9-NEXT: xscvsxddp f0, f08057; CHECK-P9-NEXT: and r3, r3, r58058; CHECK-P9-NEXT: ori r4, r4, 417128059; CHECK-P9-NEXT: stfdx f0, r3, r48060; CHECK-P9-NEXT: blr8061;8062; CHECK-P8-LABEL: st_disjoint_align32_int64_t_double:8063; CHECK-P8: # %bb.0: # %entry8064; CHECK-P8-NEXT: mtfprd f0, r48065; CHECK-P8-NEXT: lis r5, -152648066; CHECK-P8-NEXT: lis r4, 152588067; CHECK-P8-NEXT: and r3, r3, r58068; CHECK-P8-NEXT: ori r4, r4, 417128069; CHECK-P8-NEXT: xscvsxddp f0, f08070; CHECK-P8-NEXT: stfdx f0, r3, r48071; CHECK-P8-NEXT: blr8072entry:8073 %and = and i64 %ptr, -10003415048074 %conv = sitofp i64 %str to double8075 %or = or i64 %and, 9999900008076 %0 = inttoptr i64 %or to ptr8077 store double %conv, ptr %0, align 168078 ret void8079}8080 8081; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly8082define dso_local void @st_not_disjoint64_int64_t_double(i64 %ptr, i64 %str) {8083; CHECK-P10-LABEL: st_not_disjoint64_int64_t_double:8084; CHECK-P10: # %bb.0: # %entry8085; CHECK-P10-NEXT: mtfprd f0, r48086; CHECK-P10-NEXT: pli r4, 2328087; CHECK-P10-NEXT: pli r5, 35675873298088; CHECK-P10-NEXT: rldimi r5, r4, 32, 08089; CHECK-P10-NEXT: xscvsxddp f0, f08090; CHECK-P10-NEXT: or r3, r3, r58091; CHECK-P10-NEXT: stfd f0, 0(r3)8092; CHECK-P10-NEXT: blr8093;8094; CHECK-P9-LABEL: st_not_disjoint64_int64_t_double:8095; CHECK-P9: # %bb.0: # %entry8096; CHECK-P9-NEXT: mtfprd f0, r48097; CHECK-P9-NEXT: li r4, 298098; CHECK-P9-NEXT: rldic r4, r4, 35, 248099; CHECK-P9-NEXT: xscvsxddp f0, f08100; CHECK-P9-NEXT: oris r4, r4, 544378101; CHECK-P9-NEXT: ori r4, r4, 40978102; CHECK-P9-NEXT: or r3, r3, r48103; CHECK-P9-NEXT: stfd f0, 0(r3)8104; CHECK-P9-NEXT: blr8105;8106; CHECK-P8-LABEL: st_not_disjoint64_int64_t_double:8107; CHECK-P8: # %bb.0: # %entry8108; CHECK-P8-NEXT: mtfprd f0, r48109; CHECK-P8-NEXT: li r4, 298110; CHECK-P8-NEXT: rldic r4, r4, 35, 248111; CHECK-P8-NEXT: oris r4, r4, 544378112; CHECK-P8-NEXT: xscvsxddp f0, f08113; CHECK-P8-NEXT: ori r4, r4, 40978114; CHECK-P8-NEXT: or r3, r3, r48115; CHECK-P8-NEXT: stfd f0, 0(r3)8116; CHECK-P8-NEXT: blr8117entry:8118 %conv = sitofp i64 %str to double8119 %or = or i64 %ptr, 10000000000018120 %0 = inttoptr i64 %or to ptr8121 store double %conv, ptr %0, align 88122 ret void8123}8124 8125; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly8126define dso_local void @st_disjoint_align64_int64_t_double(i64 %ptr, i64 %str) {8127; CHECK-P10-LABEL: st_disjoint_align64_int64_t_double:8128; CHECK-P10: # %bb.0: # %entry8129; CHECK-P10-NEXT: mtfprd f0, r48130; CHECK-P10-NEXT: pli r4, 2441406258131; CHECK-P10-NEXT: rldicr r3, r3, 0, 238132; CHECK-P10-NEXT: rldic r4, r4, 12, 248133; CHECK-P10-NEXT: xscvsxddp f0, f08134; CHECK-P10-NEXT: stfdx f0, r3, r48135; CHECK-P10-NEXT: blr8136;8137; CHECK-P9-LABEL: st_disjoint_align64_int64_t_double:8138; CHECK-P9: # %bb.0: # %entry8139; CHECK-P9-NEXT: mtfprd f0, r48140; CHECK-P9-NEXT: lis r4, 37258141; CHECK-P9-NEXT: rldicr r3, r3, 0, 238142; CHECK-P9-NEXT: xscvsxddp f0, f08143; CHECK-P9-NEXT: ori r4, r4, 190258144; CHECK-P9-NEXT: rldic r4, r4, 12, 248145; CHECK-P9-NEXT: stfdx f0, r3, r48146; CHECK-P9-NEXT: blr8147;8148; CHECK-P8-LABEL: st_disjoint_align64_int64_t_double:8149; CHECK-P8: # %bb.0: # %entry8150; CHECK-P8-NEXT: mtfprd f0, r48151; CHECK-P8-NEXT: lis r4, 37258152; CHECK-P8-NEXT: rldicr r3, r3, 0, 238153; CHECK-P8-NEXT: ori r4, r4, 190258154; CHECK-P8-NEXT: rldic r4, r4, 12, 248155; CHECK-P8-NEXT: xscvsxddp f0, f08156; CHECK-P8-NEXT: stfdx f0, r3, r48157; CHECK-P8-NEXT: blr8158entry:8159 %and = and i64 %ptr, -10995116277768160 %conv = sitofp i64 %str to double8161 %or = or i64 %and, 10000000000008162 %0 = inttoptr i64 %or to ptr8163 store double %conv, ptr %0, align 40968164 ret void8165}8166 8167; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly8168define dso_local void @st_cst_align16_int64_t_double(i64 %str) {8169; CHECK-LABEL: st_cst_align16_int64_t_double:8170; CHECK: # %bb.0: # %entry8171; CHECK-NEXT: mtfprd f0, r38172; CHECK-NEXT: xscvsxddp f0, f08173; CHECK-NEXT: stfd f0, 4080(0)8174; CHECK-NEXT: blr8175entry:8176 %conv = sitofp i64 %str to double8177 store double %conv, ptr inttoptr (i64 4080 to ptr), align 168178 ret void8179}8180 8181; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly8182define dso_local void @st_cst_align32_int64_t_double(i64 %str) {8183; CHECK-LABEL: st_cst_align32_int64_t_double:8184; CHECK: # %bb.0: # %entry8185; CHECK-NEXT: mtfprd f0, r38186; CHECK-NEXT: lis r3, 1538187; CHECK-NEXT: xscvsxddp f0, f08188; CHECK-NEXT: stfd f0, -27108(r3)8189; CHECK-NEXT: blr8190entry:8191 %conv = sitofp i64 %str to double8192 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 88193 ret void8194}8195 8196; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly8197define dso_local void @st_cst_align64_int64_t_double(i64 %str) {8198; CHECK-P10-LABEL: st_cst_align64_int64_t_double:8199; CHECK-P10: # %bb.0: # %entry8200; CHECK-P10-NEXT: mtfprd f0, r38201; CHECK-P10-NEXT: pli r3, 2441406258202; CHECK-P10-NEXT: rldic r3, r3, 12, 248203; CHECK-P10-NEXT: xscvsxddp f0, f08204; CHECK-P10-NEXT: stfd f0, 0(r3)8205; CHECK-P10-NEXT: blr8206;8207; CHECK-P9-LABEL: st_cst_align64_int64_t_double:8208; CHECK-P9: # %bb.0: # %entry8209; CHECK-P9-NEXT: mtfprd f0, r38210; CHECK-P9-NEXT: lis r3, 37258211; CHECK-P9-NEXT: xscvsxddp f0, f08212; CHECK-P9-NEXT: ori r3, r3, 190258213; CHECK-P9-NEXT: rldic r3, r3, 12, 248214; CHECK-P9-NEXT: stfd f0, 0(r3)8215; CHECK-P9-NEXT: blr8216;8217; CHECK-P8-LABEL: st_cst_align64_int64_t_double:8218; CHECK-P8: # %bb.0: # %entry8219; CHECK-P8-NEXT: mtfprd f0, r38220; CHECK-P8-NEXT: lis r3, 37258221; CHECK-P8-NEXT: ori r3, r3, 190258222; CHECK-P8-NEXT: rldic r3, r3, 12, 248223; CHECK-P8-NEXT: xscvsxddp f0, f08224; CHECK-P8-NEXT: stfd f0, 0(r3)8225; CHECK-P8-NEXT: blr8226entry:8227 %conv = sitofp i64 %str to double8228 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40968229 ret void8230}8231