4992 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: nofree norecurse nounwind uwtable willreturn22define dso_local i64 @ld_0_int64_t_uint8_t(i64 %ptr) {23; CHECK-LABEL: ld_0_int64_t_uint8_t:24; CHECK: # %bb.0: # %entry25; CHECK-NEXT: lbz r3, 0(r3)26; CHECK-NEXT: blr27entry:28 %0 = inttoptr i64 %ptr to ptr29 %1 = load atomic i8, ptr %0 monotonic, align 130 %conv = zext i8 %1 to i6431 ret i64 %conv32}33 34; Function Attrs: nofree norecurse nounwind uwtable willreturn35define dso_local i64 @ld_align16_int64_t_uint8_t(ptr nocapture readonly %ptr) {36; CHECK-LABEL: ld_align16_int64_t_uint8_t:37; CHECK: # %bb.0: # %entry38; CHECK-NEXT: lbz r3, 8(r3)39; CHECK-NEXT: blr40entry:41 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 842 %0 = load atomic i8, ptr %add.ptr monotonic, align 143 %conv = zext i8 %0 to i6444 ret i64 %conv45}46 47; Function Attrs: nofree norecurse nounwind uwtable willreturn48define dso_local i64 @ld_align32_int64_t_uint8_t(ptr nocapture readonly %ptr) {49; CHECK-P10-LABEL: ld_align32_int64_t_uint8_t:50; CHECK-P10: # %bb.0: # %entry51; CHECK-P10-NEXT: plbz r3, 99999000(r3), 052; CHECK-P10-NEXT: clrldi r3, r3, 3253; CHECK-P10-NEXT: blr54;55; CHECK-PREP10-LABEL: ld_align32_int64_t_uint8_t:56; CHECK-PREP10: # %bb.0: # %entry57; CHECK-PREP10-NEXT: lis r4, 152558; CHECK-PREP10-NEXT: ori r4, r4, 5660059; CHECK-PREP10-NEXT: lbzx r3, r3, r460; CHECK-PREP10-NEXT: blr61entry:62 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 9999900063 %0 = load atomic i8, ptr %add.ptr monotonic, align 164 %conv = zext i8 %0 to i6465 ret i64 %conv66}67 68; Function Attrs: nofree norecurse nounwind uwtable willreturn69define dso_local i64 @ld_align64_int64_t_uint8_t(ptr nocapture readonly %ptr) {70; CHECK-P10-LABEL: ld_align64_int64_t_uint8_t:71; CHECK-P10: # %bb.0: # %entry72; CHECK-P10-NEXT: pli r4, 24414062573; CHECK-P10-NEXT: rldic r4, r4, 12, 2474; CHECK-P10-NEXT: lbzx r3, r3, r475; CHECK-P10-NEXT: blr76;77; CHECK-PREP10-LABEL: ld_align64_int64_t_uint8_t:78; CHECK-PREP10: # %bb.0: # %entry79; CHECK-PREP10-NEXT: lis r4, 372580; CHECK-PREP10-NEXT: ori r4, r4, 1902581; CHECK-PREP10-NEXT: rldic r4, r4, 12, 2482; CHECK-PREP10-NEXT: lbzx r3, r3, r483; CHECK-PREP10-NEXT: blr84entry:85 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 100000000000086 %0 = load atomic i8, ptr %add.ptr monotonic, align 187 %conv = zext i8 %0 to i6488 ret i64 %conv89}90 91; Function Attrs: nofree norecurse nounwind uwtable willreturn92define dso_local i64 @ld_reg_int64_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) {93; CHECK-LABEL: ld_reg_int64_t_uint8_t:94; CHECK: # %bb.0: # %entry95; CHECK-NEXT: lbzx r3, r3, r496; CHECK-NEXT: blr97entry:98 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off99 %0 = load atomic i8, ptr %add.ptr monotonic, align 1100 %conv = zext i8 %0 to i64101 ret i64 %conv102}103 104; Function Attrs: nofree norecurse nounwind uwtable willreturn105define dso_local i64 @ld_or_int64_t_uint8_t(i64 %ptr, i8 zeroext %off) {106; CHECK-LABEL: ld_or_int64_t_uint8_t:107; CHECK: # %bb.0: # %entry108; CHECK-NEXT: or r3, r4, r3109; CHECK-NEXT: lbz r3, 0(r3)110; CHECK-NEXT: blr111entry:112 %conv = zext i8 %off to i64113 %or = or i64 %conv, %ptr114 %0 = inttoptr i64 %or to ptr115 %1 = load atomic i8, ptr %0 monotonic, align 1116 %conv1 = zext i8 %1 to i64117 ret i64 %conv1118}119 120; Function Attrs: nofree norecurse nounwind uwtable willreturn121define dso_local i64 @ld_not_disjoint16_int64_t_uint8_t(i64 %ptr) {122; CHECK-LABEL: ld_not_disjoint16_int64_t_uint8_t:123; CHECK: # %bb.0: # %entry124; CHECK-NEXT: ori r3, r3, 6125; CHECK-NEXT: lbz r3, 0(r3)126; CHECK-NEXT: blr127entry:128 %or = or i64 %ptr, 6129 %0 = inttoptr i64 %or to ptr130 %1 = load atomic i8, ptr %0 monotonic, align 1131 %conv = zext i8 %1 to i64132 ret i64 %conv133}134 135; Function Attrs: nofree norecurse nounwind uwtable willreturn136define dso_local i64 @ld_disjoint_align16_int64_t_uint8_t(i64 %ptr) {137; CHECK-LABEL: ld_disjoint_align16_int64_t_uint8_t:138; CHECK: # %bb.0: # %entry139; CHECK-NEXT: rldicr r3, r3, 0, 51140; CHECK-NEXT: lbz r3, 24(r3)141; CHECK-NEXT: blr142entry:143 %and = and i64 %ptr, -4096144 %or = or i64 %and, 24145 %0 = inttoptr i64 %or to ptr146 %1 = load atomic i8, ptr %0 monotonic, align 8147 %conv = zext i8 %1 to i64148 ret i64 %conv149}150 151; Function Attrs: nofree norecurse nounwind uwtable willreturn152define dso_local i64 @ld_not_disjoint32_int64_t_uint8_t(i64 %ptr) {153; CHECK-LABEL: ld_not_disjoint32_int64_t_uint8_t:154; CHECK: # %bb.0: # %entry155; CHECK-NEXT: ori r3, r3, 34463156; CHECK-NEXT: oris r3, r3, 1157; CHECK-NEXT: lbz r3, 0(r3)158; CHECK-NEXT: blr159entry:160 %or = or i64 %ptr, 99999161 %0 = inttoptr i64 %or to ptr162 %1 = load atomic i8, ptr %0 monotonic, align 1163 %conv = zext i8 %1 to i64164 ret i64 %conv165}166 167; Function Attrs: nofree norecurse nounwind uwtable willreturn168define dso_local i64 @ld_disjoint_align32_int64_t_uint8_t(i64 %ptr) {169; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_uint8_t:170; CHECK-P10: # %bb.0: # %entry171; CHECK-P10-NEXT: lis r4, -15264172; CHECK-P10-NEXT: and r3, r3, r4173; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0174; CHECK-P10-NEXT: clrldi r3, r3, 32175; CHECK-P10-NEXT: blr176;177; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_uint8_t:178; CHECK-PREP10: # %bb.0: # %entry179; CHECK-PREP10-NEXT: lis r4, -15264180; CHECK-PREP10-NEXT: and r3, r3, r4181; CHECK-PREP10-NEXT: lis r4, 15258182; CHECK-PREP10-NEXT: ori r4, r4, 41712183; CHECK-PREP10-NEXT: lbzx r3, r3, r4184; CHECK-PREP10-NEXT: blr185entry:186 %and = and i64 %ptr, -1000341504187 %or = or i64 %and, 999990000188 %0 = inttoptr i64 %or to ptr189 %1 = load atomic i8, ptr %0 monotonic, align 16190 %conv = zext i8 %1 to i64191 ret i64 %conv192}193 194; Function Attrs: nofree norecurse nounwind uwtable willreturn195define dso_local i64 @ld_not_disjoint64_int64_t_uint8_t(i64 %ptr) {196; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_uint8_t:197; CHECK-P10: # %bb.0: # %entry198; CHECK-P10-NEXT: pli r4, 232199; CHECK-P10-NEXT: pli r5, 3567587329200; CHECK-P10-NEXT: rldimi r5, r4, 32, 0201; CHECK-P10-NEXT: or r3, r3, r5202; CHECK-P10-NEXT: lbz r3, 0(r3)203; CHECK-P10-NEXT: blr204;205; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_uint8_t:206; CHECK-PREP10: # %bb.0: # %entry207; CHECK-PREP10-NEXT: li r4, 29208; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24209; CHECK-PREP10-NEXT: oris r4, r4, 54437210; CHECK-PREP10-NEXT: ori r4, r4, 4097211; CHECK-PREP10-NEXT: or r3, r3, r4212; CHECK-PREP10-NEXT: lbz r3, 0(r3)213; CHECK-PREP10-NEXT: blr214entry:215 %or = or i64 %ptr, 1000000000001216 %0 = inttoptr i64 %or to ptr217 %1 = load atomic i8, ptr %0 monotonic, align 1218 %conv = zext i8 %1 to i64219 ret i64 %conv220}221 222; Function Attrs: nofree norecurse nounwind uwtable willreturn223define dso_local i64 @ld_disjoint_align64_int64_t_uint8_t(i64 %ptr) {224; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_uint8_t:225; CHECK-P10: # %bb.0: # %entry226; CHECK-P10-NEXT: pli r4, 244140625227; CHECK-P10-NEXT: rldicr r3, r3, 0, 23228; CHECK-P10-NEXT: rldic r4, r4, 12, 24229; CHECK-P10-NEXT: lbzx r3, r3, r4230; CHECK-P10-NEXT: blr231;232; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_uint8_t:233; CHECK-PREP10: # %bb.0: # %entry234; CHECK-PREP10-NEXT: lis r4, 3725235; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23236; CHECK-PREP10-NEXT: ori r4, r4, 19025237; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24238; CHECK-PREP10-NEXT: lbzx r3, r3, r4239; CHECK-PREP10-NEXT: blr240entry:241 %and = and i64 %ptr, -1099511627776242 %or = or i64 %and, 1000000000000243 %0 = inttoptr i64 %or to ptr244 %1 = load atomic i8, ptr %0 monotonic, align 4096245 %conv = zext i8 %1 to i64246 ret i64 %conv247}248 249; Function Attrs: nofree norecurse nounwind uwtable willreturn250define dso_local i64 @ld_cst_align16_int64_t_uint8_t() {251; CHECK-LABEL: ld_cst_align16_int64_t_uint8_t:252; CHECK: # %bb.0: # %entry253; CHECK-NEXT: lbz r3, 4080(0)254; CHECK-NEXT: blr255entry:256 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 16257 %conv = zext i8 %0 to i64258 ret i64 %conv259}260 261; Function Attrs: nofree norecurse nounwind uwtable willreturn262define dso_local i64 @ld_cst_align32_int64_t_uint8_t() {263; CHECK-LABEL: ld_cst_align32_int64_t_uint8_t:264; CHECK: # %bb.0: # %entry265; CHECK-NEXT: lis r3, 153266; CHECK-NEXT: lbz r3, -27108(r3)267; CHECK-NEXT: blr268entry:269 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4270 %conv = zext i8 %0 to i64271 ret i64 %conv272}273 274; Function Attrs: nofree norecurse nounwind uwtable willreturn275define dso_local i64 @ld_cst_align64_int64_t_uint8_t() {276; CHECK-P10-LABEL: ld_cst_align64_int64_t_uint8_t:277; CHECK-P10: # %bb.0: # %entry278; CHECK-P10-NEXT: pli r3, 244140625279; CHECK-P10-NEXT: rldic r3, r3, 12, 24280; CHECK-P10-NEXT: lbz r3, 0(r3)281; CHECK-P10-NEXT: blr282;283; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_uint8_t:284; CHECK-PREP10: # %bb.0: # %entry285; CHECK-PREP10-NEXT: lis r3, 3725286; CHECK-PREP10-NEXT: ori r3, r3, 19025287; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24288; CHECK-PREP10-NEXT: lbz r3, 0(r3)289; CHECK-PREP10-NEXT: blr290entry:291 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096292 %conv = zext i8 %0 to i64293 ret i64 %conv294}295 296; Function Attrs: nofree norecurse nounwind uwtable willreturn297define dso_local i64 @ld_0_int64_t_int8_t(i64 %ptr) {298; CHECK-LABEL: ld_0_int64_t_int8_t:299; CHECK: # %bb.0: # %entry300; CHECK-NEXT: lbz r3, 0(r3)301; CHECK-NEXT: extsb r3, r3302; CHECK-NEXT: blr303entry:304 %0 = inttoptr i64 %ptr to ptr305 %1 = load atomic i8, ptr %0 monotonic, align 1306 %conv = sext i8 %1 to i64307 ret i64 %conv308}309 310; Function Attrs: nofree norecurse nounwind uwtable willreturn311define dso_local i64 @ld_align16_int64_t_int8_t(ptr nocapture readonly %ptr) {312; CHECK-LABEL: ld_align16_int64_t_int8_t:313; CHECK: # %bb.0: # %entry314; CHECK-NEXT: lbz r3, 8(r3)315; CHECK-NEXT: extsb r3, r3316; CHECK-NEXT: blr317entry:318 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8319 %0 = load atomic i8, ptr %add.ptr monotonic, align 1320 %conv = sext i8 %0 to i64321 ret i64 %conv322}323 324; Function Attrs: nofree norecurse nounwind uwtable willreturn325define dso_local i64 @ld_align32_int64_t_int8_t(ptr nocapture readonly %ptr) {326; CHECK-P10-LABEL: ld_align32_int64_t_int8_t:327; CHECK-P10: # %bb.0: # %entry328; CHECK-P10-NEXT: plbz r3, 99999000(r3), 0329; CHECK-P10-NEXT: extsb r3, r3330; CHECK-P10-NEXT: blr331;332; CHECK-PREP10-LABEL: ld_align32_int64_t_int8_t:333; CHECK-PREP10: # %bb.0: # %entry334; CHECK-PREP10-NEXT: lis r4, 1525335; CHECK-PREP10-NEXT: ori r4, r4, 56600336; CHECK-PREP10-NEXT: lbzx r3, r3, r4337; CHECK-PREP10-NEXT: extsb r3, r3338; CHECK-PREP10-NEXT: blr339entry:340 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000341 %0 = load atomic i8, ptr %add.ptr monotonic, align 1342 %conv = sext i8 %0 to i64343 ret i64 %conv344}345 346; Function Attrs: nofree norecurse nounwind uwtable willreturn347define dso_local i64 @ld_align64_int64_t_int8_t(ptr nocapture readonly %ptr) {348; CHECK-P10-LABEL: ld_align64_int64_t_int8_t:349; CHECK-P10: # %bb.0: # %entry350; CHECK-P10-NEXT: pli r4, 244140625351; CHECK-P10-NEXT: rldic r4, r4, 12, 24352; CHECK-P10-NEXT: lbzx r3, r3, r4353; CHECK-P10-NEXT: extsb r3, r3354; CHECK-P10-NEXT: blr355;356; CHECK-PREP10-LABEL: ld_align64_int64_t_int8_t:357; CHECK-PREP10: # %bb.0: # %entry358; CHECK-PREP10-NEXT: lis r4, 3725359; CHECK-PREP10-NEXT: ori r4, r4, 19025360; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24361; CHECK-PREP10-NEXT: lbzx r3, r3, r4362; CHECK-PREP10-NEXT: extsb r3, r3363; CHECK-PREP10-NEXT: blr364entry:365 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000366 %0 = load atomic i8, ptr %add.ptr monotonic, align 1367 %conv = sext i8 %0 to i64368 ret i64 %conv369}370 371; Function Attrs: nofree norecurse nounwind uwtable willreturn372define dso_local i64 @ld_reg_int64_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {373; CHECK-LABEL: ld_reg_int64_t_int8_t:374; CHECK: # %bb.0: # %entry375; CHECK-NEXT: lbzx r3, r3, r4376; CHECK-NEXT: extsb r3, r3377; CHECK-NEXT: blr378entry:379 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off380 %0 = load atomic i8, ptr %add.ptr monotonic, align 1381 %conv = sext i8 %0 to i64382 ret i64 %conv383}384 385; Function Attrs: nofree norecurse nounwind uwtable willreturn386define dso_local i64 @ld_or_int64_t_int8_t(i64 %ptr, i8 zeroext %off) {387; CHECK-LABEL: ld_or_int64_t_int8_t:388; CHECK: # %bb.0: # %entry389; CHECK-NEXT: or r3, r4, r3390; CHECK-NEXT: lbz r3, 0(r3)391; CHECK-NEXT: extsb r3, r3392; CHECK-NEXT: blr393entry:394 %conv = zext i8 %off to i64395 %or = or i64 %conv, %ptr396 %0 = inttoptr i64 %or to ptr397 %1 = load atomic i8, ptr %0 monotonic, align 1398 %conv1 = sext i8 %1 to i64399 ret i64 %conv1400}401 402; Function Attrs: nofree norecurse nounwind uwtable willreturn403define dso_local i64 @ld_not_disjoint16_int64_t_int8_t(i64 %ptr) {404; CHECK-LABEL: ld_not_disjoint16_int64_t_int8_t:405; CHECK: # %bb.0: # %entry406; CHECK-NEXT: ori r3, r3, 6407; CHECK-NEXT: lbz r3, 0(r3)408; CHECK-NEXT: extsb r3, r3409; CHECK-NEXT: blr410entry:411 %or = or i64 %ptr, 6412 %0 = inttoptr i64 %or to ptr413 %1 = load atomic i8, ptr %0 monotonic, align 1414 %conv = sext i8 %1 to i64415 ret i64 %conv416}417 418; Function Attrs: nofree norecurse nounwind uwtable willreturn419define dso_local i64 @ld_disjoint_align16_int64_t_int8_t(i64 %ptr) {420; CHECK-LABEL: ld_disjoint_align16_int64_t_int8_t:421; CHECK: # %bb.0: # %entry422; CHECK-NEXT: rldicr r3, r3, 0, 51423; CHECK-NEXT: lbz r3, 24(r3)424; CHECK-NEXT: extsb r3, r3425; CHECK-NEXT: blr426entry:427 %and = and i64 %ptr, -4096428 %or = or i64 %and, 24429 %0 = inttoptr i64 %or to ptr430 %1 = load atomic i8, ptr %0 monotonic, align 8431 %conv = sext i8 %1 to i64432 ret i64 %conv433}434 435; Function Attrs: nofree norecurse nounwind uwtable willreturn436define dso_local i64 @ld_not_disjoint32_int64_t_int8_t(i64 %ptr) {437; CHECK-LABEL: ld_not_disjoint32_int64_t_int8_t:438; CHECK: # %bb.0: # %entry439; CHECK-NEXT: ori r3, r3, 34463440; CHECK-NEXT: oris r3, r3, 1441; CHECK-NEXT: lbz r3, 0(r3)442; CHECK-NEXT: extsb r3, r3443; CHECK-NEXT: blr444entry:445 %or = or i64 %ptr, 99999446 %0 = inttoptr i64 %or to ptr447 %1 = load atomic i8, ptr %0 monotonic, align 1448 %conv = sext i8 %1 to i64449 ret i64 %conv450}451 452; Function Attrs: nofree norecurse nounwind uwtable willreturn453define dso_local i64 @ld_disjoint_align32_int64_t_int8_t(i64 %ptr) {454; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_int8_t:455; CHECK-P10: # %bb.0: # %entry456; CHECK-P10-NEXT: lis r4, -15264457; CHECK-P10-NEXT: and r3, r3, r4458; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0459; CHECK-P10-NEXT: extsb r3, r3460; CHECK-P10-NEXT: blr461;462; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_int8_t:463; CHECK-PREP10: # %bb.0: # %entry464; CHECK-PREP10-NEXT: lis r4, -15264465; CHECK-PREP10-NEXT: and r3, r3, r4466; CHECK-PREP10-NEXT: lis r4, 15258467; CHECK-PREP10-NEXT: ori r4, r4, 41712468; CHECK-PREP10-NEXT: lbzx r3, r3, r4469; CHECK-PREP10-NEXT: extsb r3, r3470; CHECK-PREP10-NEXT: blr471entry:472 %and = and i64 %ptr, -1000341504473 %or = or i64 %and, 999990000474 %0 = inttoptr i64 %or to ptr475 %1 = load atomic i8, ptr %0 monotonic, align 16476 %conv = sext i8 %1 to i64477 ret i64 %conv478}479 480; Function Attrs: nofree norecurse nounwind uwtable willreturn481define dso_local i64 @ld_not_disjoint64_int64_t_int8_t(i64 %ptr) {482; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_int8_t:483; CHECK-P10: # %bb.0: # %entry484; CHECK-P10-NEXT: pli r4, 232485; CHECK-P10-NEXT: pli r5, 3567587329486; CHECK-P10-NEXT: rldimi r5, r4, 32, 0487; CHECK-P10-NEXT: or r3, r3, r5488; CHECK-P10-NEXT: lbz r3, 0(r3)489; CHECK-P10-NEXT: extsb r3, r3490; CHECK-P10-NEXT: blr491;492; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_int8_t:493; CHECK-PREP10: # %bb.0: # %entry494; CHECK-PREP10-NEXT: li r4, 29495; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24496; CHECK-PREP10-NEXT: oris r4, r4, 54437497; CHECK-PREP10-NEXT: ori r4, r4, 4097498; CHECK-PREP10-NEXT: or r3, r3, r4499; CHECK-PREP10-NEXT: lbz r3, 0(r3)500; CHECK-PREP10-NEXT: extsb r3, r3501; CHECK-PREP10-NEXT: blr502entry:503 %or = or i64 %ptr, 1000000000001504 %0 = inttoptr i64 %or to ptr505 %1 = load atomic i8, ptr %0 monotonic, align 1506 %conv = sext i8 %1 to i64507 ret i64 %conv508}509 510; Function Attrs: nofree norecurse nounwind uwtable willreturn511define dso_local i64 @ld_disjoint_align64_int64_t_int8_t(i64 %ptr) {512; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_int8_t:513; CHECK-P10: # %bb.0: # %entry514; CHECK-P10-NEXT: pli r4, 244140625515; CHECK-P10-NEXT: rldicr r3, r3, 0, 23516; CHECK-P10-NEXT: rldic r4, r4, 12, 24517; CHECK-P10-NEXT: lbzx r3, r3, r4518; CHECK-P10-NEXT: extsb r3, r3519; CHECK-P10-NEXT: blr520;521; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_int8_t:522; CHECK-PREP10: # %bb.0: # %entry523; CHECK-PREP10-NEXT: lis r4, 3725524; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23525; CHECK-PREP10-NEXT: ori r4, r4, 19025526; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24527; CHECK-PREP10-NEXT: lbzx r3, r3, r4528; CHECK-PREP10-NEXT: extsb r3, r3529; CHECK-PREP10-NEXT: blr530entry:531 %and = and i64 %ptr, -1099511627776532 %or = or i64 %and, 1000000000000533 %0 = inttoptr i64 %or to ptr534 %1 = load atomic i8, ptr %0 monotonic, align 4096535 %conv = sext i8 %1 to i64536 ret i64 %conv537}538 539; Function Attrs: nofree norecurse nounwind uwtable willreturn540define dso_local i64 @ld_cst_align16_int64_t_int8_t() {541; CHECK-LABEL: ld_cst_align16_int64_t_int8_t:542; CHECK: # %bb.0: # %entry543; CHECK-NEXT: lbz r3, 4080(0)544; CHECK-NEXT: extsb r3, r3545; CHECK-NEXT: blr546entry:547 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 16548 %conv = sext i8 %0 to i64549 ret i64 %conv550}551 552; Function Attrs: nofree norecurse nounwind uwtable willreturn553define dso_local i64 @ld_cst_align32_int64_t_int8_t() {554; CHECK-LABEL: ld_cst_align32_int64_t_int8_t:555; CHECK: # %bb.0: # %entry556; CHECK-NEXT: lis r3, 153557; CHECK-NEXT: lbz r3, -27108(r3)558; CHECK-NEXT: extsb r3, r3559; CHECK-NEXT: blr560entry:561 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4562 %conv = sext i8 %0 to i64563 ret i64 %conv564}565 566; Function Attrs: nofree norecurse nounwind uwtable willreturn567define dso_local i64 @ld_cst_align64_int64_t_int8_t() {568; CHECK-P10-LABEL: ld_cst_align64_int64_t_int8_t:569; CHECK-P10: # %bb.0: # %entry570; CHECK-P10-NEXT: pli r3, 244140625571; CHECK-P10-NEXT: rldic r3, r3, 12, 24572; CHECK-P10-NEXT: lbz r3, 0(r3)573; CHECK-P10-NEXT: extsb r3, r3574; CHECK-P10-NEXT: blr575;576; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_int8_t:577; CHECK-PREP10: # %bb.0: # %entry578; CHECK-PREP10-NEXT: lis r3, 3725579; CHECK-PREP10-NEXT: ori r3, r3, 19025580; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24581; CHECK-PREP10-NEXT: lbz r3, 0(r3)582; CHECK-PREP10-NEXT: extsb r3, r3583; CHECK-PREP10-NEXT: blr584entry:585 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096586 %conv = sext i8 %0 to i64587 ret i64 %conv588}589 590; Function Attrs: nofree norecurse nounwind uwtable willreturn591define dso_local i64 @ld_0_int64_t_uint16_t(i64 %ptr) {592; CHECK-LABEL: ld_0_int64_t_uint16_t:593; CHECK: # %bb.0: # %entry594; CHECK-NEXT: lhz r3, 0(r3)595; CHECK-NEXT: blr596entry:597 %0 = inttoptr i64 %ptr to ptr598 %1 = load atomic i16, ptr %0 monotonic, align 2599 %conv = zext i16 %1 to i64600 ret i64 %conv601}602 603; Function Attrs: nofree norecurse nounwind uwtable willreturn604define dso_local i64 @ld_align16_int64_t_uint16_t(ptr nocapture readonly %ptr) {605; CHECK-LABEL: ld_align16_int64_t_uint16_t:606; CHECK: # %bb.0: # %entry607; CHECK-NEXT: lhz r3, 8(r3)608; CHECK-NEXT: blr609entry:610 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8611 %0 = load atomic i16, ptr %add.ptr monotonic, align 2612 %conv = zext i16 %0 to i64613 ret i64 %conv614}615 616; Function Attrs: nofree norecurse nounwind uwtable willreturn617define dso_local i64 @ld_align32_int64_t_uint16_t(ptr nocapture readonly %ptr) {618; CHECK-P10-LABEL: ld_align32_int64_t_uint16_t:619; CHECK-P10: # %bb.0: # %entry620; CHECK-P10-NEXT: plhz r3, 99999000(r3), 0621; CHECK-P10-NEXT: clrldi r3, r3, 32622; CHECK-P10-NEXT: blr623;624; CHECK-PREP10-LABEL: ld_align32_int64_t_uint16_t:625; CHECK-PREP10: # %bb.0: # %entry626; CHECK-PREP10-NEXT: lis r4, 1525627; CHECK-PREP10-NEXT: ori r4, r4, 56600628; CHECK-PREP10-NEXT: lhzx r3, r3, r4629; CHECK-PREP10-NEXT: blr630entry:631 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000632 %0 = load atomic i16, ptr %add.ptr monotonic, align 2633 %conv = zext i16 %0 to i64634 ret i64 %conv635}636 637; Function Attrs: nofree norecurse nounwind uwtable willreturn638define dso_local i64 @ld_align64_int64_t_uint16_t(ptr nocapture readonly %ptr) {639; CHECK-P10-LABEL: ld_align64_int64_t_uint16_t:640; CHECK-P10: # %bb.0: # %entry641; CHECK-P10-NEXT: pli r4, 244140625642; CHECK-P10-NEXT: rldic r4, r4, 12, 24643; CHECK-P10-NEXT: lhzx r3, r3, r4644; CHECK-P10-NEXT: blr645;646; CHECK-PREP10-LABEL: ld_align64_int64_t_uint16_t:647; CHECK-PREP10: # %bb.0: # %entry648; CHECK-PREP10-NEXT: lis r4, 3725649; CHECK-PREP10-NEXT: ori r4, r4, 19025650; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24651; CHECK-PREP10-NEXT: lhzx r3, r3, r4652; CHECK-PREP10-NEXT: blr653entry:654 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000655 %0 = load atomic i16, ptr %add.ptr monotonic, align 2656 %conv = zext i16 %0 to i64657 ret i64 %conv658}659 660; Function Attrs: nofree norecurse nounwind uwtable willreturn661define dso_local i64 @ld_reg_int64_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {662; CHECK-LABEL: ld_reg_int64_t_uint16_t:663; CHECK: # %bb.0: # %entry664; CHECK-NEXT: lhzx r3, r3, r4665; CHECK-NEXT: blr666entry:667 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off668 %0 = load atomic i16, ptr %add.ptr monotonic, align 2669 %conv = zext i16 %0 to i64670 ret i64 %conv671}672 673; Function Attrs: nofree norecurse nounwind uwtable willreturn674define dso_local i64 @ld_or_int64_t_uint16_t(i64 %ptr, i8 zeroext %off) {675; CHECK-LABEL: ld_or_int64_t_uint16_t:676; CHECK: # %bb.0: # %entry677; CHECK-NEXT: or r3, r4, r3678; CHECK-NEXT: lhz r3, 0(r3)679; CHECK-NEXT: blr680entry:681 %conv = zext i8 %off to i64682 %or = or i64 %conv, %ptr683 %0 = inttoptr i64 %or to ptr684 %1 = load atomic i16, ptr %0 monotonic, align 2685 %conv1 = zext i16 %1 to i64686 ret i64 %conv1687}688 689; Function Attrs: nofree norecurse nounwind uwtable willreturn690define dso_local i64 @ld_not_disjoint16_int64_t_uint16_t(i64 %ptr) {691; CHECK-LABEL: ld_not_disjoint16_int64_t_uint16_t:692; CHECK: # %bb.0: # %entry693; CHECK-NEXT: ori r3, r3, 6694; CHECK-NEXT: lhz r3, 0(r3)695; CHECK-NEXT: blr696entry:697 %or = or i64 %ptr, 6698 %0 = inttoptr i64 %or to ptr699 %1 = load atomic i16, ptr %0 monotonic, align 2700 %conv = zext i16 %1 to i64701 ret i64 %conv702}703 704; Function Attrs: nofree norecurse nounwind uwtable willreturn705define dso_local i64 @ld_disjoint_align16_int64_t_uint16_t(i64 %ptr) {706; CHECK-LABEL: ld_disjoint_align16_int64_t_uint16_t:707; CHECK: # %bb.0: # %entry708; CHECK-NEXT: rldicr r3, r3, 0, 51709; CHECK-NEXT: lhz r3, 24(r3)710; CHECK-NEXT: blr711entry:712 %and = and i64 %ptr, -4096713 %or = or i64 %and, 24714 %0 = inttoptr i64 %or to ptr715 %1 = load atomic i16, ptr %0 monotonic, align 8716 %conv = zext i16 %1 to i64717 ret i64 %conv718}719 720; Function Attrs: nofree norecurse nounwind uwtable willreturn721define dso_local i64 @ld_not_disjoint32_int64_t_uint16_t(i64 %ptr) {722; CHECK-LABEL: ld_not_disjoint32_int64_t_uint16_t:723; CHECK: # %bb.0: # %entry724; CHECK-NEXT: ori r3, r3, 34463725; CHECK-NEXT: oris r3, r3, 1726; CHECK-NEXT: lhz r3, 0(r3)727; CHECK-NEXT: blr728entry:729 %or = or i64 %ptr, 99999730 %0 = inttoptr i64 %or to ptr731 %1 = load atomic i16, ptr %0 monotonic, align 2732 %conv = zext i16 %1 to i64733 ret i64 %conv734}735 736; Function Attrs: nofree norecurse nounwind uwtable willreturn737define dso_local i64 @ld_disjoint_align32_int64_t_uint16_t(i64 %ptr) {738; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_uint16_t:739; CHECK-P10: # %bb.0: # %entry740; CHECK-P10-NEXT: lis r4, -15264741; CHECK-P10-NEXT: and r3, r3, r4742; CHECK-P10-NEXT: plhz r3, 999990000(r3), 0743; CHECK-P10-NEXT: clrldi r3, r3, 32744; CHECK-P10-NEXT: blr745;746; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_uint16_t:747; CHECK-PREP10: # %bb.0: # %entry748; CHECK-PREP10-NEXT: lis r4, -15264749; CHECK-PREP10-NEXT: and r3, r3, r4750; CHECK-PREP10-NEXT: lis r4, 15258751; CHECK-PREP10-NEXT: ori r4, r4, 41712752; CHECK-PREP10-NEXT: lhzx r3, r3, r4753; CHECK-PREP10-NEXT: blr754entry:755 %and = and i64 %ptr, -1000341504756 %or = or i64 %and, 999990000757 %0 = inttoptr i64 %or to ptr758 %1 = load atomic i16, ptr %0 monotonic, align 16759 %conv = zext i16 %1 to i64760 ret i64 %conv761}762 763; Function Attrs: nofree norecurse nounwind uwtable willreturn764define dso_local i64 @ld_not_disjoint64_int64_t_uint16_t(i64 %ptr) {765; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_uint16_t:766; CHECK-P10: # %bb.0: # %entry767; CHECK-P10-NEXT: pli r4, 232768; CHECK-P10-NEXT: pli r5, 3567587329769; CHECK-P10-NEXT: rldimi r5, r4, 32, 0770; CHECK-P10-NEXT: or r3, r3, r5771; CHECK-P10-NEXT: lhz r3, 0(r3)772; CHECK-P10-NEXT: blr773;774; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_uint16_t:775; CHECK-PREP10: # %bb.0: # %entry776; CHECK-PREP10-NEXT: li r4, 29777; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24778; CHECK-PREP10-NEXT: oris r4, r4, 54437779; CHECK-PREP10-NEXT: ori r4, r4, 4097780; CHECK-PREP10-NEXT: or r3, r3, r4781; CHECK-PREP10-NEXT: lhz r3, 0(r3)782; CHECK-PREP10-NEXT: blr783entry:784 %or = or i64 %ptr, 1000000000001785 %0 = inttoptr i64 %or to ptr786 %1 = load atomic i16, ptr %0 monotonic, align 2787 %conv = zext i16 %1 to i64788 ret i64 %conv789}790 791; Function Attrs: nofree norecurse nounwind uwtable willreturn792define dso_local i64 @ld_disjoint_align64_int64_t_uint16_t(i64 %ptr) {793; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_uint16_t:794; CHECK-P10: # %bb.0: # %entry795; CHECK-P10-NEXT: pli r4, 244140625796; CHECK-P10-NEXT: rldicr r3, r3, 0, 23797; CHECK-P10-NEXT: rldic r4, r4, 12, 24798; CHECK-P10-NEXT: lhzx r3, r3, r4799; CHECK-P10-NEXT: blr800;801; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_uint16_t:802; CHECK-PREP10: # %bb.0: # %entry803; CHECK-PREP10-NEXT: lis r4, 3725804; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23805; CHECK-PREP10-NEXT: ori r4, r4, 19025806; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24807; CHECK-PREP10-NEXT: lhzx r3, r3, r4808; CHECK-PREP10-NEXT: blr809entry:810 %and = and i64 %ptr, -1099511627776811 %or = or i64 %and, 1000000000000812 %0 = inttoptr i64 %or to ptr813 %1 = load atomic i16, ptr %0 monotonic, align 4096814 %conv = zext i16 %1 to i64815 ret i64 %conv816}817 818; Function Attrs: nofree norecurse nounwind uwtable willreturn819define dso_local i64 @ld_cst_align16_int64_t_uint16_t() {820; CHECK-LABEL: ld_cst_align16_int64_t_uint16_t:821; CHECK: # %bb.0: # %entry822; CHECK-NEXT: lhz r3, 4080(0)823; CHECK-NEXT: blr824entry:825 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 16826 %conv = zext i16 %0 to i64827 ret i64 %conv828}829 830; Function Attrs: nofree norecurse nounwind uwtable willreturn831define dso_local i64 @ld_cst_align32_int64_t_uint16_t() {832; CHECK-LABEL: ld_cst_align32_int64_t_uint16_t:833; CHECK: # %bb.0: # %entry834; CHECK-NEXT: lis r3, 153835; CHECK-NEXT: lhz r3, -27108(r3)836; CHECK-NEXT: blr837entry:838 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4839 %conv = zext i16 %0 to i64840 ret i64 %conv841}842 843; Function Attrs: nofree norecurse nounwind uwtable willreturn844define dso_local i64 @ld_cst_align64_int64_t_uint16_t() {845; CHECK-P10-LABEL: ld_cst_align64_int64_t_uint16_t:846; CHECK-P10: # %bb.0: # %entry847; CHECK-P10-NEXT: pli r3, 244140625848; CHECK-P10-NEXT: rldic r3, r3, 12, 24849; CHECK-P10-NEXT: lhz r3, 0(r3)850; CHECK-P10-NEXT: blr851;852; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_uint16_t:853; CHECK-PREP10: # %bb.0: # %entry854; CHECK-PREP10-NEXT: lis r3, 3725855; CHECK-PREP10-NEXT: ori r3, r3, 19025856; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24857; CHECK-PREP10-NEXT: lhz r3, 0(r3)858; CHECK-PREP10-NEXT: blr859entry:860 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096861 %conv = zext i16 %0 to i64862 ret i64 %conv863}864 865; Function Attrs: nofree norecurse nounwind uwtable willreturn866define dso_local i64 @ld_0_int64_t_int16_t(i64 %ptr) {867; CHECK-LABEL: ld_0_int64_t_int16_t:868; CHECK: # %bb.0: # %entry869; CHECK-NEXT: lhz r3, 0(r3)870; CHECK-NEXT: extsh r3, r3871; CHECK-NEXT: blr872entry:873 %0 = inttoptr i64 %ptr to ptr874 %1 = load atomic i16, ptr %0 monotonic, align 2875 %conv = sext i16 %1 to i64876 ret i64 %conv877}878 879; Function Attrs: nofree norecurse nounwind uwtable willreturn880define dso_local i64 @ld_align16_int64_t_int16_t(ptr nocapture readonly %ptr) {881; CHECK-LABEL: ld_align16_int64_t_int16_t:882; CHECK: # %bb.0: # %entry883; CHECK-NEXT: lhz r3, 8(r3)884; CHECK-NEXT: extsh r3, r3885; CHECK-NEXT: blr886entry:887 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8888 %0 = load atomic i16, ptr %add.ptr monotonic, align 2889 %conv = sext i16 %0 to i64890 ret i64 %conv891}892 893; Function Attrs: nofree norecurse nounwind uwtable willreturn894define dso_local i64 @ld_align32_int64_t_int16_t(ptr nocapture readonly %ptr) {895; CHECK-P10-LABEL: ld_align32_int64_t_int16_t:896; CHECK-P10: # %bb.0: # %entry897; CHECK-P10-NEXT: plhz r3, 99999000(r3), 0898; CHECK-P10-NEXT: extsh r3, r3899; CHECK-P10-NEXT: blr900;901; CHECK-PREP10-LABEL: ld_align32_int64_t_int16_t:902; CHECK-PREP10: # %bb.0: # %entry903; CHECK-PREP10-NEXT: lis r4, 1525904; CHECK-PREP10-NEXT: ori r4, r4, 56600905; CHECK-PREP10-NEXT: lhzx r3, r3, r4906; CHECK-PREP10-NEXT: extsh r3, r3907; CHECK-PREP10-NEXT: blr908entry:909 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000910 %0 = load atomic i16, ptr %add.ptr monotonic, align 2911 %conv = sext i16 %0 to i64912 ret i64 %conv913}914 915; Function Attrs: nofree norecurse nounwind uwtable willreturn916define dso_local i64 @ld_align64_int64_t_int16_t(ptr nocapture readonly %ptr) {917; CHECK-P10-LABEL: ld_align64_int64_t_int16_t:918; CHECK-P10: # %bb.0: # %entry919; CHECK-P10-NEXT: pli r4, 244140625920; CHECK-P10-NEXT: rldic r4, r4, 12, 24921; CHECK-P10-NEXT: lhzx r3, r3, r4922; CHECK-P10-NEXT: extsh r3, r3923; CHECK-P10-NEXT: blr924;925; CHECK-PREP10-LABEL: ld_align64_int64_t_int16_t:926; CHECK-PREP10: # %bb.0: # %entry927; CHECK-PREP10-NEXT: lis r4, 3725928; CHECK-PREP10-NEXT: ori r4, r4, 19025929; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24930; CHECK-PREP10-NEXT: lhzx r3, r3, r4931; CHECK-PREP10-NEXT: extsh r3, r3932; CHECK-PREP10-NEXT: blr933entry:934 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000935 %0 = load atomic i16, ptr %add.ptr monotonic, align 2936 %conv = sext i16 %0 to i64937 ret i64 %conv938}939 940; Function Attrs: nofree norecurse nounwind uwtable willreturn941define dso_local i64 @ld_reg_int64_t_int16_t(ptr nocapture readonly %ptr, i64 %off) {942; CHECK-LABEL: ld_reg_int64_t_int16_t:943; CHECK: # %bb.0: # %entry944; CHECK-NEXT: lhzx r3, r3, r4945; CHECK-NEXT: extsh r3, r3946; CHECK-NEXT: blr947entry:948 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off949 %0 = load atomic i16, ptr %add.ptr monotonic, align 2950 %conv = sext i16 %0 to i64951 ret i64 %conv952}953 954; Function Attrs: nofree norecurse nounwind uwtable willreturn955define dso_local i64 @ld_or_int64_t_int16_t(i64 %ptr, i8 zeroext %off) {956; CHECK-LABEL: ld_or_int64_t_int16_t:957; CHECK: # %bb.0: # %entry958; CHECK-NEXT: or r3, r4, r3959; CHECK-NEXT: lhz r3, 0(r3)960; CHECK-NEXT: extsh r3, r3961; CHECK-NEXT: blr962entry:963 %conv = zext i8 %off to i64964 %or = or i64 %conv, %ptr965 %0 = inttoptr i64 %or to ptr966 %1 = load atomic i16, ptr %0 monotonic, align 2967 %conv1 = sext i16 %1 to i64968 ret i64 %conv1969}970 971; Function Attrs: nofree norecurse nounwind uwtable willreturn972define dso_local i64 @ld_not_disjoint16_int64_t_int16_t(i64 %ptr) {973; CHECK-LABEL: ld_not_disjoint16_int64_t_int16_t:974; CHECK: # %bb.0: # %entry975; CHECK-NEXT: ori r3, r3, 6976; CHECK-NEXT: lhz r3, 0(r3)977; CHECK-NEXT: extsh r3, r3978; CHECK-NEXT: blr979entry:980 %or = or i64 %ptr, 6981 %0 = inttoptr i64 %or to ptr982 %1 = load atomic i16, ptr %0 monotonic, align 2983 %conv = sext i16 %1 to i64984 ret i64 %conv985}986 987; Function Attrs: nofree norecurse nounwind uwtable willreturn988define dso_local i64 @ld_disjoint_align16_int64_t_int16_t(i64 %ptr) {989; CHECK-LABEL: ld_disjoint_align16_int64_t_int16_t:990; CHECK: # %bb.0: # %entry991; CHECK-NEXT: rldicr r3, r3, 0, 51992; CHECK-NEXT: lhz r3, 24(r3)993; CHECK-NEXT: extsh r3, r3994; CHECK-NEXT: blr995entry:996 %and = and i64 %ptr, -4096997 %or = or i64 %and, 24998 %0 = inttoptr i64 %or to ptr999 %1 = load atomic i16, ptr %0 monotonic, align 81000 %conv = sext i16 %1 to i641001 ret i64 %conv1002}1003 1004; Function Attrs: nofree norecurse nounwind uwtable willreturn1005define dso_local i64 @ld_not_disjoint32_int64_t_int16_t(i64 %ptr) {1006; CHECK-LABEL: ld_not_disjoint32_int64_t_int16_t:1007; CHECK: # %bb.0: # %entry1008; CHECK-NEXT: ori r3, r3, 344631009; CHECK-NEXT: oris r3, r3, 11010; CHECK-NEXT: lhz r3, 0(r3)1011; CHECK-NEXT: extsh r3, r31012; CHECK-NEXT: blr1013entry:1014 %or = or i64 %ptr, 999991015 %0 = inttoptr i64 %or to ptr1016 %1 = load atomic i16, ptr %0 monotonic, align 21017 %conv = sext i16 %1 to i641018 ret i64 %conv1019}1020 1021; Function Attrs: nofree norecurse nounwind uwtable willreturn1022define dso_local i64 @ld_disjoint_align32_int64_t_int16_t(i64 %ptr) {1023; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_int16_t:1024; CHECK-P10: # %bb.0: # %entry1025; CHECK-P10-NEXT: lis r4, -152641026; CHECK-P10-NEXT: and r3, r3, r41027; CHECK-P10-NEXT: plhz r3, 999990000(r3), 01028; CHECK-P10-NEXT: extsh r3, r31029; CHECK-P10-NEXT: blr1030;1031; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_int16_t:1032; CHECK-PREP10: # %bb.0: # %entry1033; CHECK-PREP10-NEXT: lis r4, -152641034; CHECK-PREP10-NEXT: and r3, r3, r41035; CHECK-PREP10-NEXT: lis r4, 152581036; CHECK-PREP10-NEXT: ori r4, r4, 417121037; CHECK-PREP10-NEXT: lhzx r3, r3, r41038; CHECK-PREP10-NEXT: extsh r3, r31039; CHECK-PREP10-NEXT: blr1040entry:1041 %and = and i64 %ptr, -10003415041042 %or = or i64 %and, 9999900001043 %0 = inttoptr i64 %or to ptr1044 %1 = load atomic i16, ptr %0 monotonic, align 161045 %conv = sext i16 %1 to i641046 ret i64 %conv1047}1048 1049; Function Attrs: nofree norecurse nounwind uwtable willreturn1050define dso_local i64 @ld_not_disjoint64_int64_t_int16_t(i64 %ptr) {1051; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_int16_t:1052; CHECK-P10: # %bb.0: # %entry1053; CHECK-P10-NEXT: pli r4, 2321054; CHECK-P10-NEXT: pli r5, 35675873291055; CHECK-P10-NEXT: rldimi r5, r4, 32, 01056; CHECK-P10-NEXT: or r3, r3, r51057; CHECK-P10-NEXT: lhz r3, 0(r3)1058; CHECK-P10-NEXT: extsh r3, r31059; CHECK-P10-NEXT: blr1060;1061; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_int16_t:1062; CHECK-PREP10: # %bb.0: # %entry1063; CHECK-PREP10-NEXT: li r4, 291064; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241065; CHECK-PREP10-NEXT: oris r4, r4, 544371066; CHECK-PREP10-NEXT: ori r4, r4, 40971067; CHECK-PREP10-NEXT: or r3, r3, r41068; CHECK-PREP10-NEXT: lhz r3, 0(r3)1069; CHECK-PREP10-NEXT: extsh r3, r31070; CHECK-PREP10-NEXT: blr1071entry:1072 %or = or i64 %ptr, 10000000000011073 %0 = inttoptr i64 %or to ptr1074 %1 = load atomic i16, ptr %0 monotonic, align 21075 %conv = sext i16 %1 to i641076 ret i64 %conv1077}1078 1079; Function Attrs: nofree norecurse nounwind uwtable willreturn1080define dso_local i64 @ld_disjoint_align64_int64_t_int16_t(i64 %ptr) {1081; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_int16_t:1082; CHECK-P10: # %bb.0: # %entry1083; CHECK-P10-NEXT: pli r4, 2441406251084; CHECK-P10-NEXT: rldicr r3, r3, 0, 231085; CHECK-P10-NEXT: rldic r4, r4, 12, 241086; CHECK-P10-NEXT: lhzx r3, r3, r41087; CHECK-P10-NEXT: extsh r3, r31088; CHECK-P10-NEXT: blr1089;1090; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_int16_t:1091; CHECK-PREP10: # %bb.0: # %entry1092; CHECK-PREP10-NEXT: lis r4, 37251093; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231094; CHECK-PREP10-NEXT: ori r4, r4, 190251095; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241096; CHECK-PREP10-NEXT: lhzx r3, r3, r41097; CHECK-PREP10-NEXT: extsh r3, r31098; CHECK-PREP10-NEXT: blr1099entry:1100 %and = and i64 %ptr, -10995116277761101 %or = or i64 %and, 10000000000001102 %0 = inttoptr i64 %or to ptr1103 %1 = load atomic i16, ptr %0 monotonic, align 40961104 %conv = sext i16 %1 to i641105 ret i64 %conv1106}1107 1108; Function Attrs: nofree norecurse nounwind uwtable willreturn1109define dso_local i64 @ld_cst_align16_int64_t_int16_t() {1110; CHECK-LABEL: ld_cst_align16_int64_t_int16_t:1111; CHECK: # %bb.0: # %entry1112; CHECK-NEXT: lhz r3, 4080(0)1113; CHECK-NEXT: extsh r3, r31114; CHECK-NEXT: blr1115entry:1116 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 161117 %conv = sext i16 %0 to i641118 ret i64 %conv1119}1120 1121; Function Attrs: nofree norecurse nounwind uwtable willreturn1122define dso_local i64 @ld_cst_align32_int64_t_int16_t() {1123; CHECK-LABEL: ld_cst_align32_int64_t_int16_t:1124; CHECK: # %bb.0: # %entry1125; CHECK-NEXT: lis r3, 1531126; CHECK-NEXT: lhz r3, -27108(r3)1127; CHECK-NEXT: extsh r3, r31128; CHECK-NEXT: blr1129entry:1130 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 41131 %conv = sext i16 %0 to i641132 ret i64 %conv1133}1134 1135; Function Attrs: nofree norecurse nounwind uwtable willreturn1136define dso_local i64 @ld_cst_align64_int64_t_int16_t() {1137; CHECK-P10-LABEL: ld_cst_align64_int64_t_int16_t:1138; CHECK-P10: # %bb.0: # %entry1139; CHECK-P10-NEXT: pli r3, 2441406251140; CHECK-P10-NEXT: rldic r3, r3, 12, 241141; CHECK-P10-NEXT: lhz r3, 0(r3)1142; CHECK-P10-NEXT: extsh r3, r31143; CHECK-P10-NEXT: blr1144;1145; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_int16_t:1146; CHECK-PREP10: # %bb.0: # %entry1147; CHECK-PREP10-NEXT: lis r3, 37251148; CHECK-PREP10-NEXT: ori r3, r3, 190251149; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241150; CHECK-PREP10-NEXT: lhz r3, 0(r3)1151; CHECK-PREP10-NEXT: extsh r3, r31152; CHECK-PREP10-NEXT: blr1153entry:1154 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961155 %conv = sext i16 %0 to i641156 ret i64 %conv1157}1158 1159; Function Attrs: nofree norecurse nounwind uwtable willreturn1160define dso_local i64 @ld_0_int64_t_uint32_t(i64 %ptr) {1161; CHECK-LABEL: ld_0_int64_t_uint32_t:1162; CHECK: # %bb.0: # %entry1163; CHECK-NEXT: lwz r3, 0(r3)1164; CHECK-NEXT: blr1165entry:1166 %0 = inttoptr i64 %ptr to ptr1167 %1 = load atomic i32, ptr %0 monotonic, align 41168 %conv = zext i32 %1 to i641169 ret i64 %conv1170}1171 1172; Function Attrs: nofree norecurse nounwind uwtable willreturn1173define dso_local i64 @ld_align16_int64_t_uint32_t(ptr nocapture readonly %ptr) {1174; CHECK-LABEL: ld_align16_int64_t_uint32_t:1175; CHECK: # %bb.0: # %entry1176; CHECK-NEXT: lwz r3, 8(r3)1177; CHECK-NEXT: blr1178entry:1179 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81180 %0 = load atomic i32, ptr %add.ptr monotonic, align 41181 %conv = zext i32 %0 to i641182 ret i64 %conv1183}1184 1185; Function Attrs: nofree norecurse nounwind uwtable willreturn1186define dso_local i64 @ld_align32_int64_t_uint32_t(ptr nocapture readonly %ptr) {1187; CHECK-P10-LABEL: ld_align32_int64_t_uint32_t:1188; CHECK-P10: # %bb.0: # %entry1189; CHECK-P10-NEXT: plwz r3, 99999000(r3), 01190; CHECK-P10-NEXT: clrldi r3, r3, 321191; CHECK-P10-NEXT: blr1192;1193; CHECK-PREP10-LABEL: ld_align32_int64_t_uint32_t:1194; CHECK-PREP10: # %bb.0: # %entry1195; CHECK-PREP10-NEXT: lis r4, 15251196; CHECK-PREP10-NEXT: ori r4, r4, 566001197; CHECK-PREP10-NEXT: lwzx r3, r3, r41198; CHECK-PREP10-NEXT: blr1199entry:1200 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001201 %0 = load atomic i32, ptr %add.ptr monotonic, align 41202 %conv = zext i32 %0 to i641203 ret i64 %conv1204}1205 1206; Function Attrs: nofree norecurse nounwind uwtable willreturn1207define dso_local i64 @ld_align64_int64_t_uint32_t(ptr nocapture readonly %ptr) {1208; CHECK-P10-LABEL: ld_align64_int64_t_uint32_t:1209; CHECK-P10: # %bb.0: # %entry1210; CHECK-P10-NEXT: pli r4, 2441406251211; CHECK-P10-NEXT: rldic r4, r4, 12, 241212; CHECK-P10-NEXT: lwzx r3, r3, r41213; CHECK-P10-NEXT: blr1214;1215; CHECK-PREP10-LABEL: ld_align64_int64_t_uint32_t:1216; CHECK-PREP10: # %bb.0: # %entry1217; CHECK-PREP10-NEXT: lis r4, 37251218; CHECK-PREP10-NEXT: ori r4, r4, 190251219; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241220; CHECK-PREP10-NEXT: lwzx r3, r3, r41221; CHECK-PREP10-NEXT: blr1222entry:1223 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001224 %0 = load atomic i32, ptr %add.ptr monotonic, align 41225 %conv = zext i32 %0 to i641226 ret i64 %conv1227}1228 1229; Function Attrs: nofree norecurse nounwind uwtable willreturn1230define dso_local i64 @ld_reg_int64_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {1231; CHECK-LABEL: ld_reg_int64_t_uint32_t:1232; CHECK: # %bb.0: # %entry1233; CHECK-NEXT: lwzx r3, r3, r41234; CHECK-NEXT: blr1235entry:1236 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1237 %0 = load atomic i32, ptr %add.ptr monotonic, align 41238 %conv = zext i32 %0 to i641239 ret i64 %conv1240}1241 1242; Function Attrs: nofree norecurse nounwind uwtable willreturn1243define dso_local i64 @ld_or_int64_t_uint32_t(i64 %ptr, i8 zeroext %off) {1244; CHECK-LABEL: ld_or_int64_t_uint32_t:1245; CHECK: # %bb.0: # %entry1246; CHECK-NEXT: or r3, r4, r31247; CHECK-NEXT: lwz r3, 0(r3)1248; CHECK-NEXT: blr1249entry:1250 %conv = zext i8 %off to i641251 %or = or i64 %conv, %ptr1252 %0 = inttoptr i64 %or to ptr1253 %1 = load atomic i32, ptr %0 monotonic, align 41254 %conv1 = zext i32 %1 to i641255 ret i64 %conv11256}1257 1258; Function Attrs: nofree norecurse nounwind uwtable willreturn1259define dso_local i64 @ld_not_disjoint16_int64_t_uint32_t(i64 %ptr) {1260; CHECK-LABEL: ld_not_disjoint16_int64_t_uint32_t:1261; CHECK: # %bb.0: # %entry1262; CHECK-NEXT: ori r3, r3, 61263; CHECK-NEXT: lwz r3, 0(r3)1264; CHECK-NEXT: blr1265entry:1266 %or = or i64 %ptr, 61267 %0 = inttoptr i64 %or to ptr1268 %1 = load atomic i32, ptr %0 monotonic, align 41269 %conv = zext i32 %1 to i641270 ret i64 %conv1271}1272 1273; Function Attrs: nofree norecurse nounwind uwtable willreturn1274define dso_local i64 @ld_disjoint_align16_int64_t_uint32_t(i64 %ptr) {1275; CHECK-LABEL: ld_disjoint_align16_int64_t_uint32_t:1276; CHECK: # %bb.0: # %entry1277; CHECK-NEXT: rldicr r3, r3, 0, 511278; CHECK-NEXT: lwz r3, 24(r3)1279; CHECK-NEXT: blr1280entry:1281 %and = and i64 %ptr, -40961282 %or = or i64 %and, 241283 %0 = inttoptr i64 %or to ptr1284 %1 = load atomic i32, ptr %0 monotonic, align 81285 %conv = zext i32 %1 to i641286 ret i64 %conv1287}1288 1289; Function Attrs: nofree norecurse nounwind uwtable willreturn1290define dso_local i64 @ld_not_disjoint32_int64_t_uint32_t(i64 %ptr) {1291; CHECK-LABEL: ld_not_disjoint32_int64_t_uint32_t:1292; CHECK: # %bb.0: # %entry1293; CHECK-NEXT: ori r3, r3, 344631294; CHECK-NEXT: oris r3, r3, 11295; CHECK-NEXT: lwz r3, 0(r3)1296; CHECK-NEXT: blr1297entry:1298 %or = or i64 %ptr, 999991299 %0 = inttoptr i64 %or to ptr1300 %1 = load atomic i32, ptr %0 monotonic, align 41301 %conv = zext i32 %1 to i641302 ret i64 %conv1303}1304 1305; Function Attrs: nofree norecurse nounwind uwtable willreturn1306define dso_local i64 @ld_disjoint_align32_int64_t_uint32_t(i64 %ptr) {1307; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_uint32_t:1308; CHECK-P10: # %bb.0: # %entry1309; CHECK-P10-NEXT: lis r4, -152641310; CHECK-P10-NEXT: and r3, r3, r41311; CHECK-P10-NEXT: plwz r3, 999990000(r3), 01312; CHECK-P10-NEXT: clrldi r3, r3, 321313; CHECK-P10-NEXT: blr1314;1315; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_uint32_t:1316; CHECK-PREP10: # %bb.0: # %entry1317; CHECK-PREP10-NEXT: lis r4, -152641318; CHECK-PREP10-NEXT: and r3, r3, r41319; CHECK-PREP10-NEXT: lis r4, 152581320; CHECK-PREP10-NEXT: ori r4, r4, 417121321; CHECK-PREP10-NEXT: lwzx r3, r3, r41322; CHECK-PREP10-NEXT: blr1323entry:1324 %and = and i64 %ptr, -10003415041325 %or = or i64 %and, 9999900001326 %0 = inttoptr i64 %or to ptr1327 %1 = load atomic i32, ptr %0 monotonic, align 161328 %conv = zext i32 %1 to i641329 ret i64 %conv1330}1331 1332; Function Attrs: nofree norecurse nounwind uwtable willreturn1333define dso_local i64 @ld_not_disjoint64_int64_t_uint32_t(i64 %ptr) {1334; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_uint32_t:1335; CHECK-P10: # %bb.0: # %entry1336; CHECK-P10-NEXT: pli r4, 2321337; CHECK-P10-NEXT: pli r5, 35675873291338; CHECK-P10-NEXT: rldimi r5, r4, 32, 01339; CHECK-P10-NEXT: or r3, r3, r51340; CHECK-P10-NEXT: lwz r3, 0(r3)1341; CHECK-P10-NEXT: blr1342;1343; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_uint32_t:1344; CHECK-PREP10: # %bb.0: # %entry1345; CHECK-PREP10-NEXT: li r4, 291346; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241347; CHECK-PREP10-NEXT: oris r4, r4, 544371348; CHECK-PREP10-NEXT: ori r4, r4, 40971349; CHECK-PREP10-NEXT: or r3, r3, r41350; CHECK-PREP10-NEXT: lwz r3, 0(r3)1351; CHECK-PREP10-NEXT: blr1352entry:1353 %or = or i64 %ptr, 10000000000011354 %0 = inttoptr i64 %or to ptr1355 %1 = load atomic i32, ptr %0 monotonic, align 41356 %conv = zext i32 %1 to i641357 ret i64 %conv1358}1359 1360; Function Attrs: nofree norecurse nounwind uwtable willreturn1361define dso_local i64 @ld_disjoint_align64_int64_t_uint32_t(i64 %ptr) {1362; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_uint32_t:1363; CHECK-P10: # %bb.0: # %entry1364; CHECK-P10-NEXT: pli r4, 2441406251365; CHECK-P10-NEXT: rldicr r3, r3, 0, 231366; CHECK-P10-NEXT: rldic r4, r4, 12, 241367; CHECK-P10-NEXT: lwzx r3, r3, r41368; CHECK-P10-NEXT: blr1369;1370; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_uint32_t:1371; CHECK-PREP10: # %bb.0: # %entry1372; CHECK-PREP10-NEXT: lis r4, 37251373; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231374; CHECK-PREP10-NEXT: ori r4, r4, 190251375; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241376; CHECK-PREP10-NEXT: lwzx r3, r3, r41377; CHECK-PREP10-NEXT: blr1378entry:1379 %and = and i64 %ptr, -10995116277761380 %or = or i64 %and, 10000000000001381 %0 = inttoptr i64 %or to ptr1382 %1 = load atomic i32, ptr %0 monotonic, align 40961383 %conv = zext i32 %1 to i641384 ret i64 %conv1385}1386 1387; Function Attrs: nofree norecurse nounwind uwtable willreturn1388define dso_local i64 @ld_cst_align16_int64_t_uint32_t() {1389; CHECK-LABEL: ld_cst_align16_int64_t_uint32_t:1390; CHECK: # %bb.0: # %entry1391; CHECK-NEXT: lwz r3, 4080(0)1392; CHECK-NEXT: blr1393entry:1394 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 161395 %conv = zext i32 %0 to i641396 ret i64 %conv1397}1398 1399; Function Attrs: nofree norecurse nounwind uwtable willreturn1400define dso_local i64 @ld_cst_align32_int64_t_uint32_t() {1401; CHECK-LABEL: ld_cst_align32_int64_t_uint32_t:1402; CHECK: # %bb.0: # %entry1403; CHECK-NEXT: lis r3, 1531404; CHECK-NEXT: lwz r3, -27108(r3)1405; CHECK-NEXT: blr1406entry:1407 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 41408 %conv = zext i32 %0 to i641409 ret i64 %conv1410}1411 1412; Function Attrs: nofree norecurse nounwind uwtable willreturn1413define dso_local i64 @ld_cst_align64_int64_t_uint32_t() {1414; CHECK-P10-LABEL: ld_cst_align64_int64_t_uint32_t:1415; CHECK-P10: # %bb.0: # %entry1416; CHECK-P10-NEXT: pli r3, 2441406251417; CHECK-P10-NEXT: rldic r3, r3, 12, 241418; CHECK-P10-NEXT: lwz r3, 0(r3)1419; CHECK-P10-NEXT: blr1420;1421; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_uint32_t:1422; CHECK-PREP10: # %bb.0: # %entry1423; CHECK-PREP10-NEXT: lis r3, 37251424; CHECK-PREP10-NEXT: ori r3, r3, 190251425; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241426; CHECK-PREP10-NEXT: lwz r3, 0(r3)1427; CHECK-PREP10-NEXT: blr1428entry:1429 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961430 %conv = zext i32 %0 to i641431 ret i64 %conv1432}1433 1434; Function Attrs: nofree norecurse nounwind uwtable willreturn1435define dso_local i64 @ld_0_int64_t_int32_t(i64 %ptr) {1436; CHECK-LABEL: ld_0_int64_t_int32_t:1437; CHECK: # %bb.0: # %entry1438; CHECK-NEXT: lwa r3, 0(r3)1439; CHECK-NEXT: blr1440entry:1441 %0 = inttoptr i64 %ptr to ptr1442 %1 = load atomic i32, ptr %0 monotonic, align 41443 %conv = sext i32 %1 to i641444 ret i64 %conv1445}1446 1447; Function Attrs: nofree norecurse nounwind uwtable willreturn1448define dso_local i64 @ld_align16_int64_t_int32_t(ptr nocapture readonly %ptr) {1449; CHECK-LABEL: ld_align16_int64_t_int32_t:1450; CHECK: # %bb.0: # %entry1451; CHECK-NEXT: lwa r3, 8(r3)1452; CHECK-NEXT: blr1453entry:1454 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81455 %0 = load atomic i32, ptr %add.ptr monotonic, align 41456 %conv = sext i32 %0 to i641457 ret i64 %conv1458}1459 1460; Function Attrs: nofree norecurse nounwind uwtable willreturn1461define dso_local i64 @ld_align32_int64_t_int32_t(ptr nocapture readonly %ptr) {1462; CHECK-P10-LABEL: ld_align32_int64_t_int32_t:1463; CHECK-P10: # %bb.0: # %entry1464; CHECK-P10-NEXT: plwz r3, 99999000(r3), 01465; CHECK-P10-NEXT: extsw r3, r31466; CHECK-P10-NEXT: blr1467;1468; CHECK-PREP10-LABEL: ld_align32_int64_t_int32_t:1469; CHECK-PREP10: # %bb.0: # %entry1470; CHECK-PREP10-NEXT: lis r4, 15251471; CHECK-PREP10-NEXT: ori r4, r4, 566001472; CHECK-PREP10-NEXT: lwax r3, r3, r41473; CHECK-PREP10-NEXT: blr1474entry:1475 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001476 %0 = load atomic i32, ptr %add.ptr monotonic, align 41477 %conv = sext i32 %0 to i641478 ret i64 %conv1479}1480 1481; Function Attrs: nofree norecurse nounwind uwtable willreturn1482define dso_local i64 @ld_align64_int64_t_int32_t(ptr nocapture readonly %ptr) {1483; CHECK-P10-LABEL: ld_align64_int64_t_int32_t:1484; CHECK-P10: # %bb.0: # %entry1485; CHECK-P10-NEXT: pli r4, 2441406251486; CHECK-P10-NEXT: rldic r4, r4, 12, 241487; CHECK-P10-NEXT: lwax r3, r3, r41488; CHECK-P10-NEXT: blr1489;1490; CHECK-PREP10-LABEL: ld_align64_int64_t_int32_t:1491; CHECK-PREP10: # %bb.0: # %entry1492; CHECK-PREP10-NEXT: lis r4, 37251493; CHECK-PREP10-NEXT: ori r4, r4, 190251494; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241495; CHECK-PREP10-NEXT: lwax r3, r3, r41496; CHECK-PREP10-NEXT: blr1497entry:1498 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001499 %0 = load atomic i32, ptr %add.ptr monotonic, align 41500 %conv = sext i32 %0 to i641501 ret i64 %conv1502}1503 1504; Function Attrs: nofree norecurse nounwind uwtable willreturn1505define dso_local i64 @ld_reg_int64_t_int32_t(ptr nocapture readonly %ptr, i64 %off) {1506; CHECK-LABEL: ld_reg_int64_t_int32_t:1507; CHECK: # %bb.0: # %entry1508; CHECK-NEXT: lwax r3, r3, r41509; CHECK-NEXT: blr1510entry:1511 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1512 %0 = load atomic i32, ptr %add.ptr monotonic, align 41513 %conv = sext i32 %0 to i641514 ret i64 %conv1515}1516 1517; Function Attrs: nofree norecurse nounwind uwtable willreturn1518define dso_local i64 @ld_or_int64_t_int32_t(i64 %ptr, i8 zeroext %off) {1519; CHECK-LABEL: ld_or_int64_t_int32_t:1520; CHECK: # %bb.0: # %entry1521; CHECK-NEXT: or r3, r4, r31522; CHECK-NEXT: lwa r3, 0(r3)1523; CHECK-NEXT: blr1524entry:1525 %conv = zext i8 %off to i641526 %or = or i64 %conv, %ptr1527 %0 = inttoptr i64 %or to ptr1528 %1 = load atomic i32, ptr %0 monotonic, align 41529 %conv1 = sext i32 %1 to i641530 ret i64 %conv11531}1532 1533; Function Attrs: nofree norecurse nounwind uwtable willreturn1534define dso_local i64 @ld_not_disjoint16_int64_t_int32_t(i64 %ptr) {1535; CHECK-LABEL: ld_not_disjoint16_int64_t_int32_t:1536; CHECK: # %bb.0: # %entry1537; CHECK-NEXT: ori r3, r3, 61538; CHECK-NEXT: lwa r3, 0(r3)1539; CHECK-NEXT: blr1540entry:1541 %or = or i64 %ptr, 61542 %0 = inttoptr i64 %or to ptr1543 %1 = load atomic i32, ptr %0 monotonic, align 41544 %conv = sext i32 %1 to i641545 ret i64 %conv1546}1547 1548; Function Attrs: nofree norecurse nounwind uwtable willreturn1549define dso_local i64 @ld_disjoint_align16_int64_t_int32_t(i64 %ptr) {1550; CHECK-LABEL: ld_disjoint_align16_int64_t_int32_t:1551; CHECK: # %bb.0: # %entry1552; CHECK-NEXT: rldicr r3, r3, 0, 511553; CHECK-NEXT: lwa r3, 24(r3)1554; CHECK-NEXT: blr1555entry:1556 %and = and i64 %ptr, -40961557 %or = or i64 %and, 241558 %0 = inttoptr i64 %or to ptr1559 %1 = load atomic i32, ptr %0 monotonic, align 81560 %conv = sext i32 %1 to i641561 ret i64 %conv1562}1563 1564; Function Attrs: nofree norecurse nounwind uwtable willreturn1565define dso_local i64 @ld_not_disjoint32_int64_t_int32_t(i64 %ptr) {1566; CHECK-LABEL: ld_not_disjoint32_int64_t_int32_t:1567; CHECK: # %bb.0: # %entry1568; CHECK-NEXT: ori r3, r3, 344631569; CHECK-NEXT: oris r3, r3, 11570; CHECK-NEXT: lwa r3, 0(r3)1571; CHECK-NEXT: blr1572entry:1573 %or = or i64 %ptr, 999991574 %0 = inttoptr i64 %or to ptr1575 %1 = load atomic i32, ptr %0 monotonic, align 41576 %conv = sext i32 %1 to i641577 ret i64 %conv1578}1579 1580; Function Attrs: nofree norecurse nounwind uwtable willreturn1581define dso_local i64 @ld_disjoint_align32_int64_t_int32_t(i64 %ptr) {1582; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_int32_t:1583; CHECK-P10: # %bb.0: # %entry1584; CHECK-P10-NEXT: lis r4, -152641585; CHECK-P10-NEXT: and r3, r3, r41586; CHECK-P10-NEXT: plwz r3, 999990000(r3), 01587; CHECK-P10-NEXT: extsw r3, r31588; CHECK-P10-NEXT: blr1589;1590; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_int32_t:1591; CHECK-PREP10: # %bb.0: # %entry1592; CHECK-PREP10-NEXT: lis r4, -152641593; CHECK-PREP10-NEXT: and r3, r3, r41594; CHECK-PREP10-NEXT: lis r4, 152581595; CHECK-PREP10-NEXT: ori r4, r4, 417121596; CHECK-PREP10-NEXT: lwax r3, r3, r41597; CHECK-PREP10-NEXT: blr1598entry:1599 %and = and i64 %ptr, -10003415041600 %or = or i64 %and, 9999900001601 %0 = inttoptr i64 %or to ptr1602 %1 = load atomic i32, ptr %0 monotonic, align 161603 %conv = sext i32 %1 to i641604 ret i64 %conv1605}1606 1607; Function Attrs: nofree norecurse nounwind uwtable willreturn1608define dso_local i64 @ld_not_disjoint64_int64_t_int32_t(i64 %ptr) {1609; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_int32_t:1610; CHECK-P10: # %bb.0: # %entry1611; CHECK-P10-NEXT: pli r4, 2321612; CHECK-P10-NEXT: pli r5, 35675873291613; CHECK-P10-NEXT: rldimi r5, r4, 32, 01614; CHECK-P10-NEXT: or r3, r3, r51615; CHECK-P10-NEXT: lwa r3, 0(r3)1616; CHECK-P10-NEXT: blr1617;1618; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_int32_t:1619; CHECK-PREP10: # %bb.0: # %entry1620; CHECK-PREP10-NEXT: li r4, 291621; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241622; CHECK-PREP10-NEXT: oris r4, r4, 544371623; CHECK-PREP10-NEXT: ori r4, r4, 40971624; CHECK-PREP10-NEXT: or r3, r3, r41625; CHECK-PREP10-NEXT: lwa r3, 0(r3)1626; CHECK-PREP10-NEXT: blr1627entry:1628 %or = or i64 %ptr, 10000000000011629 %0 = inttoptr i64 %or to ptr1630 %1 = load atomic i32, ptr %0 monotonic, align 41631 %conv = sext i32 %1 to i641632 ret i64 %conv1633}1634 1635; Function Attrs: nofree norecurse nounwind uwtable willreturn1636define dso_local i64 @ld_disjoint_align64_int64_t_int32_t(i64 %ptr) {1637; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_int32_t:1638; CHECK-P10: # %bb.0: # %entry1639; CHECK-P10-NEXT: pli r4, 2441406251640; CHECK-P10-NEXT: rldicr r3, r3, 0, 231641; CHECK-P10-NEXT: rldic r4, r4, 12, 241642; CHECK-P10-NEXT: lwax r3, r3, r41643; CHECK-P10-NEXT: blr1644;1645; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_int32_t:1646; CHECK-PREP10: # %bb.0: # %entry1647; CHECK-PREP10-NEXT: lis r4, 37251648; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231649; CHECK-PREP10-NEXT: ori r4, r4, 190251650; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241651; CHECK-PREP10-NEXT: lwax r3, r3, r41652; CHECK-PREP10-NEXT: blr1653entry:1654 %and = and i64 %ptr, -10995116277761655 %or = or i64 %and, 10000000000001656 %0 = inttoptr i64 %or to ptr1657 %1 = load atomic i32, ptr %0 monotonic, align 40961658 %conv = sext i32 %1 to i641659 ret i64 %conv1660}1661 1662; Function Attrs: nofree norecurse nounwind uwtable willreturn1663define dso_local i64 @ld_cst_align16_int64_t_int32_t() {1664; CHECK-LABEL: ld_cst_align16_int64_t_int32_t:1665; CHECK: # %bb.0: # %entry1666; CHECK-NEXT: lwa r3, 4080(0)1667; CHECK-NEXT: blr1668entry:1669 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 161670 %conv = sext i32 %0 to i641671 ret i64 %conv1672}1673 1674; Function Attrs: nofree norecurse nounwind uwtable willreturn1675define dso_local i64 @ld_cst_align32_int64_t_int32_t() {1676; CHECK-LABEL: ld_cst_align32_int64_t_int32_t:1677; CHECK: # %bb.0: # %entry1678; CHECK-NEXT: lis r3, 1531679; CHECK-NEXT: lwa r3, -27108(r3)1680; CHECK-NEXT: blr1681entry:1682 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 41683 %conv = sext i32 %0 to i641684 ret i64 %conv1685}1686 1687; Function Attrs: nofree norecurse nounwind uwtable willreturn1688define dso_local i64 @ld_cst_align64_int64_t_int32_t() {1689; CHECK-P10-LABEL: ld_cst_align64_int64_t_int32_t:1690; CHECK-P10: # %bb.0: # %entry1691; CHECK-P10-NEXT: pli r3, 2441406251692; CHECK-P10-NEXT: rldic r3, r3, 12, 241693; CHECK-P10-NEXT: lwa r3, 0(r3)1694; CHECK-P10-NEXT: blr1695;1696; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_int32_t:1697; CHECK-PREP10: # %bb.0: # %entry1698; CHECK-PREP10-NEXT: lis r3, 37251699; CHECK-PREP10-NEXT: ori r3, r3, 190251700; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241701; CHECK-PREP10-NEXT: lwa r3, 0(r3)1702; CHECK-PREP10-NEXT: blr1703entry:1704 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961705 %conv = sext i32 %0 to i641706 ret i64 %conv1707}1708 1709; Function Attrs: nofree norecurse nounwind uwtable willreturn1710define dso_local i64 @ld_0_int64_t_uint64_t(i64 %ptr) {1711; CHECK-LABEL: ld_0_int64_t_uint64_t:1712; CHECK: # %bb.0: # %entry1713; CHECK-NEXT: ld r3, 0(r3)1714; CHECK-NEXT: blr1715entry:1716 %0 = inttoptr i64 %ptr to ptr1717 %1 = load atomic i64, ptr %0 monotonic, align 81718 ret i64 %11719}1720 1721; Function Attrs: nofree norecurse nounwind uwtable willreturn1722define dso_local i64 @ld_align16_int64_t_uint64_t(ptr nocapture readonly %ptr) {1723; CHECK-LABEL: ld_align16_int64_t_uint64_t:1724; CHECK: # %bb.0: # %entry1725; CHECK-NEXT: ld r3, 8(r3)1726; CHECK-NEXT: blr1727entry:1728 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81729 %0 = load atomic i64, ptr %add.ptr monotonic, align 81730 ret i64 %01731}1732 1733; Function Attrs: nofree norecurse nounwind uwtable willreturn1734define dso_local i64 @ld_align32_int64_t_uint64_t(ptr nocapture readonly %ptr) {1735; CHECK-P10-LABEL: ld_align32_int64_t_uint64_t:1736; CHECK-P10: # %bb.0: # %entry1737; CHECK-P10-NEXT: pld r3, 99999000(r3), 01738; CHECK-P10-NEXT: blr1739;1740; CHECK-PREP10-LABEL: ld_align32_int64_t_uint64_t:1741; CHECK-PREP10: # %bb.0: # %entry1742; CHECK-PREP10-NEXT: lis r4, 15251743; CHECK-PREP10-NEXT: ori r4, r4, 566001744; CHECK-PREP10-NEXT: ldx r3, r3, r41745; CHECK-PREP10-NEXT: blr1746entry:1747 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001748 %0 = load atomic i64, ptr %add.ptr monotonic, align 81749 ret i64 %01750}1751 1752; Function Attrs: nofree norecurse nounwind uwtable willreturn1753define dso_local i64 @ld_align64_int64_t_uint64_t(ptr nocapture readonly %ptr) {1754; CHECK-P10-LABEL: ld_align64_int64_t_uint64_t:1755; CHECK-P10: # %bb.0: # %entry1756; CHECK-P10-NEXT: pli r4, 2441406251757; CHECK-P10-NEXT: rldic r4, r4, 12, 241758; CHECK-P10-NEXT: ldx r3, r3, r41759; CHECK-P10-NEXT: blr1760;1761; CHECK-PREP10-LABEL: ld_align64_int64_t_uint64_t:1762; CHECK-PREP10: # %bb.0: # %entry1763; CHECK-PREP10-NEXT: lis r4, 37251764; CHECK-PREP10-NEXT: ori r4, r4, 190251765; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241766; CHECK-PREP10-NEXT: ldx r3, r3, r41767; CHECK-PREP10-NEXT: blr1768entry:1769 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001770 %0 = load atomic i64, ptr %add.ptr monotonic, align 81771 ret i64 %01772}1773 1774; Function Attrs: nofree norecurse nounwind uwtable willreturn1775define dso_local i64 @ld_reg_int64_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {1776; CHECK-LABEL: ld_reg_int64_t_uint64_t:1777; CHECK: # %bb.0: # %entry1778; CHECK-NEXT: ldx r3, r3, r41779; CHECK-NEXT: blr1780entry:1781 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1782 %0 = load atomic i64, ptr %add.ptr monotonic, align 81783 ret i64 %01784}1785 1786; Function Attrs: nofree norecurse nounwind uwtable willreturn1787define dso_local i64 @ld_or_int64_t_uint64_t(i64 %ptr, i8 zeroext %off) {1788; CHECK-LABEL: ld_or_int64_t_uint64_t:1789; CHECK: # %bb.0: # %entry1790; CHECK-NEXT: or r3, r4, r31791; CHECK-NEXT: ld r3, 0(r3)1792; CHECK-NEXT: blr1793entry:1794 %conv = zext i8 %off to i641795 %or = or i64 %conv, %ptr1796 %0 = inttoptr i64 %or to ptr1797 %1 = load atomic i64, ptr %0 monotonic, align 81798 ret i64 %11799}1800 1801; Function Attrs: nofree norecurse nounwind uwtable willreturn1802define dso_local i64 @ld_not_disjoint16_int64_t_uint64_t(i64 %ptr) {1803; CHECK-LABEL: ld_not_disjoint16_int64_t_uint64_t:1804; CHECK: # %bb.0: # %entry1805; CHECK-NEXT: ori r3, r3, 61806; CHECK-NEXT: ld r3, 0(r3)1807; CHECK-NEXT: blr1808entry:1809 %or = or i64 %ptr, 61810 %0 = inttoptr i64 %or to ptr1811 %1 = load atomic i64, ptr %0 monotonic, align 81812 ret i64 %11813}1814 1815; Function Attrs: nofree norecurse nounwind uwtable willreturn1816define dso_local i64 @ld_disjoint_align16_int64_t_uint64_t(i64 %ptr) {1817; CHECK-LABEL: ld_disjoint_align16_int64_t_uint64_t:1818; CHECK: # %bb.0: # %entry1819; CHECK-NEXT: rldicr r3, r3, 0, 511820; CHECK-NEXT: ld r3, 24(r3)1821; CHECK-NEXT: blr1822entry:1823 %and = and i64 %ptr, -40961824 %or = or i64 %and, 241825 %0 = inttoptr i64 %or to ptr1826 %1 = load atomic i64, ptr %0 monotonic, align 81827 ret i64 %11828}1829 1830; Function Attrs: nofree norecurse nounwind uwtable willreturn1831define dso_local i64 @ld_not_disjoint32_int64_t_uint64_t(i64 %ptr) {1832; CHECK-LABEL: ld_not_disjoint32_int64_t_uint64_t:1833; CHECK: # %bb.0: # %entry1834; CHECK-NEXT: ori r3, r3, 344631835; CHECK-NEXT: oris r3, r3, 11836; CHECK-NEXT: ld r3, 0(r3)1837; CHECK-NEXT: blr1838entry:1839 %or = or i64 %ptr, 999991840 %0 = inttoptr i64 %or to ptr1841 %1 = load atomic i64, ptr %0 monotonic, align 81842 ret i64 %11843}1844 1845; Function Attrs: nofree norecurse nounwind uwtable willreturn1846define dso_local i64 @ld_disjoint_align32_int64_t_uint64_t(i64 %ptr) {1847; CHECK-P10-LABEL: ld_disjoint_align32_int64_t_uint64_t:1848; CHECK-P10: # %bb.0: # %entry1849; CHECK-P10-NEXT: lis r4, -152641850; CHECK-P10-NEXT: and r3, r3, r41851; CHECK-P10-NEXT: pld r3, 999990000(r3), 01852; CHECK-P10-NEXT: blr1853;1854; CHECK-PREP10-LABEL: ld_disjoint_align32_int64_t_uint64_t:1855; CHECK-PREP10: # %bb.0: # %entry1856; CHECK-PREP10-NEXT: lis r4, -152641857; CHECK-PREP10-NEXT: and r3, r3, r41858; CHECK-PREP10-NEXT: lis r4, 152581859; CHECK-PREP10-NEXT: ori r4, r4, 417121860; CHECK-PREP10-NEXT: ldx r3, r3, r41861; CHECK-PREP10-NEXT: blr1862entry:1863 %and = and i64 %ptr, -10003415041864 %or = or i64 %and, 9999900001865 %0 = inttoptr i64 %or to ptr1866 %1 = load atomic i64, ptr %0 monotonic, align 161867 ret i64 %11868}1869 1870; Function Attrs: nofree norecurse nounwind uwtable willreturn1871define dso_local i64 @ld_not_disjoint64_int64_t_uint64_t(i64 %ptr) {1872; CHECK-P10-LABEL: ld_not_disjoint64_int64_t_uint64_t:1873; CHECK-P10: # %bb.0: # %entry1874; CHECK-P10-NEXT: pli r4, 2321875; CHECK-P10-NEXT: pli r5, 35675873291876; CHECK-P10-NEXT: rldimi r5, r4, 32, 01877; CHECK-P10-NEXT: or r3, r3, r51878; CHECK-P10-NEXT: ld r3, 0(r3)1879; CHECK-P10-NEXT: blr1880;1881; CHECK-PREP10-LABEL: ld_not_disjoint64_int64_t_uint64_t:1882; CHECK-PREP10: # %bb.0: # %entry1883; CHECK-PREP10-NEXT: li r4, 291884; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241885; CHECK-PREP10-NEXT: oris r4, r4, 544371886; CHECK-PREP10-NEXT: ori r4, r4, 40971887; CHECK-PREP10-NEXT: or r3, r3, r41888; CHECK-PREP10-NEXT: ld r3, 0(r3)1889; CHECK-PREP10-NEXT: blr1890entry:1891 %or = or i64 %ptr, 10000000000011892 %0 = inttoptr i64 %or to ptr1893 %1 = load atomic i64, ptr %0 monotonic, align 81894 ret i64 %11895}1896 1897; Function Attrs: nofree norecurse nounwind uwtable willreturn1898define dso_local i64 @ld_disjoint_align64_int64_t_uint64_t(i64 %ptr) {1899; CHECK-P10-LABEL: ld_disjoint_align64_int64_t_uint64_t:1900; CHECK-P10: # %bb.0: # %entry1901; CHECK-P10-NEXT: pli r4, 2441406251902; CHECK-P10-NEXT: rldicr r3, r3, 0, 231903; CHECK-P10-NEXT: rldic r4, r4, 12, 241904; CHECK-P10-NEXT: ldx r3, r3, r41905; CHECK-P10-NEXT: blr1906;1907; CHECK-PREP10-LABEL: ld_disjoint_align64_int64_t_uint64_t:1908; CHECK-PREP10: # %bb.0: # %entry1909; CHECK-PREP10-NEXT: lis r4, 37251910; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231911; CHECK-PREP10-NEXT: ori r4, r4, 190251912; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241913; CHECK-PREP10-NEXT: ldx r3, r3, r41914; CHECK-PREP10-NEXT: blr1915entry:1916 %and = and i64 %ptr, -10995116277761917 %or = or i64 %and, 10000000000001918 %0 = inttoptr i64 %or to ptr1919 %1 = load atomic i64, ptr %0 monotonic, align 40961920 ret i64 %11921}1922 1923; Function Attrs: nofree norecurse nounwind uwtable willreturn1924define dso_local i64 @ld_cst_align16_int64_t_uint64_t() {1925; CHECK-LABEL: ld_cst_align16_int64_t_uint64_t:1926; CHECK: # %bb.0: # %entry1927; CHECK-NEXT: ld r3, 4080(0)1928; CHECK-NEXT: blr1929entry:1930 %0 = load atomic i64, ptr inttoptr (i64 4080 to ptr) monotonic, align 161931 ret i64 %01932}1933 1934; Function Attrs: nofree norecurse nounwind uwtable willreturn1935define dso_local i64 @ld_cst_align32_int64_t_uint64_t() {1936; CHECK-LABEL: ld_cst_align32_int64_t_uint64_t:1937; CHECK: # %bb.0: # %entry1938; CHECK-NEXT: lis r3, 1531939; CHECK-NEXT: ld r3, -27108(r3)1940; CHECK-NEXT: blr1941entry:1942 %0 = load atomic i64, ptr inttoptr (i64 9999900 to ptr) monotonic, align 81943 ret i64 %01944}1945 1946; Function Attrs: nofree norecurse nounwind uwtable willreturn1947define dso_local i64 @ld_cst_align64_int64_t_uint64_t() {1948; CHECK-P10-LABEL: ld_cst_align64_int64_t_uint64_t:1949; CHECK-P10: # %bb.0: # %entry1950; CHECK-P10-NEXT: pli r3, 2441406251951; CHECK-P10-NEXT: rldic r3, r3, 12, 241952; CHECK-P10-NEXT: ld r3, 0(r3)1953; CHECK-P10-NEXT: blr1954;1955; CHECK-PREP10-LABEL: ld_cst_align64_int64_t_uint64_t:1956; CHECK-PREP10: # %bb.0: # %entry1957; CHECK-PREP10-NEXT: lis r3, 37251958; CHECK-PREP10-NEXT: ori r3, r3, 190251959; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241960; CHECK-PREP10-NEXT: ld r3, 0(r3)1961; CHECK-PREP10-NEXT: blr1962entry:1963 %0 = load atomic i64, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961964 ret i64 %01965}1966 1967; Function Attrs: nofree norecurse nounwind uwtable willreturn1968define dso_local i64 @ld_0_uint64_t_uint8_t(i64 %ptr) {1969; CHECK-LABEL: ld_0_uint64_t_uint8_t:1970; CHECK: # %bb.0: # %entry1971; CHECK-NEXT: lbz r3, 0(r3)1972; CHECK-NEXT: blr1973entry:1974 %0 = inttoptr i64 %ptr to ptr1975 %1 = load atomic i8, ptr %0 monotonic, align 11976 %conv = zext i8 %1 to i641977 ret i64 %conv1978}1979 1980; Function Attrs: nofree norecurse nounwind uwtable willreturn1981define dso_local i64 @ld_align16_uint64_t_uint8_t(ptr nocapture readonly %ptr) {1982; CHECK-LABEL: ld_align16_uint64_t_uint8_t:1983; CHECK: # %bb.0: # %entry1984; CHECK-NEXT: lbz r3, 8(r3)1985; CHECK-NEXT: blr1986entry:1987 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81988 %0 = load atomic i8, ptr %add.ptr monotonic, align 11989 %conv = zext i8 %0 to i641990 ret i64 %conv1991}1992 1993; Function Attrs: nofree norecurse nounwind uwtable willreturn1994define dso_local i64 @ld_align32_uint64_t_uint8_t(ptr nocapture readonly %ptr) {1995; CHECK-P10-LABEL: ld_align32_uint64_t_uint8_t:1996; CHECK-P10: # %bb.0: # %entry1997; CHECK-P10-NEXT: plbz r3, 99999000(r3), 01998; CHECK-P10-NEXT: clrldi r3, r3, 321999; CHECK-P10-NEXT: blr2000;2001; CHECK-PREP10-LABEL: ld_align32_uint64_t_uint8_t:2002; CHECK-PREP10: # %bb.0: # %entry2003; CHECK-PREP10-NEXT: lis r4, 15252004; CHECK-PREP10-NEXT: ori r4, r4, 566002005; CHECK-PREP10-NEXT: lbzx r3, r3, r42006; CHECK-PREP10-NEXT: blr2007entry:2008 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002009 %0 = load atomic i8, ptr %add.ptr monotonic, align 12010 %conv = zext i8 %0 to i642011 ret i64 %conv2012}2013 2014; Function Attrs: nofree norecurse nounwind uwtable willreturn2015define dso_local i64 @ld_align64_uint64_t_uint8_t(ptr nocapture readonly %ptr) {2016; CHECK-P10-LABEL: ld_align64_uint64_t_uint8_t:2017; CHECK-P10: # %bb.0: # %entry2018; CHECK-P10-NEXT: pli r4, 2441406252019; CHECK-P10-NEXT: rldic r4, r4, 12, 242020; CHECK-P10-NEXT: lbzx r3, r3, r42021; CHECK-P10-NEXT: blr2022;2023; CHECK-PREP10-LABEL: ld_align64_uint64_t_uint8_t:2024; CHECK-PREP10: # %bb.0: # %entry2025; CHECK-PREP10-NEXT: lis r4, 37252026; CHECK-PREP10-NEXT: ori r4, r4, 190252027; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242028; CHECK-PREP10-NEXT: lbzx r3, r3, r42029; CHECK-PREP10-NEXT: blr2030entry:2031 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002032 %0 = load atomic i8, ptr %add.ptr monotonic, align 12033 %conv = zext i8 %0 to i642034 ret i64 %conv2035}2036 2037; Function Attrs: nofree norecurse nounwind uwtable willreturn2038define dso_local i64 @ld_reg_uint64_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) {2039; CHECK-LABEL: ld_reg_uint64_t_uint8_t:2040; CHECK: # %bb.0: # %entry2041; CHECK-NEXT: lbzx r3, r3, r42042; CHECK-NEXT: blr2043entry:2044 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2045 %0 = load atomic i8, ptr %add.ptr monotonic, align 12046 %conv = zext i8 %0 to i642047 ret i64 %conv2048}2049 2050; Function Attrs: nofree norecurse nounwind uwtable willreturn2051define dso_local i64 @ld_or_uint64_t_uint8_t(i64 %ptr, i8 zeroext %off) {2052; CHECK-LABEL: ld_or_uint64_t_uint8_t:2053; CHECK: # %bb.0: # %entry2054; CHECK-NEXT: or r3, r4, r32055; CHECK-NEXT: lbz r3, 0(r3)2056; CHECK-NEXT: blr2057entry:2058 %conv = zext i8 %off to i642059 %or = or i64 %conv, %ptr2060 %0 = inttoptr i64 %or to ptr2061 %1 = load atomic i8, ptr %0 monotonic, align 12062 %conv1 = zext i8 %1 to i642063 ret i64 %conv12064}2065 2066; Function Attrs: nofree norecurse nounwind uwtable willreturn2067define dso_local i64 @ld_not_disjoint16_uint64_t_uint8_t(i64 %ptr) {2068; CHECK-LABEL: ld_not_disjoint16_uint64_t_uint8_t:2069; CHECK: # %bb.0: # %entry2070; CHECK-NEXT: ori r3, r3, 62071; CHECK-NEXT: lbz r3, 0(r3)2072; CHECK-NEXT: blr2073entry:2074 %or = or i64 %ptr, 62075 %0 = inttoptr i64 %or to ptr2076 %1 = load atomic i8, ptr %0 monotonic, align 12077 %conv = zext i8 %1 to i642078 ret i64 %conv2079}2080 2081; Function Attrs: nofree norecurse nounwind uwtable willreturn2082define dso_local i64 @ld_disjoint_align16_uint64_t_uint8_t(i64 %ptr) {2083; CHECK-LABEL: ld_disjoint_align16_uint64_t_uint8_t:2084; CHECK: # %bb.0: # %entry2085; CHECK-NEXT: rldicr r3, r3, 0, 512086; CHECK-NEXT: lbz r3, 24(r3)2087; CHECK-NEXT: blr2088entry:2089 %and = and i64 %ptr, -40962090 %or = or i64 %and, 242091 %0 = inttoptr i64 %or to ptr2092 %1 = load atomic i8, ptr %0 monotonic, align 82093 %conv = zext i8 %1 to i642094 ret i64 %conv2095}2096 2097; Function Attrs: nofree norecurse nounwind uwtable willreturn2098define dso_local i64 @ld_not_disjoint32_uint64_t_uint8_t(i64 %ptr) {2099; CHECK-LABEL: ld_not_disjoint32_uint64_t_uint8_t:2100; CHECK: # %bb.0: # %entry2101; CHECK-NEXT: ori r3, r3, 344632102; CHECK-NEXT: oris r3, r3, 12103; CHECK-NEXT: lbz r3, 0(r3)2104; CHECK-NEXT: blr2105entry:2106 %or = or i64 %ptr, 999992107 %0 = inttoptr i64 %or to ptr2108 %1 = load atomic i8, ptr %0 monotonic, align 12109 %conv = zext i8 %1 to i642110 ret i64 %conv2111}2112 2113; Function Attrs: nofree norecurse nounwind uwtable willreturn2114define dso_local i64 @ld_disjoint_align32_uint64_t_uint8_t(i64 %ptr) {2115; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_uint8_t:2116; CHECK-P10: # %bb.0: # %entry2117; CHECK-P10-NEXT: lis r4, -152642118; CHECK-P10-NEXT: and r3, r3, r42119; CHECK-P10-NEXT: plbz r3, 999990000(r3), 02120; CHECK-P10-NEXT: clrldi r3, r3, 322121; CHECK-P10-NEXT: blr2122;2123; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_uint8_t:2124; CHECK-PREP10: # %bb.0: # %entry2125; CHECK-PREP10-NEXT: lis r4, -152642126; CHECK-PREP10-NEXT: and r3, r3, r42127; CHECK-PREP10-NEXT: lis r4, 152582128; CHECK-PREP10-NEXT: ori r4, r4, 417122129; CHECK-PREP10-NEXT: lbzx r3, r3, r42130; CHECK-PREP10-NEXT: blr2131entry:2132 %and = and i64 %ptr, -10003415042133 %or = or i64 %and, 9999900002134 %0 = inttoptr i64 %or to ptr2135 %1 = load atomic i8, ptr %0 monotonic, align 162136 %conv = zext i8 %1 to i642137 ret i64 %conv2138}2139 2140; Function Attrs: nofree norecurse nounwind uwtable willreturn2141define dso_local i64 @ld_not_disjoint64_uint64_t_uint8_t(i64 %ptr) {2142; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_uint8_t:2143; CHECK-P10: # %bb.0: # %entry2144; CHECK-P10-NEXT: pli r4, 2322145; CHECK-P10-NEXT: pli r5, 35675873292146; CHECK-P10-NEXT: rldimi r5, r4, 32, 02147; CHECK-P10-NEXT: or r3, r3, r52148; CHECK-P10-NEXT: lbz r3, 0(r3)2149; CHECK-P10-NEXT: blr2150;2151; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_uint8_t:2152; CHECK-PREP10: # %bb.0: # %entry2153; CHECK-PREP10-NEXT: li r4, 292154; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242155; CHECK-PREP10-NEXT: oris r4, r4, 544372156; CHECK-PREP10-NEXT: ori r4, r4, 40972157; CHECK-PREP10-NEXT: or r3, r3, r42158; CHECK-PREP10-NEXT: lbz r3, 0(r3)2159; CHECK-PREP10-NEXT: blr2160entry:2161 %or = or i64 %ptr, 10000000000012162 %0 = inttoptr i64 %or to ptr2163 %1 = load atomic i8, ptr %0 monotonic, align 12164 %conv = zext i8 %1 to i642165 ret i64 %conv2166}2167 2168; Function Attrs: nofree norecurse nounwind uwtable willreturn2169define dso_local i64 @ld_disjoint_align64_uint64_t_uint8_t(i64 %ptr) {2170; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_uint8_t:2171; CHECK-P10: # %bb.0: # %entry2172; CHECK-P10-NEXT: pli r4, 2441406252173; CHECK-P10-NEXT: rldicr r3, r3, 0, 232174; CHECK-P10-NEXT: rldic r4, r4, 12, 242175; CHECK-P10-NEXT: lbzx r3, r3, r42176; CHECK-P10-NEXT: blr2177;2178; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_uint8_t:2179; CHECK-PREP10: # %bb.0: # %entry2180; CHECK-PREP10-NEXT: lis r4, 37252181; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232182; CHECK-PREP10-NEXT: ori r4, r4, 190252183; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242184; CHECK-PREP10-NEXT: lbzx r3, r3, r42185; CHECK-PREP10-NEXT: blr2186entry:2187 %and = and i64 %ptr, -10995116277762188 %or = or i64 %and, 10000000000002189 %0 = inttoptr i64 %or to ptr2190 %1 = load atomic i8, ptr %0 monotonic, align 40962191 %conv = zext i8 %1 to i642192 ret i64 %conv2193}2194 2195; Function Attrs: nofree norecurse nounwind uwtable willreturn2196define dso_local i64 @ld_cst_align16_uint64_t_uint8_t() {2197; CHECK-LABEL: ld_cst_align16_uint64_t_uint8_t:2198; CHECK: # %bb.0: # %entry2199; CHECK-NEXT: lbz r3, 4080(0)2200; CHECK-NEXT: blr2201entry:2202 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 162203 %conv = zext i8 %0 to i642204 ret i64 %conv2205}2206 2207; Function Attrs: nofree norecurse nounwind uwtable willreturn2208define dso_local i64 @ld_cst_align32_uint64_t_uint8_t() {2209; CHECK-LABEL: ld_cst_align32_uint64_t_uint8_t:2210; CHECK: # %bb.0: # %entry2211; CHECK-NEXT: lis r3, 1532212; CHECK-NEXT: lbz r3, -27108(r3)2213; CHECK-NEXT: blr2214entry:2215 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42216 %conv = zext i8 %0 to i642217 ret i64 %conv2218}2219 2220; Function Attrs: nofree norecurse nounwind uwtable willreturn2221define dso_local i64 @ld_cst_align64_uint64_t_uint8_t() {2222; CHECK-P10-LABEL: ld_cst_align64_uint64_t_uint8_t:2223; CHECK-P10: # %bb.0: # %entry2224; CHECK-P10-NEXT: pli r3, 2441406252225; CHECK-P10-NEXT: rldic r3, r3, 12, 242226; CHECK-P10-NEXT: lbz r3, 0(r3)2227; CHECK-P10-NEXT: blr2228;2229; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_uint8_t:2230; CHECK-PREP10: # %bb.0: # %entry2231; CHECK-PREP10-NEXT: lis r3, 37252232; CHECK-PREP10-NEXT: ori r3, r3, 190252233; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242234; CHECK-PREP10-NEXT: lbz r3, 0(r3)2235; CHECK-PREP10-NEXT: blr2236entry:2237 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962238 %conv = zext i8 %0 to i642239 ret i64 %conv2240}2241 2242; Function Attrs: nofree norecurse nounwind uwtable willreturn2243define dso_local i64 @ld_0_uint64_t_int8_t(i64 %ptr) {2244; CHECK-LABEL: ld_0_uint64_t_int8_t:2245; CHECK: # %bb.0: # %entry2246; CHECK-NEXT: lbz r3, 0(r3)2247; CHECK-NEXT: extsb r3, r32248; CHECK-NEXT: blr2249entry:2250 %0 = inttoptr i64 %ptr to ptr2251 %1 = load atomic i8, ptr %0 monotonic, align 12252 %conv = sext i8 %1 to i642253 ret i64 %conv2254}2255 2256; Function Attrs: nofree norecurse nounwind uwtable willreturn2257define dso_local i64 @ld_align16_uint64_t_int8_t(ptr nocapture readonly %ptr) {2258; CHECK-LABEL: ld_align16_uint64_t_int8_t:2259; CHECK: # %bb.0: # %entry2260; CHECK-NEXT: lbz r3, 8(r3)2261; CHECK-NEXT: extsb r3, r32262; CHECK-NEXT: blr2263entry:2264 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82265 %0 = load atomic i8, ptr %add.ptr monotonic, align 12266 %conv = sext i8 %0 to i642267 ret i64 %conv2268}2269 2270; Function Attrs: nofree norecurse nounwind uwtable willreturn2271define dso_local i64 @ld_align32_uint64_t_int8_t(ptr nocapture readonly %ptr) {2272; CHECK-P10-LABEL: ld_align32_uint64_t_int8_t:2273; CHECK-P10: # %bb.0: # %entry2274; CHECK-P10-NEXT: plbz r3, 99999000(r3), 02275; CHECK-P10-NEXT: extsb r3, r32276; CHECK-P10-NEXT: blr2277;2278; CHECK-PREP10-LABEL: ld_align32_uint64_t_int8_t:2279; CHECK-PREP10: # %bb.0: # %entry2280; CHECK-PREP10-NEXT: lis r4, 15252281; CHECK-PREP10-NEXT: ori r4, r4, 566002282; CHECK-PREP10-NEXT: lbzx r3, r3, r42283; CHECK-PREP10-NEXT: extsb r3, r32284; CHECK-PREP10-NEXT: blr2285entry:2286 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002287 %0 = load atomic i8, ptr %add.ptr monotonic, align 12288 %conv = sext i8 %0 to i642289 ret i64 %conv2290}2291 2292; Function Attrs: nofree norecurse nounwind uwtable willreturn2293define dso_local i64 @ld_align64_uint64_t_int8_t(ptr nocapture readonly %ptr) {2294; CHECK-P10-LABEL: ld_align64_uint64_t_int8_t:2295; CHECK-P10: # %bb.0: # %entry2296; CHECK-P10-NEXT: pli r4, 2441406252297; CHECK-P10-NEXT: rldic r4, r4, 12, 242298; CHECK-P10-NEXT: lbzx r3, r3, r42299; CHECK-P10-NEXT: extsb r3, r32300; CHECK-P10-NEXT: blr2301;2302; CHECK-PREP10-LABEL: ld_align64_uint64_t_int8_t:2303; CHECK-PREP10: # %bb.0: # %entry2304; CHECK-PREP10-NEXT: lis r4, 37252305; CHECK-PREP10-NEXT: ori r4, r4, 190252306; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242307; CHECK-PREP10-NEXT: lbzx r3, r3, r42308; CHECK-PREP10-NEXT: extsb r3, r32309; CHECK-PREP10-NEXT: blr2310entry:2311 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002312 %0 = load atomic i8, ptr %add.ptr monotonic, align 12313 %conv = sext i8 %0 to i642314 ret i64 %conv2315}2316 2317; Function Attrs: nofree norecurse nounwind uwtable willreturn2318define dso_local i64 @ld_reg_uint64_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {2319; CHECK-LABEL: ld_reg_uint64_t_int8_t:2320; CHECK: # %bb.0: # %entry2321; CHECK-NEXT: lbzx r3, r3, r42322; CHECK-NEXT: extsb r3, r32323; CHECK-NEXT: blr2324entry:2325 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2326 %0 = load atomic i8, ptr %add.ptr monotonic, align 12327 %conv = sext i8 %0 to i642328 ret i64 %conv2329}2330 2331; Function Attrs: nofree norecurse nounwind uwtable willreturn2332define dso_local i64 @ld_or_uint64_t_int8_t(i64 %ptr, i8 zeroext %off) {2333; CHECK-LABEL: ld_or_uint64_t_int8_t:2334; CHECK: # %bb.0: # %entry2335; CHECK-NEXT: or r3, r4, r32336; CHECK-NEXT: lbz r3, 0(r3)2337; CHECK-NEXT: extsb r3, r32338; CHECK-NEXT: blr2339entry:2340 %conv = zext i8 %off to i642341 %or = or i64 %conv, %ptr2342 %0 = inttoptr i64 %or to ptr2343 %1 = load atomic i8, ptr %0 monotonic, align 12344 %conv1 = sext i8 %1 to i642345 ret i64 %conv12346}2347 2348; Function Attrs: nofree norecurse nounwind uwtable willreturn2349define dso_local i64 @ld_not_disjoint16_uint64_t_int8_t(i64 %ptr) {2350; CHECK-LABEL: ld_not_disjoint16_uint64_t_int8_t:2351; CHECK: # %bb.0: # %entry2352; CHECK-NEXT: ori r3, r3, 62353; CHECK-NEXT: lbz r3, 0(r3)2354; CHECK-NEXT: extsb r3, r32355; CHECK-NEXT: blr2356entry:2357 %or = or i64 %ptr, 62358 %0 = inttoptr i64 %or to ptr2359 %1 = load atomic i8, ptr %0 monotonic, align 12360 %conv = sext i8 %1 to i642361 ret i64 %conv2362}2363 2364; Function Attrs: nofree norecurse nounwind uwtable willreturn2365define dso_local i64 @ld_disjoint_align16_uint64_t_int8_t(i64 %ptr) {2366; CHECK-LABEL: ld_disjoint_align16_uint64_t_int8_t:2367; CHECK: # %bb.0: # %entry2368; CHECK-NEXT: rldicr r3, r3, 0, 512369; CHECK-NEXT: lbz r3, 24(r3)2370; CHECK-NEXT: extsb r3, r32371; CHECK-NEXT: blr2372entry:2373 %and = and i64 %ptr, -40962374 %or = or i64 %and, 242375 %0 = inttoptr i64 %or to ptr2376 %1 = load atomic i8, ptr %0 monotonic, align 82377 %conv = sext i8 %1 to i642378 ret i64 %conv2379}2380 2381; Function Attrs: nofree norecurse nounwind uwtable willreturn2382define dso_local i64 @ld_not_disjoint32_uint64_t_int8_t(i64 %ptr) {2383; CHECK-LABEL: ld_not_disjoint32_uint64_t_int8_t:2384; CHECK: # %bb.0: # %entry2385; CHECK-NEXT: ori r3, r3, 344632386; CHECK-NEXT: oris r3, r3, 12387; CHECK-NEXT: lbz r3, 0(r3)2388; CHECK-NEXT: extsb r3, r32389; CHECK-NEXT: blr2390entry:2391 %or = or i64 %ptr, 999992392 %0 = inttoptr i64 %or to ptr2393 %1 = load atomic i8, ptr %0 monotonic, align 12394 %conv = sext i8 %1 to i642395 ret i64 %conv2396}2397 2398; Function Attrs: nofree norecurse nounwind uwtable willreturn2399define dso_local i64 @ld_disjoint_align32_uint64_t_int8_t(i64 %ptr) {2400; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_int8_t:2401; CHECK-P10: # %bb.0: # %entry2402; CHECK-P10-NEXT: lis r4, -152642403; CHECK-P10-NEXT: and r3, r3, r42404; CHECK-P10-NEXT: plbz r3, 999990000(r3), 02405; CHECK-P10-NEXT: extsb r3, r32406; CHECK-P10-NEXT: blr2407;2408; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_int8_t:2409; CHECK-PREP10: # %bb.0: # %entry2410; CHECK-PREP10-NEXT: lis r4, -152642411; CHECK-PREP10-NEXT: and r3, r3, r42412; CHECK-PREP10-NEXT: lis r4, 152582413; CHECK-PREP10-NEXT: ori r4, r4, 417122414; CHECK-PREP10-NEXT: lbzx r3, r3, r42415; CHECK-PREP10-NEXT: extsb r3, r32416; CHECK-PREP10-NEXT: blr2417entry:2418 %and = and i64 %ptr, -10003415042419 %or = or i64 %and, 9999900002420 %0 = inttoptr i64 %or to ptr2421 %1 = load atomic i8, ptr %0 monotonic, align 162422 %conv = sext i8 %1 to i642423 ret i64 %conv2424}2425 2426; Function Attrs: nofree norecurse nounwind uwtable willreturn2427define dso_local i64 @ld_not_disjoint64_uint64_t_int8_t(i64 %ptr) {2428; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_int8_t:2429; CHECK-P10: # %bb.0: # %entry2430; CHECK-P10-NEXT: pli r4, 2322431; CHECK-P10-NEXT: pli r5, 35675873292432; CHECK-P10-NEXT: rldimi r5, r4, 32, 02433; CHECK-P10-NEXT: or r3, r3, r52434; CHECK-P10-NEXT: lbz r3, 0(r3)2435; CHECK-P10-NEXT: extsb r3, r32436; CHECK-P10-NEXT: blr2437;2438; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_int8_t:2439; CHECK-PREP10: # %bb.0: # %entry2440; CHECK-PREP10-NEXT: li r4, 292441; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242442; CHECK-PREP10-NEXT: oris r4, r4, 544372443; CHECK-PREP10-NEXT: ori r4, r4, 40972444; CHECK-PREP10-NEXT: or r3, r3, r42445; CHECK-PREP10-NEXT: lbz r3, 0(r3)2446; CHECK-PREP10-NEXT: extsb r3, r32447; CHECK-PREP10-NEXT: blr2448entry:2449 %or = or i64 %ptr, 10000000000012450 %0 = inttoptr i64 %or to ptr2451 %1 = load atomic i8, ptr %0 monotonic, align 12452 %conv = sext i8 %1 to i642453 ret i64 %conv2454}2455 2456; Function Attrs: nofree norecurse nounwind uwtable willreturn2457define dso_local i64 @ld_disjoint_align64_uint64_t_int8_t(i64 %ptr) {2458; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_int8_t:2459; CHECK-P10: # %bb.0: # %entry2460; CHECK-P10-NEXT: pli r4, 2441406252461; CHECK-P10-NEXT: rldicr r3, r3, 0, 232462; CHECK-P10-NEXT: rldic r4, r4, 12, 242463; CHECK-P10-NEXT: lbzx r3, r3, r42464; CHECK-P10-NEXT: extsb r3, r32465; CHECK-P10-NEXT: blr2466;2467; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_int8_t:2468; CHECK-PREP10: # %bb.0: # %entry2469; CHECK-PREP10-NEXT: lis r4, 37252470; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232471; CHECK-PREP10-NEXT: ori r4, r4, 190252472; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242473; CHECK-PREP10-NEXT: lbzx r3, r3, r42474; CHECK-PREP10-NEXT: extsb r3, r32475; CHECK-PREP10-NEXT: blr2476entry:2477 %and = and i64 %ptr, -10995116277762478 %or = or i64 %and, 10000000000002479 %0 = inttoptr i64 %or to ptr2480 %1 = load atomic i8, ptr %0 monotonic, align 40962481 %conv = sext i8 %1 to i642482 ret i64 %conv2483}2484 2485; Function Attrs: nofree norecurse nounwind uwtable willreturn2486define dso_local i64 @ld_cst_align16_uint64_t_int8_t() {2487; CHECK-LABEL: ld_cst_align16_uint64_t_int8_t:2488; CHECK: # %bb.0: # %entry2489; CHECK-NEXT: lbz r3, 4080(0)2490; CHECK-NEXT: extsb r3, r32491; CHECK-NEXT: blr2492entry:2493 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 162494 %conv = sext i8 %0 to i642495 ret i64 %conv2496}2497 2498; Function Attrs: nofree norecurse nounwind uwtable willreturn2499define dso_local i64 @ld_cst_align32_uint64_t_int8_t() {2500; CHECK-LABEL: ld_cst_align32_uint64_t_int8_t:2501; CHECK: # %bb.0: # %entry2502; CHECK-NEXT: lis r3, 1532503; CHECK-NEXT: lbz r3, -27108(r3)2504; CHECK-NEXT: extsb r3, r32505; CHECK-NEXT: blr2506entry:2507 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42508 %conv = sext i8 %0 to i642509 ret i64 %conv2510}2511 2512; Function Attrs: nofree norecurse nounwind uwtable willreturn2513define dso_local i64 @ld_cst_align64_uint64_t_int8_t() {2514; CHECK-P10-LABEL: ld_cst_align64_uint64_t_int8_t:2515; CHECK-P10: # %bb.0: # %entry2516; CHECK-P10-NEXT: pli r3, 2441406252517; CHECK-P10-NEXT: rldic r3, r3, 12, 242518; CHECK-P10-NEXT: lbz r3, 0(r3)2519; CHECK-P10-NEXT: extsb r3, r32520; CHECK-P10-NEXT: blr2521;2522; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_int8_t:2523; CHECK-PREP10: # %bb.0: # %entry2524; CHECK-PREP10-NEXT: lis r3, 37252525; CHECK-PREP10-NEXT: ori r3, r3, 190252526; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242527; CHECK-PREP10-NEXT: lbz r3, 0(r3)2528; CHECK-PREP10-NEXT: extsb r3, r32529; CHECK-PREP10-NEXT: blr2530entry:2531 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962532 %conv = sext i8 %0 to i642533 ret i64 %conv2534}2535 2536; Function Attrs: nofree norecurse nounwind uwtable willreturn2537define dso_local i64 @ld_0_uint64_t_uint16_t(i64 %ptr) {2538; CHECK-LABEL: ld_0_uint64_t_uint16_t:2539; CHECK: # %bb.0: # %entry2540; CHECK-NEXT: lhz r3, 0(r3)2541; CHECK-NEXT: blr2542entry:2543 %0 = inttoptr i64 %ptr to ptr2544 %1 = load atomic i16, ptr %0 monotonic, align 22545 %conv = zext i16 %1 to i642546 ret i64 %conv2547}2548 2549; Function Attrs: nofree norecurse nounwind uwtable willreturn2550define dso_local i64 @ld_align16_uint64_t_uint16_t(ptr nocapture readonly %ptr) {2551; CHECK-LABEL: ld_align16_uint64_t_uint16_t:2552; CHECK: # %bb.0: # %entry2553; CHECK-NEXT: lhz r3, 8(r3)2554; CHECK-NEXT: blr2555entry:2556 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82557 %0 = load atomic i16, ptr %add.ptr monotonic, align 22558 %conv = zext i16 %0 to i642559 ret i64 %conv2560}2561 2562; Function Attrs: nofree norecurse nounwind uwtable willreturn2563define dso_local i64 @ld_align32_uint64_t_uint16_t(ptr nocapture readonly %ptr) {2564; CHECK-P10-LABEL: ld_align32_uint64_t_uint16_t:2565; CHECK-P10: # %bb.0: # %entry2566; CHECK-P10-NEXT: plhz r3, 99999000(r3), 02567; CHECK-P10-NEXT: clrldi r3, r3, 322568; CHECK-P10-NEXT: blr2569;2570; CHECK-PREP10-LABEL: ld_align32_uint64_t_uint16_t:2571; CHECK-PREP10: # %bb.0: # %entry2572; CHECK-PREP10-NEXT: lis r4, 15252573; CHECK-PREP10-NEXT: ori r4, r4, 566002574; CHECK-PREP10-NEXT: lhzx r3, r3, r42575; CHECK-PREP10-NEXT: blr2576entry:2577 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002578 %0 = load atomic i16, ptr %add.ptr monotonic, align 22579 %conv = zext i16 %0 to i642580 ret i64 %conv2581}2582 2583; Function Attrs: nofree norecurse nounwind uwtable willreturn2584define dso_local i64 @ld_align64_uint64_t_uint16_t(ptr nocapture readonly %ptr) {2585; CHECK-P10-LABEL: ld_align64_uint64_t_uint16_t:2586; CHECK-P10: # %bb.0: # %entry2587; CHECK-P10-NEXT: pli r4, 2441406252588; CHECK-P10-NEXT: rldic r4, r4, 12, 242589; CHECK-P10-NEXT: lhzx r3, r3, r42590; CHECK-P10-NEXT: blr2591;2592; CHECK-PREP10-LABEL: ld_align64_uint64_t_uint16_t:2593; CHECK-PREP10: # %bb.0: # %entry2594; CHECK-PREP10-NEXT: lis r4, 37252595; CHECK-PREP10-NEXT: ori r4, r4, 190252596; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242597; CHECK-PREP10-NEXT: lhzx r3, r3, r42598; CHECK-PREP10-NEXT: blr2599entry:2600 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002601 %0 = load atomic i16, ptr %add.ptr monotonic, align 22602 %conv = zext i16 %0 to i642603 ret i64 %conv2604}2605 2606; Function Attrs: nofree norecurse nounwind uwtable willreturn2607define dso_local i64 @ld_reg_uint64_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {2608; CHECK-LABEL: ld_reg_uint64_t_uint16_t:2609; CHECK: # %bb.0: # %entry2610; CHECK-NEXT: lhzx r3, r3, r42611; CHECK-NEXT: blr2612entry:2613 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2614 %0 = load atomic i16, ptr %add.ptr monotonic, align 22615 %conv = zext i16 %0 to i642616 ret i64 %conv2617}2618 2619; Function Attrs: nofree norecurse nounwind uwtable willreturn2620define dso_local i64 @ld_or_uint64_t_uint16_t(i64 %ptr, i8 zeroext %off) {2621; CHECK-LABEL: ld_or_uint64_t_uint16_t:2622; CHECK: # %bb.0: # %entry2623; CHECK-NEXT: or r3, r4, r32624; CHECK-NEXT: lhz r3, 0(r3)2625; CHECK-NEXT: blr2626entry:2627 %conv = zext i8 %off to i642628 %or = or i64 %conv, %ptr2629 %0 = inttoptr i64 %or to ptr2630 %1 = load atomic i16, ptr %0 monotonic, align 22631 %conv1 = zext i16 %1 to i642632 ret i64 %conv12633}2634 2635; Function Attrs: nofree norecurse nounwind uwtable willreturn2636define dso_local i64 @ld_not_disjoint16_uint64_t_uint16_t(i64 %ptr) {2637; CHECK-LABEL: ld_not_disjoint16_uint64_t_uint16_t:2638; CHECK: # %bb.0: # %entry2639; CHECK-NEXT: ori r3, r3, 62640; CHECK-NEXT: lhz r3, 0(r3)2641; CHECK-NEXT: blr2642entry:2643 %or = or i64 %ptr, 62644 %0 = inttoptr i64 %or to ptr2645 %1 = load atomic i16, ptr %0 monotonic, align 22646 %conv = zext i16 %1 to i642647 ret i64 %conv2648}2649 2650; Function Attrs: nofree norecurse nounwind uwtable willreturn2651define dso_local i64 @ld_disjoint_align16_uint64_t_uint16_t(i64 %ptr) {2652; CHECK-LABEL: ld_disjoint_align16_uint64_t_uint16_t:2653; CHECK: # %bb.0: # %entry2654; CHECK-NEXT: rldicr r3, r3, 0, 512655; CHECK-NEXT: lhz r3, 24(r3)2656; CHECK-NEXT: blr2657entry:2658 %and = and i64 %ptr, -40962659 %or = or i64 %and, 242660 %0 = inttoptr i64 %or to ptr2661 %1 = load atomic i16, ptr %0 monotonic, align 82662 %conv = zext i16 %1 to i642663 ret i64 %conv2664}2665 2666; Function Attrs: nofree norecurse nounwind uwtable willreturn2667define dso_local i64 @ld_not_disjoint32_uint64_t_uint16_t(i64 %ptr) {2668; CHECK-LABEL: ld_not_disjoint32_uint64_t_uint16_t:2669; CHECK: # %bb.0: # %entry2670; CHECK-NEXT: ori r3, r3, 344632671; CHECK-NEXT: oris r3, r3, 12672; CHECK-NEXT: lhz r3, 0(r3)2673; CHECK-NEXT: blr2674entry:2675 %or = or i64 %ptr, 999992676 %0 = inttoptr i64 %or to ptr2677 %1 = load atomic i16, ptr %0 monotonic, align 22678 %conv = zext i16 %1 to i642679 ret i64 %conv2680}2681 2682; Function Attrs: nofree norecurse nounwind uwtable willreturn2683define dso_local i64 @ld_disjoint_align32_uint64_t_uint16_t(i64 %ptr) {2684; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_uint16_t:2685; CHECK-P10: # %bb.0: # %entry2686; CHECK-P10-NEXT: lis r4, -152642687; CHECK-P10-NEXT: and r3, r3, r42688; CHECK-P10-NEXT: plhz r3, 999990000(r3), 02689; CHECK-P10-NEXT: clrldi r3, r3, 322690; CHECK-P10-NEXT: blr2691;2692; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_uint16_t:2693; CHECK-PREP10: # %bb.0: # %entry2694; CHECK-PREP10-NEXT: lis r4, -152642695; CHECK-PREP10-NEXT: and r3, r3, r42696; CHECK-PREP10-NEXT: lis r4, 152582697; CHECK-PREP10-NEXT: ori r4, r4, 417122698; CHECK-PREP10-NEXT: lhzx r3, r3, r42699; CHECK-PREP10-NEXT: blr2700entry:2701 %and = and i64 %ptr, -10003415042702 %or = or i64 %and, 9999900002703 %0 = inttoptr i64 %or to ptr2704 %1 = load atomic i16, ptr %0 monotonic, align 162705 %conv = zext i16 %1 to i642706 ret i64 %conv2707}2708 2709; Function Attrs: nofree norecurse nounwind uwtable willreturn2710define dso_local i64 @ld_not_disjoint64_uint64_t_uint16_t(i64 %ptr) {2711; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_uint16_t:2712; CHECK-P10: # %bb.0: # %entry2713; CHECK-P10-NEXT: pli r4, 2322714; CHECK-P10-NEXT: pli r5, 35675873292715; CHECK-P10-NEXT: rldimi r5, r4, 32, 02716; CHECK-P10-NEXT: or r3, r3, r52717; CHECK-P10-NEXT: lhz r3, 0(r3)2718; CHECK-P10-NEXT: blr2719;2720; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_uint16_t:2721; CHECK-PREP10: # %bb.0: # %entry2722; CHECK-PREP10-NEXT: li r4, 292723; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242724; CHECK-PREP10-NEXT: oris r4, r4, 544372725; CHECK-PREP10-NEXT: ori r4, r4, 40972726; CHECK-PREP10-NEXT: or r3, r3, r42727; CHECK-PREP10-NEXT: lhz r3, 0(r3)2728; CHECK-PREP10-NEXT: blr2729entry:2730 %or = or i64 %ptr, 10000000000012731 %0 = inttoptr i64 %or to ptr2732 %1 = load atomic i16, ptr %0 monotonic, align 22733 %conv = zext i16 %1 to i642734 ret i64 %conv2735}2736 2737; Function Attrs: nofree norecurse nounwind uwtable willreturn2738define dso_local i64 @ld_disjoint_align64_uint64_t_uint16_t(i64 %ptr) {2739; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_uint16_t:2740; CHECK-P10: # %bb.0: # %entry2741; CHECK-P10-NEXT: pli r4, 2441406252742; CHECK-P10-NEXT: rldicr r3, r3, 0, 232743; CHECK-P10-NEXT: rldic r4, r4, 12, 242744; CHECK-P10-NEXT: lhzx r3, r3, r42745; CHECK-P10-NEXT: blr2746;2747; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_uint16_t:2748; CHECK-PREP10: # %bb.0: # %entry2749; CHECK-PREP10-NEXT: lis r4, 37252750; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232751; CHECK-PREP10-NEXT: ori r4, r4, 190252752; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242753; CHECK-PREP10-NEXT: lhzx r3, r3, r42754; CHECK-PREP10-NEXT: blr2755entry:2756 %and = and i64 %ptr, -10995116277762757 %or = or i64 %and, 10000000000002758 %0 = inttoptr i64 %or to ptr2759 %1 = load atomic i16, ptr %0 monotonic, align 40962760 %conv = zext i16 %1 to i642761 ret i64 %conv2762}2763 2764; Function Attrs: nofree norecurse nounwind uwtable willreturn2765define dso_local i64 @ld_cst_align16_uint64_t_uint16_t() {2766; CHECK-LABEL: ld_cst_align16_uint64_t_uint16_t:2767; CHECK: # %bb.0: # %entry2768; CHECK-NEXT: lhz r3, 4080(0)2769; CHECK-NEXT: blr2770entry:2771 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 162772 %conv = zext i16 %0 to i642773 ret i64 %conv2774}2775 2776; Function Attrs: nofree norecurse nounwind uwtable willreturn2777define dso_local i64 @ld_cst_align32_uint64_t_uint16_t() {2778; CHECK-LABEL: ld_cst_align32_uint64_t_uint16_t:2779; CHECK: # %bb.0: # %entry2780; CHECK-NEXT: lis r3, 1532781; CHECK-NEXT: lhz r3, -27108(r3)2782; CHECK-NEXT: blr2783entry:2784 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42785 %conv = zext i16 %0 to i642786 ret i64 %conv2787}2788 2789; Function Attrs: nofree norecurse nounwind uwtable willreturn2790define dso_local i64 @ld_cst_align64_uint64_t_uint16_t() {2791; CHECK-P10-LABEL: ld_cst_align64_uint64_t_uint16_t:2792; CHECK-P10: # %bb.0: # %entry2793; CHECK-P10-NEXT: pli r3, 2441406252794; CHECK-P10-NEXT: rldic r3, r3, 12, 242795; CHECK-P10-NEXT: lhz r3, 0(r3)2796; CHECK-P10-NEXT: blr2797;2798; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_uint16_t:2799; CHECK-PREP10: # %bb.0: # %entry2800; CHECK-PREP10-NEXT: lis r3, 37252801; CHECK-PREP10-NEXT: ori r3, r3, 190252802; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242803; CHECK-PREP10-NEXT: lhz r3, 0(r3)2804; CHECK-PREP10-NEXT: blr2805entry:2806 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962807 %conv = zext i16 %0 to i642808 ret i64 %conv2809}2810 2811; Function Attrs: nofree norecurse nounwind uwtable willreturn2812define dso_local i64 @ld_0_uint64_t_int16_t(i64 %ptr) {2813; CHECK-LABEL: ld_0_uint64_t_int16_t:2814; CHECK: # %bb.0: # %entry2815; CHECK-NEXT: lhz r3, 0(r3)2816; CHECK-NEXT: extsh r3, r32817; CHECK-NEXT: blr2818entry:2819 %0 = inttoptr i64 %ptr to ptr2820 %1 = load atomic i16, ptr %0 monotonic, align 22821 %conv = sext i16 %1 to i642822 ret i64 %conv2823}2824 2825; Function Attrs: nofree norecurse nounwind uwtable willreturn2826define dso_local i64 @ld_align16_uint64_t_int16_t(ptr nocapture readonly %ptr) {2827; CHECK-LABEL: ld_align16_uint64_t_int16_t:2828; CHECK: # %bb.0: # %entry2829; CHECK-NEXT: lhz r3, 8(r3)2830; CHECK-NEXT: extsh r3, r32831; CHECK-NEXT: blr2832entry:2833 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82834 %0 = load atomic i16, ptr %add.ptr monotonic, align 22835 %conv = sext i16 %0 to i642836 ret i64 %conv2837}2838 2839; Function Attrs: nofree norecurse nounwind uwtable willreturn2840define dso_local i64 @ld_align32_uint64_t_int16_t(ptr nocapture readonly %ptr) {2841; CHECK-P10-LABEL: ld_align32_uint64_t_int16_t:2842; CHECK-P10: # %bb.0: # %entry2843; CHECK-P10-NEXT: plhz r3, 99999000(r3), 02844; CHECK-P10-NEXT: extsh r3, r32845; CHECK-P10-NEXT: blr2846;2847; CHECK-PREP10-LABEL: ld_align32_uint64_t_int16_t:2848; CHECK-PREP10: # %bb.0: # %entry2849; CHECK-PREP10-NEXT: lis r4, 15252850; CHECK-PREP10-NEXT: ori r4, r4, 566002851; CHECK-PREP10-NEXT: lhzx r3, r3, r42852; CHECK-PREP10-NEXT: extsh r3, r32853; CHECK-PREP10-NEXT: blr2854entry:2855 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002856 %0 = load atomic i16, ptr %add.ptr monotonic, align 22857 %conv = sext i16 %0 to i642858 ret i64 %conv2859}2860 2861; Function Attrs: nofree norecurse nounwind uwtable willreturn2862define dso_local i64 @ld_align64_uint64_t_int16_t(ptr nocapture readonly %ptr) {2863; CHECK-P10-LABEL: ld_align64_uint64_t_int16_t:2864; CHECK-P10: # %bb.0: # %entry2865; CHECK-P10-NEXT: pli r4, 2441406252866; CHECK-P10-NEXT: rldic r4, r4, 12, 242867; CHECK-P10-NEXT: lhzx r3, r3, r42868; CHECK-P10-NEXT: extsh r3, r32869; CHECK-P10-NEXT: blr2870;2871; CHECK-PREP10-LABEL: ld_align64_uint64_t_int16_t:2872; CHECK-PREP10: # %bb.0: # %entry2873; CHECK-PREP10-NEXT: lis r4, 37252874; CHECK-PREP10-NEXT: ori r4, r4, 190252875; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242876; CHECK-PREP10-NEXT: lhzx r3, r3, r42877; CHECK-PREP10-NEXT: extsh r3, r32878; CHECK-PREP10-NEXT: blr2879entry:2880 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002881 %0 = load atomic i16, ptr %add.ptr monotonic, align 22882 %conv = sext i16 %0 to i642883 ret i64 %conv2884}2885 2886; Function Attrs: nofree norecurse nounwind uwtable willreturn2887define dso_local i64 @ld_reg_uint64_t_int16_t(ptr nocapture readonly %ptr, i64 %off) {2888; CHECK-LABEL: ld_reg_uint64_t_int16_t:2889; CHECK: # %bb.0: # %entry2890; CHECK-NEXT: lhzx r3, r3, r42891; CHECK-NEXT: extsh r3, r32892; CHECK-NEXT: blr2893entry:2894 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2895 %0 = load atomic i16, ptr %add.ptr monotonic, align 22896 %conv = sext i16 %0 to i642897 ret i64 %conv2898}2899 2900; Function Attrs: nofree norecurse nounwind uwtable willreturn2901define dso_local i64 @ld_or_uint64_t_int16_t(i64 %ptr, i8 zeroext %off) {2902; CHECK-LABEL: ld_or_uint64_t_int16_t:2903; CHECK: # %bb.0: # %entry2904; CHECK-NEXT: or r3, r4, r32905; CHECK-NEXT: lhz r3, 0(r3)2906; CHECK-NEXT: extsh r3, r32907; CHECK-NEXT: blr2908entry:2909 %conv = zext i8 %off to i642910 %or = or i64 %conv, %ptr2911 %0 = inttoptr i64 %or to ptr2912 %1 = load atomic i16, ptr %0 monotonic, align 22913 %conv1 = sext i16 %1 to i642914 ret i64 %conv12915}2916 2917; Function Attrs: nofree norecurse nounwind uwtable willreturn2918define dso_local i64 @ld_not_disjoint16_uint64_t_int16_t(i64 %ptr) {2919; CHECK-LABEL: ld_not_disjoint16_uint64_t_int16_t:2920; CHECK: # %bb.0: # %entry2921; CHECK-NEXT: ori r3, r3, 62922; CHECK-NEXT: lhz r3, 0(r3)2923; CHECK-NEXT: extsh r3, r32924; CHECK-NEXT: blr2925entry:2926 %or = or i64 %ptr, 62927 %0 = inttoptr i64 %or to ptr2928 %1 = load atomic i16, ptr %0 monotonic, align 22929 %conv = sext i16 %1 to i642930 ret i64 %conv2931}2932 2933; Function Attrs: nofree norecurse nounwind uwtable willreturn2934define dso_local i64 @ld_disjoint_align16_uint64_t_int16_t(i64 %ptr) {2935; CHECK-LABEL: ld_disjoint_align16_uint64_t_int16_t:2936; CHECK: # %bb.0: # %entry2937; CHECK-NEXT: rldicr r3, r3, 0, 512938; CHECK-NEXT: lhz r3, 24(r3)2939; CHECK-NEXT: extsh r3, r32940; CHECK-NEXT: blr2941entry:2942 %and = and i64 %ptr, -40962943 %or = or i64 %and, 242944 %0 = inttoptr i64 %or to ptr2945 %1 = load atomic i16, ptr %0 monotonic, align 82946 %conv = sext i16 %1 to i642947 ret i64 %conv2948}2949 2950; Function Attrs: nofree norecurse nounwind uwtable willreturn2951define dso_local i64 @ld_not_disjoint32_uint64_t_int16_t(i64 %ptr) {2952; CHECK-LABEL: ld_not_disjoint32_uint64_t_int16_t:2953; CHECK: # %bb.0: # %entry2954; CHECK-NEXT: ori r3, r3, 344632955; CHECK-NEXT: oris r3, r3, 12956; CHECK-NEXT: lhz r3, 0(r3)2957; CHECK-NEXT: extsh r3, r32958; CHECK-NEXT: blr2959entry:2960 %or = or i64 %ptr, 999992961 %0 = inttoptr i64 %or to ptr2962 %1 = load atomic i16, ptr %0 monotonic, align 22963 %conv = sext i16 %1 to i642964 ret i64 %conv2965}2966 2967; Function Attrs: nofree norecurse nounwind uwtable willreturn2968define dso_local i64 @ld_disjoint_align32_uint64_t_int16_t(i64 %ptr) {2969; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_int16_t:2970; CHECK-P10: # %bb.0: # %entry2971; CHECK-P10-NEXT: lis r4, -152642972; CHECK-P10-NEXT: and r3, r3, r42973; CHECK-P10-NEXT: plhz r3, 999990000(r3), 02974; CHECK-P10-NEXT: extsh r3, r32975; CHECK-P10-NEXT: blr2976;2977; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_int16_t:2978; CHECK-PREP10: # %bb.0: # %entry2979; CHECK-PREP10-NEXT: lis r4, -152642980; CHECK-PREP10-NEXT: and r3, r3, r42981; CHECK-PREP10-NEXT: lis r4, 152582982; CHECK-PREP10-NEXT: ori r4, r4, 417122983; CHECK-PREP10-NEXT: lhzx r3, r3, r42984; CHECK-PREP10-NEXT: extsh r3, r32985; CHECK-PREP10-NEXT: blr2986entry:2987 %and = and i64 %ptr, -10003415042988 %or = or i64 %and, 9999900002989 %0 = inttoptr i64 %or to ptr2990 %1 = load atomic i16, ptr %0 monotonic, align 162991 %conv = sext i16 %1 to i642992 ret i64 %conv2993}2994 2995; Function Attrs: nofree norecurse nounwind uwtable willreturn2996define dso_local i64 @ld_not_disjoint64_uint64_t_int16_t(i64 %ptr) {2997; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_int16_t:2998; CHECK-P10: # %bb.0: # %entry2999; CHECK-P10-NEXT: pli r4, 2323000; CHECK-P10-NEXT: pli r5, 35675873293001; CHECK-P10-NEXT: rldimi r5, r4, 32, 03002; CHECK-P10-NEXT: or r3, r3, r53003; CHECK-P10-NEXT: lhz r3, 0(r3)3004; CHECK-P10-NEXT: extsh r3, r33005; CHECK-P10-NEXT: blr3006;3007; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_int16_t:3008; CHECK-PREP10: # %bb.0: # %entry3009; CHECK-PREP10-NEXT: li r4, 293010; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243011; CHECK-PREP10-NEXT: oris r4, r4, 544373012; CHECK-PREP10-NEXT: ori r4, r4, 40973013; CHECK-PREP10-NEXT: or r3, r3, r43014; CHECK-PREP10-NEXT: lhz r3, 0(r3)3015; CHECK-PREP10-NEXT: extsh r3, r33016; CHECK-PREP10-NEXT: blr3017entry:3018 %or = or i64 %ptr, 10000000000013019 %0 = inttoptr i64 %or to ptr3020 %1 = load atomic i16, ptr %0 monotonic, align 23021 %conv = sext i16 %1 to i643022 ret i64 %conv3023}3024 3025; Function Attrs: nofree norecurse nounwind uwtable willreturn3026define dso_local i64 @ld_disjoint_align64_uint64_t_int16_t(i64 %ptr) {3027; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_int16_t:3028; CHECK-P10: # %bb.0: # %entry3029; CHECK-P10-NEXT: pli r4, 2441406253030; CHECK-P10-NEXT: rldicr r3, r3, 0, 233031; CHECK-P10-NEXT: rldic r4, r4, 12, 243032; CHECK-P10-NEXT: lhzx r3, r3, r43033; CHECK-P10-NEXT: extsh r3, r33034; CHECK-P10-NEXT: blr3035;3036; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_int16_t:3037; CHECK-PREP10: # %bb.0: # %entry3038; CHECK-PREP10-NEXT: lis r4, 37253039; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233040; CHECK-PREP10-NEXT: ori r4, r4, 190253041; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243042; CHECK-PREP10-NEXT: lhzx r3, r3, r43043; CHECK-PREP10-NEXT: extsh r3, r33044; CHECK-PREP10-NEXT: blr3045entry:3046 %and = and i64 %ptr, -10995116277763047 %or = or i64 %and, 10000000000003048 %0 = inttoptr i64 %or to ptr3049 %1 = load atomic i16, ptr %0 monotonic, align 40963050 %conv = sext i16 %1 to i643051 ret i64 %conv3052}3053 3054; Function Attrs: nofree norecurse nounwind uwtable willreturn3055define dso_local i64 @ld_cst_align16_uint64_t_int16_t() {3056; CHECK-LABEL: ld_cst_align16_uint64_t_int16_t:3057; CHECK: # %bb.0: # %entry3058; CHECK-NEXT: lhz r3, 4080(0)3059; CHECK-NEXT: extsh r3, r33060; CHECK-NEXT: blr3061entry:3062 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 163063 %conv = sext i16 %0 to i643064 ret i64 %conv3065}3066 3067; Function Attrs: nofree norecurse nounwind uwtable willreturn3068define dso_local i64 @ld_cst_align32_uint64_t_int16_t() {3069; CHECK-LABEL: ld_cst_align32_uint64_t_int16_t:3070; CHECK: # %bb.0: # %entry3071; CHECK-NEXT: lis r3, 1533072; CHECK-NEXT: lhz r3, -27108(r3)3073; CHECK-NEXT: extsh r3, r33074; CHECK-NEXT: blr3075entry:3076 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43077 %conv = sext i16 %0 to i643078 ret i64 %conv3079}3080 3081; Function Attrs: nofree norecurse nounwind uwtable willreturn3082define dso_local i64 @ld_cst_align64_uint64_t_int16_t() {3083; CHECK-P10-LABEL: ld_cst_align64_uint64_t_int16_t:3084; CHECK-P10: # %bb.0: # %entry3085; CHECK-P10-NEXT: pli r3, 2441406253086; CHECK-P10-NEXT: rldic r3, r3, 12, 243087; CHECK-P10-NEXT: lhz r3, 0(r3)3088; CHECK-P10-NEXT: extsh r3, r33089; CHECK-P10-NEXT: blr3090;3091; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_int16_t:3092; CHECK-PREP10: # %bb.0: # %entry3093; CHECK-PREP10-NEXT: lis r3, 37253094; CHECK-PREP10-NEXT: ori r3, r3, 190253095; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243096; CHECK-PREP10-NEXT: lhz r3, 0(r3)3097; CHECK-PREP10-NEXT: extsh r3, r33098; CHECK-PREP10-NEXT: blr3099entry:3100 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963101 %conv = sext i16 %0 to i643102 ret i64 %conv3103}3104 3105; Function Attrs: nofree norecurse nounwind uwtable willreturn3106define dso_local i64 @ld_0_uint64_t_uint32_t(i64 %ptr) {3107; CHECK-LABEL: ld_0_uint64_t_uint32_t:3108; CHECK: # %bb.0: # %entry3109; CHECK-NEXT: lwz r3, 0(r3)3110; CHECK-NEXT: blr3111entry:3112 %0 = inttoptr i64 %ptr to ptr3113 %1 = load atomic i32, ptr %0 monotonic, align 43114 %conv = zext i32 %1 to i643115 ret i64 %conv3116}3117 3118; Function Attrs: nofree norecurse nounwind uwtable willreturn3119define dso_local i64 @ld_align16_uint64_t_uint32_t(ptr nocapture readonly %ptr) {3120; CHECK-LABEL: ld_align16_uint64_t_uint32_t:3121; CHECK: # %bb.0: # %entry3122; CHECK-NEXT: lwz r3, 8(r3)3123; CHECK-NEXT: blr3124entry:3125 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83126 %0 = load atomic i32, ptr %add.ptr monotonic, align 43127 %conv = zext i32 %0 to i643128 ret i64 %conv3129}3130 3131; Function Attrs: nofree norecurse nounwind uwtable willreturn3132define dso_local i64 @ld_align32_uint64_t_uint32_t(ptr nocapture readonly %ptr) {3133; CHECK-P10-LABEL: ld_align32_uint64_t_uint32_t:3134; CHECK-P10: # %bb.0: # %entry3135; CHECK-P10-NEXT: plwz r3, 99999000(r3), 03136; CHECK-P10-NEXT: clrldi r3, r3, 323137; CHECK-P10-NEXT: blr3138;3139; CHECK-PREP10-LABEL: ld_align32_uint64_t_uint32_t:3140; CHECK-PREP10: # %bb.0: # %entry3141; CHECK-PREP10-NEXT: lis r4, 15253142; CHECK-PREP10-NEXT: ori r4, r4, 566003143; CHECK-PREP10-NEXT: lwzx r3, r3, r43144; CHECK-PREP10-NEXT: blr3145entry:3146 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003147 %0 = load atomic i32, ptr %add.ptr monotonic, align 43148 %conv = zext i32 %0 to i643149 ret i64 %conv3150}3151 3152; Function Attrs: nofree norecurse nounwind uwtable willreturn3153define dso_local i64 @ld_align64_uint64_t_uint32_t(ptr nocapture readonly %ptr) {3154; CHECK-P10-LABEL: ld_align64_uint64_t_uint32_t:3155; CHECK-P10: # %bb.0: # %entry3156; CHECK-P10-NEXT: pli r4, 2441406253157; CHECK-P10-NEXT: rldic r4, r4, 12, 243158; CHECK-P10-NEXT: lwzx r3, r3, r43159; CHECK-P10-NEXT: blr3160;3161; CHECK-PREP10-LABEL: ld_align64_uint64_t_uint32_t:3162; CHECK-PREP10: # %bb.0: # %entry3163; CHECK-PREP10-NEXT: lis r4, 37253164; CHECK-PREP10-NEXT: ori r4, r4, 190253165; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243166; CHECK-PREP10-NEXT: lwzx r3, r3, r43167; CHECK-PREP10-NEXT: blr3168entry:3169 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003170 %0 = load atomic i32, ptr %add.ptr monotonic, align 43171 %conv = zext i32 %0 to i643172 ret i64 %conv3173}3174 3175; Function Attrs: nofree norecurse nounwind uwtable willreturn3176define dso_local i64 @ld_reg_uint64_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {3177; CHECK-LABEL: ld_reg_uint64_t_uint32_t:3178; CHECK: # %bb.0: # %entry3179; CHECK-NEXT: lwzx r3, r3, r43180; CHECK-NEXT: blr3181entry:3182 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3183 %0 = load atomic i32, ptr %add.ptr monotonic, align 43184 %conv = zext i32 %0 to i643185 ret i64 %conv3186}3187 3188; Function Attrs: nofree norecurse nounwind uwtable willreturn3189define dso_local i64 @ld_or_uint64_t_uint32_t(i64 %ptr, i8 zeroext %off) {3190; CHECK-LABEL: ld_or_uint64_t_uint32_t:3191; CHECK: # %bb.0: # %entry3192; CHECK-NEXT: or r3, r4, r33193; CHECK-NEXT: lwz r3, 0(r3)3194; CHECK-NEXT: blr3195entry:3196 %conv = zext i8 %off to i643197 %or = or i64 %conv, %ptr3198 %0 = inttoptr i64 %or to ptr3199 %1 = load atomic i32, ptr %0 monotonic, align 43200 %conv1 = zext i32 %1 to i643201 ret i64 %conv13202}3203 3204; Function Attrs: nofree norecurse nounwind uwtable willreturn3205define dso_local i64 @ld_not_disjoint16_uint64_t_uint32_t(i64 %ptr) {3206; CHECK-LABEL: ld_not_disjoint16_uint64_t_uint32_t:3207; CHECK: # %bb.0: # %entry3208; CHECK-NEXT: ori r3, r3, 63209; CHECK-NEXT: lwz r3, 0(r3)3210; CHECK-NEXT: blr3211entry:3212 %or = or i64 %ptr, 63213 %0 = inttoptr i64 %or to ptr3214 %1 = load atomic i32, ptr %0 monotonic, align 43215 %conv = zext i32 %1 to i643216 ret i64 %conv3217}3218 3219; Function Attrs: nofree norecurse nounwind uwtable willreturn3220define dso_local i64 @ld_disjoint_align16_uint64_t_uint32_t(i64 %ptr) {3221; CHECK-LABEL: ld_disjoint_align16_uint64_t_uint32_t:3222; CHECK: # %bb.0: # %entry3223; CHECK-NEXT: rldicr r3, r3, 0, 513224; CHECK-NEXT: lwz r3, 24(r3)3225; CHECK-NEXT: blr3226entry:3227 %and = and i64 %ptr, -40963228 %or = or i64 %and, 243229 %0 = inttoptr i64 %or to ptr3230 %1 = load atomic i32, ptr %0 monotonic, align 83231 %conv = zext i32 %1 to i643232 ret i64 %conv3233}3234 3235; Function Attrs: nofree norecurse nounwind uwtable willreturn3236define dso_local i64 @ld_not_disjoint32_uint64_t_uint32_t(i64 %ptr) {3237; CHECK-LABEL: ld_not_disjoint32_uint64_t_uint32_t:3238; CHECK: # %bb.0: # %entry3239; CHECK-NEXT: ori r3, r3, 344633240; CHECK-NEXT: oris r3, r3, 13241; CHECK-NEXT: lwz r3, 0(r3)3242; CHECK-NEXT: blr3243entry:3244 %or = or i64 %ptr, 999993245 %0 = inttoptr i64 %or to ptr3246 %1 = load atomic i32, ptr %0 monotonic, align 43247 %conv = zext i32 %1 to i643248 ret i64 %conv3249}3250 3251; Function Attrs: nofree norecurse nounwind uwtable willreturn3252define dso_local i64 @ld_disjoint_align32_uint64_t_uint32_t(i64 %ptr) {3253; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_uint32_t:3254; CHECK-P10: # %bb.0: # %entry3255; CHECK-P10-NEXT: lis r4, -152643256; CHECK-P10-NEXT: and r3, r3, r43257; CHECK-P10-NEXT: plwz r3, 999990000(r3), 03258; CHECK-P10-NEXT: clrldi r3, r3, 323259; CHECK-P10-NEXT: blr3260;3261; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_uint32_t:3262; CHECK-PREP10: # %bb.0: # %entry3263; CHECK-PREP10-NEXT: lis r4, -152643264; CHECK-PREP10-NEXT: and r3, r3, r43265; CHECK-PREP10-NEXT: lis r4, 152583266; CHECK-PREP10-NEXT: ori r4, r4, 417123267; CHECK-PREP10-NEXT: lwzx r3, r3, r43268; CHECK-PREP10-NEXT: blr3269entry:3270 %and = and i64 %ptr, -10003415043271 %or = or i64 %and, 9999900003272 %0 = inttoptr i64 %or to ptr3273 %1 = load atomic i32, ptr %0 monotonic, align 163274 %conv = zext i32 %1 to i643275 ret i64 %conv3276}3277 3278; Function Attrs: nofree norecurse nounwind uwtable willreturn3279define dso_local i64 @ld_not_disjoint64_uint64_t_uint32_t(i64 %ptr) {3280; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_uint32_t:3281; CHECK-P10: # %bb.0: # %entry3282; CHECK-P10-NEXT: pli r4, 2323283; CHECK-P10-NEXT: pli r5, 35675873293284; CHECK-P10-NEXT: rldimi r5, r4, 32, 03285; CHECK-P10-NEXT: or r3, r3, r53286; CHECK-P10-NEXT: lwz r3, 0(r3)3287; CHECK-P10-NEXT: blr3288;3289; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_uint32_t:3290; CHECK-PREP10: # %bb.0: # %entry3291; CHECK-PREP10-NEXT: li r4, 293292; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243293; CHECK-PREP10-NEXT: oris r4, r4, 544373294; CHECK-PREP10-NEXT: ori r4, r4, 40973295; CHECK-PREP10-NEXT: or r3, r3, r43296; CHECK-PREP10-NEXT: lwz r3, 0(r3)3297; CHECK-PREP10-NEXT: blr3298entry:3299 %or = or i64 %ptr, 10000000000013300 %0 = inttoptr i64 %or to ptr3301 %1 = load atomic i32, ptr %0 monotonic, align 43302 %conv = zext i32 %1 to i643303 ret i64 %conv3304}3305 3306; Function Attrs: nofree norecurse nounwind uwtable willreturn3307define dso_local i64 @ld_disjoint_align64_uint64_t_uint32_t(i64 %ptr) {3308; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_uint32_t:3309; CHECK-P10: # %bb.0: # %entry3310; CHECK-P10-NEXT: pli r4, 2441406253311; CHECK-P10-NEXT: rldicr r3, r3, 0, 233312; CHECK-P10-NEXT: rldic r4, r4, 12, 243313; CHECK-P10-NEXT: lwzx r3, r3, r43314; CHECK-P10-NEXT: blr3315;3316; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_uint32_t:3317; CHECK-PREP10: # %bb.0: # %entry3318; CHECK-PREP10-NEXT: lis r4, 37253319; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233320; CHECK-PREP10-NEXT: ori r4, r4, 190253321; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243322; CHECK-PREP10-NEXT: lwzx r3, r3, r43323; CHECK-PREP10-NEXT: blr3324entry:3325 %and = and i64 %ptr, -10995116277763326 %or = or i64 %and, 10000000000003327 %0 = inttoptr i64 %or to ptr3328 %1 = load atomic i32, ptr %0 monotonic, align 40963329 %conv = zext i32 %1 to i643330 ret i64 %conv3331}3332 3333; Function Attrs: nofree norecurse nounwind uwtable willreturn3334define dso_local i64 @ld_cst_align16_uint64_t_uint32_t() {3335; CHECK-LABEL: ld_cst_align16_uint64_t_uint32_t:3336; CHECK: # %bb.0: # %entry3337; CHECK-NEXT: lwz r3, 4080(0)3338; CHECK-NEXT: blr3339entry:3340 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 163341 %conv = zext i32 %0 to i643342 ret i64 %conv3343}3344 3345; Function Attrs: nofree norecurse nounwind uwtable willreturn3346define dso_local i64 @ld_cst_align32_uint64_t_uint32_t() {3347; CHECK-LABEL: ld_cst_align32_uint64_t_uint32_t:3348; CHECK: # %bb.0: # %entry3349; CHECK-NEXT: lis r3, 1533350; CHECK-NEXT: lwz r3, -27108(r3)3351; CHECK-NEXT: blr3352entry:3353 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43354 %conv = zext i32 %0 to i643355 ret i64 %conv3356}3357 3358; Function Attrs: nofree norecurse nounwind uwtable willreturn3359define dso_local i64 @ld_cst_align64_uint64_t_uint32_t() {3360; CHECK-P10-LABEL: ld_cst_align64_uint64_t_uint32_t:3361; CHECK-P10: # %bb.0: # %entry3362; CHECK-P10-NEXT: pli r3, 2441406253363; CHECK-P10-NEXT: rldic r3, r3, 12, 243364; CHECK-P10-NEXT: lwz r3, 0(r3)3365; CHECK-P10-NEXT: blr3366;3367; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_uint32_t:3368; CHECK-PREP10: # %bb.0: # %entry3369; CHECK-PREP10-NEXT: lis r3, 37253370; CHECK-PREP10-NEXT: ori r3, r3, 190253371; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243372; CHECK-PREP10-NEXT: lwz r3, 0(r3)3373; CHECK-PREP10-NEXT: blr3374entry:3375 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963376 %conv = zext i32 %0 to i643377 ret i64 %conv3378}3379 3380; Function Attrs: nofree norecurse nounwind uwtable willreturn3381define dso_local i64 @ld_0_uint64_t_int32_t(i64 %ptr) {3382; CHECK-LABEL: ld_0_uint64_t_int32_t:3383; CHECK: # %bb.0: # %entry3384; CHECK-NEXT: lwa r3, 0(r3)3385; CHECK-NEXT: blr3386entry:3387 %0 = inttoptr i64 %ptr to ptr3388 %1 = load atomic i32, ptr %0 monotonic, align 43389 %conv = sext i32 %1 to i643390 ret i64 %conv3391}3392 3393; Function Attrs: nofree norecurse nounwind uwtable willreturn3394define dso_local i64 @ld_align16_uint64_t_int32_t(ptr nocapture readonly %ptr) {3395; CHECK-LABEL: ld_align16_uint64_t_int32_t:3396; CHECK: # %bb.0: # %entry3397; CHECK-NEXT: lwa r3, 8(r3)3398; CHECK-NEXT: blr3399entry:3400 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83401 %0 = load atomic i32, ptr %add.ptr monotonic, align 43402 %conv = sext i32 %0 to i643403 ret i64 %conv3404}3405 3406; Function Attrs: nofree norecurse nounwind uwtable willreturn3407define dso_local i64 @ld_align32_uint64_t_int32_t(ptr nocapture readonly %ptr) {3408; CHECK-P10-LABEL: ld_align32_uint64_t_int32_t:3409; CHECK-P10: # %bb.0: # %entry3410; CHECK-P10-NEXT: plwz r3, 99999000(r3), 03411; CHECK-P10-NEXT: extsw r3, r33412; CHECK-P10-NEXT: blr3413;3414; CHECK-PREP10-LABEL: ld_align32_uint64_t_int32_t:3415; CHECK-PREP10: # %bb.0: # %entry3416; CHECK-PREP10-NEXT: lis r4, 15253417; CHECK-PREP10-NEXT: ori r4, r4, 566003418; CHECK-PREP10-NEXT: lwax r3, r3, r43419; CHECK-PREP10-NEXT: blr3420entry:3421 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003422 %0 = load atomic i32, ptr %add.ptr monotonic, align 43423 %conv = sext i32 %0 to i643424 ret i64 %conv3425}3426 3427; Function Attrs: nofree norecurse nounwind uwtable willreturn3428define dso_local i64 @ld_align64_uint64_t_int32_t(ptr nocapture readonly %ptr) {3429; CHECK-P10-LABEL: ld_align64_uint64_t_int32_t:3430; CHECK-P10: # %bb.0: # %entry3431; CHECK-P10-NEXT: pli r4, 2441406253432; CHECK-P10-NEXT: rldic r4, r4, 12, 243433; CHECK-P10-NEXT: lwax r3, r3, r43434; CHECK-P10-NEXT: blr3435;3436; CHECK-PREP10-LABEL: ld_align64_uint64_t_int32_t:3437; CHECK-PREP10: # %bb.0: # %entry3438; CHECK-PREP10-NEXT: lis r4, 37253439; CHECK-PREP10-NEXT: ori r4, r4, 190253440; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243441; CHECK-PREP10-NEXT: lwax r3, r3, r43442; CHECK-PREP10-NEXT: blr3443entry:3444 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003445 %0 = load atomic i32, ptr %add.ptr monotonic, align 43446 %conv = sext i32 %0 to i643447 ret i64 %conv3448}3449 3450; Function Attrs: nofree norecurse nounwind uwtable willreturn3451define dso_local i64 @ld_reg_uint64_t_int32_t(ptr nocapture readonly %ptr, i64 %off) {3452; CHECK-LABEL: ld_reg_uint64_t_int32_t:3453; CHECK: # %bb.0: # %entry3454; CHECK-NEXT: lwax r3, r3, r43455; CHECK-NEXT: blr3456entry:3457 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3458 %0 = load atomic i32, ptr %add.ptr monotonic, align 43459 %conv = sext i32 %0 to i643460 ret i64 %conv3461}3462 3463; Function Attrs: nofree norecurse nounwind uwtable willreturn3464define dso_local i64 @ld_or_uint64_t_int32_t(i64 %ptr, i8 zeroext %off) {3465; CHECK-LABEL: ld_or_uint64_t_int32_t:3466; CHECK: # %bb.0: # %entry3467; CHECK-NEXT: or r3, r4, r33468; CHECK-NEXT: lwa r3, 0(r3)3469; CHECK-NEXT: blr3470entry:3471 %conv = zext i8 %off to i643472 %or = or i64 %conv, %ptr3473 %0 = inttoptr i64 %or to ptr3474 %1 = load atomic i32, ptr %0 monotonic, align 43475 %conv1 = sext i32 %1 to i643476 ret i64 %conv13477}3478 3479; Function Attrs: nofree norecurse nounwind uwtable willreturn3480define dso_local i64 @ld_not_disjoint16_uint64_t_int32_t(i64 %ptr) {3481; CHECK-LABEL: ld_not_disjoint16_uint64_t_int32_t:3482; CHECK: # %bb.0: # %entry3483; CHECK-NEXT: ori r3, r3, 63484; CHECK-NEXT: lwa r3, 0(r3)3485; CHECK-NEXT: blr3486entry:3487 %or = or i64 %ptr, 63488 %0 = inttoptr i64 %or to ptr3489 %1 = load atomic i32, ptr %0 monotonic, align 43490 %conv = sext i32 %1 to i643491 ret i64 %conv3492}3493 3494; Function Attrs: nofree norecurse nounwind uwtable willreturn3495define dso_local i64 @ld_disjoint_align16_uint64_t_int32_t(i64 %ptr) {3496; CHECK-LABEL: ld_disjoint_align16_uint64_t_int32_t:3497; CHECK: # %bb.0: # %entry3498; CHECK-NEXT: rldicr r3, r3, 0, 513499; CHECK-NEXT: lwa r3, 24(r3)3500; CHECK-NEXT: blr3501entry:3502 %and = and i64 %ptr, -40963503 %or = or i64 %and, 243504 %0 = inttoptr i64 %or to ptr3505 %1 = load atomic i32, ptr %0 monotonic, align 83506 %conv = sext i32 %1 to i643507 ret i64 %conv3508}3509 3510; Function Attrs: nofree norecurse nounwind uwtable willreturn3511define dso_local i64 @ld_not_disjoint32_uint64_t_int32_t(i64 %ptr) {3512; CHECK-LABEL: ld_not_disjoint32_uint64_t_int32_t:3513; CHECK: # %bb.0: # %entry3514; CHECK-NEXT: ori r3, r3, 344633515; CHECK-NEXT: oris r3, r3, 13516; CHECK-NEXT: lwa r3, 0(r3)3517; CHECK-NEXT: blr3518entry:3519 %or = or i64 %ptr, 999993520 %0 = inttoptr i64 %or to ptr3521 %1 = load atomic i32, ptr %0 monotonic, align 43522 %conv = sext i32 %1 to i643523 ret i64 %conv3524}3525 3526; Function Attrs: nofree norecurse nounwind uwtable willreturn3527define dso_local i64 @ld_disjoint_align32_uint64_t_int32_t(i64 %ptr) {3528; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_int32_t:3529; CHECK-P10: # %bb.0: # %entry3530; CHECK-P10-NEXT: lis r4, -152643531; CHECK-P10-NEXT: and r3, r3, r43532; CHECK-P10-NEXT: plwz r3, 999990000(r3), 03533; CHECK-P10-NEXT: extsw r3, r33534; CHECK-P10-NEXT: blr3535;3536; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_int32_t:3537; CHECK-PREP10: # %bb.0: # %entry3538; CHECK-PREP10-NEXT: lis r4, -152643539; CHECK-PREP10-NEXT: and r3, r3, r43540; CHECK-PREP10-NEXT: lis r4, 152583541; CHECK-PREP10-NEXT: ori r4, r4, 417123542; CHECK-PREP10-NEXT: lwax r3, r3, r43543; CHECK-PREP10-NEXT: blr3544entry:3545 %and = and i64 %ptr, -10003415043546 %or = or i64 %and, 9999900003547 %0 = inttoptr i64 %or to ptr3548 %1 = load atomic i32, ptr %0 monotonic, align 163549 %conv = sext i32 %1 to i643550 ret i64 %conv3551}3552 3553; Function Attrs: nofree norecurse nounwind uwtable willreturn3554define dso_local i64 @ld_not_disjoint64_uint64_t_int32_t(i64 %ptr) {3555; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_int32_t:3556; CHECK-P10: # %bb.0: # %entry3557; CHECK-P10-NEXT: pli r4, 2323558; CHECK-P10-NEXT: pli r5, 35675873293559; CHECK-P10-NEXT: rldimi r5, r4, 32, 03560; CHECK-P10-NEXT: or r3, r3, r53561; CHECK-P10-NEXT: lwa r3, 0(r3)3562; CHECK-P10-NEXT: blr3563;3564; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_int32_t:3565; CHECK-PREP10: # %bb.0: # %entry3566; CHECK-PREP10-NEXT: li r4, 293567; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243568; CHECK-PREP10-NEXT: oris r4, r4, 544373569; CHECK-PREP10-NEXT: ori r4, r4, 40973570; CHECK-PREP10-NEXT: or r3, r3, r43571; CHECK-PREP10-NEXT: lwa r3, 0(r3)3572; CHECK-PREP10-NEXT: blr3573entry:3574 %or = or i64 %ptr, 10000000000013575 %0 = inttoptr i64 %or to ptr3576 %1 = load atomic i32, ptr %0 monotonic, align 43577 %conv = sext i32 %1 to i643578 ret i64 %conv3579}3580 3581; Function Attrs: nofree norecurse nounwind uwtable willreturn3582define dso_local i64 @ld_disjoint_align64_uint64_t_int32_t(i64 %ptr) {3583; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_int32_t:3584; CHECK-P10: # %bb.0: # %entry3585; CHECK-P10-NEXT: pli r4, 2441406253586; CHECK-P10-NEXT: rldicr r3, r3, 0, 233587; CHECK-P10-NEXT: rldic r4, r4, 12, 243588; CHECK-P10-NEXT: lwax r3, r3, r43589; CHECK-P10-NEXT: blr3590;3591; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_int32_t:3592; CHECK-PREP10: # %bb.0: # %entry3593; CHECK-PREP10-NEXT: lis r4, 37253594; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233595; CHECK-PREP10-NEXT: ori r4, r4, 190253596; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243597; CHECK-PREP10-NEXT: lwax r3, r3, r43598; CHECK-PREP10-NEXT: blr3599entry:3600 %and = and i64 %ptr, -10995116277763601 %or = or i64 %and, 10000000000003602 %0 = inttoptr i64 %or to ptr3603 %1 = load atomic i32, ptr %0 monotonic, align 40963604 %conv = sext i32 %1 to i643605 ret i64 %conv3606}3607 3608; Function Attrs: nofree norecurse nounwind uwtable willreturn3609define dso_local i64 @ld_cst_align16_uint64_t_int32_t() {3610; CHECK-LABEL: ld_cst_align16_uint64_t_int32_t:3611; CHECK: # %bb.0: # %entry3612; CHECK-NEXT: lwa r3, 4080(0)3613; CHECK-NEXT: blr3614entry:3615 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 163616 %conv = sext i32 %0 to i643617 ret i64 %conv3618}3619 3620; Function Attrs: nofree norecurse nounwind uwtable willreturn3621define dso_local i64 @ld_cst_align32_uint64_t_int32_t() {3622; CHECK-LABEL: ld_cst_align32_uint64_t_int32_t:3623; CHECK: # %bb.0: # %entry3624; CHECK-NEXT: lis r3, 1533625; CHECK-NEXT: lwa r3, -27108(r3)3626; CHECK-NEXT: blr3627entry:3628 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43629 %conv = sext i32 %0 to i643630 ret i64 %conv3631}3632 3633; Function Attrs: nofree norecurse nounwind uwtable willreturn3634define dso_local i64 @ld_cst_align64_uint64_t_int32_t() {3635; CHECK-P10-LABEL: ld_cst_align64_uint64_t_int32_t:3636; CHECK-P10: # %bb.0: # %entry3637; CHECK-P10-NEXT: pli r3, 2441406253638; CHECK-P10-NEXT: rldic r3, r3, 12, 243639; CHECK-P10-NEXT: lwa r3, 0(r3)3640; CHECK-P10-NEXT: blr3641;3642; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_int32_t:3643; CHECK-PREP10: # %bb.0: # %entry3644; CHECK-PREP10-NEXT: lis r3, 37253645; CHECK-PREP10-NEXT: ori r3, r3, 190253646; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243647; CHECK-PREP10-NEXT: lwa r3, 0(r3)3648; CHECK-PREP10-NEXT: blr3649entry:3650 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963651 %conv = sext i32 %0 to i643652 ret i64 %conv3653}3654 3655; Function Attrs: nofree norecurse nounwind uwtable willreturn3656define dso_local i64 @ld_0_uint64_t_uint64_t(i64 %ptr) {3657; CHECK-LABEL: ld_0_uint64_t_uint64_t:3658; CHECK: # %bb.0: # %entry3659; CHECK-NEXT: ld r3, 0(r3)3660; CHECK-NEXT: blr3661entry:3662 %0 = inttoptr i64 %ptr to ptr3663 %1 = load atomic i64, ptr %0 monotonic, align 83664 ret i64 %13665}3666 3667; Function Attrs: nofree norecurse nounwind uwtable willreturn3668define dso_local i64 @ld_align16_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3669; CHECK-LABEL: ld_align16_uint64_t_uint64_t:3670; CHECK: # %bb.0: # %entry3671; CHECK-NEXT: ld r3, 8(r3)3672; CHECK-NEXT: blr3673entry:3674 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83675 %0 = load atomic i64, ptr %add.ptr monotonic, align 83676 ret i64 %03677}3678 3679; Function Attrs: nofree norecurse nounwind uwtable willreturn3680define dso_local i64 @ld_align32_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3681; CHECK-P10-LABEL: ld_align32_uint64_t_uint64_t:3682; CHECK-P10: # %bb.0: # %entry3683; CHECK-P10-NEXT: pld r3, 99999000(r3), 03684; CHECK-P10-NEXT: blr3685;3686; CHECK-PREP10-LABEL: ld_align32_uint64_t_uint64_t:3687; CHECK-PREP10: # %bb.0: # %entry3688; CHECK-PREP10-NEXT: lis r4, 15253689; CHECK-PREP10-NEXT: ori r4, r4, 566003690; CHECK-PREP10-NEXT: ldx r3, r3, r43691; CHECK-PREP10-NEXT: blr3692entry:3693 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003694 %0 = load atomic i64, ptr %add.ptr monotonic, align 83695 ret i64 %03696}3697 3698; Function Attrs: nofree norecurse nounwind uwtable willreturn3699define dso_local i64 @ld_align64_uint64_t_uint64_t(ptr nocapture readonly %ptr) {3700; CHECK-P10-LABEL: ld_align64_uint64_t_uint64_t:3701; CHECK-P10: # %bb.0: # %entry3702; CHECK-P10-NEXT: pli r4, 2441406253703; CHECK-P10-NEXT: rldic r4, r4, 12, 243704; CHECK-P10-NEXT: ldx r3, r3, r43705; CHECK-P10-NEXT: blr3706;3707; CHECK-PREP10-LABEL: ld_align64_uint64_t_uint64_t:3708; CHECK-PREP10: # %bb.0: # %entry3709; CHECK-PREP10-NEXT: lis r4, 37253710; CHECK-PREP10-NEXT: ori r4, r4, 190253711; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243712; CHECK-PREP10-NEXT: ldx r3, r3, r43713; CHECK-PREP10-NEXT: blr3714entry:3715 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003716 %0 = load atomic i64, ptr %add.ptr monotonic, align 83717 ret i64 %03718}3719 3720; Function Attrs: nofree norecurse nounwind uwtable willreturn3721define dso_local i64 @ld_reg_uint64_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {3722; CHECK-LABEL: ld_reg_uint64_t_uint64_t:3723; CHECK: # %bb.0: # %entry3724; CHECK-NEXT: ldx r3, r3, r43725; CHECK-NEXT: blr3726entry:3727 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3728 %0 = load atomic i64, ptr %add.ptr monotonic, align 83729 ret i64 %03730}3731 3732; Function Attrs: nofree norecurse nounwind uwtable willreturn3733define dso_local i64 @ld_or_uint64_t_uint64_t(i64 %ptr, i8 zeroext %off) {3734; CHECK-LABEL: ld_or_uint64_t_uint64_t:3735; CHECK: # %bb.0: # %entry3736; CHECK-NEXT: or r3, r4, r33737; CHECK-NEXT: ld r3, 0(r3)3738; CHECK-NEXT: blr3739entry:3740 %conv = zext i8 %off to i643741 %or = or i64 %conv, %ptr3742 %0 = inttoptr i64 %or to ptr3743 %1 = load atomic i64, ptr %0 monotonic, align 83744 ret i64 %13745}3746 3747; Function Attrs: nofree norecurse nounwind uwtable willreturn3748define dso_local i64 @ld_not_disjoint16_uint64_t_uint64_t(i64 %ptr) {3749; CHECK-LABEL: ld_not_disjoint16_uint64_t_uint64_t:3750; CHECK: # %bb.0: # %entry3751; CHECK-NEXT: ori r3, r3, 63752; CHECK-NEXT: ld r3, 0(r3)3753; CHECK-NEXT: blr3754entry:3755 %or = or i64 %ptr, 63756 %0 = inttoptr i64 %or to ptr3757 %1 = load atomic i64, ptr %0 monotonic, align 83758 ret i64 %13759}3760 3761; Function Attrs: nofree norecurse nounwind uwtable willreturn3762define dso_local i64 @ld_disjoint_align16_uint64_t_uint64_t(i64 %ptr) {3763; CHECK-LABEL: ld_disjoint_align16_uint64_t_uint64_t:3764; CHECK: # %bb.0: # %entry3765; CHECK-NEXT: rldicr r3, r3, 0, 513766; CHECK-NEXT: ld r3, 24(r3)3767; CHECK-NEXT: blr3768entry:3769 %and = and i64 %ptr, -40963770 %or = or i64 %and, 243771 %0 = inttoptr i64 %or to ptr3772 %1 = load atomic i64, ptr %0 monotonic, align 83773 ret i64 %13774}3775 3776; Function Attrs: nofree norecurse nounwind uwtable willreturn3777define dso_local i64 @ld_not_disjoint32_uint64_t_uint64_t(i64 %ptr) {3778; CHECK-LABEL: ld_not_disjoint32_uint64_t_uint64_t:3779; CHECK: # %bb.0: # %entry3780; CHECK-NEXT: ori r3, r3, 344633781; CHECK-NEXT: oris r3, r3, 13782; CHECK-NEXT: ld r3, 0(r3)3783; CHECK-NEXT: blr3784entry:3785 %or = or i64 %ptr, 999993786 %0 = inttoptr i64 %or to ptr3787 %1 = load atomic i64, ptr %0 monotonic, align 83788 ret i64 %13789}3790 3791; Function Attrs: nofree norecurse nounwind uwtable willreturn3792define dso_local i64 @ld_disjoint_align32_uint64_t_uint64_t(i64 %ptr) {3793; CHECK-P10-LABEL: ld_disjoint_align32_uint64_t_uint64_t:3794; CHECK-P10: # %bb.0: # %entry3795; CHECK-P10-NEXT: lis r4, -152643796; CHECK-P10-NEXT: and r3, r3, r43797; CHECK-P10-NEXT: pld r3, 999990000(r3), 03798; CHECK-P10-NEXT: blr3799;3800; CHECK-PREP10-LABEL: ld_disjoint_align32_uint64_t_uint64_t:3801; CHECK-PREP10: # %bb.0: # %entry3802; CHECK-PREP10-NEXT: lis r4, -152643803; CHECK-PREP10-NEXT: and r3, r3, r43804; CHECK-PREP10-NEXT: lis r4, 152583805; CHECK-PREP10-NEXT: ori r4, r4, 417123806; CHECK-PREP10-NEXT: ldx r3, r3, r43807; CHECK-PREP10-NEXT: blr3808entry:3809 %and = and i64 %ptr, -10003415043810 %or = or i64 %and, 9999900003811 %0 = inttoptr i64 %or to ptr3812 %1 = load atomic i64, ptr %0 monotonic, align 163813 ret i64 %13814}3815 3816; Function Attrs: nofree norecurse nounwind uwtable willreturn3817define dso_local i64 @ld_not_disjoint64_uint64_t_uint64_t(i64 %ptr) {3818; CHECK-P10-LABEL: ld_not_disjoint64_uint64_t_uint64_t:3819; CHECK-P10: # %bb.0: # %entry3820; CHECK-P10-NEXT: pli r4, 2323821; CHECK-P10-NEXT: pli r5, 35675873293822; CHECK-P10-NEXT: rldimi r5, r4, 32, 03823; CHECK-P10-NEXT: or r3, r3, r53824; CHECK-P10-NEXT: ld r3, 0(r3)3825; CHECK-P10-NEXT: blr3826;3827; CHECK-PREP10-LABEL: ld_not_disjoint64_uint64_t_uint64_t:3828; CHECK-PREP10: # %bb.0: # %entry3829; CHECK-PREP10-NEXT: li r4, 293830; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243831; CHECK-PREP10-NEXT: oris r4, r4, 544373832; CHECK-PREP10-NEXT: ori r4, r4, 40973833; CHECK-PREP10-NEXT: or r3, r3, r43834; CHECK-PREP10-NEXT: ld r3, 0(r3)3835; CHECK-PREP10-NEXT: blr3836entry:3837 %or = or i64 %ptr, 10000000000013838 %0 = inttoptr i64 %or to ptr3839 %1 = load atomic i64, ptr %0 monotonic, align 83840 ret i64 %13841}3842 3843; Function Attrs: nofree norecurse nounwind uwtable willreturn3844define dso_local i64 @ld_disjoint_align64_uint64_t_uint64_t(i64 %ptr) {3845; CHECK-P10-LABEL: ld_disjoint_align64_uint64_t_uint64_t:3846; CHECK-P10: # %bb.0: # %entry3847; CHECK-P10-NEXT: pli r4, 2441406253848; CHECK-P10-NEXT: rldicr r3, r3, 0, 233849; CHECK-P10-NEXT: rldic r4, r4, 12, 243850; CHECK-P10-NEXT: ldx r3, r3, r43851; CHECK-P10-NEXT: blr3852;3853; CHECK-PREP10-LABEL: ld_disjoint_align64_uint64_t_uint64_t:3854; CHECK-PREP10: # %bb.0: # %entry3855; CHECK-PREP10-NEXT: lis r4, 37253856; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233857; CHECK-PREP10-NEXT: ori r4, r4, 190253858; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243859; CHECK-PREP10-NEXT: ldx r3, r3, r43860; CHECK-PREP10-NEXT: blr3861entry:3862 %and = and i64 %ptr, -10995116277763863 %or = or i64 %and, 10000000000003864 %0 = inttoptr i64 %or to ptr3865 %1 = load atomic i64, ptr %0 monotonic, align 40963866 ret i64 %13867}3868 3869; Function Attrs: nofree norecurse nounwind uwtable willreturn3870define dso_local i64 @ld_cst_align16_uint64_t_uint64_t() {3871; CHECK-LABEL: ld_cst_align16_uint64_t_uint64_t:3872; CHECK: # %bb.0: # %entry3873; CHECK-NEXT: ld r3, 4080(0)3874; CHECK-NEXT: blr3875entry:3876 %0 = load atomic i64, ptr inttoptr (i64 4080 to ptr) monotonic, align 163877 ret i64 %03878}3879 3880; Function Attrs: nofree norecurse nounwind uwtable willreturn3881define dso_local i64 @ld_cst_align32_uint64_t_uint64_t() {3882; CHECK-LABEL: ld_cst_align32_uint64_t_uint64_t:3883; CHECK: # %bb.0: # %entry3884; CHECK-NEXT: lis r3, 1533885; CHECK-NEXT: ld r3, -27108(r3)3886; CHECK-NEXT: blr3887entry:3888 %0 = load atomic i64, ptr inttoptr (i64 9999900 to ptr) monotonic, align 83889 ret i64 %03890}3891 3892; Function Attrs: nofree norecurse nounwind uwtable willreturn3893define dso_local i64 @ld_cst_align64_uint64_t_uint64_t() {3894; CHECK-P10-LABEL: ld_cst_align64_uint64_t_uint64_t:3895; CHECK-P10: # %bb.0: # %entry3896; CHECK-P10-NEXT: pli r3, 2441406253897; CHECK-P10-NEXT: rldic r3, r3, 12, 243898; CHECK-P10-NEXT: ld r3, 0(r3)3899; CHECK-P10-NEXT: blr3900;3901; CHECK-PREP10-LABEL: ld_cst_align64_uint64_t_uint64_t:3902; CHECK-PREP10: # %bb.0: # %entry3903; CHECK-PREP10-NEXT: lis r3, 37253904; CHECK-PREP10-NEXT: ori r3, r3, 190253905; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243906; CHECK-PREP10-NEXT: ld r3, 0(r3)3907; CHECK-PREP10-NEXT: blr3908entry:3909 %0 = load atomic i64, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963910 ret i64 %03911}3912 3913; Function Attrs: nofree norecurse nounwind uwtable willreturn3914define dso_local void @st_0_uint64_t_uint8_t(i64 %ptr, i64 %str) {3915; CHECK-LABEL: st_0_uint64_t_uint8_t:3916; CHECK: # %bb.0: # %entry3917; CHECK-NEXT: stb r4, 0(r3)3918; CHECK-NEXT: blr3919entry:3920 %0 = inttoptr i64 %ptr to ptr3921 %conv = trunc i64 %str to i83922 store atomic i8 %conv, ptr %0 monotonic, align 13923 ret void3924}3925 3926; Function Attrs: nofree norecurse nounwind uwtable willreturn3927define dso_local void @st_align16_uint64_t_uint8_t(ptr nocapture %ptr, i64 %str) {3928; CHECK-LABEL: st_align16_uint64_t_uint8_t:3929; CHECK: # %bb.0: # %entry3930; CHECK-NEXT: stb r4, 8(r3)3931; CHECK-NEXT: blr3932entry:3933 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83934 %conv = trunc i64 %str to i83935 store atomic i8 %conv, ptr %add.ptr monotonic, align 13936 ret void3937}3938 3939; Function Attrs: nofree norecurse nounwind uwtable willreturn3940define dso_local void @st_align32_uint64_t_uint8_t(ptr nocapture %ptr, i64 %str) {3941; CHECK-P10-LABEL: st_align32_uint64_t_uint8_t:3942; CHECK-P10: # %bb.0: # %entry3943; CHECK-P10-NEXT: pstb r4, 99999000(r3), 03944; CHECK-P10-NEXT: blr3945;3946; CHECK-PREP10-LABEL: st_align32_uint64_t_uint8_t:3947; CHECK-PREP10: # %bb.0: # %entry3948; CHECK-PREP10-NEXT: lis r5, 15253949; CHECK-PREP10-NEXT: ori r5, r5, 566003950; CHECK-PREP10-NEXT: stbx r4, r3, r53951; CHECK-PREP10-NEXT: blr3952entry:3953 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003954 %conv = trunc i64 %str to i83955 store atomic i8 %conv, ptr %add.ptr monotonic, align 13956 ret void3957}3958 3959; Function Attrs: nofree norecurse nounwind uwtable willreturn3960define dso_local void @st_align64_uint64_t_uint8_t(ptr nocapture %ptr, i64 %str) {3961; CHECK-P10-LABEL: st_align64_uint64_t_uint8_t:3962; CHECK-P10: # %bb.0: # %entry3963; CHECK-P10-NEXT: pli r5, 2441406253964; CHECK-P10-NEXT: rldic r5, r5, 12, 243965; CHECK-P10-NEXT: stbx r4, r3, r53966; CHECK-P10-NEXT: blr3967;3968; CHECK-PREP10-LABEL: st_align64_uint64_t_uint8_t:3969; CHECK-PREP10: # %bb.0: # %entry3970; CHECK-PREP10-NEXT: lis r5, 37253971; CHECK-PREP10-NEXT: ori r5, r5, 190253972; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243973; CHECK-PREP10-NEXT: stbx r4, r3, r53974; CHECK-PREP10-NEXT: blr3975entry:3976 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003977 %conv = trunc i64 %str to i83978 store atomic i8 %conv, ptr %add.ptr monotonic, align 13979 ret void3980}3981 3982; Function Attrs: nofree norecurse nounwind uwtable willreturn3983define dso_local void @st_reg_uint64_t_uint8_t(ptr nocapture %ptr, i64 %off, i64 %str) {3984; CHECK-LABEL: st_reg_uint64_t_uint8_t:3985; CHECK: # %bb.0: # %entry3986; CHECK-NEXT: stbx r5, r3, r43987; CHECK-NEXT: blr3988entry:3989 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3990 %conv = trunc i64 %str to i83991 store atomic i8 %conv, ptr %add.ptr monotonic, align 13992 ret void3993}3994 3995; Function Attrs: nofree norecurse nounwind uwtable willreturn3996define dso_local void @st_or1_uint64_t_uint8_t(i64 %ptr, i8 zeroext %off, i64 %str) {3997; CHECK-LABEL: st_or1_uint64_t_uint8_t:3998; CHECK: # %bb.0: # %entry3999; CHECK-NEXT: or r3, r4, r34000; CHECK-NEXT: stb r5, 0(r3)4001; CHECK-NEXT: blr4002entry:4003 %conv = zext i8 %off to i644004 %or = or i64 %conv, %ptr4005 %0 = inttoptr i64 %or to ptr4006 %conv1 = trunc i64 %str to i84007 store atomic i8 %conv1, ptr %0 monotonic, align 14008 ret void4009}4010 4011; Function Attrs: nofree norecurse nounwind uwtable willreturn4012define dso_local void @st_not_disjoint16_uint64_t_uint8_t(i64 %ptr, i64 %str) {4013; CHECK-LABEL: st_not_disjoint16_uint64_t_uint8_t:4014; CHECK: # %bb.0: # %entry4015; CHECK-NEXT: ori r3, r3, 64016; CHECK-NEXT: stb r4, 0(r3)4017; CHECK-NEXT: blr4018entry:4019 %or = or i64 %ptr, 64020 %0 = inttoptr i64 %or to ptr4021 %conv = trunc i64 %str to i84022 store atomic i8 %conv, ptr %0 monotonic, align 14023 ret void4024}4025 4026; Function Attrs: nofree norecurse nounwind uwtable willreturn4027define dso_local void @st_disjoint_align16_uint64_t_uint8_t(i64 %ptr, i64 %str) {4028; CHECK-LABEL: st_disjoint_align16_uint64_t_uint8_t:4029; CHECK: # %bb.0: # %entry4030; CHECK-NEXT: rldicr r3, r3, 0, 514031; CHECK-NEXT: stb r4, 24(r3)4032; CHECK-NEXT: blr4033entry:4034 %and = and i64 %ptr, -40964035 %or = or i64 %and, 244036 %0 = inttoptr i64 %or to ptr4037 %conv = trunc i64 %str to i84038 store atomic i8 %conv, ptr %0 monotonic, align 84039 ret void4040}4041 4042; Function Attrs: nofree norecurse nounwind uwtable willreturn4043define dso_local void @st_not_disjoint32_uint64_t_uint8_t(i64 %ptr, i64 %str) {4044; CHECK-LABEL: st_not_disjoint32_uint64_t_uint8_t:4045; CHECK: # %bb.0: # %entry4046; CHECK-NEXT: ori r3, r3, 344634047; CHECK-NEXT: oris r3, r3, 14048; CHECK-NEXT: stb r4, 0(r3)4049; CHECK-NEXT: blr4050entry:4051 %or = or i64 %ptr, 999994052 %0 = inttoptr i64 %or to ptr4053 %conv = trunc i64 %str to i84054 store atomic i8 %conv, ptr %0 monotonic, align 14055 ret void4056}4057 4058; Function Attrs: nofree norecurse nounwind uwtable willreturn4059define dso_local void @st_disjoint_align32_uint64_t_uint8_t(i64 %ptr, i64 %str) {4060; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_uint8_t:4061; CHECK-P10: # %bb.0: # %entry4062; CHECK-P10-NEXT: lis r5, -152644063; CHECK-P10-NEXT: and r3, r3, r54064; CHECK-P10-NEXT: pstb r4, 999990000(r3), 04065; CHECK-P10-NEXT: blr4066;4067; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_uint8_t:4068; CHECK-PREP10: # %bb.0: # %entry4069; CHECK-PREP10-NEXT: lis r5, -152644070; CHECK-PREP10-NEXT: and r3, r3, r54071; CHECK-PREP10-NEXT: lis r5, 152584072; CHECK-PREP10-NEXT: ori r5, r5, 417124073; CHECK-PREP10-NEXT: stbx r4, r3, r54074; CHECK-PREP10-NEXT: blr4075entry:4076 %and = and i64 %ptr, -10003415044077 %or = or i64 %and, 9999900004078 %0 = inttoptr i64 %or to ptr4079 %conv = trunc i64 %str to i84080 store atomic i8 %conv, ptr %0 monotonic, align 164081 ret void4082}4083 4084; Function Attrs: nofree norecurse nounwind uwtable willreturn4085define dso_local void @st_not_disjoint64_uint64_t_uint8_t(i64 %ptr, i64 %str) {4086; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_uint8_t:4087; CHECK-P10: # %bb.0: # %entry4088; CHECK-P10-NEXT: pli r5, 2324089; CHECK-P10-NEXT: pli r6, 35675873294090; CHECK-P10-NEXT: rldimi r6, r5, 32, 04091; CHECK-P10-NEXT: or r3, r3, r64092; CHECK-P10-NEXT: stb r4, 0(r3)4093; CHECK-P10-NEXT: blr4094;4095; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_uint8_t:4096; CHECK-PREP10: # %bb.0: # %entry4097; CHECK-PREP10-NEXT: li r5, 294098; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244099; CHECK-PREP10-NEXT: oris r5, r5, 544374100; CHECK-PREP10-NEXT: ori r5, r5, 40974101; CHECK-PREP10-NEXT: or r3, r3, r54102; CHECK-PREP10-NEXT: stb r4, 0(r3)4103; CHECK-PREP10-NEXT: blr4104entry:4105 %or = or i64 %ptr, 10000000000014106 %0 = inttoptr i64 %or to ptr4107 %conv = trunc i64 %str to i84108 store atomic i8 %conv, ptr %0 monotonic, align 14109 ret void4110}4111 4112; Function Attrs: nofree norecurse nounwind uwtable willreturn4113define dso_local void @st_disjoint_align64_uint64_t_uint8_t(i64 %ptr, i64 %str) {4114; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_uint8_t:4115; CHECK-P10: # %bb.0: # %entry4116; CHECK-P10-NEXT: pli r5, 2441406254117; CHECK-P10-NEXT: rldicr r3, r3, 0, 234118; CHECK-P10-NEXT: rldic r5, r5, 12, 244119; CHECK-P10-NEXT: stbx r4, r3, r54120; CHECK-P10-NEXT: blr4121;4122; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_uint8_t:4123; CHECK-PREP10: # %bb.0: # %entry4124; CHECK-PREP10-NEXT: lis r5, 37254125; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234126; CHECK-PREP10-NEXT: ori r5, r5, 190254127; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244128; CHECK-PREP10-NEXT: stbx r4, r3, r54129; CHECK-PREP10-NEXT: blr4130entry:4131 %and = and i64 %ptr, -10995116277764132 %or = or i64 %and, 10000000000004133 %0 = inttoptr i64 %or to ptr4134 %conv = trunc i64 %str to i84135 store atomic i8 %conv, ptr %0 monotonic, align 40964136 ret void4137}4138 4139; Function Attrs: nofree norecurse nounwind uwtable willreturn4140define dso_local void @st_cst_align16_uint64_t_uint8_t(i64 %str) {4141; CHECK-LABEL: st_cst_align16_uint64_t_uint8_t:4142; CHECK: # %bb.0: # %entry4143; CHECK-NEXT: stb r3, 4080(0)4144; CHECK-NEXT: blr4145entry:4146 %conv = trunc i64 %str to i84147 store atomic i8 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 164148 ret void4149}4150 4151; Function Attrs: nofree norecurse nounwind uwtable willreturn4152define dso_local void @st_cst_align32_uint64_t_uint8_t(i64 %str) {4153; CHECK-LABEL: st_cst_align32_uint64_t_uint8_t:4154; CHECK: # %bb.0: # %entry4155; CHECK-NEXT: lis r4, 1534156; CHECK-NEXT: stb r3, -27108(r4)4157; CHECK-NEXT: blr4158entry:4159 %conv = trunc i64 %str to i84160 store atomic i8 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 44161 ret void4162}4163 4164; Function Attrs: nofree norecurse nounwind uwtable willreturn4165define dso_local void @st_cst_align64_uint64_t_uint8_t(i64 %str) {4166; CHECK-P10-LABEL: st_cst_align64_uint64_t_uint8_t:4167; CHECK-P10: # %bb.0: # %entry4168; CHECK-P10-NEXT: pli r4, 2441406254169; CHECK-P10-NEXT: rldic r4, r4, 12, 244170; CHECK-P10-NEXT: stb r3, 0(r4)4171; CHECK-P10-NEXT: blr4172;4173; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_uint8_t:4174; CHECK-PREP10: # %bb.0: # %entry4175; CHECK-PREP10-NEXT: lis r4, 37254176; CHECK-PREP10-NEXT: ori r4, r4, 190254177; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244178; CHECK-PREP10-NEXT: stb r3, 0(r4)4179; CHECK-PREP10-NEXT: blr4180entry:4181 %conv = trunc i64 %str to i84182 store atomic i8 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964183 ret void4184}4185 4186; Function Attrs: nofree norecurse nounwind uwtable willreturn4187define dso_local void @st_0_uint64_t_uint16_t(i64 %ptr, i64 %str) {4188; CHECK-LABEL: st_0_uint64_t_uint16_t:4189; CHECK: # %bb.0: # %entry4190; CHECK-NEXT: sth r4, 0(r3)4191; CHECK-NEXT: blr4192entry:4193 %0 = inttoptr i64 %ptr to ptr4194 %conv = trunc i64 %str to i164195 store atomic i16 %conv, ptr %0 monotonic, align 24196 ret void4197}4198 4199; Function Attrs: nofree norecurse nounwind uwtable willreturn4200define dso_local void @st_align16_uint64_t_uint16_t(ptr nocapture %ptr, i64 %str) {4201; CHECK-LABEL: st_align16_uint64_t_uint16_t:4202; CHECK: # %bb.0: # %entry4203; CHECK-NEXT: sth r4, 8(r3)4204; CHECK-NEXT: blr4205entry:4206 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84207 %conv = trunc i64 %str to i164208 store atomic i16 %conv, ptr %add.ptr monotonic, align 24209 ret void4210}4211 4212; Function Attrs: nofree norecurse nounwind uwtable willreturn4213define dso_local void @st_align32_uint64_t_uint16_t(ptr nocapture %ptr, i64 %str) {4214; CHECK-P10-LABEL: st_align32_uint64_t_uint16_t:4215; CHECK-P10: # %bb.0: # %entry4216; CHECK-P10-NEXT: psth r4, 99999000(r3), 04217; CHECK-P10-NEXT: blr4218;4219; CHECK-PREP10-LABEL: st_align32_uint64_t_uint16_t:4220; CHECK-PREP10: # %bb.0: # %entry4221; CHECK-PREP10-NEXT: lis r5, 15254222; CHECK-PREP10-NEXT: ori r5, r5, 566004223; CHECK-PREP10-NEXT: sthx r4, r3, r54224; CHECK-PREP10-NEXT: blr4225entry:4226 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004227 %conv = trunc i64 %str to i164228 store atomic i16 %conv, ptr %add.ptr monotonic, align 24229 ret void4230}4231 4232; Function Attrs: nofree norecurse nounwind uwtable willreturn4233define dso_local void @st_align64_uint64_t_uint16_t(ptr nocapture %ptr, i64 %str) {4234; CHECK-P10-LABEL: st_align64_uint64_t_uint16_t:4235; CHECK-P10: # %bb.0: # %entry4236; CHECK-P10-NEXT: pli r5, 2441406254237; CHECK-P10-NEXT: rldic r5, r5, 12, 244238; CHECK-P10-NEXT: sthx r4, r3, r54239; CHECK-P10-NEXT: blr4240;4241; CHECK-PREP10-LABEL: st_align64_uint64_t_uint16_t:4242; CHECK-PREP10: # %bb.0: # %entry4243; CHECK-PREP10-NEXT: lis r5, 37254244; CHECK-PREP10-NEXT: ori r5, r5, 190254245; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244246; CHECK-PREP10-NEXT: sthx r4, r3, r54247; CHECK-PREP10-NEXT: blr4248entry:4249 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004250 %conv = trunc i64 %str to i164251 store atomic i16 %conv, ptr %add.ptr monotonic, align 24252 ret void4253}4254 4255; Function Attrs: nofree norecurse nounwind uwtable willreturn4256define dso_local void @st_reg_uint64_t_uint16_t(ptr nocapture %ptr, i64 %off, i64 %str) {4257; CHECK-LABEL: st_reg_uint64_t_uint16_t:4258; CHECK: # %bb.0: # %entry4259; CHECK-NEXT: sthx r5, r3, r44260; CHECK-NEXT: blr4261entry:4262 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4263 %conv = trunc i64 %str to i164264 store atomic i16 %conv, ptr %add.ptr monotonic, align 24265 ret void4266}4267 4268; Function Attrs: nofree norecurse nounwind uwtable willreturn4269define dso_local void @st_or1_uint64_t_uint16_t(i64 %ptr, i8 zeroext %off, i64 %str) {4270; CHECK-LABEL: st_or1_uint64_t_uint16_t:4271; CHECK: # %bb.0: # %entry4272; CHECK-NEXT: or r3, r4, r34273; CHECK-NEXT: sth r5, 0(r3)4274; CHECK-NEXT: blr4275entry:4276 %conv = zext i8 %off to i644277 %or = or i64 %conv, %ptr4278 %0 = inttoptr i64 %or to ptr4279 %conv1 = trunc i64 %str to i164280 store atomic i16 %conv1, ptr %0 monotonic, align 24281 ret void4282}4283 4284; Function Attrs: nofree norecurse nounwind uwtable willreturn4285define dso_local void @st_not_disjoint16_uint64_t_uint16_t(i64 %ptr, i64 %str) {4286; CHECK-LABEL: st_not_disjoint16_uint64_t_uint16_t:4287; CHECK: # %bb.0: # %entry4288; CHECK-NEXT: ori r3, r3, 64289; CHECK-NEXT: sth r4, 0(r3)4290; CHECK-NEXT: blr4291entry:4292 %or = or i64 %ptr, 64293 %0 = inttoptr i64 %or to ptr4294 %conv = trunc i64 %str to i164295 store atomic i16 %conv, ptr %0 monotonic, align 24296 ret void4297}4298 4299; Function Attrs: nofree norecurse nounwind uwtable willreturn4300define dso_local void @st_disjoint_align16_uint64_t_uint16_t(i64 %ptr, i64 %str) {4301; CHECK-LABEL: st_disjoint_align16_uint64_t_uint16_t:4302; CHECK: # %bb.0: # %entry4303; CHECK-NEXT: rldicr r3, r3, 0, 514304; CHECK-NEXT: sth r4, 24(r3)4305; CHECK-NEXT: blr4306entry:4307 %and = and i64 %ptr, -40964308 %or = or i64 %and, 244309 %0 = inttoptr i64 %or to ptr4310 %conv = trunc i64 %str to i164311 store atomic i16 %conv, ptr %0 monotonic, align 84312 ret void4313}4314 4315; Function Attrs: nofree norecurse nounwind uwtable willreturn4316define dso_local void @st_not_disjoint32_uint64_t_uint16_t(i64 %ptr, i64 %str) {4317; CHECK-LABEL: st_not_disjoint32_uint64_t_uint16_t:4318; CHECK: # %bb.0: # %entry4319; CHECK-NEXT: ori r3, r3, 344634320; CHECK-NEXT: oris r3, r3, 14321; CHECK-NEXT: sth r4, 0(r3)4322; CHECK-NEXT: blr4323entry:4324 %or = or i64 %ptr, 999994325 %0 = inttoptr i64 %or to ptr4326 %conv = trunc i64 %str to i164327 store atomic i16 %conv, ptr %0 monotonic, align 24328 ret void4329}4330 4331; Function Attrs: nofree norecurse nounwind uwtable willreturn4332define dso_local void @st_disjoint_align32_uint64_t_uint16_t(i64 %ptr, i64 %str) {4333; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_uint16_t:4334; CHECK-P10: # %bb.0: # %entry4335; CHECK-P10-NEXT: lis r5, -152644336; CHECK-P10-NEXT: and r3, r3, r54337; CHECK-P10-NEXT: psth r4, 999990000(r3), 04338; CHECK-P10-NEXT: blr4339;4340; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_uint16_t:4341; CHECK-PREP10: # %bb.0: # %entry4342; CHECK-PREP10-NEXT: lis r5, -152644343; CHECK-PREP10-NEXT: and r3, r3, r54344; CHECK-PREP10-NEXT: lis r5, 152584345; CHECK-PREP10-NEXT: ori r5, r5, 417124346; CHECK-PREP10-NEXT: sthx r4, r3, r54347; CHECK-PREP10-NEXT: blr4348entry:4349 %and = and i64 %ptr, -10003415044350 %or = or i64 %and, 9999900004351 %0 = inttoptr i64 %or to ptr4352 %conv = trunc i64 %str to i164353 store atomic i16 %conv, ptr %0 monotonic, align 164354 ret void4355}4356 4357; Function Attrs: nofree norecurse nounwind uwtable willreturn4358define dso_local void @st_not_disjoint64_uint64_t_uint16_t(i64 %ptr, i64 %str) {4359; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_uint16_t:4360; CHECK-P10: # %bb.0: # %entry4361; CHECK-P10-NEXT: pli r5, 2324362; CHECK-P10-NEXT: pli r6, 35675873294363; CHECK-P10-NEXT: rldimi r6, r5, 32, 04364; CHECK-P10-NEXT: or r3, r3, r64365; CHECK-P10-NEXT: sth r4, 0(r3)4366; CHECK-P10-NEXT: blr4367;4368; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_uint16_t:4369; CHECK-PREP10: # %bb.0: # %entry4370; CHECK-PREP10-NEXT: li r5, 294371; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244372; CHECK-PREP10-NEXT: oris r5, r5, 544374373; CHECK-PREP10-NEXT: ori r5, r5, 40974374; CHECK-PREP10-NEXT: or r3, r3, r54375; CHECK-PREP10-NEXT: sth r4, 0(r3)4376; CHECK-PREP10-NEXT: blr4377entry:4378 %or = or i64 %ptr, 10000000000014379 %0 = inttoptr i64 %or to ptr4380 %conv = trunc i64 %str to i164381 store atomic i16 %conv, ptr %0 monotonic, align 24382 ret void4383}4384 4385; Function Attrs: nofree norecurse nounwind uwtable willreturn4386define dso_local void @st_disjoint_align64_uint64_t_uint16_t(i64 %ptr, i64 %str) {4387; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_uint16_t:4388; CHECK-P10: # %bb.0: # %entry4389; CHECK-P10-NEXT: pli r5, 2441406254390; CHECK-P10-NEXT: rldicr r3, r3, 0, 234391; CHECK-P10-NEXT: rldic r5, r5, 12, 244392; CHECK-P10-NEXT: sthx r4, r3, r54393; CHECK-P10-NEXT: blr4394;4395; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_uint16_t:4396; CHECK-PREP10: # %bb.0: # %entry4397; CHECK-PREP10-NEXT: lis r5, 37254398; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234399; CHECK-PREP10-NEXT: ori r5, r5, 190254400; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244401; CHECK-PREP10-NEXT: sthx r4, r3, r54402; CHECK-PREP10-NEXT: blr4403entry:4404 %and = and i64 %ptr, -10995116277764405 %or = or i64 %and, 10000000000004406 %0 = inttoptr i64 %or to ptr4407 %conv = trunc i64 %str to i164408 store atomic i16 %conv, ptr %0 monotonic, align 40964409 ret void4410}4411 4412; Function Attrs: nofree norecurse nounwind uwtable willreturn4413define dso_local void @st_cst_align16_uint64_t_uint16_t(i64 %str) {4414; CHECK-LABEL: st_cst_align16_uint64_t_uint16_t:4415; CHECK: # %bb.0: # %entry4416; CHECK-NEXT: sth r3, 4080(0)4417; CHECK-NEXT: blr4418entry:4419 %conv = trunc i64 %str to i164420 store atomic i16 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 164421 ret void4422}4423 4424; Function Attrs: nofree norecurse nounwind uwtable willreturn4425define dso_local void @st_cst_align32_uint64_t_uint16_t(i64 %str) {4426; CHECK-LABEL: st_cst_align32_uint64_t_uint16_t:4427; CHECK: # %bb.0: # %entry4428; CHECK-NEXT: lis r4, 1534429; CHECK-NEXT: sth r3, -27108(r4)4430; CHECK-NEXT: blr4431entry:4432 %conv = trunc i64 %str to i164433 store atomic i16 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 44434 ret void4435}4436 4437; Function Attrs: nofree norecurse nounwind uwtable willreturn4438define dso_local void @st_cst_align64_uint64_t_uint16_t(i64 %str) {4439; CHECK-P10-LABEL: st_cst_align64_uint64_t_uint16_t:4440; CHECK-P10: # %bb.0: # %entry4441; CHECK-P10-NEXT: pli r4, 2441406254442; CHECK-P10-NEXT: rldic r4, r4, 12, 244443; CHECK-P10-NEXT: sth r3, 0(r4)4444; CHECK-P10-NEXT: blr4445;4446; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_uint16_t:4447; CHECK-PREP10: # %bb.0: # %entry4448; CHECK-PREP10-NEXT: lis r4, 37254449; CHECK-PREP10-NEXT: ori r4, r4, 190254450; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244451; CHECK-PREP10-NEXT: sth r3, 0(r4)4452; CHECK-PREP10-NEXT: blr4453entry:4454 %conv = trunc i64 %str to i164455 store atomic i16 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964456 ret void4457}4458 4459; Function Attrs: nofree norecurse nounwind uwtable willreturn4460define dso_local void @st_0_uint64_t_uint32_t(i64 %ptr, i64 %str) {4461; CHECK-LABEL: st_0_uint64_t_uint32_t:4462; CHECK: # %bb.0: # %entry4463; CHECK-NEXT: stw r4, 0(r3)4464; CHECK-NEXT: blr4465entry:4466 %0 = inttoptr i64 %ptr to ptr4467 %conv = trunc i64 %str to i324468 store atomic i32 %conv, ptr %0 monotonic, align 44469 ret void4470}4471 4472; Function Attrs: nofree norecurse nounwind uwtable willreturn4473define dso_local void @st_align16_uint64_t_uint32_t(ptr nocapture %ptr, i64 %str) {4474; CHECK-LABEL: st_align16_uint64_t_uint32_t:4475; CHECK: # %bb.0: # %entry4476; CHECK-NEXT: stw r4, 8(r3)4477; CHECK-NEXT: blr4478entry:4479 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84480 %conv = trunc i64 %str to i324481 store atomic i32 %conv, ptr %add.ptr monotonic, align 44482 ret void4483}4484 4485; Function Attrs: nofree norecurse nounwind uwtable willreturn4486define dso_local void @st_align32_uint64_t_uint32_t(ptr nocapture %ptr, i64 %str) {4487; CHECK-P10-LABEL: st_align32_uint64_t_uint32_t:4488; CHECK-P10: # %bb.0: # %entry4489; CHECK-P10-NEXT: pstw r4, 99999000(r3), 04490; CHECK-P10-NEXT: blr4491;4492; CHECK-PREP10-LABEL: st_align32_uint64_t_uint32_t:4493; CHECK-PREP10: # %bb.0: # %entry4494; CHECK-PREP10-NEXT: lis r5, 15254495; CHECK-PREP10-NEXT: ori r5, r5, 566004496; CHECK-PREP10-NEXT: stwx r4, r3, r54497; CHECK-PREP10-NEXT: blr4498entry:4499 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004500 %conv = trunc i64 %str to i324501 store atomic i32 %conv, ptr %add.ptr monotonic, align 44502 ret void4503}4504 4505; Function Attrs: nofree norecurse nounwind uwtable willreturn4506define dso_local void @st_align64_uint64_t_uint32_t(ptr nocapture %ptr, i64 %str) {4507; CHECK-P10-LABEL: st_align64_uint64_t_uint32_t:4508; CHECK-P10: # %bb.0: # %entry4509; CHECK-P10-NEXT: pli r5, 2441406254510; CHECK-P10-NEXT: rldic r5, r5, 12, 244511; CHECK-P10-NEXT: stwx r4, r3, r54512; CHECK-P10-NEXT: blr4513;4514; CHECK-PREP10-LABEL: st_align64_uint64_t_uint32_t:4515; CHECK-PREP10: # %bb.0: # %entry4516; CHECK-PREP10-NEXT: lis r5, 37254517; CHECK-PREP10-NEXT: ori r5, r5, 190254518; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244519; CHECK-PREP10-NEXT: stwx r4, r3, r54520; CHECK-PREP10-NEXT: blr4521entry:4522 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004523 %conv = trunc i64 %str to i324524 store atomic i32 %conv, ptr %add.ptr monotonic, align 44525 ret void4526}4527 4528; Function Attrs: nofree norecurse nounwind uwtable willreturn4529define dso_local void @st_reg_uint64_t_uint32_t(ptr nocapture %ptr, i64 %off, i64 %str) {4530; CHECK-LABEL: st_reg_uint64_t_uint32_t:4531; CHECK: # %bb.0: # %entry4532; CHECK-NEXT: stwx r5, r3, r44533; CHECK-NEXT: blr4534entry:4535 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4536 %conv = trunc i64 %str to i324537 store atomic i32 %conv, ptr %add.ptr monotonic, align 44538 ret void4539}4540 4541; Function Attrs: nofree norecurse nounwind uwtable willreturn4542define dso_local void @st_or1_uint64_t_uint32_t(i64 %ptr, i8 zeroext %off, i64 %str) {4543; CHECK-LABEL: st_or1_uint64_t_uint32_t:4544; CHECK: # %bb.0: # %entry4545; CHECK-NEXT: or r3, r4, r34546; CHECK-NEXT: stw r5, 0(r3)4547; CHECK-NEXT: blr4548entry:4549 %conv = zext i8 %off to i644550 %or = or i64 %conv, %ptr4551 %0 = inttoptr i64 %or to ptr4552 %conv1 = trunc i64 %str to i324553 store atomic i32 %conv1, ptr %0 monotonic, align 44554 ret void4555}4556 4557; Function Attrs: nofree norecurse nounwind uwtable willreturn4558define dso_local void @st_not_disjoint16_uint64_t_uint32_t(i64 %ptr, i64 %str) {4559; CHECK-LABEL: st_not_disjoint16_uint64_t_uint32_t:4560; CHECK: # %bb.0: # %entry4561; CHECK-NEXT: ori r3, r3, 64562; CHECK-NEXT: stw r4, 0(r3)4563; CHECK-NEXT: blr4564entry:4565 %or = or i64 %ptr, 64566 %0 = inttoptr i64 %or to ptr4567 %conv = trunc i64 %str to i324568 store atomic i32 %conv, ptr %0 monotonic, align 44569 ret void4570}4571 4572; Function Attrs: nofree norecurse nounwind uwtable willreturn4573define dso_local void @st_disjoint_align16_uint64_t_uint32_t(i64 %ptr, i64 %str) {4574; CHECK-LABEL: st_disjoint_align16_uint64_t_uint32_t:4575; CHECK: # %bb.0: # %entry4576; CHECK-NEXT: rldicr r3, r3, 0, 514577; CHECK-NEXT: stw r4, 24(r3)4578; CHECK-NEXT: blr4579entry:4580 %and = and i64 %ptr, -40964581 %or = or i64 %and, 244582 %0 = inttoptr i64 %or to ptr4583 %conv = trunc i64 %str to i324584 store atomic i32 %conv, ptr %0 monotonic, align 84585 ret void4586}4587 4588; Function Attrs: nofree norecurse nounwind uwtable willreturn4589define dso_local void @st_not_disjoint32_uint64_t_uint32_t(i64 %ptr, i64 %str) {4590; CHECK-LABEL: st_not_disjoint32_uint64_t_uint32_t:4591; CHECK: # %bb.0: # %entry4592; CHECK-NEXT: ori r3, r3, 344634593; CHECK-NEXT: oris r3, r3, 14594; CHECK-NEXT: stw r4, 0(r3)4595; CHECK-NEXT: blr4596entry:4597 %or = or i64 %ptr, 999994598 %0 = inttoptr i64 %or to ptr4599 %conv = trunc i64 %str to i324600 store atomic i32 %conv, ptr %0 monotonic, align 44601 ret void4602}4603 4604; Function Attrs: nofree norecurse nounwind uwtable willreturn4605define dso_local void @st_disjoint_align32_uint64_t_uint32_t(i64 %ptr, i64 %str) {4606; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_uint32_t:4607; CHECK-P10: # %bb.0: # %entry4608; CHECK-P10-NEXT: lis r5, -152644609; CHECK-P10-NEXT: and r3, r3, r54610; CHECK-P10-NEXT: pstw r4, 999990000(r3), 04611; CHECK-P10-NEXT: blr4612;4613; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_uint32_t:4614; CHECK-PREP10: # %bb.0: # %entry4615; CHECK-PREP10-NEXT: lis r5, -152644616; CHECK-PREP10-NEXT: and r3, r3, r54617; CHECK-PREP10-NEXT: lis r5, 152584618; CHECK-PREP10-NEXT: ori r5, r5, 417124619; CHECK-PREP10-NEXT: stwx r4, r3, r54620; CHECK-PREP10-NEXT: blr4621entry:4622 %and = and i64 %ptr, -10003415044623 %or = or i64 %and, 9999900004624 %0 = inttoptr i64 %or to ptr4625 %conv = trunc i64 %str to i324626 store atomic i32 %conv, ptr %0 monotonic, align 164627 ret void4628}4629 4630; Function Attrs: nofree norecurse nounwind uwtable willreturn4631define dso_local void @st_not_disjoint64_uint64_t_uint32_t(i64 %ptr, i64 %str) {4632; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_uint32_t:4633; CHECK-P10: # %bb.0: # %entry4634; CHECK-P10-NEXT: pli r5, 2324635; CHECK-P10-NEXT: pli r6, 35675873294636; CHECK-P10-NEXT: rldimi r6, r5, 32, 04637; CHECK-P10-NEXT: or r3, r3, r64638; CHECK-P10-NEXT: stw r4, 0(r3)4639; CHECK-P10-NEXT: blr4640;4641; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_uint32_t:4642; CHECK-PREP10: # %bb.0: # %entry4643; CHECK-PREP10-NEXT: li r5, 294644; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244645; CHECK-PREP10-NEXT: oris r5, r5, 544374646; CHECK-PREP10-NEXT: ori r5, r5, 40974647; CHECK-PREP10-NEXT: or r3, r3, r54648; CHECK-PREP10-NEXT: stw r4, 0(r3)4649; CHECK-PREP10-NEXT: blr4650entry:4651 %or = or i64 %ptr, 10000000000014652 %0 = inttoptr i64 %or to ptr4653 %conv = trunc i64 %str to i324654 store atomic i32 %conv, ptr %0 monotonic, align 44655 ret void4656}4657 4658; Function Attrs: nofree norecurse nounwind uwtable willreturn4659define dso_local void @st_disjoint_align64_uint64_t_uint32_t(i64 %ptr, i64 %str) {4660; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_uint32_t:4661; CHECK-P10: # %bb.0: # %entry4662; CHECK-P10-NEXT: pli r5, 2441406254663; CHECK-P10-NEXT: rldicr r3, r3, 0, 234664; CHECK-P10-NEXT: rldic r5, r5, 12, 244665; CHECK-P10-NEXT: stwx r4, r3, r54666; CHECK-P10-NEXT: blr4667;4668; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_uint32_t:4669; CHECK-PREP10: # %bb.0: # %entry4670; CHECK-PREP10-NEXT: lis r5, 37254671; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234672; CHECK-PREP10-NEXT: ori r5, r5, 190254673; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244674; CHECK-PREP10-NEXT: stwx r4, r3, r54675; CHECK-PREP10-NEXT: blr4676entry:4677 %and = and i64 %ptr, -10995116277764678 %or = or i64 %and, 10000000000004679 %0 = inttoptr i64 %or to ptr4680 %conv = trunc i64 %str to i324681 store atomic i32 %conv, ptr %0 monotonic, align 40964682 ret void4683}4684 4685; Function Attrs: nofree norecurse nounwind uwtable willreturn4686define dso_local void @st_cst_align16_uint64_t_uint32_t(i64 %str) {4687; CHECK-LABEL: st_cst_align16_uint64_t_uint32_t:4688; CHECK: # %bb.0: # %entry4689; CHECK-NEXT: stw r3, 4080(0)4690; CHECK-NEXT: blr4691entry:4692 %conv = trunc i64 %str to i324693 store atomic i32 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 164694 ret void4695}4696 4697; Function Attrs: nofree norecurse nounwind uwtable willreturn4698define dso_local void @st_cst_align32_uint64_t_uint32_t(i64 %str) {4699; CHECK-LABEL: st_cst_align32_uint64_t_uint32_t:4700; CHECK: # %bb.0: # %entry4701; CHECK-NEXT: lis r4, 1534702; CHECK-NEXT: stw r3, -27108(r4)4703; CHECK-NEXT: blr4704entry:4705 %conv = trunc i64 %str to i324706 store atomic i32 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 44707 ret void4708}4709 4710; Function Attrs: nofree norecurse nounwind uwtable willreturn4711define dso_local void @st_cst_align64_uint64_t_uint32_t(i64 %str) {4712; CHECK-P10-LABEL: st_cst_align64_uint64_t_uint32_t:4713; CHECK-P10: # %bb.0: # %entry4714; CHECK-P10-NEXT: pli r4, 2441406254715; CHECK-P10-NEXT: rldic r4, r4, 12, 244716; CHECK-P10-NEXT: stw r3, 0(r4)4717; CHECK-P10-NEXT: blr4718;4719; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_uint32_t:4720; CHECK-PREP10: # %bb.0: # %entry4721; CHECK-PREP10-NEXT: lis r4, 37254722; CHECK-PREP10-NEXT: ori r4, r4, 190254723; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244724; CHECK-PREP10-NEXT: stw r3, 0(r4)4725; CHECK-PREP10-NEXT: blr4726entry:4727 %conv = trunc i64 %str to i324728 store atomic i32 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964729 ret void4730}4731 4732; Function Attrs: nofree norecurse nounwind uwtable willreturn4733define dso_local void @st_0_uint64_t_uint64_t(i64 %ptr, i64 %str) {4734; CHECK-LABEL: st_0_uint64_t_uint64_t:4735; CHECK: # %bb.0: # %entry4736; CHECK-NEXT: std r4, 0(r3)4737; CHECK-NEXT: blr4738entry:4739 %0 = inttoptr i64 %ptr to ptr4740 store atomic i64 %str, ptr %0 monotonic, align 84741 ret void4742}4743 4744; Function Attrs: nofree norecurse nounwind uwtable willreturn4745define dso_local void @st_align16_uint64_t_uint64_t(ptr nocapture %ptr, i64 %str) {4746; CHECK-LABEL: st_align16_uint64_t_uint64_t:4747; CHECK: # %bb.0: # %entry4748; CHECK-NEXT: std r4, 8(r3)4749; CHECK-NEXT: blr4750entry:4751 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84752 store atomic i64 %str, ptr %add.ptr monotonic, align 84753 ret void4754}4755 4756; Function Attrs: nofree norecurse nounwind uwtable willreturn4757define dso_local void @st_align32_uint64_t_uint64_t(ptr nocapture %ptr, i64 %str) {4758; CHECK-P10-LABEL: st_align32_uint64_t_uint64_t:4759; CHECK-P10: # %bb.0: # %entry4760; CHECK-P10-NEXT: pstd r4, 99999000(r3), 04761; CHECK-P10-NEXT: blr4762;4763; CHECK-PREP10-LABEL: st_align32_uint64_t_uint64_t:4764; CHECK-PREP10: # %bb.0: # %entry4765; CHECK-PREP10-NEXT: lis r5, 15254766; CHECK-PREP10-NEXT: ori r5, r5, 566004767; CHECK-PREP10-NEXT: stdx r4, r3, r54768; CHECK-PREP10-NEXT: blr4769entry:4770 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004771 store atomic i64 %str, ptr %add.ptr monotonic, align 84772 ret void4773}4774 4775; Function Attrs: nofree norecurse nounwind uwtable willreturn4776define dso_local void @st_align64_uint64_t_uint64_t(ptr nocapture %ptr, i64 %str) {4777; CHECK-P10-LABEL: st_align64_uint64_t_uint64_t:4778; CHECK-P10: # %bb.0: # %entry4779; CHECK-P10-NEXT: pli r5, 2441406254780; CHECK-P10-NEXT: rldic r5, r5, 12, 244781; CHECK-P10-NEXT: stdx r4, r3, r54782; CHECK-P10-NEXT: blr4783;4784; CHECK-PREP10-LABEL: st_align64_uint64_t_uint64_t:4785; CHECK-PREP10: # %bb.0: # %entry4786; CHECK-PREP10-NEXT: lis r5, 37254787; CHECK-PREP10-NEXT: ori r5, r5, 190254788; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244789; CHECK-PREP10-NEXT: stdx r4, r3, r54790; CHECK-PREP10-NEXT: blr4791entry:4792 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004793 store atomic i64 %str, ptr %add.ptr monotonic, align 84794 ret void4795}4796 4797; Function Attrs: nofree norecurse nounwind uwtable willreturn4798define dso_local void @st_reg_uint64_t_uint64_t(ptr nocapture %ptr, i64 %off, i64 %str) {4799; CHECK-LABEL: st_reg_uint64_t_uint64_t:4800; CHECK: # %bb.0: # %entry4801; CHECK-NEXT: stdx r5, r3, r44802; CHECK-NEXT: blr4803entry:4804 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4805 store atomic i64 %str, ptr %add.ptr monotonic, align 84806 ret void4807}4808 4809; Function Attrs: nofree norecurse nounwind uwtable willreturn4810define dso_local void @st_or1_uint64_t_uint64_t(i64 %ptr, i8 zeroext %off, i64 %str) {4811; CHECK-LABEL: st_or1_uint64_t_uint64_t:4812; CHECK: # %bb.0: # %entry4813; CHECK-NEXT: or r3, r4, r34814; CHECK-NEXT: std r5, 0(r3)4815; CHECK-NEXT: blr4816entry:4817 %conv = zext i8 %off to i644818 %or = or i64 %conv, %ptr4819 %0 = inttoptr i64 %or to ptr4820 store atomic i64 %str, ptr %0 monotonic, align 84821 ret void4822}4823 4824; Function Attrs: nofree norecurse nounwind uwtable willreturn4825define dso_local void @st_not_disjoint16_uint64_t_uint64_t(i64 %ptr, i64 %str) {4826; CHECK-LABEL: st_not_disjoint16_uint64_t_uint64_t:4827; CHECK: # %bb.0: # %entry4828; CHECK-NEXT: ori r3, r3, 64829; CHECK-NEXT: std r4, 0(r3)4830; CHECK-NEXT: blr4831entry:4832 %or = or i64 %ptr, 64833 %0 = inttoptr i64 %or to ptr4834 store atomic i64 %str, ptr %0 monotonic, align 84835 ret void4836}4837 4838; Function Attrs: nofree norecurse nounwind uwtable willreturn4839define dso_local void @st_disjoint_align16_uint64_t_uint64_t(i64 %ptr, i64 %str) {4840; CHECK-LABEL: st_disjoint_align16_uint64_t_uint64_t:4841; CHECK: # %bb.0: # %entry4842; CHECK-NEXT: rldicr r3, r3, 0, 514843; CHECK-NEXT: std r4, 24(r3)4844; CHECK-NEXT: blr4845entry:4846 %and = and i64 %ptr, -40964847 %or = or i64 %and, 244848 %0 = inttoptr i64 %or to ptr4849 store atomic i64 %str, ptr %0 monotonic, align 84850 ret void4851}4852 4853; Function Attrs: nofree norecurse nounwind uwtable willreturn4854define dso_local void @st_not_disjoint32_uint64_t_uint64_t(i64 %ptr, i64 %str) {4855; CHECK-LABEL: st_not_disjoint32_uint64_t_uint64_t:4856; CHECK: # %bb.0: # %entry4857; CHECK-NEXT: ori r3, r3, 344634858; CHECK-NEXT: oris r3, r3, 14859; CHECK-NEXT: std r4, 0(r3)4860; CHECK-NEXT: blr4861entry:4862 %or = or i64 %ptr, 999994863 %0 = inttoptr i64 %or to ptr4864 store atomic i64 %str, ptr %0 monotonic, align 84865 ret void4866}4867 4868; Function Attrs: nofree norecurse nounwind uwtable willreturn4869define dso_local void @st_disjoint_align32_uint64_t_uint64_t(i64 %ptr, i64 %str) {4870; CHECK-P10-LABEL: st_disjoint_align32_uint64_t_uint64_t:4871; CHECK-P10: # %bb.0: # %entry4872; CHECK-P10-NEXT: lis r5, -152644873; CHECK-P10-NEXT: and r3, r3, r54874; CHECK-P10-NEXT: pstd r4, 999990000(r3), 04875; CHECK-P10-NEXT: blr4876;4877; CHECK-PREP10-LABEL: st_disjoint_align32_uint64_t_uint64_t:4878; CHECK-PREP10: # %bb.0: # %entry4879; CHECK-PREP10-NEXT: lis r5, -152644880; CHECK-PREP10-NEXT: and r3, r3, r54881; CHECK-PREP10-NEXT: lis r5, 152584882; CHECK-PREP10-NEXT: ori r5, r5, 417124883; CHECK-PREP10-NEXT: stdx r4, r3, r54884; CHECK-PREP10-NEXT: blr4885entry:4886 %and = and i64 %ptr, -10003415044887 %or = or i64 %and, 9999900004888 %0 = inttoptr i64 %or to ptr4889 store atomic i64 %str, ptr %0 monotonic, align 164890 ret void4891}4892 4893; Function Attrs: nofree norecurse nounwind uwtable willreturn4894define dso_local void @st_not_disjoint64_uint64_t_uint64_t(i64 %ptr, i64 %str) {4895; CHECK-P10-LABEL: st_not_disjoint64_uint64_t_uint64_t:4896; CHECK-P10: # %bb.0: # %entry4897; CHECK-P10-NEXT: pli r5, 2324898; CHECK-P10-NEXT: pli r6, 35675873294899; CHECK-P10-NEXT: rldimi r6, r5, 32, 04900; CHECK-P10-NEXT: or r3, r3, r64901; CHECK-P10-NEXT: std r4, 0(r3)4902; CHECK-P10-NEXT: blr4903;4904; CHECK-PREP10-LABEL: st_not_disjoint64_uint64_t_uint64_t:4905; CHECK-PREP10: # %bb.0: # %entry4906; CHECK-PREP10-NEXT: li r5, 294907; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244908; CHECK-PREP10-NEXT: oris r5, r5, 544374909; CHECK-PREP10-NEXT: ori r5, r5, 40974910; CHECK-PREP10-NEXT: or r3, r3, r54911; CHECK-PREP10-NEXT: std r4, 0(r3)4912; CHECK-PREP10-NEXT: blr4913entry:4914 %or = or i64 %ptr, 10000000000014915 %0 = inttoptr i64 %or to ptr4916 store atomic i64 %str, ptr %0 monotonic, align 84917 ret void4918}4919 4920; Function Attrs: nofree norecurse nounwind uwtable willreturn4921define dso_local void @st_disjoint_align64_uint64_t_uint64_t(i64 %ptr, i64 %str) {4922; CHECK-P10-LABEL: st_disjoint_align64_uint64_t_uint64_t:4923; CHECK-P10: # %bb.0: # %entry4924; CHECK-P10-NEXT: pli r5, 2441406254925; CHECK-P10-NEXT: rldicr r3, r3, 0, 234926; CHECK-P10-NEXT: rldic r5, r5, 12, 244927; CHECK-P10-NEXT: stdx r4, r3, r54928; CHECK-P10-NEXT: blr4929;4930; CHECK-PREP10-LABEL: st_disjoint_align64_uint64_t_uint64_t:4931; CHECK-PREP10: # %bb.0: # %entry4932; CHECK-PREP10-NEXT: lis r5, 37254933; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234934; CHECK-PREP10-NEXT: ori r5, r5, 190254935; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244936; CHECK-PREP10-NEXT: stdx r4, r3, r54937; CHECK-PREP10-NEXT: blr4938entry:4939 %and = and i64 %ptr, -10995116277764940 %or = or i64 %and, 10000000000004941 %0 = inttoptr i64 %or to ptr4942 store atomic i64 %str, ptr %0 monotonic, align 40964943 ret void4944}4945 4946; Function Attrs: nofree norecurse nounwind uwtable willreturn4947define dso_local void @st_cst_align16_uint64_t_uint64_t(i64 %str) {4948; CHECK-LABEL: st_cst_align16_uint64_t_uint64_t:4949; CHECK: # %bb.0: # %entry4950; CHECK-NEXT: std r3, 4080(0)4951; CHECK-NEXT: blr4952entry:4953 store atomic i64 %str, ptr inttoptr (i64 4080 to ptr) monotonic, align 164954 ret void4955}4956 4957; Function Attrs: nofree norecurse nounwind uwtable willreturn4958define dso_local void @st_cst_align32_uint64_t_uint64_t(i64 %str) {4959; CHECK-LABEL: st_cst_align32_uint64_t_uint64_t:4960; CHECK: # %bb.0: # %entry4961; CHECK-NEXT: lis r4, 1534962; CHECK-NEXT: std r3, -27108(r4)4963; CHECK-NEXT: blr4964entry:4965 store atomic i64 %str, ptr inttoptr (i64 9999900 to ptr) monotonic, align 84966 ret void4967}4968 4969; Function Attrs: nofree norecurse nounwind uwtable willreturn4970define dso_local void @st_cst_align64_uint64_t_uint64_t(i64 %str) {4971; CHECK-P10-LABEL: st_cst_align64_uint64_t_uint64_t:4972; CHECK-P10: # %bb.0: # %entry4973; CHECK-P10-NEXT: pli r4, 2441406254974; CHECK-P10-NEXT: rldic r4, r4, 12, 244975; CHECK-P10-NEXT: std r3, 0(r4)4976; CHECK-P10-NEXT: blr4977;4978; CHECK-PREP10-LABEL: st_cst_align64_uint64_t_uint64_t:4979; CHECK-PREP10: # %bb.0: # %entry4980; CHECK-PREP10-NEXT: lis r4, 37254981; CHECK-PREP10-NEXT: ori r4, r4, 190254982; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244983; CHECK-PREP10-NEXT: std r3, 0(r4)4984; CHECK-PREP10-NEXT: blr4985entry:4986 store atomic i64 %str, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964987 ret void4988}4989;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:4990; CHECK-P8: {{.*}}4991; CHECK-P9: {{.*}}4992