4777 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-PREP1011; 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-PREP1014; 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-PREP1017; 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-PREP1020 21; Function Attrs: nofree norecurse nounwind uwtable willreturn22define dso_local signext i32 @ld_0_int32_t_uint8_t(i64 %ptr) {23; CHECK-LABEL: ld_0_int32_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 i3231 ret i32 %conv32}33 34; Function Attrs: nofree norecurse nounwind uwtable willreturn35define dso_local signext i32 @ld_align16_int32_t_uint8_t(ptr nocapture readonly %ptr) {36; CHECK-LABEL: ld_align16_int32_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 i3244 ret i32 %conv45}46 47; Function Attrs: nofree norecurse nounwind uwtable willreturn48define dso_local signext i32 @ld_align32_int32_t_uint8_t(ptr nocapture readonly %ptr) {49; CHECK-P10-LABEL: ld_align32_int32_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_int32_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 i3265 ret i32 %conv66}67 68; Function Attrs: nofree norecurse nounwind uwtable willreturn69define dso_local signext i32 @ld_align64_int32_t_uint8_t(ptr nocapture readonly %ptr) {70; CHECK-P10-LABEL: ld_align64_int32_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_int32_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 i3288 ret i32 %conv89}90 91; Function Attrs: nofree norecurse nounwind uwtable willreturn92define dso_local signext i32 @ld_reg_int32_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) {93; CHECK-LABEL: ld_reg_int32_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 i32101 ret i32 %conv102}103 104; Function Attrs: nofree norecurse nounwind uwtable willreturn105define dso_local signext i32 @ld_or_int32_t_uint8_t(i64 %ptr, i8 zeroext %off) {106; CHECK-LABEL: ld_or_int32_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 i32117 ret i32 %conv1118}119 120; Function Attrs: nofree norecurse nounwind uwtable willreturn121define dso_local signext i32 @ld_not_disjoint16_int32_t_uint8_t(i64 %ptr) {122; CHECK-LABEL: ld_not_disjoint16_int32_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 i32132 ret i32 %conv133}134 135; Function Attrs: nofree norecurse nounwind uwtable willreturn136define dso_local signext i32 @ld_disjoint_align16_int32_t_uint8_t(i64 %ptr) {137; CHECK-LABEL: ld_disjoint_align16_int32_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 i32148 ret i32 %conv149}150 151; Function Attrs: nofree norecurse nounwind uwtable willreturn152define dso_local signext i32 @ld_not_disjoint32_int32_t_uint8_t(i64 %ptr) {153; CHECK-LABEL: ld_not_disjoint32_int32_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 i32164 ret i32 %conv165}166 167; Function Attrs: nofree norecurse nounwind uwtable willreturn168define dso_local signext i32 @ld_disjoint_align32_int32_t_uint8_t(i64 %ptr) {169; CHECK-P10-LABEL: ld_disjoint_align32_int32_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_int32_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 i32191 ret i32 %conv192}193 194; Function Attrs: nofree norecurse nounwind uwtable willreturn195define dso_local signext i32 @ld_not_disjoint64_int32_t_uint8_t(i64 %ptr) {196; CHECK-P10-LABEL: ld_not_disjoint64_int32_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_int32_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 i32219 ret i32 %conv220}221 222; Function Attrs: nofree norecurse nounwind uwtable willreturn223define dso_local signext i32 @ld_disjoint_align64_int32_t_uint8_t(i64 %ptr) {224; CHECK-P10-LABEL: ld_disjoint_align64_int32_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_int32_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 i32246 ret i32 %conv247}248 249; Function Attrs: nofree norecurse nounwind uwtable willreturn250define dso_local signext i32 @ld_cst_align16_int32_t_uint8_t() {251; CHECK-LABEL: ld_cst_align16_int32_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 i32258 ret i32 %conv259}260 261; Function Attrs: nofree norecurse nounwind uwtable willreturn262define dso_local signext i32 @ld_cst_align32_int32_t_uint8_t() {263; CHECK-LABEL: ld_cst_align32_int32_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 i32271 ret i32 %conv272}273 274; Function Attrs: nofree norecurse nounwind uwtable willreturn275define dso_local signext i32 @ld_cst_align64_int32_t_uint8_t() {276; CHECK-P10-LABEL: ld_cst_align64_int32_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_int32_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 i32293 ret i32 %conv294}295 296; Function Attrs: nofree norecurse nounwind uwtable willreturn297define dso_local signext i32 @ld_0_int32_t_int8_t(i64 %ptr) {298; CHECK-LABEL: ld_0_int32_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 i32307 ret i32 %conv308}309 310; Function Attrs: nofree norecurse nounwind uwtable willreturn311define dso_local signext i32 @ld_align16_int32_t_int8_t(ptr nocapture readonly %ptr) {312; CHECK-LABEL: ld_align16_int32_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 i32321 ret i32 %conv322}323 324; Function Attrs: nofree norecurse nounwind uwtable willreturn325define dso_local signext i32 @ld_align32_int32_t_int8_t(ptr nocapture readonly %ptr) {326; CHECK-P10-LABEL: ld_align32_int32_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_int32_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 i32343 ret i32 %conv344}345 346; Function Attrs: nofree norecurse nounwind uwtable willreturn347define dso_local signext i32 @ld_align64_int32_t_int8_t(ptr nocapture readonly %ptr) {348; CHECK-P10-LABEL: ld_align64_int32_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_int32_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 i32368 ret i32 %conv369}370 371; Function Attrs: nofree norecurse nounwind uwtable willreturn372define dso_local signext i32 @ld_reg_int32_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {373; CHECK-LABEL: ld_reg_int32_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 i32382 ret i32 %conv383}384 385; Function Attrs: nofree norecurse nounwind uwtable willreturn386define dso_local signext i32 @ld_or_int32_t_int8_t(i64 %ptr, i8 zeroext %off) {387; CHECK-LABEL: ld_or_int32_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 i32399 ret i32 %conv1400}401 402; Function Attrs: nofree norecurse nounwind uwtable willreturn403define dso_local signext i32 @ld_not_disjoint16_int32_t_int8_t(i64 %ptr) {404; CHECK-LABEL: ld_not_disjoint16_int32_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 i32415 ret i32 %conv416}417 418; Function Attrs: nofree norecurse nounwind uwtable willreturn419define dso_local signext i32 @ld_disjoint_align16_int32_t_int8_t(i64 %ptr) {420; CHECK-LABEL: ld_disjoint_align16_int32_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 i32432 ret i32 %conv433}434 435; Function Attrs: nofree norecurse nounwind uwtable willreturn436define dso_local signext i32 @ld_not_disjoint32_int32_t_int8_t(i64 %ptr) {437; CHECK-LABEL: ld_not_disjoint32_int32_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 i32449 ret i32 %conv450}451 452; Function Attrs: nofree norecurse nounwind uwtable willreturn453define dso_local signext i32 @ld_disjoint_align32_int32_t_int8_t(i64 %ptr) {454; CHECK-P10-LABEL: ld_disjoint_align32_int32_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_int32_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 i32477 ret i32 %conv478}479 480; Function Attrs: nofree norecurse nounwind uwtable willreturn481define dso_local signext i32 @ld_not_disjoint64_int32_t_int8_t(i64 %ptr) {482; CHECK-P10-LABEL: ld_not_disjoint64_int32_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_int32_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 i32507 ret i32 %conv508}509 510; Function Attrs: nofree norecurse nounwind uwtable willreturn511define dso_local signext i32 @ld_disjoint_align64_int32_t_int8_t(i64 %ptr) {512; CHECK-P10-LABEL: ld_disjoint_align64_int32_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_int32_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 i32536 ret i32 %conv537}538 539; Function Attrs: nofree norecurse nounwind uwtable willreturn540define dso_local signext i32 @ld_cst_align16_int32_t_int8_t() {541; CHECK-LABEL: ld_cst_align16_int32_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 i32549 ret i32 %conv550}551 552; Function Attrs: nofree norecurse nounwind uwtable willreturn553define dso_local signext i32 @ld_cst_align32_int32_t_int8_t() {554; CHECK-LABEL: ld_cst_align32_int32_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 i32563 ret i32 %conv564}565 566; Function Attrs: nofree norecurse nounwind uwtable willreturn567define dso_local signext i32 @ld_cst_align64_int32_t_int8_t() {568; CHECK-P10-LABEL: ld_cst_align64_int32_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_int32_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 i32587 ret i32 %conv588}589 590; Function Attrs: nofree norecurse nounwind uwtable willreturn591define dso_local signext i32 @ld_0_int32_t_uint16_t(i64 %ptr) {592; CHECK-LABEL: ld_0_int32_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 i32600 ret i32 %conv601}602 603; Function Attrs: nofree norecurse nounwind uwtable willreturn604define dso_local signext i32 @ld_align16_int32_t_uint16_t(ptr nocapture readonly %ptr) {605; CHECK-LABEL: ld_align16_int32_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 i32613 ret i32 %conv614}615 616; Function Attrs: nofree norecurse nounwind uwtable willreturn617define dso_local signext i32 @ld_align32_int32_t_uint16_t(ptr nocapture readonly %ptr) {618; CHECK-P10-LABEL: ld_align32_int32_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_int32_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 i32634 ret i32 %conv635}636 637; Function Attrs: nofree norecurse nounwind uwtable willreturn638define dso_local signext i32 @ld_align64_int32_t_uint16_t(ptr nocapture readonly %ptr) {639; CHECK-P10-LABEL: ld_align64_int32_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_int32_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 i32657 ret i32 %conv658}659 660; Function Attrs: nofree norecurse nounwind uwtable willreturn661define dso_local signext i32 @ld_reg_int32_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {662; CHECK-LABEL: ld_reg_int32_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 i32670 ret i32 %conv671}672 673; Function Attrs: nofree norecurse nounwind uwtable willreturn674define dso_local signext i32 @ld_or_int32_t_uint16_t(i64 %ptr, i8 zeroext %off) {675; CHECK-LABEL: ld_or_int32_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 i32686 ret i32 %conv1687}688 689; Function Attrs: nofree norecurse nounwind uwtable willreturn690define dso_local signext i32 @ld_not_disjoint16_int32_t_uint16_t(i64 %ptr) {691; CHECK-LABEL: ld_not_disjoint16_int32_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 i32701 ret i32 %conv702}703 704; Function Attrs: nofree norecurse nounwind uwtable willreturn705define dso_local signext i32 @ld_disjoint_align16_int32_t_uint16_t(i64 %ptr) {706; CHECK-LABEL: ld_disjoint_align16_int32_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 i32717 ret i32 %conv718}719 720; Function Attrs: nofree norecurse nounwind uwtable willreturn721define dso_local signext i32 @ld_not_disjoint32_int32_t_uint16_t(i64 %ptr) {722; CHECK-LABEL: ld_not_disjoint32_int32_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 i32733 ret i32 %conv734}735 736; Function Attrs: nofree norecurse nounwind uwtable willreturn737define dso_local signext i32 @ld_disjoint_align32_int32_t_uint16_t(i64 %ptr) {738; CHECK-P10-LABEL: ld_disjoint_align32_int32_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_int32_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 i32760 ret i32 %conv761}762 763; Function Attrs: nofree norecurse nounwind uwtable willreturn764define dso_local signext i32 @ld_not_disjoint64_int32_t_uint16_t(i64 %ptr) {765; CHECK-P10-LABEL: ld_not_disjoint64_int32_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_int32_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 i32788 ret i32 %conv789}790 791; Function Attrs: nofree norecurse nounwind uwtable willreturn792define dso_local signext i32 @ld_disjoint_align64_int32_t_uint16_t(i64 %ptr) {793; CHECK-P10-LABEL: ld_disjoint_align64_int32_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_int32_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 i32815 ret i32 %conv816}817 818; Function Attrs: nofree norecurse nounwind uwtable willreturn819define dso_local signext i32 @ld_cst_align16_int32_t_uint16_t() {820; CHECK-LABEL: ld_cst_align16_int32_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 i32827 ret i32 %conv828}829 830; Function Attrs: nofree norecurse nounwind uwtable willreturn831define dso_local signext i32 @ld_cst_align32_int32_t_uint16_t() {832; CHECK-LABEL: ld_cst_align32_int32_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 i32840 ret i32 %conv841}842 843; Function Attrs: nofree norecurse nounwind uwtable willreturn844define dso_local signext i32 @ld_cst_align64_int32_t_uint16_t() {845; CHECK-P10-LABEL: ld_cst_align64_int32_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_int32_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 i32862 ret i32 %conv863}864 865; Function Attrs: nofree norecurse nounwind uwtable willreturn866define dso_local signext i32 @ld_0_int32_t_int16_t(i64 %ptr) {867; CHECK-LABEL: ld_0_int32_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 i32876 ret i32 %conv877}878 879; Function Attrs: nofree norecurse nounwind uwtable willreturn880define dso_local signext i32 @ld_align16_int32_t_int16_t(ptr nocapture readonly %ptr) {881; CHECK-LABEL: ld_align16_int32_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 i32890 ret i32 %conv891}892 893; Function Attrs: nofree norecurse nounwind uwtable willreturn894define dso_local signext i32 @ld_align32_int32_t_int16_t(ptr nocapture readonly %ptr) {895; CHECK-P10-LABEL: ld_align32_int32_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_int32_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 i32912 ret i32 %conv913}914 915; Function Attrs: nofree norecurse nounwind uwtable willreturn916define dso_local signext i32 @ld_align64_int32_t_int16_t(ptr nocapture readonly %ptr) {917; CHECK-P10-LABEL: ld_align64_int32_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_int32_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 i32937 ret i32 %conv938}939 940; Function Attrs: nofree norecurse nounwind uwtable willreturn941define dso_local signext i32 @ld_reg_int32_t_int16_t(ptr nocapture readonly %ptr, i64 %off) {942; CHECK-LABEL: ld_reg_int32_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 i32951 ret i32 %conv952}953 954; Function Attrs: nofree norecurse nounwind uwtable willreturn955define dso_local signext i32 @ld_or_int32_t_int16_t(i64 %ptr, i8 zeroext %off) {956; CHECK-LABEL: ld_or_int32_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 i32968 ret i32 %conv1969}970 971; Function Attrs: nofree norecurse nounwind uwtable willreturn972define dso_local signext i32 @ld_not_disjoint16_int32_t_int16_t(i64 %ptr) {973; CHECK-LABEL: ld_not_disjoint16_int32_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 i32984 ret i32 %conv985}986 987; Function Attrs: nofree norecurse nounwind uwtable willreturn988define dso_local signext i32 @ld_disjoint_align16_int32_t_int16_t(i64 %ptr) {989; CHECK-LABEL: ld_disjoint_align16_int32_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 i321001 ret i32 %conv1002}1003 1004; Function Attrs: nofree norecurse nounwind uwtable willreturn1005define dso_local signext i32 @ld_not_disjoint32_int32_t_int16_t(i64 %ptr) {1006; CHECK-LABEL: ld_not_disjoint32_int32_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 i321018 ret i32 %conv1019}1020 1021; Function Attrs: nofree norecurse nounwind uwtable willreturn1022define dso_local signext i32 @ld_disjoint_align32_int32_t_int16_t(i64 %ptr) {1023; CHECK-P10-LABEL: ld_disjoint_align32_int32_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_int32_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 i321046 ret i32 %conv1047}1048 1049; Function Attrs: nofree norecurse nounwind uwtable willreturn1050define dso_local signext i32 @ld_not_disjoint64_int32_t_int16_t(i64 %ptr) {1051; CHECK-P10-LABEL: ld_not_disjoint64_int32_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_int32_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 i321076 ret i32 %conv1077}1078 1079; Function Attrs: nofree norecurse nounwind uwtable willreturn1080define dso_local signext i32 @ld_disjoint_align64_int32_t_int16_t(i64 %ptr) {1081; CHECK-P10-LABEL: ld_disjoint_align64_int32_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_int32_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 i321105 ret i32 %conv1106}1107 1108; Function Attrs: nofree norecurse nounwind uwtable willreturn1109define dso_local signext i32 @ld_cst_align16_int32_t_int16_t() {1110; CHECK-LABEL: ld_cst_align16_int32_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 i321118 ret i32 %conv1119}1120 1121; Function Attrs: nofree norecurse nounwind uwtable willreturn1122define dso_local signext i32 @ld_cst_align32_int32_t_int16_t() {1123; CHECK-LABEL: ld_cst_align32_int32_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 i321132 ret i32 %conv1133}1134 1135; Function Attrs: nofree norecurse nounwind uwtable willreturn1136define dso_local signext i32 @ld_cst_align64_int32_t_int16_t() {1137; CHECK-P10-LABEL: ld_cst_align64_int32_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_int32_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 i321156 ret i32 %conv1157}1158 1159; Function Attrs: nofree norecurse nounwind uwtable willreturn1160define dso_local signext i32 @ld_0_int32_t_uint32_t(i64 %ptr) {1161; CHECK-LABEL: ld_0_int32_t_uint32_t:1162; CHECK: # %bb.0: # %entry1163; CHECK-NEXT: lwa r3, 0(r3)1164; CHECK-NEXT: blr1165entry:1166 %0 = inttoptr i64 %ptr to ptr1167 %1 = load atomic i32, ptr %0 monotonic, align 41168 ret i32 %11169}1170 1171; Function Attrs: nofree norecurse nounwind uwtable willreturn1172define dso_local signext i32 @ld_align16_int32_t_uint32_t(ptr nocapture readonly %ptr) {1173; CHECK-LABEL: ld_align16_int32_t_uint32_t:1174; CHECK: # %bb.0: # %entry1175; CHECK-NEXT: lwa r3, 8(r3)1176; CHECK-NEXT: blr1177entry:1178 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81179 %0 = load atomic i32, ptr %add.ptr monotonic, align 41180 ret i32 %01181}1182 1183; Function Attrs: nofree norecurse nounwind uwtable willreturn1184define dso_local signext i32 @ld_align32_int32_t_uint32_t(ptr nocapture readonly %ptr) {1185; CHECK-P10-LABEL: ld_align32_int32_t_uint32_t:1186; CHECK-P10: # %bb.0: # %entry1187; CHECK-P10-NEXT: plwz r3, 99999000(r3), 01188; CHECK-P10-NEXT: extsw r3, r31189; CHECK-P10-NEXT: blr1190;1191; CHECK-PREP10-LABEL: ld_align32_int32_t_uint32_t:1192; CHECK-PREP10: # %bb.0: # %entry1193; CHECK-PREP10-NEXT: lis r4, 15251194; CHECK-PREP10-NEXT: ori r4, r4, 566001195; CHECK-PREP10-NEXT: lwax r3, r3, r41196; CHECK-PREP10-NEXT: blr1197entry:1198 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001199 %0 = load atomic i32, ptr %add.ptr monotonic, align 41200 ret i32 %01201}1202 1203; Function Attrs: nofree norecurse nounwind uwtable willreturn1204define dso_local signext i32 @ld_align64_int32_t_uint32_t(ptr nocapture readonly %ptr) {1205; CHECK-P10-LABEL: ld_align64_int32_t_uint32_t:1206; CHECK-P10: # %bb.0: # %entry1207; CHECK-P10-NEXT: pli r4, 2441406251208; CHECK-P10-NEXT: rldic r4, r4, 12, 241209; CHECK-P10-NEXT: lwax r3, r3, r41210; CHECK-P10-NEXT: blr1211;1212; CHECK-PREP10-LABEL: ld_align64_int32_t_uint32_t:1213; CHECK-PREP10: # %bb.0: # %entry1214; CHECK-PREP10-NEXT: lis r4, 37251215; CHECK-PREP10-NEXT: ori r4, r4, 190251216; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241217; CHECK-PREP10-NEXT: lwax r3, r3, r41218; CHECK-PREP10-NEXT: blr1219entry:1220 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001221 %0 = load atomic i32, ptr %add.ptr monotonic, align 41222 ret i32 %01223}1224 1225; Function Attrs: nofree norecurse nounwind uwtable willreturn1226define dso_local signext i32 @ld_reg_int32_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {1227; CHECK-LABEL: ld_reg_int32_t_uint32_t:1228; CHECK: # %bb.0: # %entry1229; CHECK-NEXT: lwax r3, r3, r41230; CHECK-NEXT: blr1231entry:1232 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1233 %0 = load atomic i32, ptr %add.ptr monotonic, align 41234 ret i32 %01235}1236 1237; Function Attrs: nofree norecurse nounwind uwtable willreturn1238define dso_local signext i32 @ld_or_int32_t_uint32_t(i64 %ptr, i8 zeroext %off) {1239; CHECK-LABEL: ld_or_int32_t_uint32_t:1240; CHECK: # %bb.0: # %entry1241; CHECK-NEXT: or r3, r4, r31242; CHECK-NEXT: lwa r3, 0(r3)1243; CHECK-NEXT: blr1244entry:1245 %conv = zext i8 %off to i641246 %or = or i64 %conv, %ptr1247 %0 = inttoptr i64 %or to ptr1248 %1 = load atomic i32, ptr %0 monotonic, align 41249 ret i32 %11250}1251 1252; Function Attrs: nofree norecurse nounwind uwtable willreturn1253define dso_local signext i32 @ld_not_disjoint16_int32_t_uint32_t(i64 %ptr) {1254; CHECK-LABEL: ld_not_disjoint16_int32_t_uint32_t:1255; CHECK: # %bb.0: # %entry1256; CHECK-NEXT: ori r3, r3, 61257; CHECK-NEXT: lwa r3, 0(r3)1258; CHECK-NEXT: blr1259entry:1260 %or = or i64 %ptr, 61261 %0 = inttoptr i64 %or to ptr1262 %1 = load atomic i32, ptr %0 monotonic, align 41263 ret i32 %11264}1265 1266; Function Attrs: nofree norecurse nounwind uwtable willreturn1267define dso_local signext i32 @ld_disjoint_align16_int32_t_uint32_t(i64 %ptr) {1268; CHECK-LABEL: ld_disjoint_align16_int32_t_uint32_t:1269; CHECK: # %bb.0: # %entry1270; CHECK-NEXT: rldicr r3, r3, 0, 511271; CHECK-NEXT: lwa r3, 24(r3)1272; CHECK-NEXT: blr1273entry:1274 %and = and i64 %ptr, -40961275 %or = or i64 %and, 241276 %0 = inttoptr i64 %or to ptr1277 %1 = load atomic i32, ptr %0 monotonic, align 81278 ret i32 %11279}1280 1281; Function Attrs: nofree norecurse nounwind uwtable willreturn1282define dso_local signext i32 @ld_not_disjoint32_int32_t_uint32_t(i64 %ptr) {1283; CHECK-LABEL: ld_not_disjoint32_int32_t_uint32_t:1284; CHECK: # %bb.0: # %entry1285; CHECK-NEXT: ori r3, r3, 344631286; CHECK-NEXT: oris r3, r3, 11287; CHECK-NEXT: lwa r3, 0(r3)1288; CHECK-NEXT: blr1289entry:1290 %or = or i64 %ptr, 999991291 %0 = inttoptr i64 %or to ptr1292 %1 = load atomic i32, ptr %0 monotonic, align 41293 ret i32 %11294}1295 1296; Function Attrs: nofree norecurse nounwind uwtable willreturn1297define dso_local signext i32 @ld_disjoint_align32_int32_t_uint32_t(i64 %ptr) {1298; CHECK-P10-LABEL: ld_disjoint_align32_int32_t_uint32_t:1299; CHECK-P10: # %bb.0: # %entry1300; CHECK-P10-NEXT: lis r4, -152641301; CHECK-P10-NEXT: and r3, r3, r41302; CHECK-P10-NEXT: plwz r3, 999990000(r3), 01303; CHECK-P10-NEXT: extsw r3, r31304; CHECK-P10-NEXT: blr1305;1306; CHECK-PREP10-LABEL: ld_disjoint_align32_int32_t_uint32_t:1307; CHECK-PREP10: # %bb.0: # %entry1308; CHECK-PREP10-NEXT: lis r4, -152641309; CHECK-PREP10-NEXT: and r3, r3, r41310; CHECK-PREP10-NEXT: lis r4, 152581311; CHECK-PREP10-NEXT: ori r4, r4, 417121312; CHECK-PREP10-NEXT: lwax r3, r3, r41313; CHECK-PREP10-NEXT: blr1314entry:1315 %and = and i64 %ptr, -10003415041316 %or = or i64 %and, 9999900001317 %0 = inttoptr i64 %or to ptr1318 %1 = load atomic i32, ptr %0 monotonic, align 161319 ret i32 %11320}1321 1322; Function Attrs: nofree norecurse nounwind uwtable willreturn1323define dso_local signext i32 @ld_not_disjoint64_int32_t_uint32_t(i64 %ptr) {1324; CHECK-P10-LABEL: ld_not_disjoint64_int32_t_uint32_t:1325; CHECK-P10: # %bb.0: # %entry1326; CHECK-P10-NEXT: pli r4, 2321327; CHECK-P10-NEXT: pli r5, 35675873291328; CHECK-P10-NEXT: rldimi r5, r4, 32, 01329; CHECK-P10-NEXT: or r3, r3, r51330; CHECK-P10-NEXT: lwa r3, 0(r3)1331; CHECK-P10-NEXT: blr1332;1333; CHECK-PREP10-LABEL: ld_not_disjoint64_int32_t_uint32_t:1334; CHECK-PREP10: # %bb.0: # %entry1335; CHECK-PREP10-NEXT: li r4, 291336; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241337; CHECK-PREP10-NEXT: oris r4, r4, 544371338; CHECK-PREP10-NEXT: ori r4, r4, 40971339; CHECK-PREP10-NEXT: or r3, r3, r41340; CHECK-PREP10-NEXT: lwa r3, 0(r3)1341; CHECK-PREP10-NEXT: blr1342entry:1343 %or = or i64 %ptr, 10000000000011344 %0 = inttoptr i64 %or to ptr1345 %1 = load atomic i32, ptr %0 monotonic, align 41346 ret i32 %11347}1348 1349; Function Attrs: nofree norecurse nounwind uwtable willreturn1350define dso_local signext i32 @ld_disjoint_align64_int32_t_uint32_t(i64 %ptr) {1351; CHECK-P10-LABEL: ld_disjoint_align64_int32_t_uint32_t:1352; CHECK-P10: # %bb.0: # %entry1353; CHECK-P10-NEXT: pli r4, 2441406251354; CHECK-P10-NEXT: rldicr r3, r3, 0, 231355; CHECK-P10-NEXT: rldic r4, r4, 12, 241356; CHECK-P10-NEXT: lwax r3, r3, r41357; CHECK-P10-NEXT: blr1358;1359; CHECK-PREP10-LABEL: ld_disjoint_align64_int32_t_uint32_t:1360; CHECK-PREP10: # %bb.0: # %entry1361; CHECK-PREP10-NEXT: lis r4, 37251362; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231363; CHECK-PREP10-NEXT: ori r4, r4, 190251364; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241365; CHECK-PREP10-NEXT: lwax r3, r3, r41366; CHECK-PREP10-NEXT: blr1367entry:1368 %and = and i64 %ptr, -10995116277761369 %or = or i64 %and, 10000000000001370 %0 = inttoptr i64 %or to ptr1371 %1 = load atomic i32, ptr %0 monotonic, align 40961372 ret i32 %11373}1374 1375; Function Attrs: nofree norecurse nounwind uwtable willreturn1376define dso_local signext i32 @ld_cst_align16_int32_t_uint32_t() {1377; CHECK-LABEL: ld_cst_align16_int32_t_uint32_t:1378; CHECK: # %bb.0: # %entry1379; CHECK-NEXT: lwa r3, 4080(0)1380; CHECK-NEXT: blr1381entry:1382 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 161383 ret i32 %01384}1385 1386; Function Attrs: nofree norecurse nounwind uwtable willreturn1387define dso_local signext i32 @ld_cst_align32_int32_t_uint32_t() {1388; CHECK-LABEL: ld_cst_align32_int32_t_uint32_t:1389; CHECK: # %bb.0: # %entry1390; CHECK-NEXT: lis r3, 1531391; CHECK-NEXT: lwa r3, -27108(r3)1392; CHECK-NEXT: blr1393entry:1394 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 41395 ret i32 %01396}1397 1398; Function Attrs: nofree norecurse nounwind uwtable willreturn1399define dso_local signext i32 @ld_cst_align64_int32_t_uint32_t() {1400; CHECK-P10-LABEL: ld_cst_align64_int32_t_uint32_t:1401; CHECK-P10: # %bb.0: # %entry1402; CHECK-P10-NEXT: pli r3, 2441406251403; CHECK-P10-NEXT: rldic r3, r3, 12, 241404; CHECK-P10-NEXT: lwa r3, 0(r3)1405; CHECK-P10-NEXT: blr1406;1407; CHECK-PREP10-LABEL: ld_cst_align64_int32_t_uint32_t:1408; CHECK-PREP10: # %bb.0: # %entry1409; CHECK-PREP10-NEXT: lis r3, 37251410; CHECK-PREP10-NEXT: ori r3, r3, 190251411; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241412; CHECK-PREP10-NEXT: lwa r3, 0(r3)1413; CHECK-PREP10-NEXT: blr1414entry:1415 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961416 ret i32 %01417}1418 1419; Function Attrs: nofree norecurse nounwind uwtable willreturn1420define dso_local signext i32 @ld_0_int32_t_uint64_t(i64 %ptr) {1421; CHECK-LABEL: ld_0_int32_t_uint64_t:1422; CHECK: # %bb.0: # %entry1423; CHECK-NEXT: ld r3, 0(r3)1424; CHECK-NEXT: extsw r3, r31425; CHECK-NEXT: blr1426entry:1427 %0 = inttoptr i64 %ptr to ptr1428 %1 = load atomic i64, ptr %0 monotonic, align 81429 %conv = trunc i64 %1 to i321430 ret i32 %conv1431}1432 1433; Function Attrs: nofree norecurse nounwind uwtable willreturn1434define dso_local signext i32 @ld_align16_int32_t_uint64_t(ptr nocapture readonly %ptr) {1435; CHECK-LABEL: ld_align16_int32_t_uint64_t:1436; CHECK: # %bb.0: # %entry1437; CHECK-NEXT: ld r3, 8(r3)1438; CHECK-NEXT: extsw r3, r31439; CHECK-NEXT: blr1440entry:1441 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81442 %0 = load atomic i64, ptr %add.ptr monotonic, align 81443 %conv = trunc i64 %0 to i321444 ret i32 %conv1445}1446 1447; Function Attrs: nofree norecurse nounwind uwtable willreturn1448define dso_local signext i32 @ld_align32_int32_t_uint64_t(ptr nocapture readonly %ptr) {1449; CHECK-P10-LABEL: ld_align32_int32_t_uint64_t:1450; CHECK-P10: # %bb.0: # %entry1451; CHECK-P10-NEXT: pld r3, 99999000(r3), 01452; CHECK-P10-NEXT: extsw r3, r31453; CHECK-P10-NEXT: blr1454;1455; CHECK-PREP10-LABEL: ld_align32_int32_t_uint64_t:1456; CHECK-PREP10: # %bb.0: # %entry1457; CHECK-PREP10-NEXT: lis r4, 15251458; CHECK-PREP10-NEXT: ori r4, r4, 566001459; CHECK-PREP10-NEXT: ldx r3, r3, r41460; CHECK-PREP10-NEXT: extsw r3, r31461; CHECK-PREP10-NEXT: blr1462entry:1463 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001464 %0 = load atomic i64, ptr %add.ptr monotonic, align 81465 %conv = trunc i64 %0 to i321466 ret i32 %conv1467}1468 1469; Function Attrs: nofree norecurse nounwind uwtable willreturn1470define dso_local signext i32 @ld_align64_int32_t_uint64_t(ptr nocapture readonly %ptr) {1471; CHECK-P10-LABEL: ld_align64_int32_t_uint64_t:1472; CHECK-P10: # %bb.0: # %entry1473; CHECK-P10-NEXT: pli r4, 2441406251474; CHECK-P10-NEXT: rldic r4, r4, 12, 241475; CHECK-P10-NEXT: ldx r3, r3, r41476; CHECK-P10-NEXT: extsw r3, r31477; CHECK-P10-NEXT: blr1478;1479; CHECK-PREP10-LABEL: ld_align64_int32_t_uint64_t:1480; CHECK-PREP10: # %bb.0: # %entry1481; CHECK-PREP10-NEXT: lis r4, 37251482; CHECK-PREP10-NEXT: ori r4, r4, 190251483; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241484; CHECK-PREP10-NEXT: ldx r3, r3, r41485; CHECK-PREP10-NEXT: extsw r3, r31486; CHECK-PREP10-NEXT: blr1487entry:1488 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001489 %0 = load atomic i64, ptr %add.ptr monotonic, align 81490 %conv = trunc i64 %0 to i321491 ret i32 %conv1492}1493 1494; Function Attrs: nofree norecurse nounwind uwtable willreturn1495define dso_local signext i32 @ld_reg_int32_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {1496; CHECK-LABEL: ld_reg_int32_t_uint64_t:1497; CHECK: # %bb.0: # %entry1498; CHECK-NEXT: ldx r3, r3, r41499; CHECK-NEXT: extsw r3, r31500; CHECK-NEXT: blr1501entry:1502 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1503 %0 = load atomic i64, ptr %add.ptr monotonic, align 81504 %conv = trunc i64 %0 to i321505 ret i32 %conv1506}1507 1508; Function Attrs: nofree norecurse nounwind uwtable willreturn1509define dso_local signext i32 @ld_or_int32_t_uint64_t(i64 %ptr, i8 zeroext %off) {1510; CHECK-LABEL: ld_or_int32_t_uint64_t:1511; CHECK: # %bb.0: # %entry1512; CHECK-NEXT: or r3, r4, r31513; CHECK-NEXT: ld r3, 0(r3)1514; CHECK-NEXT: extsw r3, r31515; CHECK-NEXT: blr1516entry:1517 %conv = zext i8 %off to i641518 %or = or i64 %conv, %ptr1519 %0 = inttoptr i64 %or to ptr1520 %1 = load atomic i64, ptr %0 monotonic, align 81521 %conv1 = trunc i64 %1 to i321522 ret i32 %conv11523}1524 1525; Function Attrs: nofree norecurse nounwind uwtable willreturn1526define dso_local signext i32 @ld_not_disjoint16_int32_t_uint64_t(i64 %ptr) {1527; CHECK-LABEL: ld_not_disjoint16_int32_t_uint64_t:1528; CHECK: # %bb.0: # %entry1529; CHECK-NEXT: ori r3, r3, 61530; CHECK-NEXT: ld r3, 0(r3)1531; CHECK-NEXT: extsw r3, r31532; CHECK-NEXT: blr1533entry:1534 %or = or i64 %ptr, 61535 %0 = inttoptr i64 %or to ptr1536 %1 = load atomic i64, ptr %0 monotonic, align 81537 %conv = trunc i64 %1 to i321538 ret i32 %conv1539}1540 1541; Function Attrs: nofree norecurse nounwind uwtable willreturn1542define dso_local signext i32 @ld_disjoint_align16_int32_t_uint64_t(i64 %ptr) {1543; CHECK-LABEL: ld_disjoint_align16_int32_t_uint64_t:1544; CHECK: # %bb.0: # %entry1545; CHECK-NEXT: rldicr r3, r3, 0, 511546; CHECK-NEXT: ld r3, 24(r3)1547; CHECK-NEXT: extsw r3, r31548; CHECK-NEXT: blr1549entry:1550 %and = and i64 %ptr, -40961551 %or = or i64 %and, 241552 %0 = inttoptr i64 %or to ptr1553 %1 = load atomic i64, ptr %0 monotonic, align 81554 %conv = trunc i64 %1 to i321555 ret i32 %conv1556}1557 1558; Function Attrs: nofree norecurse nounwind uwtable willreturn1559define dso_local signext i32 @ld_not_disjoint32_int32_t_uint64_t(i64 %ptr) {1560; CHECK-LABEL: ld_not_disjoint32_int32_t_uint64_t:1561; CHECK: # %bb.0: # %entry1562; CHECK-NEXT: ori r3, r3, 344631563; CHECK-NEXT: oris r3, r3, 11564; CHECK-NEXT: ld r3, 0(r3)1565; CHECK-NEXT: extsw r3, r31566; CHECK-NEXT: blr1567entry:1568 %or = or i64 %ptr, 999991569 %0 = inttoptr i64 %or to ptr1570 %1 = load atomic i64, ptr %0 monotonic, align 81571 %conv = trunc i64 %1 to i321572 ret i32 %conv1573}1574 1575; Function Attrs: nofree norecurse nounwind uwtable willreturn1576define dso_local signext i32 @ld_disjoint_align32_int32_t_uint64_t(i64 %ptr) {1577; CHECK-P10-LABEL: ld_disjoint_align32_int32_t_uint64_t:1578; CHECK-P10: # %bb.0: # %entry1579; CHECK-P10-NEXT: lis r4, -152641580; CHECK-P10-NEXT: and r3, r3, r41581; CHECK-P10-NEXT: pld r3, 999990000(r3), 01582; CHECK-P10-NEXT: extsw r3, r31583; CHECK-P10-NEXT: blr1584;1585; CHECK-PREP10-LABEL: ld_disjoint_align32_int32_t_uint64_t:1586; CHECK-PREP10: # %bb.0: # %entry1587; CHECK-PREP10-NEXT: lis r4, -152641588; CHECK-PREP10-NEXT: and r3, r3, r41589; CHECK-PREP10-NEXT: lis r4, 152581590; CHECK-PREP10-NEXT: ori r4, r4, 417121591; CHECK-PREP10-NEXT: ldx r3, r3, r41592; CHECK-PREP10-NEXT: extsw r3, r31593; CHECK-PREP10-NEXT: blr1594entry:1595 %and = and i64 %ptr, -10003415041596 %or = or i64 %and, 9999900001597 %0 = inttoptr i64 %or to ptr1598 %1 = load atomic i64, ptr %0 monotonic, align 161599 %conv = trunc i64 %1 to i321600 ret i32 %conv1601}1602 1603; Function Attrs: nofree norecurse nounwind uwtable willreturn1604define dso_local signext i32 @ld_not_disjoint64_int32_t_uint64_t(i64 %ptr) {1605; CHECK-P10-LABEL: ld_not_disjoint64_int32_t_uint64_t:1606; CHECK-P10: # %bb.0: # %entry1607; CHECK-P10-NEXT: pli r4, 2321608; CHECK-P10-NEXT: pli r5, 35675873291609; CHECK-P10-NEXT: rldimi r5, r4, 32, 01610; CHECK-P10-NEXT: or r3, r3, r51611; CHECK-P10-NEXT: ld r3, 0(r3)1612; CHECK-P10-NEXT: extsw r3, r31613; CHECK-P10-NEXT: blr1614;1615; CHECK-PREP10-LABEL: ld_not_disjoint64_int32_t_uint64_t:1616; CHECK-PREP10: # %bb.0: # %entry1617; CHECK-PREP10-NEXT: li r4, 291618; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241619; CHECK-PREP10-NEXT: oris r4, r4, 544371620; CHECK-PREP10-NEXT: ori r4, r4, 40971621; CHECK-PREP10-NEXT: or r3, r3, r41622; CHECK-PREP10-NEXT: ld r3, 0(r3)1623; CHECK-PREP10-NEXT: extsw r3, r31624; CHECK-PREP10-NEXT: blr1625entry:1626 %or = or i64 %ptr, 10000000000011627 %0 = inttoptr i64 %or to ptr1628 %1 = load atomic i64, ptr %0 monotonic, align 81629 %conv = trunc i64 %1 to i321630 ret i32 %conv1631}1632 1633; Function Attrs: nofree norecurse nounwind uwtable willreturn1634define dso_local signext i32 @ld_disjoint_align64_int32_t_uint64_t(i64 %ptr) {1635; CHECK-P10-LABEL: ld_disjoint_align64_int32_t_uint64_t:1636; CHECK-P10: # %bb.0: # %entry1637; CHECK-P10-NEXT: pli r4, 2441406251638; CHECK-P10-NEXT: rldicr r3, r3, 0, 231639; CHECK-P10-NEXT: rldic r4, r4, 12, 241640; CHECK-P10-NEXT: ldx r3, r3, r41641; CHECK-P10-NEXT: extsw r3, r31642; CHECK-P10-NEXT: blr1643;1644; CHECK-PREP10-LABEL: ld_disjoint_align64_int32_t_uint64_t:1645; CHECK-PREP10: # %bb.0: # %entry1646; CHECK-PREP10-NEXT: lis r4, 37251647; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231648; CHECK-PREP10-NEXT: ori r4, r4, 190251649; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241650; CHECK-PREP10-NEXT: ldx r3, r3, r41651; CHECK-PREP10-NEXT: extsw r3, r31652; CHECK-PREP10-NEXT: blr1653entry:1654 %and = and i64 %ptr, -10995116277761655 %or = or i64 %and, 10000000000001656 %0 = inttoptr i64 %or to ptr1657 %1 = load atomic i64, ptr %0 monotonic, align 40961658 %conv = trunc i64 %1 to i321659 ret i32 %conv1660}1661 1662; Function Attrs: nofree norecurse nounwind uwtable willreturn1663define dso_local signext i32 @ld_cst_align16_int32_t_uint64_t() {1664; CHECK-LABEL: ld_cst_align16_int32_t_uint64_t:1665; CHECK: # %bb.0: # %entry1666; CHECK-NEXT: ld r3, 4080(0)1667; CHECK-NEXT: extsw r3, r31668; CHECK-NEXT: blr1669entry:1670 %0 = load atomic i64, ptr inttoptr (i64 4080 to ptr) monotonic, align 161671 %conv = trunc i64 %0 to i321672 ret i32 %conv1673}1674 1675; Function Attrs: nofree norecurse nounwind uwtable willreturn1676define dso_local signext i32 @ld_cst_align32_int32_t_uint64_t() {1677; CHECK-LABEL: ld_cst_align32_int32_t_uint64_t:1678; CHECK: # %bb.0: # %entry1679; CHECK-NEXT: lis r3, 1531680; CHECK-NEXT: ld r3, -27108(r3)1681; CHECK-NEXT: extsw r3, r31682; CHECK-NEXT: blr1683entry:1684 %0 = load atomic i64, ptr inttoptr (i64 9999900 to ptr) monotonic, align 81685 %conv = trunc i64 %0 to i321686 ret i32 %conv1687}1688 1689; Function Attrs: nofree norecurse nounwind uwtable willreturn1690define dso_local signext i32 @ld_cst_align64_int32_t_uint64_t() {1691; CHECK-P10-LABEL: ld_cst_align64_int32_t_uint64_t:1692; CHECK-P10: # %bb.0: # %entry1693; CHECK-P10-NEXT: pli r3, 2441406251694; CHECK-P10-NEXT: rldic r3, r3, 12, 241695; CHECK-P10-NEXT: ld r3, 0(r3)1696; CHECK-P10-NEXT: extsw r3, r31697; CHECK-P10-NEXT: blr1698;1699; CHECK-PREP10-LABEL: ld_cst_align64_int32_t_uint64_t:1700; CHECK-PREP10: # %bb.0: # %entry1701; CHECK-PREP10-NEXT: lis r3, 37251702; CHECK-PREP10-NEXT: ori r3, r3, 190251703; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241704; CHECK-PREP10-NEXT: ld r3, 0(r3)1705; CHECK-PREP10-NEXT: extsw r3, r31706; CHECK-PREP10-NEXT: blr1707entry:1708 %0 = load atomic i64, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961709 %conv = trunc i64 %0 to i321710 ret i32 %conv1711}1712 1713; Function Attrs: nofree norecurse nounwind uwtable willreturn1714define dso_local zeroext i32 @ld_0_uint32_t_uint8_t(i64 %ptr) {1715; CHECK-LABEL: ld_0_uint32_t_uint8_t:1716; CHECK: # %bb.0: # %entry1717; CHECK-NEXT: lbz r3, 0(r3)1718; CHECK-NEXT: blr1719entry:1720 %0 = inttoptr i64 %ptr to ptr1721 %1 = load atomic i8, ptr %0 monotonic, align 11722 %conv = zext i8 %1 to i321723 ret i32 %conv1724}1725 1726; Function Attrs: nofree norecurse nounwind uwtable willreturn1727define dso_local zeroext i32 @ld_align16_uint32_t_uint8_t(ptr nocapture readonly %ptr) {1728; CHECK-LABEL: ld_align16_uint32_t_uint8_t:1729; CHECK: # %bb.0: # %entry1730; CHECK-NEXT: lbz r3, 8(r3)1731; CHECK-NEXT: blr1732entry:1733 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81734 %0 = load atomic i8, ptr %add.ptr monotonic, align 11735 %conv = zext i8 %0 to i321736 ret i32 %conv1737}1738 1739; Function Attrs: nofree norecurse nounwind uwtable willreturn1740define dso_local zeroext i32 @ld_align32_uint32_t_uint8_t(ptr nocapture readonly %ptr) {1741; CHECK-P10-LABEL: ld_align32_uint32_t_uint8_t:1742; CHECK-P10: # %bb.0: # %entry1743; CHECK-P10-NEXT: plbz r3, 99999000(r3), 01744; CHECK-P10-NEXT: clrldi r3, r3, 321745; CHECK-P10-NEXT: blr1746;1747; CHECK-PREP10-LABEL: ld_align32_uint32_t_uint8_t:1748; CHECK-PREP10: # %bb.0: # %entry1749; CHECK-PREP10-NEXT: lis r4, 15251750; CHECK-PREP10-NEXT: ori r4, r4, 566001751; CHECK-PREP10-NEXT: lbzx r3, r3, r41752; CHECK-PREP10-NEXT: blr1753entry:1754 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001755 %0 = load atomic i8, ptr %add.ptr monotonic, align 11756 %conv = zext i8 %0 to i321757 ret i32 %conv1758}1759 1760; Function Attrs: nofree norecurse nounwind uwtable willreturn1761define dso_local zeroext i32 @ld_align64_uint32_t_uint8_t(ptr nocapture readonly %ptr) {1762; CHECK-P10-LABEL: ld_align64_uint32_t_uint8_t:1763; CHECK-P10: # %bb.0: # %entry1764; CHECK-P10-NEXT: pli r4, 2441406251765; CHECK-P10-NEXT: rldic r4, r4, 12, 241766; CHECK-P10-NEXT: lbzx r3, r3, r41767; CHECK-P10-NEXT: blr1768;1769; CHECK-PREP10-LABEL: ld_align64_uint32_t_uint8_t:1770; CHECK-PREP10: # %bb.0: # %entry1771; CHECK-PREP10-NEXT: lis r4, 37251772; CHECK-PREP10-NEXT: ori r4, r4, 190251773; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241774; CHECK-PREP10-NEXT: lbzx r3, r3, r41775; CHECK-PREP10-NEXT: blr1776entry:1777 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001778 %0 = load atomic i8, ptr %add.ptr monotonic, align 11779 %conv = zext i8 %0 to i321780 ret i32 %conv1781}1782 1783; Function Attrs: nofree norecurse nounwind uwtable willreturn1784define dso_local zeroext i32 @ld_reg_uint32_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) {1785; CHECK-LABEL: ld_reg_uint32_t_uint8_t:1786; CHECK: # %bb.0: # %entry1787; CHECK-NEXT: lbzx r3, r3, r41788; CHECK-NEXT: blr1789entry:1790 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1791 %0 = load atomic i8, ptr %add.ptr monotonic, align 11792 %conv = zext i8 %0 to i321793 ret i32 %conv1794}1795 1796; Function Attrs: nofree norecurse nounwind uwtable willreturn1797define dso_local zeroext i32 @ld_or_uint32_t_uint8_t(i64 %ptr, i8 zeroext %off) {1798; CHECK-LABEL: ld_or_uint32_t_uint8_t:1799; CHECK: # %bb.0: # %entry1800; CHECK-NEXT: or r3, r4, r31801; CHECK-NEXT: lbz r3, 0(r3)1802; CHECK-NEXT: blr1803entry:1804 %conv = zext i8 %off to i641805 %or = or i64 %conv, %ptr1806 %0 = inttoptr i64 %or to ptr1807 %1 = load atomic i8, ptr %0 monotonic, align 11808 %conv1 = zext i8 %1 to i321809 ret i32 %conv11810}1811 1812; Function Attrs: nofree norecurse nounwind uwtable willreturn1813define dso_local zeroext i32 @ld_not_disjoint16_uint32_t_uint8_t(i64 %ptr) {1814; CHECK-LABEL: ld_not_disjoint16_uint32_t_uint8_t:1815; CHECK: # %bb.0: # %entry1816; CHECK-NEXT: ori r3, r3, 61817; CHECK-NEXT: lbz r3, 0(r3)1818; CHECK-NEXT: blr1819entry:1820 %or = or i64 %ptr, 61821 %0 = inttoptr i64 %or to ptr1822 %1 = load atomic i8, ptr %0 monotonic, align 11823 %conv = zext i8 %1 to i321824 ret i32 %conv1825}1826 1827; Function Attrs: nofree norecurse nounwind uwtable willreturn1828define dso_local zeroext i32 @ld_disjoint_align16_uint32_t_uint8_t(i64 %ptr) {1829; CHECK-LABEL: ld_disjoint_align16_uint32_t_uint8_t:1830; CHECK: # %bb.0: # %entry1831; CHECK-NEXT: rldicr r3, r3, 0, 511832; CHECK-NEXT: lbz r3, 24(r3)1833; CHECK-NEXT: blr1834entry:1835 %and = and i64 %ptr, -40961836 %or = or i64 %and, 241837 %0 = inttoptr i64 %or to ptr1838 %1 = load atomic i8, ptr %0 monotonic, align 81839 %conv = zext i8 %1 to i321840 ret i32 %conv1841}1842 1843; Function Attrs: nofree norecurse nounwind uwtable willreturn1844define dso_local zeroext i32 @ld_not_disjoint32_uint32_t_uint8_t(i64 %ptr) {1845; CHECK-LABEL: ld_not_disjoint32_uint32_t_uint8_t:1846; CHECK: # %bb.0: # %entry1847; CHECK-NEXT: ori r3, r3, 344631848; CHECK-NEXT: oris r3, r3, 11849; CHECK-NEXT: lbz r3, 0(r3)1850; CHECK-NEXT: blr1851entry:1852 %or = or i64 %ptr, 999991853 %0 = inttoptr i64 %or to ptr1854 %1 = load atomic i8, ptr %0 monotonic, align 11855 %conv = zext i8 %1 to i321856 ret i32 %conv1857}1858 1859; Function Attrs: nofree norecurse nounwind uwtable willreturn1860define dso_local zeroext i32 @ld_disjoint_align32_uint32_t_uint8_t(i64 %ptr) {1861; CHECK-P10-LABEL: ld_disjoint_align32_uint32_t_uint8_t:1862; CHECK-P10: # %bb.0: # %entry1863; CHECK-P10-NEXT: lis r4, -152641864; CHECK-P10-NEXT: and r3, r3, r41865; CHECK-P10-NEXT: plbz r3, 999990000(r3), 01866; CHECK-P10-NEXT: clrldi r3, r3, 321867; CHECK-P10-NEXT: blr1868;1869; CHECK-PREP10-LABEL: ld_disjoint_align32_uint32_t_uint8_t:1870; CHECK-PREP10: # %bb.0: # %entry1871; CHECK-PREP10-NEXT: lis r4, -152641872; CHECK-PREP10-NEXT: and r3, r3, r41873; CHECK-PREP10-NEXT: lis r4, 152581874; CHECK-PREP10-NEXT: ori r4, r4, 417121875; CHECK-PREP10-NEXT: lbzx r3, r3, r41876; CHECK-PREP10-NEXT: blr1877entry:1878 %and = and i64 %ptr, -10003415041879 %or = or i64 %and, 9999900001880 %0 = inttoptr i64 %or to ptr1881 %1 = load atomic i8, ptr %0 monotonic, align 161882 %conv = zext i8 %1 to i321883 ret i32 %conv1884}1885 1886; Function Attrs: nofree norecurse nounwind uwtable willreturn1887define dso_local zeroext i32 @ld_not_disjoint64_uint32_t_uint8_t(i64 %ptr) {1888; CHECK-P10-LABEL: ld_not_disjoint64_uint32_t_uint8_t:1889; CHECK-P10: # %bb.0: # %entry1890; CHECK-P10-NEXT: pli r4, 2321891; CHECK-P10-NEXT: pli r5, 35675873291892; CHECK-P10-NEXT: rldimi r5, r4, 32, 01893; CHECK-P10-NEXT: or r3, r3, r51894; CHECK-P10-NEXT: lbz r3, 0(r3)1895; CHECK-P10-NEXT: blr1896;1897; CHECK-PREP10-LABEL: ld_not_disjoint64_uint32_t_uint8_t:1898; CHECK-PREP10: # %bb.0: # %entry1899; CHECK-PREP10-NEXT: li r4, 291900; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241901; CHECK-PREP10-NEXT: oris r4, r4, 544371902; CHECK-PREP10-NEXT: ori r4, r4, 40971903; CHECK-PREP10-NEXT: or r3, r3, r41904; CHECK-PREP10-NEXT: lbz r3, 0(r3)1905; CHECK-PREP10-NEXT: blr1906entry:1907 %or = or i64 %ptr, 10000000000011908 %0 = inttoptr i64 %or to ptr1909 %1 = load atomic i8, ptr %0 monotonic, align 11910 %conv = zext i8 %1 to i321911 ret i32 %conv1912}1913 1914; Function Attrs: nofree norecurse nounwind uwtable willreturn1915define dso_local zeroext i32 @ld_disjoint_align64_uint32_t_uint8_t(i64 %ptr) {1916; CHECK-P10-LABEL: ld_disjoint_align64_uint32_t_uint8_t:1917; CHECK-P10: # %bb.0: # %entry1918; CHECK-P10-NEXT: pli r4, 2441406251919; CHECK-P10-NEXT: rldicr r3, r3, 0, 231920; CHECK-P10-NEXT: rldic r4, r4, 12, 241921; CHECK-P10-NEXT: lbzx r3, r3, r41922; CHECK-P10-NEXT: blr1923;1924; CHECK-PREP10-LABEL: ld_disjoint_align64_uint32_t_uint8_t:1925; CHECK-PREP10: # %bb.0: # %entry1926; CHECK-PREP10-NEXT: lis r4, 37251927; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231928; CHECK-PREP10-NEXT: ori r4, r4, 190251929; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241930; CHECK-PREP10-NEXT: lbzx r3, r3, r41931; CHECK-PREP10-NEXT: blr1932entry:1933 %and = and i64 %ptr, -10995116277761934 %or = or i64 %and, 10000000000001935 %0 = inttoptr i64 %or to ptr1936 %1 = load atomic i8, ptr %0 monotonic, align 40961937 %conv = zext i8 %1 to i321938 ret i32 %conv1939}1940 1941; Function Attrs: nofree norecurse nounwind uwtable willreturn1942define dso_local zeroext i32 @ld_cst_align16_uint32_t_uint8_t() {1943; CHECK-LABEL: ld_cst_align16_uint32_t_uint8_t:1944; CHECK: # %bb.0: # %entry1945; CHECK-NEXT: lbz r3, 4080(0)1946; CHECK-NEXT: blr1947entry:1948 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 161949 %conv = zext i8 %0 to i321950 ret i32 %conv1951}1952 1953; Function Attrs: nofree norecurse nounwind uwtable willreturn1954define dso_local zeroext i32 @ld_cst_align32_uint32_t_uint8_t() {1955; CHECK-LABEL: ld_cst_align32_uint32_t_uint8_t:1956; CHECK: # %bb.0: # %entry1957; CHECK-NEXT: lis r3, 1531958; CHECK-NEXT: lbz r3, -27108(r3)1959; CHECK-NEXT: blr1960entry:1961 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 41962 %conv = zext i8 %0 to i321963 ret i32 %conv1964}1965 1966; Function Attrs: nofree norecurse nounwind uwtable willreturn1967define dso_local zeroext i32 @ld_cst_align64_uint32_t_uint8_t() {1968; CHECK-P10-LABEL: ld_cst_align64_uint32_t_uint8_t:1969; CHECK-P10: # %bb.0: # %entry1970; CHECK-P10-NEXT: pli r3, 2441406251971; CHECK-P10-NEXT: rldic r3, r3, 12, 241972; CHECK-P10-NEXT: lbz r3, 0(r3)1973; CHECK-P10-NEXT: blr1974;1975; CHECK-PREP10-LABEL: ld_cst_align64_uint32_t_uint8_t:1976; CHECK-PREP10: # %bb.0: # %entry1977; CHECK-PREP10-NEXT: lis r3, 37251978; CHECK-PREP10-NEXT: ori r3, r3, 190251979; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241980; CHECK-PREP10-NEXT: lbz r3, 0(r3)1981; CHECK-PREP10-NEXT: blr1982entry:1983 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961984 %conv = zext i8 %0 to i321985 ret i32 %conv1986}1987 1988; Function Attrs: nofree norecurse nounwind uwtable willreturn1989define dso_local zeroext i32 @ld_0_uint32_t_int8_t(i64 %ptr) {1990; CHECK-LABEL: ld_0_uint32_t_int8_t:1991; CHECK: # %bb.0: # %entry1992; CHECK-NEXT: lbz r3, 0(r3)1993; CHECK-NEXT: extsb r3, r31994; CHECK-NEXT: clrldi r3, r3, 321995; CHECK-NEXT: blr1996entry:1997 %0 = inttoptr i64 %ptr to ptr1998 %1 = load atomic i8, ptr %0 monotonic, align 11999 %conv = sext i8 %1 to i322000 ret i32 %conv2001}2002 2003; Function Attrs: nofree norecurse nounwind uwtable willreturn2004define dso_local zeroext i32 @ld_align16_uint32_t_int8_t(ptr nocapture readonly %ptr) {2005; CHECK-LABEL: ld_align16_uint32_t_int8_t:2006; CHECK: # %bb.0: # %entry2007; CHECK-NEXT: lbz r3, 8(r3)2008; CHECK-NEXT: extsb r3, r32009; CHECK-NEXT: clrldi r3, r3, 322010; CHECK-NEXT: blr2011entry:2012 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82013 %0 = load atomic i8, ptr %add.ptr monotonic, align 12014 %conv = sext i8 %0 to i322015 ret i32 %conv2016}2017 2018; Function Attrs: nofree norecurse nounwind uwtable willreturn2019define dso_local zeroext i32 @ld_align32_uint32_t_int8_t(ptr nocapture readonly %ptr) {2020; CHECK-P10-LABEL: ld_align32_uint32_t_int8_t:2021; CHECK-P10: # %bb.0: # %entry2022; CHECK-P10-NEXT: plbz r3, 99999000(r3), 02023; CHECK-P10-NEXT: extsb r3, r32024; CHECK-P10-NEXT: clrldi r3, r3, 322025; CHECK-P10-NEXT: blr2026;2027; CHECK-PREP10-LABEL: ld_align32_uint32_t_int8_t:2028; CHECK-PREP10: # %bb.0: # %entry2029; CHECK-PREP10-NEXT: lis r4, 15252030; CHECK-PREP10-NEXT: ori r4, r4, 566002031; CHECK-PREP10-NEXT: lbzx r3, r3, r42032; CHECK-PREP10-NEXT: extsb r3, r32033; CHECK-PREP10-NEXT: clrldi r3, r3, 322034; CHECK-PREP10-NEXT: blr2035entry:2036 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002037 %0 = load atomic i8, ptr %add.ptr monotonic, align 12038 %conv = sext i8 %0 to i322039 ret i32 %conv2040}2041 2042; Function Attrs: nofree norecurse nounwind uwtable willreturn2043define dso_local zeroext i32 @ld_align64_uint32_t_int8_t(ptr nocapture readonly %ptr) {2044; CHECK-P10-LABEL: ld_align64_uint32_t_int8_t:2045; CHECK-P10: # %bb.0: # %entry2046; CHECK-P10-NEXT: pli r4, 2441406252047; CHECK-P10-NEXT: rldic r4, r4, 12, 242048; CHECK-P10-NEXT: lbzx r3, r3, r42049; CHECK-P10-NEXT: extsb r3, r32050; CHECK-P10-NEXT: clrldi r3, r3, 322051; CHECK-P10-NEXT: blr2052;2053; CHECK-PREP10-LABEL: ld_align64_uint32_t_int8_t:2054; CHECK-PREP10: # %bb.0: # %entry2055; CHECK-PREP10-NEXT: lis r4, 37252056; CHECK-PREP10-NEXT: ori r4, r4, 190252057; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242058; CHECK-PREP10-NEXT: lbzx r3, r3, r42059; CHECK-PREP10-NEXT: extsb r3, r32060; CHECK-PREP10-NEXT: clrldi r3, r3, 322061; CHECK-PREP10-NEXT: blr2062entry:2063 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002064 %0 = load atomic i8, ptr %add.ptr monotonic, align 12065 %conv = sext i8 %0 to i322066 ret i32 %conv2067}2068 2069; Function Attrs: nofree norecurse nounwind uwtable willreturn2070define dso_local zeroext i32 @ld_reg_uint32_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {2071; CHECK-LABEL: ld_reg_uint32_t_int8_t:2072; CHECK: # %bb.0: # %entry2073; CHECK-NEXT: lbzx r3, r3, r42074; CHECK-NEXT: extsb r3, r32075; CHECK-NEXT: clrldi r3, r3, 322076; CHECK-NEXT: blr2077entry:2078 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2079 %0 = load atomic i8, ptr %add.ptr monotonic, align 12080 %conv = sext i8 %0 to i322081 ret i32 %conv2082}2083 2084; Function Attrs: nofree norecurse nounwind uwtable willreturn2085define dso_local zeroext i32 @ld_or_uint32_t_int8_t(i64 %ptr, i8 zeroext %off) {2086; CHECK-LABEL: ld_or_uint32_t_int8_t:2087; CHECK: # %bb.0: # %entry2088; CHECK-NEXT: or r3, r4, r32089; CHECK-NEXT: lbz r3, 0(r3)2090; CHECK-NEXT: extsb r3, r32091; CHECK-NEXT: clrldi r3, r3, 322092; CHECK-NEXT: blr2093entry:2094 %conv = zext i8 %off to i642095 %or = or i64 %conv, %ptr2096 %0 = inttoptr i64 %or to ptr2097 %1 = load atomic i8, ptr %0 monotonic, align 12098 %conv1 = sext i8 %1 to i322099 ret i32 %conv12100}2101 2102; Function Attrs: nofree norecurse nounwind uwtable willreturn2103define dso_local zeroext i32 @ld_not_disjoint16_uint32_t_int8_t(i64 %ptr) {2104; CHECK-LABEL: ld_not_disjoint16_uint32_t_int8_t:2105; CHECK: # %bb.0: # %entry2106; CHECK-NEXT: ori r3, r3, 62107; CHECK-NEXT: lbz r3, 0(r3)2108; CHECK-NEXT: extsb r3, r32109; CHECK-NEXT: clrldi r3, r3, 322110; CHECK-NEXT: blr2111entry:2112 %or = or i64 %ptr, 62113 %0 = inttoptr i64 %or to ptr2114 %1 = load atomic i8, ptr %0 monotonic, align 12115 %conv = sext i8 %1 to i322116 ret i32 %conv2117}2118 2119; Function Attrs: nofree norecurse nounwind uwtable willreturn2120define dso_local zeroext i32 @ld_disjoint_align16_uint32_t_int8_t(i64 %ptr) {2121; CHECK-LABEL: ld_disjoint_align16_uint32_t_int8_t:2122; CHECK: # %bb.0: # %entry2123; CHECK-NEXT: rldicr r3, r3, 0, 512124; CHECK-NEXT: lbz r3, 24(r3)2125; CHECK-NEXT: extsb r3, r32126; CHECK-NEXT: clrldi r3, r3, 322127; CHECK-NEXT: blr2128entry:2129 %and = and i64 %ptr, -40962130 %or = or i64 %and, 242131 %0 = inttoptr i64 %or to ptr2132 %1 = load atomic i8, ptr %0 monotonic, align 82133 %conv = sext i8 %1 to i322134 ret i32 %conv2135}2136 2137; Function Attrs: nofree norecurse nounwind uwtable willreturn2138define dso_local zeroext i32 @ld_not_disjoint32_uint32_t_int8_t(i64 %ptr) {2139; CHECK-LABEL: ld_not_disjoint32_uint32_t_int8_t:2140; CHECK: # %bb.0: # %entry2141; CHECK-NEXT: ori r3, r3, 344632142; CHECK-NEXT: oris r3, r3, 12143; CHECK-NEXT: lbz r3, 0(r3)2144; CHECK-NEXT: extsb r3, r32145; CHECK-NEXT: clrldi r3, r3, 322146; CHECK-NEXT: blr2147entry:2148 %or = or i64 %ptr, 999992149 %0 = inttoptr i64 %or to ptr2150 %1 = load atomic i8, ptr %0 monotonic, align 12151 %conv = sext i8 %1 to i322152 ret i32 %conv2153}2154 2155; Function Attrs: nofree norecurse nounwind uwtable willreturn2156define dso_local zeroext i32 @ld_disjoint_align32_uint32_t_int8_t(i64 %ptr) {2157; CHECK-P10-LABEL: ld_disjoint_align32_uint32_t_int8_t:2158; CHECK-P10: # %bb.0: # %entry2159; CHECK-P10-NEXT: lis r4, -152642160; CHECK-P10-NEXT: and r3, r3, r42161; CHECK-P10-NEXT: plbz r3, 999990000(r3), 02162; CHECK-P10-NEXT: extsb r3, r32163; CHECK-P10-NEXT: clrldi r3, r3, 322164; CHECK-P10-NEXT: blr2165;2166; CHECK-PREP10-LABEL: ld_disjoint_align32_uint32_t_int8_t:2167; CHECK-PREP10: # %bb.0: # %entry2168; CHECK-PREP10-NEXT: lis r4, -152642169; CHECK-PREP10-NEXT: and r3, r3, r42170; CHECK-PREP10-NEXT: lis r4, 152582171; CHECK-PREP10-NEXT: ori r4, r4, 417122172; CHECK-PREP10-NEXT: lbzx r3, r3, r42173; CHECK-PREP10-NEXT: extsb r3, r32174; CHECK-PREP10-NEXT: clrldi r3, r3, 322175; CHECK-PREP10-NEXT: blr2176entry:2177 %and = and i64 %ptr, -10003415042178 %or = or i64 %and, 9999900002179 %0 = inttoptr i64 %or to ptr2180 %1 = load atomic i8, ptr %0 monotonic, align 162181 %conv = sext i8 %1 to i322182 ret i32 %conv2183}2184 2185; Function Attrs: nofree norecurse nounwind uwtable willreturn2186define dso_local zeroext i32 @ld_not_disjoint64_uint32_t_int8_t(i64 %ptr) {2187; CHECK-P10-LABEL: ld_not_disjoint64_uint32_t_int8_t:2188; CHECK-P10: # %bb.0: # %entry2189; CHECK-P10-NEXT: pli r4, 2322190; CHECK-P10-NEXT: pli r5, 35675873292191; CHECK-P10-NEXT: rldimi r5, r4, 32, 02192; CHECK-P10-NEXT: or r3, r3, r52193; CHECK-P10-NEXT: lbz r3, 0(r3)2194; CHECK-P10-NEXT: extsb r3, r32195; CHECK-P10-NEXT: clrldi r3, r3, 322196; CHECK-P10-NEXT: blr2197;2198; CHECK-PREP10-LABEL: ld_not_disjoint64_uint32_t_int8_t:2199; CHECK-PREP10: # %bb.0: # %entry2200; CHECK-PREP10-NEXT: li r4, 292201; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242202; CHECK-PREP10-NEXT: oris r4, r4, 544372203; CHECK-PREP10-NEXT: ori r4, r4, 40972204; CHECK-PREP10-NEXT: or r3, r3, r42205; CHECK-PREP10-NEXT: lbz r3, 0(r3)2206; CHECK-PREP10-NEXT: extsb r3, r32207; CHECK-PREP10-NEXT: clrldi r3, r3, 322208; CHECK-PREP10-NEXT: blr2209entry:2210 %or = or i64 %ptr, 10000000000012211 %0 = inttoptr i64 %or to ptr2212 %1 = load atomic i8, ptr %0 monotonic, align 12213 %conv = sext i8 %1 to i322214 ret i32 %conv2215}2216 2217; Function Attrs: nofree norecurse nounwind uwtable willreturn2218define dso_local zeroext i32 @ld_disjoint_align64_uint32_t_int8_t(i64 %ptr) {2219; CHECK-P10-LABEL: ld_disjoint_align64_uint32_t_int8_t:2220; CHECK-P10: # %bb.0: # %entry2221; CHECK-P10-NEXT: pli r4, 2441406252222; CHECK-P10-NEXT: rldicr r3, r3, 0, 232223; CHECK-P10-NEXT: rldic r4, r4, 12, 242224; CHECK-P10-NEXT: lbzx r3, r3, r42225; CHECK-P10-NEXT: extsb r3, r32226; CHECK-P10-NEXT: clrldi r3, r3, 322227; CHECK-P10-NEXT: blr2228;2229; CHECK-PREP10-LABEL: ld_disjoint_align64_uint32_t_int8_t:2230; CHECK-PREP10: # %bb.0: # %entry2231; CHECK-PREP10-NEXT: lis r4, 37252232; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232233; CHECK-PREP10-NEXT: ori r4, r4, 190252234; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242235; CHECK-PREP10-NEXT: lbzx r3, r3, r42236; CHECK-PREP10-NEXT: extsb r3, r32237; CHECK-PREP10-NEXT: clrldi r3, r3, 322238; CHECK-PREP10-NEXT: blr2239entry:2240 %and = and i64 %ptr, -10995116277762241 %or = or i64 %and, 10000000000002242 %0 = inttoptr i64 %or to ptr2243 %1 = load atomic i8, ptr %0 monotonic, align 40962244 %conv = sext i8 %1 to i322245 ret i32 %conv2246}2247 2248; Function Attrs: nofree norecurse nounwind uwtable willreturn2249define dso_local zeroext i32 @ld_cst_align16_uint32_t_int8_t() {2250; CHECK-LABEL: ld_cst_align16_uint32_t_int8_t:2251; CHECK: # %bb.0: # %entry2252; CHECK-NEXT: lbz r3, 4080(0)2253; CHECK-NEXT: extsb r3, r32254; CHECK-NEXT: clrldi r3, r3, 322255; CHECK-NEXT: blr2256entry:2257 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 162258 %conv = sext i8 %0 to i322259 ret i32 %conv2260}2261 2262; Function Attrs: nofree norecurse nounwind uwtable willreturn2263define dso_local zeroext i32 @ld_cst_align32_uint32_t_int8_t() {2264; CHECK-LABEL: ld_cst_align32_uint32_t_int8_t:2265; CHECK: # %bb.0: # %entry2266; CHECK-NEXT: lis r3, 1532267; CHECK-NEXT: lbz r3, -27108(r3)2268; CHECK-NEXT: extsb r3, r32269; CHECK-NEXT: clrldi r3, r3, 322270; CHECK-NEXT: blr2271entry:2272 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42273 %conv = sext i8 %0 to i322274 ret i32 %conv2275}2276 2277; Function Attrs: nofree norecurse nounwind uwtable willreturn2278define dso_local zeroext i32 @ld_cst_align64_uint32_t_int8_t() {2279; CHECK-P10-LABEL: ld_cst_align64_uint32_t_int8_t:2280; CHECK-P10: # %bb.0: # %entry2281; CHECK-P10-NEXT: pli r3, 2441406252282; CHECK-P10-NEXT: rldic r3, r3, 12, 242283; CHECK-P10-NEXT: lbz r3, 0(r3)2284; CHECK-P10-NEXT: extsb r3, r32285; CHECK-P10-NEXT: clrldi r3, r3, 322286; CHECK-P10-NEXT: blr2287;2288; CHECK-PREP10-LABEL: ld_cst_align64_uint32_t_int8_t:2289; CHECK-PREP10: # %bb.0: # %entry2290; CHECK-PREP10-NEXT: lis r3, 37252291; CHECK-PREP10-NEXT: ori r3, r3, 190252292; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242293; CHECK-PREP10-NEXT: lbz r3, 0(r3)2294; CHECK-PREP10-NEXT: extsb r3, r32295; CHECK-PREP10-NEXT: clrldi r3, r3, 322296; CHECK-PREP10-NEXT: blr2297entry:2298 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962299 %conv = sext i8 %0 to i322300 ret i32 %conv2301}2302 2303; Function Attrs: nofree norecurse nounwind uwtable willreturn2304define dso_local zeroext i32 @ld_0_uint32_t_uint16_t(i64 %ptr) {2305; CHECK-LABEL: ld_0_uint32_t_uint16_t:2306; CHECK: # %bb.0: # %entry2307; CHECK-NEXT: lhz r3, 0(r3)2308; CHECK-NEXT: blr2309entry:2310 %0 = inttoptr i64 %ptr to ptr2311 %1 = load atomic i16, ptr %0 monotonic, align 22312 %conv = zext i16 %1 to i322313 ret i32 %conv2314}2315 2316; Function Attrs: nofree norecurse nounwind uwtable willreturn2317define dso_local zeroext i32 @ld_align16_uint32_t_uint16_t(ptr nocapture readonly %ptr) {2318; CHECK-LABEL: ld_align16_uint32_t_uint16_t:2319; CHECK: # %bb.0: # %entry2320; CHECK-NEXT: lhz r3, 8(r3)2321; CHECK-NEXT: blr2322entry:2323 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82324 %0 = load atomic i16, ptr %add.ptr monotonic, align 22325 %conv = zext i16 %0 to i322326 ret i32 %conv2327}2328 2329; Function Attrs: nofree norecurse nounwind uwtable willreturn2330define dso_local zeroext i32 @ld_align32_uint32_t_uint16_t(ptr nocapture readonly %ptr) {2331; CHECK-P10-LABEL: ld_align32_uint32_t_uint16_t:2332; CHECK-P10: # %bb.0: # %entry2333; CHECK-P10-NEXT: plhz r3, 99999000(r3), 02334; CHECK-P10-NEXT: clrldi r3, r3, 322335; CHECK-P10-NEXT: blr2336;2337; CHECK-PREP10-LABEL: ld_align32_uint32_t_uint16_t:2338; CHECK-PREP10: # %bb.0: # %entry2339; CHECK-PREP10-NEXT: lis r4, 15252340; CHECK-PREP10-NEXT: ori r4, r4, 566002341; CHECK-PREP10-NEXT: lhzx r3, r3, r42342; CHECK-PREP10-NEXT: blr2343entry:2344 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002345 %0 = load atomic i16, ptr %add.ptr monotonic, align 22346 %conv = zext i16 %0 to i322347 ret i32 %conv2348}2349 2350; Function Attrs: nofree norecurse nounwind uwtable willreturn2351define dso_local zeroext i32 @ld_align64_uint32_t_uint16_t(ptr nocapture readonly %ptr) {2352; CHECK-P10-LABEL: ld_align64_uint32_t_uint16_t:2353; CHECK-P10: # %bb.0: # %entry2354; CHECK-P10-NEXT: pli r4, 2441406252355; CHECK-P10-NEXT: rldic r4, r4, 12, 242356; CHECK-P10-NEXT: lhzx r3, r3, r42357; CHECK-P10-NEXT: blr2358;2359; CHECK-PREP10-LABEL: ld_align64_uint32_t_uint16_t:2360; CHECK-PREP10: # %bb.0: # %entry2361; CHECK-PREP10-NEXT: lis r4, 37252362; CHECK-PREP10-NEXT: ori r4, r4, 190252363; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242364; CHECK-PREP10-NEXT: lhzx r3, r3, r42365; CHECK-PREP10-NEXT: blr2366entry:2367 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002368 %0 = load atomic i16, ptr %add.ptr monotonic, align 22369 %conv = zext i16 %0 to i322370 ret i32 %conv2371}2372 2373; Function Attrs: nofree norecurse nounwind uwtable willreturn2374define dso_local zeroext i32 @ld_reg_uint32_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {2375; CHECK-LABEL: ld_reg_uint32_t_uint16_t:2376; CHECK: # %bb.0: # %entry2377; CHECK-NEXT: lhzx r3, r3, r42378; CHECK-NEXT: blr2379entry:2380 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2381 %0 = load atomic i16, ptr %add.ptr monotonic, align 22382 %conv = zext i16 %0 to i322383 ret i32 %conv2384}2385 2386; Function Attrs: nofree norecurse nounwind uwtable willreturn2387define dso_local zeroext i32 @ld_or_uint32_t_uint16_t(i64 %ptr, i8 zeroext %off) {2388; CHECK-LABEL: ld_or_uint32_t_uint16_t:2389; CHECK: # %bb.0: # %entry2390; CHECK-NEXT: or r3, r4, r32391; CHECK-NEXT: lhz r3, 0(r3)2392; CHECK-NEXT: blr2393entry:2394 %conv = zext i8 %off to i642395 %or = or i64 %conv, %ptr2396 %0 = inttoptr i64 %or to ptr2397 %1 = load atomic i16, ptr %0 monotonic, align 22398 %conv1 = zext i16 %1 to i322399 ret i32 %conv12400}2401 2402; Function Attrs: nofree norecurse nounwind uwtable willreturn2403define dso_local zeroext i32 @ld_not_disjoint16_uint32_t_uint16_t(i64 %ptr) {2404; CHECK-LABEL: ld_not_disjoint16_uint32_t_uint16_t:2405; CHECK: # %bb.0: # %entry2406; CHECK-NEXT: ori r3, r3, 62407; CHECK-NEXT: lhz r3, 0(r3)2408; CHECK-NEXT: blr2409entry:2410 %or = or i64 %ptr, 62411 %0 = inttoptr i64 %or to ptr2412 %1 = load atomic i16, ptr %0 monotonic, align 22413 %conv = zext i16 %1 to i322414 ret i32 %conv2415}2416 2417; Function Attrs: nofree norecurse nounwind uwtable willreturn2418define dso_local zeroext i32 @ld_disjoint_align16_uint32_t_uint16_t(i64 %ptr) {2419; CHECK-LABEL: ld_disjoint_align16_uint32_t_uint16_t:2420; CHECK: # %bb.0: # %entry2421; CHECK-NEXT: rldicr r3, r3, 0, 512422; CHECK-NEXT: lhz r3, 24(r3)2423; CHECK-NEXT: blr2424entry:2425 %and = and i64 %ptr, -40962426 %or = or i64 %and, 242427 %0 = inttoptr i64 %or to ptr2428 %1 = load atomic i16, ptr %0 monotonic, align 82429 %conv = zext i16 %1 to i322430 ret i32 %conv2431}2432 2433; Function Attrs: nofree norecurse nounwind uwtable willreturn2434define dso_local zeroext i32 @ld_not_disjoint32_uint32_t_uint16_t(i64 %ptr) {2435; CHECK-LABEL: ld_not_disjoint32_uint32_t_uint16_t:2436; CHECK: # %bb.0: # %entry2437; CHECK-NEXT: ori r3, r3, 344632438; CHECK-NEXT: oris r3, r3, 12439; CHECK-NEXT: lhz r3, 0(r3)2440; CHECK-NEXT: blr2441entry:2442 %or = or i64 %ptr, 999992443 %0 = inttoptr i64 %or to ptr2444 %1 = load atomic i16, ptr %0 monotonic, align 22445 %conv = zext i16 %1 to i322446 ret i32 %conv2447}2448 2449; Function Attrs: nofree norecurse nounwind uwtable willreturn2450define dso_local zeroext i32 @ld_disjoint_align32_uint32_t_uint16_t(i64 %ptr) {2451; CHECK-P10-LABEL: ld_disjoint_align32_uint32_t_uint16_t:2452; CHECK-P10: # %bb.0: # %entry2453; CHECK-P10-NEXT: lis r4, -152642454; CHECK-P10-NEXT: and r3, r3, r42455; CHECK-P10-NEXT: plhz r3, 999990000(r3), 02456; CHECK-P10-NEXT: clrldi r3, r3, 322457; CHECK-P10-NEXT: blr2458;2459; CHECK-PREP10-LABEL: ld_disjoint_align32_uint32_t_uint16_t:2460; CHECK-PREP10: # %bb.0: # %entry2461; CHECK-PREP10-NEXT: lis r4, -152642462; CHECK-PREP10-NEXT: and r3, r3, r42463; CHECK-PREP10-NEXT: lis r4, 152582464; CHECK-PREP10-NEXT: ori r4, r4, 417122465; CHECK-PREP10-NEXT: lhzx r3, r3, r42466; CHECK-PREP10-NEXT: blr2467entry:2468 %and = and i64 %ptr, -10003415042469 %or = or i64 %and, 9999900002470 %0 = inttoptr i64 %or to ptr2471 %1 = load atomic i16, ptr %0 monotonic, align 162472 %conv = zext i16 %1 to i322473 ret i32 %conv2474}2475 2476; Function Attrs: nofree norecurse nounwind uwtable willreturn2477define dso_local zeroext i32 @ld_not_disjoint64_uint32_t_uint16_t(i64 %ptr) {2478; CHECK-P10-LABEL: ld_not_disjoint64_uint32_t_uint16_t:2479; CHECK-P10: # %bb.0: # %entry2480; CHECK-P10-NEXT: pli r4, 2322481; CHECK-P10-NEXT: pli r5, 35675873292482; CHECK-P10-NEXT: rldimi r5, r4, 32, 02483; CHECK-P10-NEXT: or r3, r3, r52484; CHECK-P10-NEXT: lhz r3, 0(r3)2485; CHECK-P10-NEXT: blr2486;2487; CHECK-PREP10-LABEL: ld_not_disjoint64_uint32_t_uint16_t:2488; CHECK-PREP10: # %bb.0: # %entry2489; CHECK-PREP10-NEXT: li r4, 292490; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242491; CHECK-PREP10-NEXT: oris r4, r4, 544372492; CHECK-PREP10-NEXT: ori r4, r4, 40972493; CHECK-PREP10-NEXT: or r3, r3, r42494; CHECK-PREP10-NEXT: lhz r3, 0(r3)2495; CHECK-PREP10-NEXT: blr2496entry:2497 %or = or i64 %ptr, 10000000000012498 %0 = inttoptr i64 %or to ptr2499 %1 = load atomic i16, ptr %0 monotonic, align 22500 %conv = zext i16 %1 to i322501 ret i32 %conv2502}2503 2504; Function Attrs: nofree norecurse nounwind uwtable willreturn2505define dso_local zeroext i32 @ld_disjoint_align64_uint32_t_uint16_t(i64 %ptr) {2506; CHECK-P10-LABEL: ld_disjoint_align64_uint32_t_uint16_t:2507; CHECK-P10: # %bb.0: # %entry2508; CHECK-P10-NEXT: pli r4, 2441406252509; CHECK-P10-NEXT: rldicr r3, r3, 0, 232510; CHECK-P10-NEXT: rldic r4, r4, 12, 242511; CHECK-P10-NEXT: lhzx r3, r3, r42512; CHECK-P10-NEXT: blr2513;2514; CHECK-PREP10-LABEL: ld_disjoint_align64_uint32_t_uint16_t:2515; CHECK-PREP10: # %bb.0: # %entry2516; CHECK-PREP10-NEXT: lis r4, 37252517; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232518; CHECK-PREP10-NEXT: ori r4, r4, 190252519; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242520; CHECK-PREP10-NEXT: lhzx r3, r3, r42521; CHECK-PREP10-NEXT: blr2522entry:2523 %and = and i64 %ptr, -10995116277762524 %or = or i64 %and, 10000000000002525 %0 = inttoptr i64 %or to ptr2526 %1 = load atomic i16, ptr %0 monotonic, align 40962527 %conv = zext i16 %1 to i322528 ret i32 %conv2529}2530 2531; Function Attrs: nofree norecurse nounwind uwtable willreturn2532define dso_local zeroext i32 @ld_cst_align16_uint32_t_uint16_t() {2533; CHECK-LABEL: ld_cst_align16_uint32_t_uint16_t:2534; CHECK: # %bb.0: # %entry2535; CHECK-NEXT: lhz r3, 4080(0)2536; CHECK-NEXT: blr2537entry:2538 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 162539 %conv = zext i16 %0 to i322540 ret i32 %conv2541}2542 2543; Function Attrs: nofree norecurse nounwind uwtable willreturn2544define dso_local zeroext i32 @ld_cst_align32_uint32_t_uint16_t() {2545; CHECK-LABEL: ld_cst_align32_uint32_t_uint16_t:2546; CHECK: # %bb.0: # %entry2547; CHECK-NEXT: lis r3, 1532548; CHECK-NEXT: lhz r3, -27108(r3)2549; CHECK-NEXT: blr2550entry:2551 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42552 %conv = zext i16 %0 to i322553 ret i32 %conv2554}2555 2556; Function Attrs: nofree norecurse nounwind uwtable willreturn2557define dso_local zeroext i32 @ld_cst_align64_uint32_t_uint16_t() {2558; CHECK-P10-LABEL: ld_cst_align64_uint32_t_uint16_t:2559; CHECK-P10: # %bb.0: # %entry2560; CHECK-P10-NEXT: pli r3, 2441406252561; CHECK-P10-NEXT: rldic r3, r3, 12, 242562; CHECK-P10-NEXT: lhz r3, 0(r3)2563; CHECK-P10-NEXT: blr2564;2565; CHECK-PREP10-LABEL: ld_cst_align64_uint32_t_uint16_t:2566; CHECK-PREP10: # %bb.0: # %entry2567; CHECK-PREP10-NEXT: lis r3, 37252568; CHECK-PREP10-NEXT: ori r3, r3, 190252569; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242570; CHECK-PREP10-NEXT: lhz r3, 0(r3)2571; CHECK-PREP10-NEXT: blr2572entry:2573 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962574 %conv = zext i16 %0 to i322575 ret i32 %conv2576}2577 2578; Function Attrs: nofree norecurse nounwind uwtable willreturn2579define dso_local zeroext i32 @ld_0_uint32_t_int16_t(i64 %ptr) {2580; CHECK-LABEL: ld_0_uint32_t_int16_t:2581; CHECK: # %bb.0: # %entry2582; CHECK-NEXT: lha r3, 0(r3)2583; CHECK-NEXT: clrldi r3, r3, 322584; CHECK-NEXT: blr2585entry:2586 %0 = inttoptr i64 %ptr to ptr2587 %1 = load atomic i16, ptr %0 monotonic, align 22588 %conv = sext i16 %1 to i322589 ret i32 %conv2590}2591 2592; Function Attrs: nofree norecurse nounwind uwtable willreturn2593define dso_local zeroext i32 @ld_align16_uint32_t_int16_t(ptr nocapture readonly %ptr) {2594; CHECK-LABEL: ld_align16_uint32_t_int16_t:2595; CHECK: # %bb.0: # %entry2596; CHECK-NEXT: lha r3, 8(r3)2597; CHECK-NEXT: clrldi r3, r3, 322598; CHECK-NEXT: blr2599entry:2600 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82601 %0 = load atomic i16, ptr %add.ptr monotonic, align 22602 %conv = sext i16 %0 to i322603 ret i32 %conv2604}2605 2606; Function Attrs: nofree norecurse nounwind uwtable willreturn2607define dso_local zeroext i32 @ld_align32_uint32_t_int16_t(ptr nocapture readonly %ptr) {2608; CHECK-P10-LABEL: ld_align32_uint32_t_int16_t:2609; CHECK-P10: # %bb.0: # %entry2610; CHECK-P10-NEXT: plhz r3, 99999000(r3), 02611; CHECK-P10-NEXT: extsh r3, r32612; CHECK-P10-NEXT: clrldi r3, r3, 322613; CHECK-P10-NEXT: blr2614;2615; CHECK-PREP10-LABEL: ld_align32_uint32_t_int16_t:2616; CHECK-PREP10: # %bb.0: # %entry2617; CHECK-PREP10-NEXT: lis r4, 15252618; CHECK-PREP10-NEXT: ori r4, r4, 566002619; CHECK-PREP10-NEXT: lhax r3, r3, r42620; CHECK-PREP10-NEXT: clrldi r3, r3, 322621; CHECK-PREP10-NEXT: blr2622entry:2623 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002624 %0 = load atomic i16, ptr %add.ptr monotonic, align 22625 %conv = sext i16 %0 to i322626 ret i32 %conv2627}2628 2629; Function Attrs: nofree norecurse nounwind uwtable willreturn2630define dso_local zeroext i32 @ld_align64_uint32_t_int16_t(ptr nocapture readonly %ptr) {2631; CHECK-P10-LABEL: ld_align64_uint32_t_int16_t:2632; CHECK-P10: # %bb.0: # %entry2633; CHECK-P10-NEXT: pli r4, 2441406252634; CHECK-P10-NEXT: rldic r4, r4, 12, 242635; CHECK-P10-NEXT: lhax r3, r3, r42636; CHECK-P10-NEXT: clrldi r3, r3, 322637; CHECK-P10-NEXT: blr2638;2639; CHECK-PREP10-LABEL: ld_align64_uint32_t_int16_t:2640; CHECK-PREP10: # %bb.0: # %entry2641; CHECK-PREP10-NEXT: lis r4, 37252642; CHECK-PREP10-NEXT: ori r4, r4, 190252643; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242644; CHECK-PREP10-NEXT: lhax r3, r3, r42645; CHECK-PREP10-NEXT: clrldi r3, r3, 322646; CHECK-PREP10-NEXT: blr2647entry:2648 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002649 %0 = load atomic i16, ptr %add.ptr monotonic, align 22650 %conv = sext i16 %0 to i322651 ret i32 %conv2652}2653 2654; Function Attrs: nofree norecurse nounwind uwtable willreturn2655define dso_local zeroext i32 @ld_reg_uint32_t_int16_t(ptr nocapture readonly %ptr, i64 %off) {2656; CHECK-LABEL: ld_reg_uint32_t_int16_t:2657; CHECK: # %bb.0: # %entry2658; CHECK-NEXT: lhax r3, r3, r42659; CHECK-NEXT: clrldi r3, r3, 322660; CHECK-NEXT: blr2661entry:2662 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2663 %0 = load atomic i16, ptr %add.ptr monotonic, align 22664 %conv = sext i16 %0 to i322665 ret i32 %conv2666}2667 2668; Function Attrs: nofree norecurse nounwind uwtable willreturn2669define dso_local zeroext i32 @ld_or_uint32_t_int16_t(i64 %ptr, i8 zeroext %off) {2670; CHECK-LABEL: ld_or_uint32_t_int16_t:2671; CHECK: # %bb.0: # %entry2672; CHECK-NEXT: or r3, r4, r32673; CHECK-NEXT: lha r3, 0(r3)2674; CHECK-NEXT: clrldi r3, r3, 322675; CHECK-NEXT: blr2676entry:2677 %conv = zext i8 %off to i642678 %or = or i64 %conv, %ptr2679 %0 = inttoptr i64 %or to ptr2680 %1 = load atomic i16, ptr %0 monotonic, align 22681 %conv1 = sext i16 %1 to i322682 ret i32 %conv12683}2684 2685; Function Attrs: nofree norecurse nounwind uwtable willreturn2686define dso_local zeroext i32 @ld_not_disjoint16_uint32_t_int16_t(i64 %ptr) {2687; CHECK-LABEL: ld_not_disjoint16_uint32_t_int16_t:2688; CHECK: # %bb.0: # %entry2689; CHECK-NEXT: ori r3, r3, 62690; CHECK-NEXT: lha r3, 0(r3)2691; CHECK-NEXT: clrldi r3, r3, 322692; CHECK-NEXT: blr2693entry:2694 %or = or i64 %ptr, 62695 %0 = inttoptr i64 %or to ptr2696 %1 = load atomic i16, ptr %0 monotonic, align 22697 %conv = sext i16 %1 to i322698 ret i32 %conv2699}2700 2701; Function Attrs: nofree norecurse nounwind uwtable willreturn2702define dso_local zeroext i32 @ld_disjoint_align16_uint32_t_int16_t(i64 %ptr) {2703; CHECK-LABEL: ld_disjoint_align16_uint32_t_int16_t:2704; CHECK: # %bb.0: # %entry2705; CHECK-NEXT: rldicr r3, r3, 0, 512706; CHECK-NEXT: lha r3, 24(r3)2707; CHECK-NEXT: clrldi r3, r3, 322708; CHECK-NEXT: blr2709entry:2710 %and = and i64 %ptr, -40962711 %or = or i64 %and, 242712 %0 = inttoptr i64 %or to ptr2713 %1 = load atomic i16, ptr %0 monotonic, align 82714 %conv = sext i16 %1 to i322715 ret i32 %conv2716}2717 2718; Function Attrs: nofree norecurse nounwind uwtable willreturn2719define dso_local zeroext i32 @ld_not_disjoint32_uint32_t_int16_t(i64 %ptr) {2720; CHECK-LABEL: ld_not_disjoint32_uint32_t_int16_t:2721; CHECK: # %bb.0: # %entry2722; CHECK-NEXT: ori r3, r3, 344632723; CHECK-NEXT: oris r3, r3, 12724; CHECK-NEXT: lha r3, 0(r3)2725; CHECK-NEXT: clrldi r3, r3, 322726; CHECK-NEXT: blr2727entry:2728 %or = or i64 %ptr, 999992729 %0 = inttoptr i64 %or to ptr2730 %1 = load atomic i16, ptr %0 monotonic, align 22731 %conv = sext i16 %1 to i322732 ret i32 %conv2733}2734 2735; Function Attrs: nofree norecurse nounwind uwtable willreturn2736define dso_local zeroext i32 @ld_disjoint_align32_uint32_t_int16_t(i64 %ptr) {2737; CHECK-P10-LABEL: ld_disjoint_align32_uint32_t_int16_t:2738; CHECK-P10: # %bb.0: # %entry2739; CHECK-P10-NEXT: lis r4, -152642740; CHECK-P10-NEXT: and r3, r3, r42741; CHECK-P10-NEXT: plhz r3, 999990000(r3), 02742; CHECK-P10-NEXT: extsh r3, r32743; CHECK-P10-NEXT: clrldi r3, r3, 322744; CHECK-P10-NEXT: blr2745;2746; CHECK-PREP10-LABEL: ld_disjoint_align32_uint32_t_int16_t:2747; CHECK-PREP10: # %bb.0: # %entry2748; CHECK-PREP10-NEXT: lis r4, -152642749; CHECK-PREP10-NEXT: and r3, r3, r42750; CHECK-PREP10-NEXT: lis r4, 152582751; CHECK-PREP10-NEXT: ori r4, r4, 417122752; CHECK-PREP10-NEXT: lhax r3, r3, r42753; CHECK-PREP10-NEXT: clrldi r3, r3, 322754; CHECK-PREP10-NEXT: blr2755entry:2756 %and = and i64 %ptr, -10003415042757 %or = or i64 %and, 9999900002758 %0 = inttoptr i64 %or to ptr2759 %1 = load atomic i16, ptr %0 monotonic, align 162760 %conv = sext i16 %1 to i322761 ret i32 %conv2762}2763 2764; Function Attrs: nofree norecurse nounwind uwtable willreturn2765define dso_local zeroext i32 @ld_not_disjoint64_uint32_t_int16_t(i64 %ptr) {2766; CHECK-P10-LABEL: ld_not_disjoint64_uint32_t_int16_t:2767; CHECK-P10: # %bb.0: # %entry2768; CHECK-P10-NEXT: pli r4, 2322769; CHECK-P10-NEXT: pli r5, 35675873292770; CHECK-P10-NEXT: rldimi r5, r4, 32, 02771; CHECK-P10-NEXT: or r3, r3, r52772; CHECK-P10-NEXT: lha r3, 0(r3)2773; CHECK-P10-NEXT: clrldi r3, r3, 322774; CHECK-P10-NEXT: blr2775;2776; CHECK-PREP10-LABEL: ld_not_disjoint64_uint32_t_int16_t:2777; CHECK-PREP10: # %bb.0: # %entry2778; CHECK-PREP10-NEXT: li r4, 292779; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242780; CHECK-PREP10-NEXT: oris r4, r4, 544372781; CHECK-PREP10-NEXT: ori r4, r4, 40972782; CHECK-PREP10-NEXT: or r3, r3, r42783; CHECK-PREP10-NEXT: lha r3, 0(r3)2784; CHECK-PREP10-NEXT: clrldi r3, r3, 322785; CHECK-PREP10-NEXT: blr2786entry:2787 %or = or i64 %ptr, 10000000000012788 %0 = inttoptr i64 %or to ptr2789 %1 = load atomic i16, ptr %0 monotonic, align 22790 %conv = sext i16 %1 to i322791 ret i32 %conv2792}2793 2794; Function Attrs: nofree norecurse nounwind uwtable willreturn2795define dso_local zeroext i32 @ld_disjoint_align64_uint32_t_int16_t(i64 %ptr) {2796; CHECK-P10-LABEL: ld_disjoint_align64_uint32_t_int16_t:2797; CHECK-P10: # %bb.0: # %entry2798; CHECK-P10-NEXT: pli r4, 2441406252799; CHECK-P10-NEXT: rldicr r3, r3, 0, 232800; CHECK-P10-NEXT: rldic r4, r4, 12, 242801; CHECK-P10-NEXT: lhax r3, r3, r42802; CHECK-P10-NEXT: clrldi r3, r3, 322803; CHECK-P10-NEXT: blr2804;2805; CHECK-PREP10-LABEL: ld_disjoint_align64_uint32_t_int16_t:2806; CHECK-PREP10: # %bb.0: # %entry2807; CHECK-PREP10-NEXT: lis r4, 37252808; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232809; CHECK-PREP10-NEXT: ori r4, r4, 190252810; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242811; CHECK-PREP10-NEXT: lhax r3, r3, r42812; CHECK-PREP10-NEXT: clrldi r3, r3, 322813; CHECK-PREP10-NEXT: blr2814entry:2815 %and = and i64 %ptr, -10995116277762816 %or = or i64 %and, 10000000000002817 %0 = inttoptr i64 %or to ptr2818 %1 = load atomic i16, ptr %0 monotonic, align 40962819 %conv = sext i16 %1 to i322820 ret i32 %conv2821}2822 2823; Function Attrs: nofree norecurse nounwind uwtable willreturn2824define dso_local zeroext i32 @ld_cst_align16_uint32_t_int16_t() {2825; CHECK-LABEL: ld_cst_align16_uint32_t_int16_t:2826; CHECK: # %bb.0: # %entry2827; CHECK-NEXT: lha r3, 4080(0)2828; CHECK-NEXT: clrldi r3, r3, 322829; CHECK-NEXT: blr2830entry:2831 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 162832 %conv = sext i16 %0 to i322833 ret i32 %conv2834}2835 2836; Function Attrs: nofree norecurse nounwind uwtable willreturn2837define dso_local zeroext i32 @ld_cst_align32_uint32_t_int16_t() {2838; CHECK-LABEL: ld_cst_align32_uint32_t_int16_t:2839; CHECK: # %bb.0: # %entry2840; CHECK-NEXT: lis r3, 1532841; CHECK-NEXT: lha r3, -27108(r3)2842; CHECK-NEXT: clrldi r3, r3, 322843; CHECK-NEXT: blr2844entry:2845 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42846 %conv = sext i16 %0 to i322847 ret i32 %conv2848}2849 2850; Function Attrs: nofree norecurse nounwind uwtable willreturn2851define dso_local zeroext i32 @ld_cst_align64_uint32_t_int16_t() {2852; CHECK-P10-LABEL: ld_cst_align64_uint32_t_int16_t:2853; CHECK-P10: # %bb.0: # %entry2854; CHECK-P10-NEXT: pli r3, 2441406252855; CHECK-P10-NEXT: rldic r3, r3, 12, 242856; CHECK-P10-NEXT: lha r3, 0(r3)2857; CHECK-P10-NEXT: clrldi r3, r3, 322858; CHECK-P10-NEXT: blr2859;2860; CHECK-PREP10-LABEL: ld_cst_align64_uint32_t_int16_t:2861; CHECK-PREP10: # %bb.0: # %entry2862; CHECK-PREP10-NEXT: lis r3, 37252863; CHECK-PREP10-NEXT: ori r3, r3, 190252864; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242865; CHECK-PREP10-NEXT: lha r3, 0(r3)2866; CHECK-PREP10-NEXT: clrldi r3, r3, 322867; CHECK-PREP10-NEXT: blr2868entry:2869 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962870 %conv = sext i16 %0 to i322871 ret i32 %conv2872}2873 2874; Function Attrs: nofree norecurse nounwind uwtable willreturn2875define dso_local zeroext i32 @ld_0_uint32_t_uint32_t(i64 %ptr) {2876; CHECK-LABEL: ld_0_uint32_t_uint32_t:2877; CHECK: # %bb.0: # %entry2878; CHECK-NEXT: lwz r3, 0(r3)2879; CHECK-NEXT: blr2880entry:2881 %0 = inttoptr i64 %ptr to ptr2882 %1 = load atomic i32, ptr %0 monotonic, align 42883 ret i32 %12884}2885 2886; Function Attrs: nofree norecurse nounwind uwtable willreturn2887define dso_local zeroext i32 @ld_align16_uint32_t_uint32_t(ptr nocapture readonly %ptr) {2888; CHECK-LABEL: ld_align16_uint32_t_uint32_t:2889; CHECK: # %bb.0: # %entry2890; CHECK-NEXT: lwz r3, 8(r3)2891; CHECK-NEXT: blr2892entry:2893 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82894 %0 = load atomic i32, ptr %add.ptr monotonic, align 42895 ret i32 %02896}2897 2898; Function Attrs: nofree norecurse nounwind uwtable willreturn2899define dso_local zeroext i32 @ld_align32_uint32_t_uint32_t(ptr nocapture readonly %ptr) {2900; CHECK-P10-LABEL: ld_align32_uint32_t_uint32_t:2901; CHECK-P10: # %bb.0: # %entry2902; CHECK-P10-NEXT: plwz r3, 99999000(r3), 02903; CHECK-P10-NEXT: clrldi r3, r3, 322904; CHECK-P10-NEXT: blr2905;2906; CHECK-PREP10-LABEL: ld_align32_uint32_t_uint32_t:2907; CHECK-PREP10: # %bb.0: # %entry2908; CHECK-PREP10-NEXT: lis r4, 15252909; CHECK-PREP10-NEXT: ori r4, r4, 566002910; CHECK-PREP10-NEXT: lwzx r3, r3, r42911; CHECK-PREP10-NEXT: blr2912entry:2913 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002914 %0 = load atomic i32, ptr %add.ptr monotonic, align 42915 ret i32 %02916}2917 2918; Function Attrs: nofree norecurse nounwind uwtable willreturn2919define dso_local zeroext i32 @ld_align64_uint32_t_uint32_t(ptr nocapture readonly %ptr) {2920; CHECK-P10-LABEL: ld_align64_uint32_t_uint32_t:2921; CHECK-P10: # %bb.0: # %entry2922; CHECK-P10-NEXT: pli r4, 2441406252923; CHECK-P10-NEXT: rldic r4, r4, 12, 242924; CHECK-P10-NEXT: lwzx r3, r3, r42925; CHECK-P10-NEXT: blr2926;2927; CHECK-PREP10-LABEL: ld_align64_uint32_t_uint32_t:2928; CHECK-PREP10: # %bb.0: # %entry2929; CHECK-PREP10-NEXT: lis r4, 37252930; CHECK-PREP10-NEXT: ori r4, r4, 190252931; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242932; CHECK-PREP10-NEXT: lwzx r3, r3, r42933; CHECK-PREP10-NEXT: blr2934entry:2935 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002936 %0 = load atomic i32, ptr %add.ptr monotonic, align 42937 ret i32 %02938}2939 2940; Function Attrs: nofree norecurse nounwind uwtable willreturn2941define dso_local zeroext i32 @ld_reg_uint32_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {2942; CHECK-LABEL: ld_reg_uint32_t_uint32_t:2943; CHECK: # %bb.0: # %entry2944; CHECK-NEXT: lwzx r3, r3, r42945; CHECK-NEXT: blr2946entry:2947 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2948 %0 = load atomic i32, ptr %add.ptr monotonic, align 42949 ret i32 %02950}2951 2952; Function Attrs: nofree norecurse nounwind uwtable willreturn2953define dso_local zeroext i32 @ld_or_uint32_t_uint32_t(i64 %ptr, i8 zeroext %off) {2954; CHECK-LABEL: ld_or_uint32_t_uint32_t:2955; CHECK: # %bb.0: # %entry2956; CHECK-NEXT: or r3, r4, r32957; CHECK-NEXT: lwz r3, 0(r3)2958; CHECK-NEXT: blr2959entry:2960 %conv = zext i8 %off to i642961 %or = or i64 %conv, %ptr2962 %0 = inttoptr i64 %or to ptr2963 %1 = load atomic i32, ptr %0 monotonic, align 42964 ret i32 %12965}2966 2967; Function Attrs: nofree norecurse nounwind uwtable willreturn2968define dso_local zeroext i32 @ld_not_disjoint16_uint32_t_uint32_t(i64 %ptr) {2969; CHECK-LABEL: ld_not_disjoint16_uint32_t_uint32_t:2970; CHECK: # %bb.0: # %entry2971; CHECK-NEXT: ori r3, r3, 62972; CHECK-NEXT: lwz r3, 0(r3)2973; CHECK-NEXT: blr2974entry:2975 %or = or i64 %ptr, 62976 %0 = inttoptr i64 %or to ptr2977 %1 = load atomic i32, ptr %0 monotonic, align 42978 ret i32 %12979}2980 2981; Function Attrs: nofree norecurse nounwind uwtable willreturn2982define dso_local zeroext i32 @ld_disjoint_align16_uint32_t_uint32_t(i64 %ptr) {2983; CHECK-LABEL: ld_disjoint_align16_uint32_t_uint32_t:2984; CHECK: # %bb.0: # %entry2985; CHECK-NEXT: rldicr r3, r3, 0, 512986; CHECK-NEXT: lwz r3, 24(r3)2987; CHECK-NEXT: blr2988entry:2989 %and = and i64 %ptr, -40962990 %or = or i64 %and, 242991 %0 = inttoptr i64 %or to ptr2992 %1 = load atomic i32, ptr %0 monotonic, align 82993 ret i32 %12994}2995 2996; Function Attrs: nofree norecurse nounwind uwtable willreturn2997define dso_local zeroext i32 @ld_not_disjoint32_uint32_t_uint32_t(i64 %ptr) {2998; CHECK-LABEL: ld_not_disjoint32_uint32_t_uint32_t:2999; CHECK: # %bb.0: # %entry3000; CHECK-NEXT: ori r3, r3, 344633001; CHECK-NEXT: oris r3, r3, 13002; CHECK-NEXT: lwz r3, 0(r3)3003; CHECK-NEXT: blr3004entry:3005 %or = or i64 %ptr, 999993006 %0 = inttoptr i64 %or to ptr3007 %1 = load atomic i32, ptr %0 monotonic, align 43008 ret i32 %13009}3010 3011; Function Attrs: nofree norecurse nounwind uwtable willreturn3012define dso_local zeroext i32 @ld_disjoint_align32_uint32_t_uint32_t(i64 %ptr) {3013; CHECK-P10-LABEL: ld_disjoint_align32_uint32_t_uint32_t:3014; CHECK-P10: # %bb.0: # %entry3015; CHECK-P10-NEXT: lis r4, -152643016; CHECK-P10-NEXT: and r3, r3, r43017; CHECK-P10-NEXT: plwz r3, 999990000(r3), 03018; CHECK-P10-NEXT: clrldi r3, r3, 323019; CHECK-P10-NEXT: blr3020;3021; CHECK-PREP10-LABEL: ld_disjoint_align32_uint32_t_uint32_t:3022; CHECK-PREP10: # %bb.0: # %entry3023; CHECK-PREP10-NEXT: lis r4, -152643024; CHECK-PREP10-NEXT: and r3, r3, r43025; CHECK-PREP10-NEXT: lis r4, 152583026; CHECK-PREP10-NEXT: ori r4, r4, 417123027; CHECK-PREP10-NEXT: lwzx r3, r3, r43028; CHECK-PREP10-NEXT: blr3029entry:3030 %and = and i64 %ptr, -10003415043031 %or = or i64 %and, 9999900003032 %0 = inttoptr i64 %or to ptr3033 %1 = load atomic i32, ptr %0 monotonic, align 163034 ret i32 %13035}3036 3037; Function Attrs: nofree norecurse nounwind uwtable willreturn3038define dso_local zeroext i32 @ld_not_disjoint64_uint32_t_uint32_t(i64 %ptr) {3039; CHECK-P10-LABEL: ld_not_disjoint64_uint32_t_uint32_t:3040; CHECK-P10: # %bb.0: # %entry3041; CHECK-P10-NEXT: pli r4, 2323042; CHECK-P10-NEXT: pli r5, 35675873293043; CHECK-P10-NEXT: rldimi r5, r4, 32, 03044; CHECK-P10-NEXT: or r3, r3, r53045; CHECK-P10-NEXT: lwz r3, 0(r3)3046; CHECK-P10-NEXT: blr3047;3048; CHECK-PREP10-LABEL: ld_not_disjoint64_uint32_t_uint32_t:3049; CHECK-PREP10: # %bb.0: # %entry3050; CHECK-PREP10-NEXT: li r4, 293051; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243052; CHECK-PREP10-NEXT: oris r4, r4, 544373053; CHECK-PREP10-NEXT: ori r4, r4, 40973054; CHECK-PREP10-NEXT: or r3, r3, r43055; CHECK-PREP10-NEXT: lwz r3, 0(r3)3056; CHECK-PREP10-NEXT: blr3057entry:3058 %or = or i64 %ptr, 10000000000013059 %0 = inttoptr i64 %or to ptr3060 %1 = load atomic i32, ptr %0 monotonic, align 43061 ret i32 %13062}3063 3064; Function Attrs: nofree norecurse nounwind uwtable willreturn3065define dso_local zeroext i32 @ld_disjoint_align64_uint32_t_uint32_t(i64 %ptr) {3066; CHECK-P10-LABEL: ld_disjoint_align64_uint32_t_uint32_t:3067; CHECK-P10: # %bb.0: # %entry3068; CHECK-P10-NEXT: pli r4, 2441406253069; CHECK-P10-NEXT: rldicr r3, r3, 0, 233070; CHECK-P10-NEXT: rldic r4, r4, 12, 243071; CHECK-P10-NEXT: lwzx r3, r3, r43072; CHECK-P10-NEXT: blr3073;3074; CHECK-PREP10-LABEL: ld_disjoint_align64_uint32_t_uint32_t:3075; CHECK-PREP10: # %bb.0: # %entry3076; CHECK-PREP10-NEXT: lis r4, 37253077; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233078; CHECK-PREP10-NEXT: ori r4, r4, 190253079; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243080; CHECK-PREP10-NEXT: lwzx r3, r3, r43081; CHECK-PREP10-NEXT: blr3082entry:3083 %and = and i64 %ptr, -10995116277763084 %or = or i64 %and, 10000000000003085 %0 = inttoptr i64 %or to ptr3086 %1 = load atomic i32, ptr %0 monotonic, align 40963087 ret i32 %13088}3089 3090; Function Attrs: nofree norecurse nounwind uwtable willreturn3091define dso_local zeroext i32 @ld_cst_align16_uint32_t_uint32_t() {3092; CHECK-LABEL: ld_cst_align16_uint32_t_uint32_t:3093; CHECK: # %bb.0: # %entry3094; CHECK-NEXT: lwz r3, 4080(0)3095; CHECK-NEXT: blr3096entry:3097 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 163098 ret i32 %03099}3100 3101; Function Attrs: nofree norecurse nounwind uwtable willreturn3102define dso_local zeroext i32 @ld_cst_align32_uint32_t_uint32_t() {3103; CHECK-LABEL: ld_cst_align32_uint32_t_uint32_t:3104; CHECK: # %bb.0: # %entry3105; CHECK-NEXT: lis r3, 1533106; CHECK-NEXT: lwz r3, -27108(r3)3107; CHECK-NEXT: blr3108entry:3109 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43110 ret i32 %03111}3112 3113; Function Attrs: nofree norecurse nounwind uwtable willreturn3114define dso_local zeroext i32 @ld_cst_align64_uint32_t_uint32_t() {3115; CHECK-P10-LABEL: ld_cst_align64_uint32_t_uint32_t:3116; CHECK-P10: # %bb.0: # %entry3117; CHECK-P10-NEXT: pli r3, 2441406253118; CHECK-P10-NEXT: rldic r3, r3, 12, 243119; CHECK-P10-NEXT: lwz r3, 0(r3)3120; CHECK-P10-NEXT: blr3121;3122; CHECK-PREP10-LABEL: ld_cst_align64_uint32_t_uint32_t:3123; CHECK-PREP10: # %bb.0: # %entry3124; CHECK-PREP10-NEXT: lis r3, 37253125; CHECK-PREP10-NEXT: ori r3, r3, 190253126; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243127; CHECK-PREP10-NEXT: lwz r3, 0(r3)3128; CHECK-PREP10-NEXT: blr3129entry:3130 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963131 ret i32 %03132}3133 3134; Function Attrs: nofree norecurse nounwind uwtable willreturn3135define dso_local zeroext i32 @ld_0_uint32_t_uint64_t(i64 %ptr) {3136; CHECK-LABEL: ld_0_uint32_t_uint64_t:3137; CHECK: # %bb.0: # %entry3138; CHECK-NEXT: ld r3, 0(r3)3139; CHECK-NEXT: clrldi r3, r3, 323140; CHECK-NEXT: blr3141entry:3142 %0 = inttoptr i64 %ptr to ptr3143 %1 = load atomic i64, ptr %0 monotonic, align 83144 %conv = trunc i64 %1 to i323145 ret i32 %conv3146}3147 3148; Function Attrs: nofree norecurse nounwind uwtable willreturn3149define dso_local zeroext i32 @ld_align16_uint32_t_uint64_t(ptr nocapture readonly %ptr) {3150; CHECK-LABEL: ld_align16_uint32_t_uint64_t:3151; CHECK: # %bb.0: # %entry3152; CHECK-NEXT: ld r3, 8(r3)3153; CHECK-NEXT: clrldi r3, r3, 323154; CHECK-NEXT: blr3155entry:3156 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83157 %0 = load atomic i64, ptr %add.ptr monotonic, align 83158 %conv = trunc i64 %0 to i323159 ret i32 %conv3160}3161 3162; Function Attrs: nofree norecurse nounwind uwtable willreturn3163define dso_local zeroext i32 @ld_align32_uint32_t_uint64_t(ptr nocapture readonly %ptr) {3164; CHECK-P10-LABEL: ld_align32_uint32_t_uint64_t:3165; CHECK-P10: # %bb.0: # %entry3166; CHECK-P10-NEXT: pld r3, 99999000(r3), 03167; CHECK-P10-NEXT: clrldi r3, r3, 323168; CHECK-P10-NEXT: blr3169;3170; CHECK-PREP10-LABEL: ld_align32_uint32_t_uint64_t:3171; CHECK-PREP10: # %bb.0: # %entry3172; CHECK-PREP10-NEXT: lis r4, 15253173; CHECK-PREP10-NEXT: ori r4, r4, 566003174; CHECK-PREP10-NEXT: ldx r3, r3, r43175; CHECK-PREP10-NEXT: clrldi r3, r3, 323176; CHECK-PREP10-NEXT: blr3177entry:3178 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003179 %0 = load atomic i64, ptr %add.ptr monotonic, align 83180 %conv = trunc i64 %0 to i323181 ret i32 %conv3182}3183 3184; Function Attrs: nofree norecurse nounwind uwtable willreturn3185define dso_local zeroext i32 @ld_align64_uint32_t_uint64_t(ptr nocapture readonly %ptr) {3186; CHECK-P10-LABEL: ld_align64_uint32_t_uint64_t:3187; CHECK-P10: # %bb.0: # %entry3188; CHECK-P10-NEXT: pli r4, 2441406253189; CHECK-P10-NEXT: rldic r4, r4, 12, 243190; CHECK-P10-NEXT: ldx r3, r3, r43191; CHECK-P10-NEXT: clrldi r3, r3, 323192; CHECK-P10-NEXT: blr3193;3194; CHECK-PREP10-LABEL: ld_align64_uint32_t_uint64_t:3195; CHECK-PREP10: # %bb.0: # %entry3196; CHECK-PREP10-NEXT: lis r4, 37253197; CHECK-PREP10-NEXT: ori r4, r4, 190253198; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243199; CHECK-PREP10-NEXT: ldx r3, r3, r43200; CHECK-PREP10-NEXT: clrldi r3, r3, 323201; CHECK-PREP10-NEXT: blr3202entry:3203 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003204 %0 = load atomic i64, ptr %add.ptr monotonic, align 83205 %conv = trunc i64 %0 to i323206 ret i32 %conv3207}3208 3209; Function Attrs: nofree norecurse nounwind uwtable willreturn3210define dso_local zeroext i32 @ld_reg_uint32_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {3211; CHECK-LABEL: ld_reg_uint32_t_uint64_t:3212; CHECK: # %bb.0: # %entry3213; CHECK-NEXT: ldx r3, r3, r43214; CHECK-NEXT: clrldi r3, r3, 323215; CHECK-NEXT: blr3216entry:3217 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3218 %0 = load atomic i64, ptr %add.ptr monotonic, align 83219 %conv = trunc i64 %0 to i323220 ret i32 %conv3221}3222 3223; Function Attrs: nofree norecurse nounwind uwtable willreturn3224define dso_local zeroext i32 @ld_or_uint32_t_uint64_t(i64 %ptr, i8 zeroext %off) {3225; CHECK-LABEL: ld_or_uint32_t_uint64_t:3226; CHECK: # %bb.0: # %entry3227; CHECK-NEXT: or r3, r4, r33228; CHECK-NEXT: ld r3, 0(r3)3229; CHECK-NEXT: clrldi r3, r3, 323230; CHECK-NEXT: blr3231entry:3232 %conv = zext i8 %off to i643233 %or = or i64 %conv, %ptr3234 %0 = inttoptr i64 %or to ptr3235 %1 = load atomic i64, ptr %0 monotonic, align 83236 %conv1 = trunc i64 %1 to i323237 ret i32 %conv13238}3239 3240; Function Attrs: nofree norecurse nounwind uwtable willreturn3241define dso_local zeroext i32 @ld_not_disjoint16_uint32_t_uint64_t(i64 %ptr) {3242; CHECK-LABEL: ld_not_disjoint16_uint32_t_uint64_t:3243; CHECK: # %bb.0: # %entry3244; CHECK-NEXT: ori r3, r3, 63245; CHECK-NEXT: ld r3, 0(r3)3246; CHECK-NEXT: clrldi r3, r3, 323247; CHECK-NEXT: blr3248entry:3249 %or = or i64 %ptr, 63250 %0 = inttoptr i64 %or to ptr3251 %1 = load atomic i64, ptr %0 monotonic, align 83252 %conv = trunc i64 %1 to i323253 ret i32 %conv3254}3255 3256; Function Attrs: nofree norecurse nounwind uwtable willreturn3257define dso_local zeroext i32 @ld_disjoint_align16_uint32_t_uint64_t(i64 %ptr) {3258; CHECK-LABEL: ld_disjoint_align16_uint32_t_uint64_t:3259; CHECK: # %bb.0: # %entry3260; CHECK-NEXT: rldicr r3, r3, 0, 513261; CHECK-NEXT: ld r3, 24(r3)3262; CHECK-NEXT: clrldi r3, r3, 323263; CHECK-NEXT: blr3264entry:3265 %and = and i64 %ptr, -40963266 %or = or i64 %and, 243267 %0 = inttoptr i64 %or to ptr3268 %1 = load atomic i64, ptr %0 monotonic, align 83269 %conv = trunc i64 %1 to i323270 ret i32 %conv3271}3272 3273; Function Attrs: nofree norecurse nounwind uwtable willreturn3274define dso_local zeroext i32 @ld_not_disjoint32_uint32_t_uint64_t(i64 %ptr) {3275; CHECK-LABEL: ld_not_disjoint32_uint32_t_uint64_t:3276; CHECK: # %bb.0: # %entry3277; CHECK-NEXT: ori r3, r3, 344633278; CHECK-NEXT: oris r3, r3, 13279; CHECK-NEXT: ld r3, 0(r3)3280; CHECK-NEXT: clrldi r3, r3, 323281; CHECK-NEXT: blr3282entry:3283 %or = or i64 %ptr, 999993284 %0 = inttoptr i64 %or to ptr3285 %1 = load atomic i64, ptr %0 monotonic, align 83286 %conv = trunc i64 %1 to i323287 ret i32 %conv3288}3289 3290; Function Attrs: nofree norecurse nounwind uwtable willreturn3291define dso_local zeroext i32 @ld_disjoint_align32_uint32_t_uint64_t(i64 %ptr) {3292; CHECK-P10-LABEL: ld_disjoint_align32_uint32_t_uint64_t:3293; CHECK-P10: # %bb.0: # %entry3294; CHECK-P10-NEXT: lis r4, -152643295; CHECK-P10-NEXT: and r3, r3, r43296; CHECK-P10-NEXT: pld r3, 999990000(r3), 03297; CHECK-P10-NEXT: clrldi r3, r3, 323298; CHECK-P10-NEXT: blr3299;3300; CHECK-PREP10-LABEL: ld_disjoint_align32_uint32_t_uint64_t:3301; CHECK-PREP10: # %bb.0: # %entry3302; CHECK-PREP10-NEXT: lis r4, -152643303; CHECK-PREP10-NEXT: and r3, r3, r43304; CHECK-PREP10-NEXT: lis r4, 152583305; CHECK-PREP10-NEXT: ori r4, r4, 417123306; CHECK-PREP10-NEXT: ldx r3, r3, r43307; CHECK-PREP10-NEXT: clrldi r3, r3, 323308; CHECK-PREP10-NEXT: blr3309entry:3310 %and = and i64 %ptr, -10003415043311 %or = or i64 %and, 9999900003312 %0 = inttoptr i64 %or to ptr3313 %1 = load atomic i64, ptr %0 monotonic, align 163314 %conv = trunc i64 %1 to i323315 ret i32 %conv3316}3317 3318; Function Attrs: nofree norecurse nounwind uwtable willreturn3319define dso_local zeroext i32 @ld_not_disjoint64_uint32_t_uint64_t(i64 %ptr) {3320; CHECK-P10-LABEL: ld_not_disjoint64_uint32_t_uint64_t:3321; CHECK-P10: # %bb.0: # %entry3322; CHECK-P10-NEXT: pli r4, 2323323; CHECK-P10-NEXT: pli r5, 35675873293324; CHECK-P10-NEXT: rldimi r5, r4, 32, 03325; CHECK-P10-NEXT: or r3, r3, r53326; CHECK-P10-NEXT: ld r3, 0(r3)3327; CHECK-P10-NEXT: clrldi r3, r3, 323328; CHECK-P10-NEXT: blr3329;3330; CHECK-PREP10-LABEL: ld_not_disjoint64_uint32_t_uint64_t:3331; CHECK-PREP10: # %bb.0: # %entry3332; CHECK-PREP10-NEXT: li r4, 293333; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243334; CHECK-PREP10-NEXT: oris r4, r4, 544373335; CHECK-PREP10-NEXT: ori r4, r4, 40973336; CHECK-PREP10-NEXT: or r3, r3, r43337; CHECK-PREP10-NEXT: ld r3, 0(r3)3338; CHECK-PREP10-NEXT: clrldi r3, r3, 323339; CHECK-PREP10-NEXT: blr3340entry:3341 %or = or i64 %ptr, 10000000000013342 %0 = inttoptr i64 %or to ptr3343 %1 = load atomic i64, ptr %0 monotonic, align 83344 %conv = trunc i64 %1 to i323345 ret i32 %conv3346}3347 3348; Function Attrs: nofree norecurse nounwind uwtable willreturn3349define dso_local zeroext i32 @ld_disjoint_align64_uint32_t_uint64_t(i64 %ptr) {3350; CHECK-P10-LABEL: ld_disjoint_align64_uint32_t_uint64_t:3351; CHECK-P10: # %bb.0: # %entry3352; CHECK-P10-NEXT: pli r4, 2441406253353; CHECK-P10-NEXT: rldicr r3, r3, 0, 233354; CHECK-P10-NEXT: rldic r4, r4, 12, 243355; CHECK-P10-NEXT: ldx r3, r3, r43356; CHECK-P10-NEXT: clrldi r3, r3, 323357; CHECK-P10-NEXT: blr3358;3359; CHECK-PREP10-LABEL: ld_disjoint_align64_uint32_t_uint64_t:3360; CHECK-PREP10: # %bb.0: # %entry3361; CHECK-PREP10-NEXT: lis r4, 37253362; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233363; CHECK-PREP10-NEXT: ori r4, r4, 190253364; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243365; CHECK-PREP10-NEXT: ldx r3, r3, r43366; CHECK-PREP10-NEXT: clrldi r3, r3, 323367; CHECK-PREP10-NEXT: blr3368entry:3369 %and = and i64 %ptr, -10995116277763370 %or = or i64 %and, 10000000000003371 %0 = inttoptr i64 %or to ptr3372 %1 = load atomic i64, ptr %0 monotonic, align 40963373 %conv = trunc i64 %1 to i323374 ret i32 %conv3375}3376 3377; Function Attrs: nofree norecurse nounwind uwtable willreturn3378define dso_local zeroext i32 @ld_cst_align16_uint32_t_uint64_t() {3379; CHECK-LABEL: ld_cst_align16_uint32_t_uint64_t:3380; CHECK: # %bb.0: # %entry3381; CHECK-NEXT: ld r3, 4080(0)3382; CHECK-NEXT: clrldi r3, r3, 323383; CHECK-NEXT: blr3384entry:3385 %0 = load atomic i64, ptr inttoptr (i64 4080 to ptr) monotonic, align 163386 %conv = trunc i64 %0 to i323387 ret i32 %conv3388}3389 3390; Function Attrs: nofree norecurse nounwind uwtable willreturn3391define dso_local zeroext i32 @ld_cst_align32_uint32_t_uint64_t() {3392; CHECK-LABEL: ld_cst_align32_uint32_t_uint64_t:3393; CHECK: # %bb.0: # %entry3394; CHECK-NEXT: lis r3, 1533395; CHECK-NEXT: ld r3, -27108(r3)3396; CHECK-NEXT: clrldi r3, r3, 323397; CHECK-NEXT: blr3398entry:3399 %0 = load atomic i64, ptr inttoptr (i64 9999900 to ptr) monotonic, align 83400 %conv = trunc i64 %0 to i323401 ret i32 %conv3402}3403 3404; Function Attrs: nofree norecurse nounwind uwtable willreturn3405define dso_local zeroext i32 @ld_cst_align64_uint32_t_uint64_t() {3406; CHECK-P10-LABEL: ld_cst_align64_uint32_t_uint64_t:3407; CHECK-P10: # %bb.0: # %entry3408; CHECK-P10-NEXT: pli r3, 2441406253409; CHECK-P10-NEXT: rldic r3, r3, 12, 243410; CHECK-P10-NEXT: ld r3, 0(r3)3411; CHECK-P10-NEXT: clrldi r3, r3, 323412; CHECK-P10-NEXT: blr3413;3414; CHECK-PREP10-LABEL: ld_cst_align64_uint32_t_uint64_t:3415; CHECK-PREP10: # %bb.0: # %entry3416; CHECK-PREP10-NEXT: lis r3, 37253417; CHECK-PREP10-NEXT: ori r3, r3, 190253418; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243419; CHECK-PREP10-NEXT: ld r3, 0(r3)3420; CHECK-PREP10-NEXT: clrldi r3, r3, 323421; CHECK-PREP10-NEXT: blr3422entry:3423 %0 = load atomic i64, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963424 %conv = trunc i64 %0 to i323425 ret i32 %conv3426}3427 3428; Function Attrs: nofree norecurse nounwind uwtable willreturn3429define dso_local void @st_0_uint32_t_uint8_t(i64 %ptr, i32 zeroext %str) {3430; CHECK-LABEL: st_0_uint32_t_uint8_t:3431; CHECK: # %bb.0: # %entry3432; CHECK-NEXT: stb r4, 0(r3)3433; CHECK-NEXT: blr3434entry:3435 %0 = inttoptr i64 %ptr to ptr3436 %conv = trunc i32 %str to i83437 store atomic i8 %conv, ptr %0 monotonic, align 13438 ret void3439}3440 3441; Function Attrs: nofree norecurse nounwind uwtable willreturn3442define dso_local void @st_align16_uint32_t_uint8_t(ptr nocapture %ptr, i32 zeroext %str) {3443; CHECK-LABEL: st_align16_uint32_t_uint8_t:3444; CHECK: # %bb.0: # %entry3445; CHECK-NEXT: stb r4, 8(r3)3446; CHECK-NEXT: blr3447entry:3448 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83449 %conv = trunc i32 %str to i83450 store atomic i8 %conv, ptr %add.ptr monotonic, align 13451 ret void3452}3453 3454; Function Attrs: nofree norecurse nounwind uwtable willreturn3455define dso_local void @st_align32_uint32_t_uint8_t(ptr nocapture %ptr, i32 zeroext %str) {3456; CHECK-P10-LABEL: st_align32_uint32_t_uint8_t:3457; CHECK-P10: # %bb.0: # %entry3458; CHECK-P10-NEXT: pstb r4, 99999000(r3), 03459; CHECK-P10-NEXT: blr3460;3461; CHECK-PREP10-LABEL: st_align32_uint32_t_uint8_t:3462; CHECK-PREP10: # %bb.0: # %entry3463; CHECK-PREP10-NEXT: lis r5, 15253464; CHECK-PREP10-NEXT: ori r5, r5, 566003465; CHECK-PREP10-NEXT: stbx r4, r3, r53466; CHECK-PREP10-NEXT: blr3467entry:3468 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003469 %conv = trunc i32 %str to i83470 store atomic i8 %conv, ptr %add.ptr monotonic, align 13471 ret void3472}3473 3474; Function Attrs: nofree norecurse nounwind uwtable willreturn3475define dso_local void @st_align64_uint32_t_uint8_t(ptr nocapture %ptr, i32 zeroext %str) {3476; CHECK-P10-LABEL: st_align64_uint32_t_uint8_t:3477; CHECK-P10: # %bb.0: # %entry3478; CHECK-P10-NEXT: pli r5, 2441406253479; CHECK-P10-NEXT: rldic r5, r5, 12, 243480; CHECK-P10-NEXT: stbx r4, r3, r53481; CHECK-P10-NEXT: blr3482;3483; CHECK-PREP10-LABEL: st_align64_uint32_t_uint8_t:3484; CHECK-PREP10: # %bb.0: # %entry3485; CHECK-PREP10-NEXT: lis r5, 37253486; CHECK-PREP10-NEXT: ori r5, r5, 190253487; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243488; CHECK-PREP10-NEXT: stbx r4, r3, r53489; CHECK-PREP10-NEXT: blr3490entry:3491 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003492 %conv = trunc i32 %str to i83493 store atomic i8 %conv, ptr %add.ptr monotonic, align 13494 ret void3495}3496 3497; Function Attrs: nofree norecurse nounwind uwtable willreturn3498define dso_local void @st_reg_uint32_t_uint8_t(ptr nocapture %ptr, i64 %off, i32 zeroext %str) {3499; CHECK-LABEL: st_reg_uint32_t_uint8_t:3500; CHECK: # %bb.0: # %entry3501; CHECK-NEXT: stbx r5, r3, r43502; CHECK-NEXT: blr3503entry:3504 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3505 %conv = trunc i32 %str to i83506 store atomic i8 %conv, ptr %add.ptr monotonic, align 13507 ret void3508}3509 3510; Function Attrs: nofree norecurse nounwind uwtable willreturn3511define dso_local void @st_or1_uint32_t_uint8_t(i64 %ptr, i8 zeroext %off, i32 zeroext %str) {3512; CHECK-LABEL: st_or1_uint32_t_uint8_t:3513; CHECK: # %bb.0: # %entry3514; CHECK-NEXT: or r3, r4, r33515; CHECK-NEXT: stb r5, 0(r3)3516; CHECK-NEXT: blr3517entry:3518 %conv = zext i8 %off to i643519 %or = or i64 %conv, %ptr3520 %0 = inttoptr i64 %or to ptr3521 %conv1 = trunc i32 %str to i83522 store atomic i8 %conv1, ptr %0 monotonic, align 13523 ret void3524}3525 3526; Function Attrs: nofree norecurse nounwind uwtable willreturn3527define dso_local void @st_not_disjoint16_uint32_t_uint8_t(i64 %ptr, i32 zeroext %str) {3528; CHECK-LABEL: st_not_disjoint16_uint32_t_uint8_t:3529; CHECK: # %bb.0: # %entry3530; CHECK-NEXT: ori r3, r3, 63531; CHECK-NEXT: stb r4, 0(r3)3532; CHECK-NEXT: blr3533entry:3534 %or = or i64 %ptr, 63535 %0 = inttoptr i64 %or to ptr3536 %conv = trunc i32 %str to i83537 store atomic i8 %conv, ptr %0 monotonic, align 13538 ret void3539}3540 3541; Function Attrs: nofree norecurse nounwind uwtable willreturn3542define dso_local void @st_disjoint_align16_uint32_t_uint8_t(i64 %ptr, i32 zeroext %str) {3543; CHECK-LABEL: st_disjoint_align16_uint32_t_uint8_t:3544; CHECK: # %bb.0: # %entry3545; CHECK-NEXT: rldicr r3, r3, 0, 513546; CHECK-NEXT: stb r4, 24(r3)3547; CHECK-NEXT: blr3548entry:3549 %and = and i64 %ptr, -40963550 %or = or i64 %and, 243551 %0 = inttoptr i64 %or to ptr3552 %conv = trunc i32 %str to i83553 store atomic i8 %conv, ptr %0 monotonic, align 83554 ret void3555}3556 3557; Function Attrs: nofree norecurse nounwind uwtable willreturn3558define dso_local void @st_not_disjoint32_uint32_t_uint8_t(i64 %ptr, i32 zeroext %str) {3559; CHECK-LABEL: st_not_disjoint32_uint32_t_uint8_t:3560; CHECK: # %bb.0: # %entry3561; CHECK-NEXT: ori r3, r3, 344633562; CHECK-NEXT: oris r3, r3, 13563; CHECK-NEXT: stb r4, 0(r3)3564; CHECK-NEXT: blr3565entry:3566 %or = or i64 %ptr, 999993567 %0 = inttoptr i64 %or to ptr3568 %conv = trunc i32 %str to i83569 store atomic i8 %conv, ptr %0 monotonic, align 13570 ret void3571}3572 3573; Function Attrs: nofree norecurse nounwind uwtable willreturn3574define dso_local void @st_disjoint_align32_uint32_t_uint8_t(i64 %ptr, i32 zeroext %str) {3575; CHECK-P10-LABEL: st_disjoint_align32_uint32_t_uint8_t:3576; CHECK-P10: # %bb.0: # %entry3577; CHECK-P10-NEXT: lis r5, -152643578; CHECK-P10-NEXT: and r3, r3, r53579; CHECK-P10-NEXT: pstb r4, 999990000(r3), 03580; CHECK-P10-NEXT: blr3581;3582; CHECK-PREP10-LABEL: st_disjoint_align32_uint32_t_uint8_t:3583; CHECK-PREP10: # %bb.0: # %entry3584; CHECK-PREP10-NEXT: lis r5, -152643585; CHECK-PREP10-NEXT: and r3, r3, r53586; CHECK-PREP10-NEXT: lis r5, 152583587; CHECK-PREP10-NEXT: ori r5, r5, 417123588; CHECK-PREP10-NEXT: stbx r4, r3, r53589; CHECK-PREP10-NEXT: blr3590entry:3591 %and = and i64 %ptr, -10003415043592 %or = or i64 %and, 9999900003593 %0 = inttoptr i64 %or to ptr3594 %conv = trunc i32 %str to i83595 store atomic i8 %conv, ptr %0 monotonic, align 163596 ret void3597}3598 3599; Function Attrs: nofree norecurse nounwind uwtable willreturn3600define dso_local void @st_not_disjoint64_uint32_t_uint8_t(i64 %ptr, i32 zeroext %str) {3601; CHECK-P10-LABEL: st_not_disjoint64_uint32_t_uint8_t:3602; CHECK-P10: # %bb.0: # %entry3603; CHECK-P10-NEXT: pli r5, 2323604; CHECK-P10-NEXT: pli r6, 35675873293605; CHECK-P10-NEXT: rldimi r6, r5, 32, 03606; CHECK-P10-NEXT: or r3, r3, r63607; CHECK-P10-NEXT: stb r4, 0(r3)3608; CHECK-P10-NEXT: blr3609;3610; CHECK-PREP10-LABEL: st_not_disjoint64_uint32_t_uint8_t:3611; CHECK-PREP10: # %bb.0: # %entry3612; CHECK-PREP10-NEXT: li r5, 293613; CHECK-PREP10-NEXT: rldic r5, r5, 35, 243614; CHECK-PREP10-NEXT: oris r5, r5, 544373615; CHECK-PREP10-NEXT: ori r5, r5, 40973616; CHECK-PREP10-NEXT: or r3, r3, r53617; CHECK-PREP10-NEXT: stb r4, 0(r3)3618; CHECK-PREP10-NEXT: blr3619entry:3620 %or = or i64 %ptr, 10000000000013621 %0 = inttoptr i64 %or to ptr3622 %conv = trunc i32 %str to i83623 store atomic i8 %conv, ptr %0 monotonic, align 13624 ret void3625}3626 3627; Function Attrs: nofree norecurse nounwind uwtable willreturn3628define dso_local void @st_disjoint_align64_uint32_t_uint8_t(i64 %ptr, i32 zeroext %str) {3629; CHECK-P10-LABEL: st_disjoint_align64_uint32_t_uint8_t:3630; CHECK-P10: # %bb.0: # %entry3631; CHECK-P10-NEXT: pli r5, 2441406253632; CHECK-P10-NEXT: rldicr r3, r3, 0, 233633; CHECK-P10-NEXT: rldic r5, r5, 12, 243634; CHECK-P10-NEXT: stbx r4, r3, r53635; CHECK-P10-NEXT: blr3636;3637; CHECK-PREP10-LABEL: st_disjoint_align64_uint32_t_uint8_t:3638; CHECK-PREP10: # %bb.0: # %entry3639; CHECK-PREP10-NEXT: lis r5, 37253640; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233641; CHECK-PREP10-NEXT: ori r5, r5, 190253642; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243643; CHECK-PREP10-NEXT: stbx r4, r3, r53644; CHECK-PREP10-NEXT: blr3645entry:3646 %and = and i64 %ptr, -10995116277763647 %or = or i64 %and, 10000000000003648 %0 = inttoptr i64 %or to ptr3649 %conv = trunc i32 %str to i83650 store atomic i8 %conv, ptr %0 monotonic, align 40963651 ret void3652}3653 3654; Function Attrs: nofree norecurse nounwind uwtable willreturn3655define dso_local void @st_cst_align16_uint32_t_uint8_t(i32 zeroext %str) {3656; CHECK-LABEL: st_cst_align16_uint32_t_uint8_t:3657; CHECK: # %bb.0: # %entry3658; CHECK-NEXT: stb r3, 4080(0)3659; CHECK-NEXT: blr3660entry:3661 %conv = trunc i32 %str to i83662 store atomic i8 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 163663 ret void3664}3665 3666; Function Attrs: nofree norecurse nounwind uwtable willreturn3667define dso_local void @st_cst_align32_uint32_t_uint8_t(i32 zeroext %str) {3668; CHECK-LABEL: st_cst_align32_uint32_t_uint8_t:3669; CHECK: # %bb.0: # %entry3670; CHECK-NEXT: lis r4, 1533671; CHECK-NEXT: stb r3, -27108(r4)3672; CHECK-NEXT: blr3673entry:3674 %conv = trunc i32 %str to i83675 store atomic i8 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43676 ret void3677}3678 3679; Function Attrs: nofree norecurse nounwind uwtable willreturn3680define dso_local void @st_cst_align64_uint32_t_uint8_t(i32 zeroext %str) {3681; CHECK-P10-LABEL: st_cst_align64_uint32_t_uint8_t:3682; CHECK-P10: # %bb.0: # %entry3683; CHECK-P10-NEXT: pli r4, 2441406253684; CHECK-P10-NEXT: rldic r4, r4, 12, 243685; CHECK-P10-NEXT: stb r3, 0(r4)3686; CHECK-P10-NEXT: blr3687;3688; CHECK-PREP10-LABEL: st_cst_align64_uint32_t_uint8_t:3689; CHECK-PREP10: # %bb.0: # %entry3690; CHECK-PREP10-NEXT: lis r4, 37253691; CHECK-PREP10-NEXT: ori r4, r4, 190253692; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243693; CHECK-PREP10-NEXT: stb r3, 0(r4)3694; CHECK-PREP10-NEXT: blr3695entry:3696 %conv = trunc i32 %str to i83697 store atomic i8 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963698 ret void3699}3700 3701; Function Attrs: nofree norecurse nounwind uwtable willreturn3702define dso_local void @st_0_uint32_t_uint16_t(i64 %ptr, i32 zeroext %str) {3703; CHECK-LABEL: st_0_uint32_t_uint16_t:3704; CHECK: # %bb.0: # %entry3705; CHECK-NEXT: sth r4, 0(r3)3706; CHECK-NEXT: blr3707entry:3708 %0 = inttoptr i64 %ptr to ptr3709 %conv = trunc i32 %str to i163710 store atomic i16 %conv, ptr %0 monotonic, align 23711 ret void3712}3713 3714; Function Attrs: nofree norecurse nounwind uwtable willreturn3715define dso_local void @st_align16_uint32_t_uint16_t(ptr nocapture %ptr, i32 zeroext %str) {3716; CHECK-LABEL: st_align16_uint32_t_uint16_t:3717; CHECK: # %bb.0: # %entry3718; CHECK-NEXT: sth r4, 8(r3)3719; CHECK-NEXT: blr3720entry:3721 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83722 %conv = trunc i32 %str to i163723 store atomic i16 %conv, ptr %add.ptr monotonic, align 23724 ret void3725}3726 3727; Function Attrs: nofree norecurse nounwind uwtable willreturn3728define dso_local void @st_align32_uint32_t_uint16_t(ptr nocapture %ptr, i32 zeroext %str) {3729; CHECK-P10-LABEL: st_align32_uint32_t_uint16_t:3730; CHECK-P10: # %bb.0: # %entry3731; CHECK-P10-NEXT: psth r4, 99999000(r3), 03732; CHECK-P10-NEXT: blr3733;3734; CHECK-PREP10-LABEL: st_align32_uint32_t_uint16_t:3735; CHECK-PREP10: # %bb.0: # %entry3736; CHECK-PREP10-NEXT: lis r5, 15253737; CHECK-PREP10-NEXT: ori r5, r5, 566003738; CHECK-PREP10-NEXT: sthx r4, r3, r53739; CHECK-PREP10-NEXT: blr3740entry:3741 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003742 %conv = trunc i32 %str to i163743 store atomic i16 %conv, ptr %add.ptr monotonic, align 23744 ret void3745}3746 3747; Function Attrs: nofree norecurse nounwind uwtable willreturn3748define dso_local void @st_align64_uint32_t_uint16_t(ptr nocapture %ptr, i32 zeroext %str) {3749; CHECK-P10-LABEL: st_align64_uint32_t_uint16_t:3750; CHECK-P10: # %bb.0: # %entry3751; CHECK-P10-NEXT: pli r5, 2441406253752; CHECK-P10-NEXT: rldic r5, r5, 12, 243753; CHECK-P10-NEXT: sthx r4, r3, r53754; CHECK-P10-NEXT: blr3755;3756; CHECK-PREP10-LABEL: st_align64_uint32_t_uint16_t:3757; CHECK-PREP10: # %bb.0: # %entry3758; CHECK-PREP10-NEXT: lis r5, 37253759; CHECK-PREP10-NEXT: ori r5, r5, 190253760; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243761; CHECK-PREP10-NEXT: sthx r4, r3, r53762; CHECK-PREP10-NEXT: blr3763entry:3764 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003765 %conv = trunc i32 %str to i163766 store atomic i16 %conv, ptr %add.ptr monotonic, align 23767 ret void3768}3769 3770; Function Attrs: nofree norecurse nounwind uwtable willreturn3771define dso_local void @st_reg_uint32_t_uint16_t(ptr nocapture %ptr, i64 %off, i32 zeroext %str) {3772; CHECK-LABEL: st_reg_uint32_t_uint16_t:3773; CHECK: # %bb.0: # %entry3774; CHECK-NEXT: sthx r5, r3, r43775; CHECK-NEXT: blr3776entry:3777 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3778 %conv = trunc i32 %str to i163779 store atomic i16 %conv, ptr %add.ptr monotonic, align 23780 ret void3781}3782 3783; Function Attrs: nofree norecurse nounwind uwtable willreturn3784define dso_local void @st_or1_uint32_t_uint16_t(i64 %ptr, i8 zeroext %off, i32 zeroext %str) {3785; CHECK-LABEL: st_or1_uint32_t_uint16_t:3786; CHECK: # %bb.0: # %entry3787; CHECK-NEXT: or r3, r4, r33788; CHECK-NEXT: sth r5, 0(r3)3789; CHECK-NEXT: blr3790entry:3791 %conv = zext i8 %off to i643792 %or = or i64 %conv, %ptr3793 %0 = inttoptr i64 %or to ptr3794 %conv1 = trunc i32 %str to i163795 store atomic i16 %conv1, ptr %0 monotonic, align 23796 ret void3797}3798 3799; Function Attrs: nofree norecurse nounwind uwtable willreturn3800define dso_local void @st_not_disjoint16_uint32_t_uint16_t(i64 %ptr, i32 zeroext %str) {3801; CHECK-LABEL: st_not_disjoint16_uint32_t_uint16_t:3802; CHECK: # %bb.0: # %entry3803; CHECK-NEXT: ori r3, r3, 63804; CHECK-NEXT: sth r4, 0(r3)3805; CHECK-NEXT: blr3806entry:3807 %or = or i64 %ptr, 63808 %0 = inttoptr i64 %or to ptr3809 %conv = trunc i32 %str to i163810 store atomic i16 %conv, ptr %0 monotonic, align 23811 ret void3812}3813 3814; Function Attrs: nofree norecurse nounwind uwtable willreturn3815define dso_local void @st_disjoint_align16_uint32_t_uint16_t(i64 %ptr, i32 zeroext %str) {3816; CHECK-LABEL: st_disjoint_align16_uint32_t_uint16_t:3817; CHECK: # %bb.0: # %entry3818; CHECK-NEXT: rldicr r3, r3, 0, 513819; CHECK-NEXT: sth r4, 24(r3)3820; CHECK-NEXT: blr3821entry:3822 %and = and i64 %ptr, -40963823 %or = or i64 %and, 243824 %0 = inttoptr i64 %or to ptr3825 %conv = trunc i32 %str to i163826 store atomic i16 %conv, ptr %0 monotonic, align 83827 ret void3828}3829 3830; Function Attrs: nofree norecurse nounwind uwtable willreturn3831define dso_local void @st_not_disjoint32_uint32_t_uint16_t(i64 %ptr, i32 zeroext %str) {3832; CHECK-LABEL: st_not_disjoint32_uint32_t_uint16_t:3833; CHECK: # %bb.0: # %entry3834; CHECK-NEXT: ori r3, r3, 344633835; CHECK-NEXT: oris r3, r3, 13836; CHECK-NEXT: sth r4, 0(r3)3837; CHECK-NEXT: blr3838entry:3839 %or = or i64 %ptr, 999993840 %0 = inttoptr i64 %or to ptr3841 %conv = trunc i32 %str to i163842 store atomic i16 %conv, ptr %0 monotonic, align 23843 ret void3844}3845 3846; Function Attrs: nofree norecurse nounwind uwtable willreturn3847define dso_local void @st_disjoint_align32_uint32_t_uint16_t(i64 %ptr, i32 zeroext %str) {3848; CHECK-P10-LABEL: st_disjoint_align32_uint32_t_uint16_t:3849; CHECK-P10: # %bb.0: # %entry3850; CHECK-P10-NEXT: lis r5, -152643851; CHECK-P10-NEXT: and r3, r3, r53852; CHECK-P10-NEXT: psth r4, 999990000(r3), 03853; CHECK-P10-NEXT: blr3854;3855; CHECK-PREP10-LABEL: st_disjoint_align32_uint32_t_uint16_t:3856; CHECK-PREP10: # %bb.0: # %entry3857; CHECK-PREP10-NEXT: lis r5, -152643858; CHECK-PREP10-NEXT: and r3, r3, r53859; CHECK-PREP10-NEXT: lis r5, 152583860; CHECK-PREP10-NEXT: ori r5, r5, 417123861; CHECK-PREP10-NEXT: sthx r4, r3, r53862; CHECK-PREP10-NEXT: blr3863entry:3864 %and = and i64 %ptr, -10003415043865 %or = or i64 %and, 9999900003866 %0 = inttoptr i64 %or to ptr3867 %conv = trunc i32 %str to i163868 store atomic i16 %conv, ptr %0 monotonic, align 163869 ret void3870}3871 3872; Function Attrs: nofree norecurse nounwind uwtable willreturn3873define dso_local void @st_not_disjoint64_uint32_t_uint16_t(i64 %ptr, i32 zeroext %str) {3874; CHECK-P10-LABEL: st_not_disjoint64_uint32_t_uint16_t:3875; CHECK-P10: # %bb.0: # %entry3876; CHECK-P10-NEXT: pli r5, 2323877; CHECK-P10-NEXT: pli r6, 35675873293878; CHECK-P10-NEXT: rldimi r6, r5, 32, 03879; CHECK-P10-NEXT: or r3, r3, r63880; CHECK-P10-NEXT: sth r4, 0(r3)3881; CHECK-P10-NEXT: blr3882;3883; CHECK-PREP10-LABEL: st_not_disjoint64_uint32_t_uint16_t:3884; CHECK-PREP10: # %bb.0: # %entry3885; CHECK-PREP10-NEXT: li r5, 293886; CHECK-PREP10-NEXT: rldic r5, r5, 35, 243887; CHECK-PREP10-NEXT: oris r5, r5, 544373888; CHECK-PREP10-NEXT: ori r5, r5, 40973889; CHECK-PREP10-NEXT: or r3, r3, r53890; CHECK-PREP10-NEXT: sth r4, 0(r3)3891; CHECK-PREP10-NEXT: blr3892entry:3893 %or = or i64 %ptr, 10000000000013894 %0 = inttoptr i64 %or to ptr3895 %conv = trunc i32 %str to i163896 store atomic i16 %conv, ptr %0 monotonic, align 23897 ret void3898}3899 3900; Function Attrs: nofree norecurse nounwind uwtable willreturn3901define dso_local void @st_disjoint_align64_uint32_t_uint16_t(i64 %ptr, i32 zeroext %str) {3902; CHECK-P10-LABEL: st_disjoint_align64_uint32_t_uint16_t:3903; CHECK-P10: # %bb.0: # %entry3904; CHECK-P10-NEXT: pli r5, 2441406253905; CHECK-P10-NEXT: rldicr r3, r3, 0, 233906; CHECK-P10-NEXT: rldic r5, r5, 12, 243907; CHECK-P10-NEXT: sthx r4, r3, r53908; CHECK-P10-NEXT: blr3909;3910; CHECK-PREP10-LABEL: st_disjoint_align64_uint32_t_uint16_t:3911; CHECK-PREP10: # %bb.0: # %entry3912; CHECK-PREP10-NEXT: lis r5, 37253913; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233914; CHECK-PREP10-NEXT: ori r5, r5, 190253915; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243916; CHECK-PREP10-NEXT: sthx r4, r3, r53917; CHECK-PREP10-NEXT: blr3918entry:3919 %and = and i64 %ptr, -10995116277763920 %or = or i64 %and, 10000000000003921 %0 = inttoptr i64 %or to ptr3922 %conv = trunc i32 %str to i163923 store atomic i16 %conv, ptr %0 monotonic, align 40963924 ret void3925}3926 3927; Function Attrs: nofree norecurse nounwind uwtable willreturn3928define dso_local void @st_cst_align16_uint32_t_uint16_t(i32 zeroext %str) {3929; CHECK-LABEL: st_cst_align16_uint32_t_uint16_t:3930; CHECK: # %bb.0: # %entry3931; CHECK-NEXT: sth r3, 4080(0)3932; CHECK-NEXT: blr3933entry:3934 %conv = trunc i32 %str to i163935 store atomic i16 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 163936 ret void3937}3938 3939; Function Attrs: nofree norecurse nounwind uwtable willreturn3940define dso_local void @st_cst_align32_uint32_t_uint16_t(i32 zeroext %str) {3941; CHECK-LABEL: st_cst_align32_uint32_t_uint16_t:3942; CHECK: # %bb.0: # %entry3943; CHECK-NEXT: lis r4, 1533944; CHECK-NEXT: sth r3, -27108(r4)3945; CHECK-NEXT: blr3946entry:3947 %conv = trunc i32 %str to i163948 store atomic i16 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43949 ret void3950}3951 3952; Function Attrs: nofree norecurse nounwind uwtable willreturn3953define dso_local void @st_cst_align64_uint32_t_uint16_t(i32 zeroext %str) {3954; CHECK-P10-LABEL: st_cst_align64_uint32_t_uint16_t:3955; CHECK-P10: # %bb.0: # %entry3956; CHECK-P10-NEXT: pli r4, 2441406253957; CHECK-P10-NEXT: rldic r4, r4, 12, 243958; CHECK-P10-NEXT: sth r3, 0(r4)3959; CHECK-P10-NEXT: blr3960;3961; CHECK-PREP10-LABEL: st_cst_align64_uint32_t_uint16_t:3962; CHECK-PREP10: # %bb.0: # %entry3963; CHECK-PREP10-NEXT: lis r4, 37253964; CHECK-PREP10-NEXT: ori r4, r4, 190253965; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243966; CHECK-PREP10-NEXT: sth r3, 0(r4)3967; CHECK-PREP10-NEXT: blr3968entry:3969 %conv = trunc i32 %str to i163970 store atomic i16 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963971 ret void3972}3973 3974; Function Attrs: nofree norecurse nounwind uwtable willreturn3975define dso_local void @st_0_uint32_t_uint32_t(i64 %ptr, i32 zeroext %str) {3976; CHECK-LABEL: st_0_uint32_t_uint32_t:3977; CHECK: # %bb.0: # %entry3978; CHECK-NEXT: stw r4, 0(r3)3979; CHECK-NEXT: blr3980entry:3981 %0 = inttoptr i64 %ptr to ptr3982 store atomic i32 %str, ptr %0 monotonic, align 43983 ret void3984}3985 3986; Function Attrs: nofree norecurse nounwind uwtable willreturn3987define dso_local void @st_align16_uint32_t_uint32_t(ptr nocapture %ptr, i32 zeroext %str) {3988; CHECK-LABEL: st_align16_uint32_t_uint32_t:3989; CHECK: # %bb.0: # %entry3990; CHECK-NEXT: stw r4, 8(r3)3991; CHECK-NEXT: blr3992entry:3993 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83994 store atomic i32 %str, ptr %add.ptr monotonic, align 43995 ret void3996}3997 3998; Function Attrs: nofree norecurse nounwind uwtable willreturn3999define dso_local void @st_align32_uint32_t_uint32_t(ptr nocapture %ptr, i32 zeroext %str) {4000; CHECK-P10-LABEL: st_align32_uint32_t_uint32_t:4001; CHECK-P10: # %bb.0: # %entry4002; CHECK-P10-NEXT: pstw r4, 99999000(r3), 04003; CHECK-P10-NEXT: blr4004;4005; CHECK-PREP10-LABEL: st_align32_uint32_t_uint32_t:4006; CHECK-PREP10: # %bb.0: # %entry4007; CHECK-PREP10-NEXT: lis r5, 15254008; CHECK-PREP10-NEXT: ori r5, r5, 566004009; CHECK-PREP10-NEXT: stwx r4, r3, r54010; CHECK-PREP10-NEXT: blr4011entry:4012 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004013 store atomic i32 %str, ptr %add.ptr monotonic, align 44014 ret void4015}4016 4017; Function Attrs: nofree norecurse nounwind uwtable willreturn4018define dso_local void @st_align64_uint32_t_uint32_t(ptr nocapture %ptr, i32 zeroext %str) {4019; CHECK-P10-LABEL: st_align64_uint32_t_uint32_t:4020; CHECK-P10: # %bb.0: # %entry4021; CHECK-P10-NEXT: pli r5, 2441406254022; CHECK-P10-NEXT: rldic r5, r5, 12, 244023; CHECK-P10-NEXT: stwx r4, r3, r54024; CHECK-P10-NEXT: blr4025;4026; CHECK-PREP10-LABEL: st_align64_uint32_t_uint32_t:4027; CHECK-PREP10: # %bb.0: # %entry4028; CHECK-PREP10-NEXT: lis r5, 37254029; CHECK-PREP10-NEXT: ori r5, r5, 190254030; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244031; CHECK-PREP10-NEXT: stwx r4, r3, r54032; CHECK-PREP10-NEXT: blr4033entry:4034 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004035 store atomic i32 %str, ptr %add.ptr monotonic, align 44036 ret void4037}4038 4039; Function Attrs: nofree norecurse nounwind uwtable willreturn4040define dso_local void @st_reg_uint32_t_uint32_t(ptr nocapture %ptr, i64 %off, i32 zeroext %str) {4041; CHECK-LABEL: st_reg_uint32_t_uint32_t:4042; CHECK: # %bb.0: # %entry4043; CHECK-NEXT: stwx r5, r3, r44044; CHECK-NEXT: blr4045entry:4046 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4047 store atomic i32 %str, ptr %add.ptr monotonic, align 44048 ret void4049}4050 4051; Function Attrs: nofree norecurse nounwind uwtable willreturn4052define dso_local void @st_or1_uint32_t_uint32_t(i64 %ptr, i8 zeroext %off, i32 zeroext %str) {4053; CHECK-LABEL: st_or1_uint32_t_uint32_t:4054; CHECK: # %bb.0: # %entry4055; CHECK-NEXT: or r3, r4, r34056; CHECK-NEXT: stw r5, 0(r3)4057; CHECK-NEXT: blr4058entry:4059 %conv = zext i8 %off to i644060 %or = or i64 %conv, %ptr4061 %0 = inttoptr i64 %or to ptr4062 store atomic i32 %str, ptr %0 monotonic, align 44063 ret void4064}4065 4066; Function Attrs: nofree norecurse nounwind uwtable willreturn4067define dso_local void @st_not_disjoint16_uint32_t_uint32_t(i64 %ptr, i32 zeroext %str) {4068; CHECK-LABEL: st_not_disjoint16_uint32_t_uint32_t:4069; CHECK: # %bb.0: # %entry4070; CHECK-NEXT: ori r3, r3, 64071; CHECK-NEXT: stw r4, 0(r3)4072; CHECK-NEXT: blr4073entry:4074 %or = or i64 %ptr, 64075 %0 = inttoptr i64 %or to ptr4076 store atomic i32 %str, ptr %0 monotonic, align 44077 ret void4078}4079 4080; Function Attrs: nofree norecurse nounwind uwtable willreturn4081define dso_local void @st_disjoint_align16_uint32_t_uint32_t(i64 %ptr, i32 zeroext %str) {4082; CHECK-LABEL: st_disjoint_align16_uint32_t_uint32_t:4083; CHECK: # %bb.0: # %entry4084; CHECK-NEXT: rldicr r3, r3, 0, 514085; CHECK-NEXT: stw r4, 24(r3)4086; CHECK-NEXT: blr4087entry:4088 %and = and i64 %ptr, -40964089 %or = or i64 %and, 244090 %0 = inttoptr i64 %or to ptr4091 store atomic i32 %str, ptr %0 monotonic, align 84092 ret void4093}4094 4095; Function Attrs: nofree norecurse nounwind uwtable willreturn4096define dso_local void @st_not_disjoint32_uint32_t_uint32_t(i64 %ptr, i32 zeroext %str) {4097; CHECK-LABEL: st_not_disjoint32_uint32_t_uint32_t:4098; CHECK: # %bb.0: # %entry4099; CHECK-NEXT: ori r3, r3, 344634100; CHECK-NEXT: oris r3, r3, 14101; CHECK-NEXT: stw r4, 0(r3)4102; CHECK-NEXT: blr4103entry:4104 %or = or i64 %ptr, 999994105 %0 = inttoptr i64 %or to ptr4106 store atomic i32 %str, ptr %0 monotonic, align 44107 ret void4108}4109 4110; Function Attrs: nofree norecurse nounwind uwtable willreturn4111define dso_local void @st_disjoint_align32_uint32_t_uint32_t(i64 %ptr, i32 zeroext %str) {4112; CHECK-P10-LABEL: st_disjoint_align32_uint32_t_uint32_t:4113; CHECK-P10: # %bb.0: # %entry4114; CHECK-P10-NEXT: lis r5, -152644115; CHECK-P10-NEXT: and r3, r3, r54116; CHECK-P10-NEXT: pstw r4, 999990000(r3), 04117; CHECK-P10-NEXT: blr4118;4119; CHECK-PREP10-LABEL: st_disjoint_align32_uint32_t_uint32_t:4120; CHECK-PREP10: # %bb.0: # %entry4121; CHECK-PREP10-NEXT: lis r5, -152644122; CHECK-PREP10-NEXT: and r3, r3, r54123; CHECK-PREP10-NEXT: lis r5, 152584124; CHECK-PREP10-NEXT: ori r5, r5, 417124125; CHECK-PREP10-NEXT: stwx r4, r3, r54126; CHECK-PREP10-NEXT: blr4127entry:4128 %and = and i64 %ptr, -10003415044129 %or = or i64 %and, 9999900004130 %0 = inttoptr i64 %or to ptr4131 store atomic i32 %str, ptr %0 monotonic, align 164132 ret void4133}4134 4135; Function Attrs: nofree norecurse nounwind uwtable willreturn4136define dso_local void @st_not_disjoint64_uint32_t_uint32_t(i64 %ptr, i32 zeroext %str) {4137; CHECK-P10-LABEL: st_not_disjoint64_uint32_t_uint32_t:4138; CHECK-P10: # %bb.0: # %entry4139; CHECK-P10-NEXT: pli r5, 2324140; CHECK-P10-NEXT: pli r6, 35675873294141; CHECK-P10-NEXT: rldimi r6, r5, 32, 04142; CHECK-P10-NEXT: or r3, r3, r64143; CHECK-P10-NEXT: stw r4, 0(r3)4144; CHECK-P10-NEXT: blr4145;4146; CHECK-PREP10-LABEL: st_not_disjoint64_uint32_t_uint32_t:4147; CHECK-PREP10: # %bb.0: # %entry4148; CHECK-PREP10-NEXT: li r5, 294149; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244150; CHECK-PREP10-NEXT: oris r5, r5, 544374151; CHECK-PREP10-NEXT: ori r5, r5, 40974152; CHECK-PREP10-NEXT: or r3, r3, r54153; CHECK-PREP10-NEXT: stw r4, 0(r3)4154; CHECK-PREP10-NEXT: blr4155entry:4156 %or = or i64 %ptr, 10000000000014157 %0 = inttoptr i64 %or to ptr4158 store atomic i32 %str, ptr %0 monotonic, align 44159 ret void4160}4161 4162; Function Attrs: nofree norecurse nounwind uwtable willreturn4163define dso_local void @st_disjoint_align64_uint32_t_uint32_t(i64 %ptr, i32 zeroext %str) {4164; CHECK-P10-LABEL: st_disjoint_align64_uint32_t_uint32_t:4165; CHECK-P10: # %bb.0: # %entry4166; CHECK-P10-NEXT: pli r5, 2441406254167; CHECK-P10-NEXT: rldicr r3, r3, 0, 234168; CHECK-P10-NEXT: rldic r5, r5, 12, 244169; CHECK-P10-NEXT: stwx r4, r3, r54170; CHECK-P10-NEXT: blr4171;4172; CHECK-PREP10-LABEL: st_disjoint_align64_uint32_t_uint32_t:4173; CHECK-PREP10: # %bb.0: # %entry4174; CHECK-PREP10-NEXT: lis r5, 37254175; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234176; CHECK-PREP10-NEXT: ori r5, r5, 190254177; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244178; CHECK-PREP10-NEXT: stwx r4, r3, r54179; CHECK-PREP10-NEXT: blr4180entry:4181 %and = and i64 %ptr, -10995116277764182 %or = or i64 %and, 10000000000004183 %0 = inttoptr i64 %or to ptr4184 store atomic i32 %str, ptr %0 monotonic, align 40964185 ret void4186}4187 4188; Function Attrs: nofree norecurse nounwind uwtable willreturn4189define dso_local void @st_cst_align16_uint32_t_uint32_t(i32 zeroext %str) {4190; CHECK-LABEL: st_cst_align16_uint32_t_uint32_t:4191; CHECK: # %bb.0: # %entry4192; CHECK-NEXT: stw r3, 4080(0)4193; CHECK-NEXT: blr4194entry:4195 store atomic i32 %str, ptr inttoptr (i64 4080 to ptr) monotonic, align 164196 ret void4197}4198 4199; Function Attrs: nofree norecurse nounwind uwtable willreturn4200define dso_local void @st_cst_align32_uint32_t_uint32_t(i32 zeroext %str) {4201; CHECK-LABEL: st_cst_align32_uint32_t_uint32_t:4202; CHECK: # %bb.0: # %entry4203; CHECK-NEXT: lis r4, 1534204; CHECK-NEXT: stw r3, -27108(r4)4205; CHECK-NEXT: blr4206entry:4207 store atomic i32 %str, ptr inttoptr (i64 9999900 to ptr) monotonic, align 44208 ret void4209}4210 4211; Function Attrs: nofree norecurse nounwind uwtable willreturn4212define dso_local void @st_cst_align64_uint32_t_uint32_t(i32 zeroext %str) {4213; CHECK-P10-LABEL: st_cst_align64_uint32_t_uint32_t:4214; CHECK-P10: # %bb.0: # %entry4215; CHECK-P10-NEXT: pli r4, 2441406254216; CHECK-P10-NEXT: rldic r4, r4, 12, 244217; CHECK-P10-NEXT: stw r3, 0(r4)4218; CHECK-P10-NEXT: blr4219;4220; CHECK-PREP10-LABEL: st_cst_align64_uint32_t_uint32_t:4221; CHECK-PREP10: # %bb.0: # %entry4222; CHECK-PREP10-NEXT: lis r4, 37254223; CHECK-PREP10-NEXT: ori r4, r4, 190254224; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244225; CHECK-PREP10-NEXT: stw r3, 0(r4)4226; CHECK-PREP10-NEXT: blr4227entry:4228 store atomic i32 %str, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964229 ret void4230}4231 4232; Function Attrs: nofree norecurse nounwind uwtable willreturn4233define dso_local void @st_0_uint32_t_uint64_t(i64 %ptr, i32 zeroext %str) {4234; CHECK-LABEL: st_0_uint32_t_uint64_t:4235; CHECK: # %bb.0: # %entry4236; CHECK-NEXT: std r4, 0(r3)4237; CHECK-NEXT: blr4238entry:4239 %0 = inttoptr i64 %ptr to ptr4240 %conv = zext i32 %str to i644241 store atomic i64 %conv, ptr %0 monotonic, align 84242 ret void4243}4244 4245; Function Attrs: nofree norecurse nounwind uwtable willreturn4246define dso_local void @st_align16_uint32_t_uint64_t(ptr nocapture %ptr, i32 zeroext %str) {4247; CHECK-LABEL: st_align16_uint32_t_uint64_t:4248; CHECK: # %bb.0: # %entry4249; CHECK-NEXT: std r4, 8(r3)4250; CHECK-NEXT: blr4251entry:4252 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84253 %conv = zext i32 %str to i644254 store atomic i64 %conv, ptr %add.ptr monotonic, align 84255 ret void4256}4257 4258; Function Attrs: nofree norecurse nounwind uwtable willreturn4259define dso_local void @st_align32_uint32_t_uint64_t(ptr nocapture %ptr, i32 zeroext %str) {4260; CHECK-P10-LABEL: st_align32_uint32_t_uint64_t:4261; CHECK-P10: # %bb.0: # %entry4262; CHECK-P10-NEXT: pstd r4, 99999000(r3), 04263; CHECK-P10-NEXT: blr4264;4265; CHECK-PREP10-LABEL: st_align32_uint32_t_uint64_t:4266; CHECK-PREP10: # %bb.0: # %entry4267; CHECK-PREP10-NEXT: lis r5, 15254268; CHECK-PREP10-NEXT: ori r5, r5, 566004269; CHECK-PREP10-NEXT: stdx r4, r3, r54270; CHECK-PREP10-NEXT: blr4271entry:4272 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004273 %conv = zext i32 %str to i644274 store atomic i64 %conv, ptr %add.ptr monotonic, align 84275 ret void4276}4277 4278; Function Attrs: nofree norecurse nounwind uwtable willreturn4279define dso_local void @st_align64_uint32_t_uint64_t(ptr nocapture %ptr, i32 zeroext %str) {4280; CHECK-P10-LABEL: st_align64_uint32_t_uint64_t:4281; CHECK-P10: # %bb.0: # %entry4282; CHECK-P10-NEXT: pli r5, 2441406254283; CHECK-P10-NEXT: rldic r5, r5, 12, 244284; CHECK-P10-NEXT: stdx r4, r3, r54285; CHECK-P10-NEXT: blr4286;4287; CHECK-PREP10-LABEL: st_align64_uint32_t_uint64_t:4288; CHECK-PREP10: # %bb.0: # %entry4289; CHECK-PREP10-NEXT: lis r5, 37254290; CHECK-PREP10-NEXT: ori r5, r5, 190254291; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244292; CHECK-PREP10-NEXT: stdx r4, r3, r54293; CHECK-PREP10-NEXT: blr4294entry:4295 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004296 %conv = zext i32 %str to i644297 store atomic i64 %conv, ptr %add.ptr monotonic, align 84298 ret void4299}4300 4301; Function Attrs: nofree norecurse nounwind uwtable willreturn4302define dso_local void @st_reg_uint32_t_uint64_t(ptr nocapture %ptr, i64 %off, i32 zeroext %str) {4303; CHECK-LABEL: st_reg_uint32_t_uint64_t:4304; CHECK: # %bb.0: # %entry4305; CHECK-NEXT: stdx r5, r3, r44306; CHECK-NEXT: blr4307entry:4308 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4309 %conv = zext i32 %str to i644310 store atomic i64 %conv, ptr %add.ptr monotonic, align 84311 ret void4312}4313 4314; Function Attrs: nofree norecurse nounwind uwtable willreturn4315define dso_local void @st_or1_uint32_t_uint64_t(i64 %ptr, i8 zeroext %off, i32 zeroext %str) {4316; CHECK-LABEL: st_or1_uint32_t_uint64_t:4317; CHECK: # %bb.0: # %entry4318; CHECK-NEXT: or r3, r4, r34319; CHECK-NEXT: std r5, 0(r3)4320; CHECK-NEXT: blr4321entry:4322 %conv = zext i8 %off to i644323 %or = or i64 %conv, %ptr4324 %0 = inttoptr i64 %or to ptr4325 %conv1 = zext i32 %str to i644326 store atomic i64 %conv1, ptr %0 monotonic, align 84327 ret void4328}4329 4330; Function Attrs: nofree norecurse nounwind uwtable willreturn4331define dso_local void @st_not_disjoint16_uint32_t_uint64_t(i64 %ptr, i32 zeroext %str) {4332; CHECK-LABEL: st_not_disjoint16_uint32_t_uint64_t:4333; CHECK: # %bb.0: # %entry4334; CHECK-NEXT: ori r3, r3, 64335; CHECK-NEXT: std r4, 0(r3)4336; CHECK-NEXT: blr4337entry:4338 %or = or i64 %ptr, 64339 %0 = inttoptr i64 %or to ptr4340 %conv = zext i32 %str to i644341 store atomic i64 %conv, ptr %0 monotonic, align 84342 ret void4343}4344 4345; Function Attrs: nofree norecurse nounwind uwtable willreturn4346define dso_local void @st_disjoint_align16_uint32_t_uint64_t(i64 %ptr, i32 zeroext %str) {4347; CHECK-LABEL: st_disjoint_align16_uint32_t_uint64_t:4348; CHECK: # %bb.0: # %entry4349; CHECK-NEXT: rldicr r3, r3, 0, 514350; CHECK-NEXT: std r4, 24(r3)4351; CHECK-NEXT: blr4352entry:4353 %and = and i64 %ptr, -40964354 %or = or i64 %and, 244355 %0 = inttoptr i64 %or to ptr4356 %conv = zext i32 %str to i644357 store atomic i64 %conv, ptr %0 monotonic, align 84358 ret void4359}4360 4361; Function Attrs: nofree norecurse nounwind uwtable willreturn4362define dso_local void @st_not_disjoint32_uint32_t_uint64_t(i64 %ptr, i32 zeroext %str) {4363; CHECK-LABEL: st_not_disjoint32_uint32_t_uint64_t:4364; CHECK: # %bb.0: # %entry4365; CHECK-NEXT: ori r3, r3, 344634366; CHECK-NEXT: oris r3, r3, 14367; CHECK-NEXT: std r4, 0(r3)4368; CHECK-NEXT: blr4369entry:4370 %or = or i64 %ptr, 999994371 %0 = inttoptr i64 %or to ptr4372 %conv = zext i32 %str to i644373 store atomic i64 %conv, ptr %0 monotonic, align 84374 ret void4375}4376 4377; Function Attrs: nofree norecurse nounwind uwtable willreturn4378define dso_local void @st_disjoint_align32_uint32_t_uint64_t(i64 %ptr, i32 zeroext %str) {4379; CHECK-P10-LABEL: st_disjoint_align32_uint32_t_uint64_t:4380; CHECK-P10: # %bb.0: # %entry4381; CHECK-P10-NEXT: lis r5, -152644382; CHECK-P10-NEXT: and r3, r3, r54383; CHECK-P10-NEXT: pstd r4, 999990000(r3), 04384; CHECK-P10-NEXT: blr4385;4386; CHECK-PREP10-LABEL: st_disjoint_align32_uint32_t_uint64_t:4387; CHECK-PREP10: # %bb.0: # %entry4388; CHECK-PREP10-NEXT: lis r5, -152644389; CHECK-PREP10-NEXT: and r3, r3, r54390; CHECK-PREP10-NEXT: lis r5, 152584391; CHECK-PREP10-NEXT: ori r5, r5, 417124392; CHECK-PREP10-NEXT: stdx r4, r3, r54393; CHECK-PREP10-NEXT: blr4394entry:4395 %and = and i64 %ptr, -10003415044396 %or = or i64 %and, 9999900004397 %0 = inttoptr i64 %or to ptr4398 %conv = zext i32 %str to i644399 store atomic i64 %conv, ptr %0 monotonic, align 164400 ret void4401}4402 4403; Function Attrs: nofree norecurse nounwind uwtable willreturn4404define dso_local void @st_not_disjoint64_uint32_t_uint64_t(i64 %ptr, i32 zeroext %str) {4405; CHECK-P10-LABEL: st_not_disjoint64_uint32_t_uint64_t:4406; CHECK-P10: # %bb.0: # %entry4407; CHECK-P10-NEXT: pli r5, 2324408; CHECK-P10-NEXT: pli r6, 35675873294409; CHECK-P10-NEXT: rldimi r6, r5, 32, 04410; CHECK-P10-NEXT: or r3, r3, r64411; CHECK-P10-NEXT: std r4, 0(r3)4412; CHECK-P10-NEXT: blr4413;4414; CHECK-PREP10-LABEL: st_not_disjoint64_uint32_t_uint64_t:4415; CHECK-PREP10: # %bb.0: # %entry4416; CHECK-PREP10-NEXT: li r5, 294417; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244418; CHECK-PREP10-NEXT: oris r5, r5, 544374419; CHECK-PREP10-NEXT: ori r5, r5, 40974420; CHECK-PREP10-NEXT: or r3, r3, r54421; CHECK-PREP10-NEXT: std r4, 0(r3)4422; CHECK-PREP10-NEXT: blr4423entry:4424 %or = or i64 %ptr, 10000000000014425 %0 = inttoptr i64 %or to ptr4426 %conv = zext i32 %str to i644427 store atomic i64 %conv, ptr %0 monotonic, align 84428 ret void4429}4430 4431; Function Attrs: nofree norecurse nounwind uwtable willreturn4432define dso_local void @st_disjoint_align64_uint32_t_uint64_t(i64 %ptr, i32 zeroext %str) {4433; CHECK-P10-LABEL: st_disjoint_align64_uint32_t_uint64_t:4434; CHECK-P10: # %bb.0: # %entry4435; CHECK-P10-NEXT: pli r5, 2441406254436; CHECK-P10-NEXT: rldicr r3, r3, 0, 234437; CHECK-P10-NEXT: rldic r5, r5, 12, 244438; CHECK-P10-NEXT: stdx r4, r3, r54439; CHECK-P10-NEXT: blr4440;4441; CHECK-PREP10-LABEL: st_disjoint_align64_uint32_t_uint64_t:4442; CHECK-PREP10: # %bb.0: # %entry4443; CHECK-PREP10-NEXT: lis r5, 37254444; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234445; CHECK-PREP10-NEXT: ori r5, r5, 190254446; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244447; CHECK-PREP10-NEXT: stdx r4, r3, r54448; CHECK-PREP10-NEXT: blr4449entry:4450 %and = and i64 %ptr, -10995116277764451 %or = or i64 %and, 10000000000004452 %0 = inttoptr i64 %or to ptr4453 %conv = zext i32 %str to i644454 store atomic i64 %conv, ptr %0 monotonic, align 40964455 ret void4456}4457 4458; Function Attrs: nofree norecurse nounwind uwtable willreturn4459define dso_local void @st_cst_align16_uint32_t_uint64_t(i32 zeroext %str) {4460; CHECK-LABEL: st_cst_align16_uint32_t_uint64_t:4461; CHECK: # %bb.0: # %entry4462; CHECK-NEXT: std r3, 4080(0)4463; CHECK-NEXT: blr4464entry:4465 %conv = zext i32 %str to i644466 store atomic i64 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 164467 ret void4468}4469 4470; Function Attrs: nofree norecurse nounwind uwtable willreturn4471define dso_local void @st_cst_align32_uint32_t_uint64_t(i32 zeroext %str) {4472; CHECK-LABEL: st_cst_align32_uint32_t_uint64_t:4473; CHECK: # %bb.0: # %entry4474; CHECK-NEXT: lis r4, 1534475; CHECK-NEXT: std r3, -27108(r4)4476; CHECK-NEXT: blr4477entry:4478 %conv = zext i32 %str to i644479 store atomic i64 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 84480 ret void4481}4482 4483; Function Attrs: nofree norecurse nounwind uwtable willreturn4484define dso_local void @st_cst_align64_uint32_t_uint64_t(i32 zeroext %str) {4485; CHECK-P10-LABEL: st_cst_align64_uint32_t_uint64_t:4486; CHECK-P10: # %bb.0: # %entry4487; CHECK-P10-NEXT: pli r4, 2441406254488; CHECK-P10-NEXT: rldic r4, r4, 12, 244489; CHECK-P10-NEXT: std r3, 0(r4)4490; CHECK-P10-NEXT: blr4491;4492; CHECK-PREP10-LABEL: st_cst_align64_uint32_t_uint64_t:4493; CHECK-PREP10: # %bb.0: # %entry4494; CHECK-PREP10-NEXT: lis r4, 37254495; CHECK-PREP10-NEXT: ori r4, r4, 190254496; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244497; CHECK-PREP10-NEXT: std r3, 0(r4)4498; CHECK-PREP10-NEXT: blr4499entry:4500 %conv = zext i32 %str to i644501 store atomic i64 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964502 ret void4503}4504 4505; Function Attrs: nofree norecurse nounwind uwtable willreturn4506define dso_local void @st_0_int32_t_uint64_t(i64 %ptr, i32 signext %str) {4507; CHECK-LABEL: st_0_int32_t_uint64_t:4508; CHECK: # %bb.0: # %entry4509; CHECK-NEXT: std r4, 0(r3)4510; CHECK-NEXT: blr4511entry:4512 %0 = inttoptr i64 %ptr to ptr4513 %conv = sext i32 %str to i644514 store atomic i64 %conv, ptr %0 monotonic, align 84515 ret void4516}4517 4518; Function Attrs: nofree norecurse nounwind uwtable willreturn4519define dso_local void @st_align16_int32_t_uint64_t(ptr nocapture %ptr, i32 signext %str) {4520; CHECK-LABEL: st_align16_int32_t_uint64_t:4521; CHECK: # %bb.0: # %entry4522; CHECK-NEXT: std r4, 8(r3)4523; CHECK-NEXT: blr4524entry:4525 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84526 %conv = sext i32 %str to i644527 store atomic i64 %conv, ptr %add.ptr monotonic, align 84528 ret void4529}4530 4531; Function Attrs: nofree norecurse nounwind uwtable willreturn4532define dso_local void @st_align32_int32_t_uint64_t(ptr nocapture %ptr, i32 signext %str) {4533; CHECK-P10-LABEL: st_align32_int32_t_uint64_t:4534; CHECK-P10: # %bb.0: # %entry4535; CHECK-P10-NEXT: pstd r4, 99999000(r3), 04536; CHECK-P10-NEXT: blr4537;4538; CHECK-PREP10-LABEL: st_align32_int32_t_uint64_t:4539; CHECK-PREP10: # %bb.0: # %entry4540; CHECK-PREP10-NEXT: lis r5, 15254541; CHECK-PREP10-NEXT: ori r5, r5, 566004542; CHECK-PREP10-NEXT: stdx r4, r3, r54543; CHECK-PREP10-NEXT: blr4544entry:4545 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004546 %conv = sext i32 %str to i644547 store atomic i64 %conv, ptr %add.ptr monotonic, align 84548 ret void4549}4550 4551; Function Attrs: nofree norecurse nounwind uwtable willreturn4552define dso_local void @st_align64_int32_t_uint64_t(ptr nocapture %ptr, i32 signext %str) {4553; CHECK-P10-LABEL: st_align64_int32_t_uint64_t:4554; CHECK-P10: # %bb.0: # %entry4555; CHECK-P10-NEXT: pli r5, 2441406254556; CHECK-P10-NEXT: rldic r5, r5, 12, 244557; CHECK-P10-NEXT: stdx r4, r3, r54558; CHECK-P10-NEXT: blr4559;4560; CHECK-PREP10-LABEL: st_align64_int32_t_uint64_t:4561; CHECK-PREP10: # %bb.0: # %entry4562; CHECK-PREP10-NEXT: lis r5, 37254563; CHECK-PREP10-NEXT: ori r5, r5, 190254564; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244565; CHECK-PREP10-NEXT: stdx r4, r3, r54566; CHECK-PREP10-NEXT: blr4567entry:4568 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004569 %conv = sext i32 %str to i644570 store atomic i64 %conv, ptr %add.ptr monotonic, align 84571 ret void4572}4573 4574; Function Attrs: nofree norecurse nounwind uwtable willreturn4575define dso_local void @st_reg_int32_t_uint64_t(ptr nocapture %ptr, i64 %off, i32 signext %str) {4576; CHECK-LABEL: st_reg_int32_t_uint64_t:4577; CHECK: # %bb.0: # %entry4578; CHECK-NEXT: stdx r5, r3, r44579; CHECK-NEXT: blr4580entry:4581 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4582 %conv = sext i32 %str to i644583 store atomic i64 %conv, ptr %add.ptr monotonic, align 84584 ret void4585}4586 4587; Function Attrs: nofree norecurse nounwind uwtable willreturn4588define dso_local void @st_or1_int32_t_uint64_t(i64 %ptr, i8 zeroext %off, i32 signext %str) {4589; CHECK-LABEL: st_or1_int32_t_uint64_t:4590; CHECK: # %bb.0: # %entry4591; CHECK-NEXT: or r3, r4, r34592; CHECK-NEXT: std r5, 0(r3)4593; CHECK-NEXT: blr4594entry:4595 %conv = zext i8 %off to i644596 %or = or i64 %conv, %ptr4597 %0 = inttoptr i64 %or to ptr4598 %conv1 = sext i32 %str to i644599 store atomic i64 %conv1, ptr %0 monotonic, align 84600 ret void4601}4602 4603; Function Attrs: nofree norecurse nounwind uwtable willreturn4604define dso_local void @st_not_disjoint16_int32_t_uint64_t(i64 %ptr, i32 signext %str) {4605; CHECK-LABEL: st_not_disjoint16_int32_t_uint64_t:4606; CHECK: # %bb.0: # %entry4607; CHECK-NEXT: ori r3, r3, 64608; CHECK-NEXT: std r4, 0(r3)4609; CHECK-NEXT: blr4610entry:4611 %or = or i64 %ptr, 64612 %0 = inttoptr i64 %or to ptr4613 %conv = sext i32 %str to i644614 store atomic i64 %conv, ptr %0 monotonic, align 84615 ret void4616}4617 4618; Function Attrs: nofree norecurse nounwind uwtable willreturn4619define dso_local void @st_disjoint_align16_int32_t_uint64_t(i64 %ptr, i32 signext %str) {4620; CHECK-LABEL: st_disjoint_align16_int32_t_uint64_t:4621; CHECK: # %bb.0: # %entry4622; CHECK-NEXT: rldicr r3, r3, 0, 514623; CHECK-NEXT: std r4, 24(r3)4624; CHECK-NEXT: blr4625entry:4626 %and = and i64 %ptr, -40964627 %or = or i64 %and, 244628 %0 = inttoptr i64 %or to ptr4629 %conv = sext i32 %str to i644630 store atomic i64 %conv, ptr %0 monotonic, align 84631 ret void4632}4633 4634; Function Attrs: nofree norecurse nounwind uwtable willreturn4635define dso_local void @st_not_disjoint32_int32_t_uint64_t(i64 %ptr, i32 signext %str) {4636; CHECK-LABEL: st_not_disjoint32_int32_t_uint64_t:4637; CHECK: # %bb.0: # %entry4638; CHECK-NEXT: ori r3, r3, 344634639; CHECK-NEXT: oris r3, r3, 14640; CHECK-NEXT: std r4, 0(r3)4641; CHECK-NEXT: blr4642entry:4643 %or = or i64 %ptr, 999994644 %0 = inttoptr i64 %or to ptr4645 %conv = sext i32 %str to i644646 store atomic i64 %conv, ptr %0 monotonic, align 84647 ret void4648}4649 4650; Function Attrs: nofree norecurse nounwind uwtable willreturn4651define dso_local void @st_disjoint_align32_int32_t_uint64_t(i64 %ptr, i32 signext %str) {4652; CHECK-P10-LABEL: st_disjoint_align32_int32_t_uint64_t:4653; CHECK-P10: # %bb.0: # %entry4654; CHECK-P10-NEXT: lis r5, -152644655; CHECK-P10-NEXT: and r3, r3, r54656; CHECK-P10-NEXT: pstd r4, 999990000(r3), 04657; CHECK-P10-NEXT: blr4658;4659; CHECK-PREP10-LABEL: st_disjoint_align32_int32_t_uint64_t:4660; CHECK-PREP10: # %bb.0: # %entry4661; CHECK-PREP10-NEXT: lis r5, -152644662; CHECK-PREP10-NEXT: and r3, r3, r54663; CHECK-PREP10-NEXT: lis r5, 152584664; CHECK-PREP10-NEXT: ori r5, r5, 417124665; CHECK-PREP10-NEXT: stdx r4, r3, r54666; CHECK-PREP10-NEXT: blr4667entry:4668 %and = and i64 %ptr, -10003415044669 %or = or i64 %and, 9999900004670 %0 = inttoptr i64 %or to ptr4671 %conv = sext i32 %str to i644672 store atomic i64 %conv, ptr %0 monotonic, align 164673 ret void4674}4675 4676; Function Attrs: nofree norecurse nounwind uwtable willreturn4677define dso_local void @st_not_disjoint64_int32_t_uint64_t(i64 %ptr, i32 signext %str) {4678; CHECK-P10-LABEL: st_not_disjoint64_int32_t_uint64_t:4679; CHECK-P10: # %bb.0: # %entry4680; CHECK-P10-NEXT: pli r5, 2324681; CHECK-P10-NEXT: pli r6, 35675873294682; CHECK-P10-NEXT: rldimi r6, r5, 32, 04683; CHECK-P10-NEXT: or r3, r3, r64684; CHECK-P10-NEXT: std r4, 0(r3)4685; CHECK-P10-NEXT: blr4686;4687; CHECK-PREP10-LABEL: st_not_disjoint64_int32_t_uint64_t:4688; CHECK-PREP10: # %bb.0: # %entry4689; CHECK-PREP10-NEXT: li r5, 294690; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244691; CHECK-PREP10-NEXT: oris r5, r5, 544374692; CHECK-PREP10-NEXT: ori r5, r5, 40974693; CHECK-PREP10-NEXT: or r3, r3, r54694; CHECK-PREP10-NEXT: std r4, 0(r3)4695; CHECK-PREP10-NEXT: blr4696entry:4697 %or = or i64 %ptr, 10000000000014698 %0 = inttoptr i64 %or to ptr4699 %conv = sext i32 %str to i644700 store atomic i64 %conv, ptr %0 monotonic, align 84701 ret void4702}4703 4704; Function Attrs: nofree norecurse nounwind uwtable willreturn4705define dso_local void @st_disjoint_align64_int32_t_uint64_t(i64 %ptr, i32 signext %str) {4706; CHECK-P10-LABEL: st_disjoint_align64_int32_t_uint64_t:4707; CHECK-P10: # %bb.0: # %entry4708; CHECK-P10-NEXT: pli r5, 2441406254709; CHECK-P10-NEXT: rldicr r3, r3, 0, 234710; CHECK-P10-NEXT: rldic r5, r5, 12, 244711; CHECK-P10-NEXT: stdx r4, r3, r54712; CHECK-P10-NEXT: blr4713;4714; CHECK-PREP10-LABEL: st_disjoint_align64_int32_t_uint64_t:4715; CHECK-PREP10: # %bb.0: # %entry4716; CHECK-PREP10-NEXT: lis r5, 37254717; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234718; CHECK-PREP10-NEXT: ori r5, r5, 190254719; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244720; CHECK-PREP10-NEXT: stdx r4, r3, r54721; CHECK-PREP10-NEXT: blr4722entry:4723 %and = and i64 %ptr, -10995116277764724 %or = or i64 %and, 10000000000004725 %0 = inttoptr i64 %or to ptr4726 %conv = sext i32 %str to i644727 store atomic i64 %conv, ptr %0 monotonic, align 40964728 ret void4729}4730 4731; Function Attrs: nofree norecurse nounwind uwtable willreturn4732define dso_local void @st_cst_align16_int32_t_uint64_t(i32 signext %str) {4733; CHECK-LABEL: st_cst_align16_int32_t_uint64_t:4734; CHECK: # %bb.0: # %entry4735; CHECK-NEXT: std r3, 4080(0)4736; CHECK-NEXT: blr4737entry:4738 %conv = sext i32 %str to i644739 store atomic i64 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 164740 ret void4741}4742 4743; Function Attrs: nofree norecurse nounwind uwtable willreturn4744define dso_local void @st_cst_align32_int32_t_uint64_t(i32 signext %str) {4745; CHECK-LABEL: st_cst_align32_int32_t_uint64_t:4746; CHECK: # %bb.0: # %entry4747; CHECK-NEXT: lis r4, 1534748; CHECK-NEXT: std r3, -27108(r4)4749; CHECK-NEXT: blr4750entry:4751 %conv = sext i32 %str to i644752 store atomic i64 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 84753 ret void4754}4755 4756; Function Attrs: nofree norecurse nounwind uwtable willreturn4757define dso_local void @st_cst_align64_int32_t_uint64_t(i32 signext %str) {4758; CHECK-P10-LABEL: st_cst_align64_int32_t_uint64_t:4759; CHECK-P10: # %bb.0: # %entry4760; CHECK-P10-NEXT: pli r4, 2441406254761; CHECK-P10-NEXT: rldic r4, r4, 12, 244762; CHECK-P10-NEXT: std r3, 0(r4)4763; CHECK-P10-NEXT: blr4764;4765; CHECK-PREP10-LABEL: st_cst_align64_int32_t_uint64_t:4766; CHECK-PREP10: # %bb.0: # %entry4767; CHECK-PREP10-NEXT: lis r4, 37254768; CHECK-PREP10-NEXT: ori r4, r4, 190254769; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244770; CHECK-PREP10-NEXT: std r3, 0(r4)4771; CHECK-PREP10-NEXT: blr4772entry:4773 %conv = sext i32 %str to i644774 store atomic i64 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964775 ret void4776}4777