4517 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 i16 @ld_0_int16_t_uint8_t(i64 %ptr) {23; CHECK-LABEL: ld_0_int16_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 i1631 ret i16 %conv32}33 34; Function Attrs: nofree norecurse nounwind uwtable willreturn35define dso_local signext i16 @ld_align16_int16_t_uint8_t(ptr nocapture readonly %ptr) {36; CHECK-LABEL: ld_align16_int16_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 i1644 ret i16 %conv45}46 47; Function Attrs: nofree norecurse nounwind uwtable willreturn48define dso_local signext i16 @ld_align32_int16_t_uint8_t(ptr nocapture readonly %ptr) {49; CHECK-P10-LABEL: ld_align32_int16_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_int16_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 i1665 ret i16 %conv66}67 68; Function Attrs: nofree norecurse nounwind uwtable willreturn69define dso_local signext i16 @ld_align64_int16_t_uint8_t(ptr nocapture readonly %ptr) {70; CHECK-P10-LABEL: ld_align64_int16_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_int16_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 i1688 ret i16 %conv89}90 91; Function Attrs: nofree norecurse nounwind uwtable willreturn92define dso_local signext i16 @ld_reg_int16_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) {93; CHECK-LABEL: ld_reg_int16_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 i16101 ret i16 %conv102}103 104; Function Attrs: nofree norecurse nounwind uwtable willreturn105define dso_local signext i16 @ld_or_int16_t_uint8_t(i64 %ptr, i8 zeroext %off) {106; CHECK-LABEL: ld_or_int16_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 i16117 ret i16 %conv1118}119 120; Function Attrs: nofree norecurse nounwind uwtable willreturn121define dso_local signext i16 @ld_not_disjoint16_int16_t_uint8_t(i64 %ptr) {122; CHECK-LABEL: ld_not_disjoint16_int16_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 i16132 ret i16 %conv133}134 135; Function Attrs: nofree norecurse nounwind uwtable willreturn136define dso_local signext i16 @ld_disjoint_align16_int16_t_uint8_t(i64 %ptr) {137; CHECK-LABEL: ld_disjoint_align16_int16_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 i16148 ret i16 %conv149}150 151; Function Attrs: nofree norecurse nounwind uwtable willreturn152define dso_local signext i16 @ld_not_disjoint32_int16_t_uint8_t(i64 %ptr) {153; CHECK-LABEL: ld_not_disjoint32_int16_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 i16164 ret i16 %conv165}166 167; Function Attrs: nofree norecurse nounwind uwtable willreturn168define dso_local signext i16 @ld_disjoint_align32_int16_t_uint8_t(i64 %ptr) {169; CHECK-P10-LABEL: ld_disjoint_align32_int16_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_int16_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 i16191 ret i16 %conv192}193 194; Function Attrs: nofree norecurse nounwind uwtable willreturn195define dso_local signext i16 @ld_not_disjoint64_int16_t_uint8_t(i64 %ptr) {196; CHECK-P10-LABEL: ld_not_disjoint64_int16_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_int16_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 i16219 ret i16 %conv220}221 222; Function Attrs: nofree norecurse nounwind uwtable willreturn223define dso_local signext i16 @ld_disjoint_align64_int16_t_uint8_t(i64 %ptr) {224; CHECK-P10-LABEL: ld_disjoint_align64_int16_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_int16_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 i16246 ret i16 %conv247}248 249; Function Attrs: nofree norecurse nounwind uwtable willreturn250define dso_local signext i16 @ld_cst_align16_int16_t_uint8_t() {251; CHECK-LABEL: ld_cst_align16_int16_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 i16258 ret i16 %conv259}260 261; Function Attrs: nofree norecurse nounwind uwtable willreturn262define dso_local signext i16 @ld_cst_align32_int16_t_uint8_t() {263; CHECK-LABEL: ld_cst_align32_int16_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 i16271 ret i16 %conv272}273 274; Function Attrs: nofree norecurse nounwind uwtable willreturn275define dso_local signext i16 @ld_cst_align64_int16_t_uint8_t() {276; CHECK-P10-LABEL: ld_cst_align64_int16_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_int16_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 i16293 ret i16 %conv294}295 296; Function Attrs: nofree norecurse nounwind uwtable willreturn297define dso_local signext i16 @ld_0_int16_t_int8_t(i64 %ptr) {298; CHECK-LABEL: ld_0_int16_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 i16307 ret i16 %conv308}309 310; Function Attrs: nofree norecurse nounwind uwtable willreturn311define dso_local signext i16 @ld_align16_int16_t_int8_t(ptr nocapture readonly %ptr) {312; CHECK-LABEL: ld_align16_int16_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 i16321 ret i16 %conv322}323 324; Function Attrs: nofree norecurse nounwind uwtable willreturn325define dso_local signext i16 @ld_align32_int16_t_int8_t(ptr nocapture readonly %ptr) {326; CHECK-P10-LABEL: ld_align32_int16_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_int16_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 i16343 ret i16 %conv344}345 346; Function Attrs: nofree norecurse nounwind uwtable willreturn347define dso_local signext i16 @ld_align64_int16_t_int8_t(ptr nocapture readonly %ptr) {348; CHECK-P10-LABEL: ld_align64_int16_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_int16_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 i16368 ret i16 %conv369}370 371; Function Attrs: nofree norecurse nounwind uwtable willreturn372define dso_local signext i16 @ld_reg_int16_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {373; CHECK-LABEL: ld_reg_int16_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 i16382 ret i16 %conv383}384 385; Function Attrs: nofree norecurse nounwind uwtable willreturn386define dso_local signext i16 @ld_or_int16_t_int8_t(i64 %ptr, i8 zeroext %off) {387; CHECK-LABEL: ld_or_int16_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 i16399 ret i16 %conv1400}401 402; Function Attrs: nofree norecurse nounwind uwtable willreturn403define dso_local signext i16 @ld_not_disjoint16_int16_t_int8_t(i64 %ptr) {404; CHECK-LABEL: ld_not_disjoint16_int16_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 i16415 ret i16 %conv416}417 418; Function Attrs: nofree norecurse nounwind uwtable willreturn419define dso_local signext i16 @ld_disjoint_align16_int16_t_int8_t(i64 %ptr) {420; CHECK-LABEL: ld_disjoint_align16_int16_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 i16432 ret i16 %conv433}434 435; Function Attrs: nofree norecurse nounwind uwtable willreturn436define dso_local signext i16 @ld_not_disjoint32_int16_t_int8_t(i64 %ptr) {437; CHECK-LABEL: ld_not_disjoint32_int16_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 i16449 ret i16 %conv450}451 452; Function Attrs: nofree norecurse nounwind uwtable willreturn453define dso_local signext i16 @ld_disjoint_align32_int16_t_int8_t(i64 %ptr) {454; CHECK-P10-LABEL: ld_disjoint_align32_int16_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_int16_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 i16477 ret i16 %conv478}479 480; Function Attrs: nofree norecurse nounwind uwtable willreturn481define dso_local signext i16 @ld_not_disjoint64_int16_t_int8_t(i64 %ptr) {482; CHECK-P10-LABEL: ld_not_disjoint64_int16_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_int16_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 i16507 ret i16 %conv508}509 510; Function Attrs: nofree norecurse nounwind uwtable willreturn511define dso_local signext i16 @ld_disjoint_align64_int16_t_int8_t(i64 %ptr) {512; CHECK-P10-LABEL: ld_disjoint_align64_int16_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_int16_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 i16536 ret i16 %conv537}538 539; Function Attrs: nofree norecurse nounwind uwtable willreturn540define dso_local signext i16 @ld_cst_align16_int16_t_int8_t() {541; CHECK-LABEL: ld_cst_align16_int16_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 i16549 ret i16 %conv550}551 552; Function Attrs: nofree norecurse nounwind uwtable willreturn553define dso_local signext i16 @ld_cst_align32_int16_t_int8_t() {554; CHECK-LABEL: ld_cst_align32_int16_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 i16563 ret i16 %conv564}565 566; Function Attrs: nofree norecurse nounwind uwtable willreturn567define dso_local signext i16 @ld_cst_align64_int16_t_int8_t() {568; CHECK-P10-LABEL: ld_cst_align64_int16_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_int16_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 i16587 ret i16 %conv588}589 590; Function Attrs: nofree norecurse nounwind uwtable willreturn591define dso_local signext i16 @ld_0_int16_t_uint16_t(i64 %ptr) {592; CHECK-LABEL: ld_0_int16_t_uint16_t:593; CHECK: # %bb.0: # %entry594; CHECK-NEXT: lhz r3, 0(r3)595; CHECK-NEXT: extsh r3, r3596; CHECK-NEXT: blr597entry:598 %0 = inttoptr i64 %ptr to ptr599 %1 = load atomic i16, ptr %0 monotonic, align 2600 ret i16 %1601}602 603; Function Attrs: nofree norecurse nounwind uwtable willreturn604define dso_local signext i16 @ld_align16_int16_t_uint16_t(ptr nocapture readonly %ptr) {605; CHECK-LABEL: ld_align16_int16_t_uint16_t:606; CHECK: # %bb.0: # %entry607; CHECK-NEXT: lhz r3, 8(r3)608; CHECK-NEXT: extsh r3, r3609; CHECK-NEXT: blr610entry:611 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8612 %0 = load atomic i16, ptr %add.ptr monotonic, align 2613 ret i16 %0614}615 616; Function Attrs: nofree norecurse nounwind uwtable willreturn617define dso_local signext i16 @ld_align32_int16_t_uint16_t(ptr nocapture readonly %ptr) {618; CHECK-P10-LABEL: ld_align32_int16_t_uint16_t:619; CHECK-P10: # %bb.0: # %entry620; CHECK-P10-NEXT: plhz r3, 99999000(r3), 0621; CHECK-P10-NEXT: extsh r3, r3622; CHECK-P10-NEXT: blr623;624; CHECK-PREP10-LABEL: ld_align32_int16_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: extsh r3, r3630; CHECK-PREP10-NEXT: blr631entry:632 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000633 %0 = load atomic i16, ptr %add.ptr monotonic, align 2634 ret i16 %0635}636 637; Function Attrs: nofree norecurse nounwind uwtable willreturn638define dso_local signext i16 @ld_align64_int16_t_uint16_t(ptr nocapture readonly %ptr) {639; CHECK-P10-LABEL: ld_align64_int16_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: extsh r3, r3645; CHECK-P10-NEXT: blr646;647; CHECK-PREP10-LABEL: ld_align64_int16_t_uint16_t:648; CHECK-PREP10: # %bb.0: # %entry649; CHECK-PREP10-NEXT: lis r4, 3725650; CHECK-PREP10-NEXT: ori r4, r4, 19025651; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24652; CHECK-PREP10-NEXT: lhzx r3, r3, r4653; CHECK-PREP10-NEXT: extsh r3, r3654; CHECK-PREP10-NEXT: blr655entry:656 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000657 %0 = load atomic i16, ptr %add.ptr monotonic, align 2658 ret i16 %0659}660 661; Function Attrs: nofree norecurse nounwind uwtable willreturn662define dso_local signext i16 @ld_reg_int16_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {663; CHECK-LABEL: ld_reg_int16_t_uint16_t:664; CHECK: # %bb.0: # %entry665; CHECK-NEXT: lhzx r3, r3, r4666; CHECK-NEXT: extsh r3, r3667; CHECK-NEXT: blr668entry:669 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off670 %0 = load atomic i16, ptr %add.ptr monotonic, align 2671 ret i16 %0672}673 674; Function Attrs: nofree norecurse nounwind uwtable willreturn675define dso_local signext i16 @ld_or_int16_t_uint16_t(i64 %ptr, i8 zeroext %off) {676; CHECK-LABEL: ld_or_int16_t_uint16_t:677; CHECK: # %bb.0: # %entry678; CHECK-NEXT: or r3, r4, r3679; CHECK-NEXT: lhz r3, 0(r3)680; CHECK-NEXT: extsh r3, r3681; CHECK-NEXT: blr682entry:683 %conv = zext i8 %off to i64684 %or = or i64 %conv, %ptr685 %0 = inttoptr i64 %or to ptr686 %1 = load atomic i16, ptr %0 monotonic, align 2687 ret i16 %1688}689 690; Function Attrs: nofree norecurse nounwind uwtable willreturn691define dso_local signext i16 @ld_not_disjoint16_int16_t_uint16_t(i64 %ptr) {692; CHECK-LABEL: ld_not_disjoint16_int16_t_uint16_t:693; CHECK: # %bb.0: # %entry694; CHECK-NEXT: ori r3, r3, 6695; CHECK-NEXT: lhz r3, 0(r3)696; CHECK-NEXT: extsh r3, r3697; CHECK-NEXT: blr698entry:699 %or = or i64 %ptr, 6700 %0 = inttoptr i64 %or to ptr701 %1 = load atomic i16, ptr %0 monotonic, align 2702 ret i16 %1703}704 705; Function Attrs: nofree norecurse nounwind uwtable willreturn706define dso_local signext i16 @ld_disjoint_align16_int16_t_uint16_t(i64 %ptr) {707; CHECK-LABEL: ld_disjoint_align16_int16_t_uint16_t:708; CHECK: # %bb.0: # %entry709; CHECK-NEXT: rldicr r3, r3, 0, 51710; CHECK-NEXT: lhz r3, 24(r3)711; CHECK-NEXT: extsh r3, r3712; CHECK-NEXT: blr713entry:714 %and = and i64 %ptr, -4096715 %or = or i64 %and, 24716 %0 = inttoptr i64 %or to ptr717 %1 = load atomic i16, ptr %0 monotonic, align 8718 ret i16 %1719}720 721; Function Attrs: nofree norecurse nounwind uwtable willreturn722define dso_local signext i16 @ld_not_disjoint32_int16_t_uint16_t(i64 %ptr) {723; CHECK-LABEL: ld_not_disjoint32_int16_t_uint16_t:724; CHECK: # %bb.0: # %entry725; CHECK-NEXT: ori r3, r3, 34463726; CHECK-NEXT: oris r3, r3, 1727; CHECK-NEXT: lhz r3, 0(r3)728; CHECK-NEXT: extsh r3, r3729; CHECK-NEXT: blr730entry:731 %or = or i64 %ptr, 99999732 %0 = inttoptr i64 %or to ptr733 %1 = load atomic i16, ptr %0 monotonic, align 2734 ret i16 %1735}736 737; Function Attrs: nofree norecurse nounwind uwtable willreturn738define dso_local signext i16 @ld_disjoint_align32_int16_t_uint16_t(i64 %ptr) {739; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_uint16_t:740; CHECK-P10: # %bb.0: # %entry741; CHECK-P10-NEXT: lis r4, -15264742; CHECK-P10-NEXT: and r3, r3, r4743; CHECK-P10-NEXT: plhz r3, 999990000(r3), 0744; CHECK-P10-NEXT: extsh r3, r3745; CHECK-P10-NEXT: blr746;747; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_uint16_t:748; CHECK-PREP10: # %bb.0: # %entry749; CHECK-PREP10-NEXT: lis r4, -15264750; CHECK-PREP10-NEXT: and r3, r3, r4751; CHECK-PREP10-NEXT: lis r4, 15258752; CHECK-PREP10-NEXT: ori r4, r4, 41712753; CHECK-PREP10-NEXT: lhzx r3, r3, r4754; CHECK-PREP10-NEXT: extsh r3, r3755; CHECK-PREP10-NEXT: blr756entry:757 %and = and i64 %ptr, -1000341504758 %or = or i64 %and, 999990000759 %0 = inttoptr i64 %or to ptr760 %1 = load atomic i16, ptr %0 monotonic, align 16761 ret i16 %1762}763 764; Function Attrs: nofree norecurse nounwind uwtable willreturn765define dso_local signext i16 @ld_not_disjoint64_int16_t_uint16_t(i64 %ptr) {766; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_uint16_t:767; CHECK-P10: # %bb.0: # %entry768; CHECK-P10-NEXT: pli r4, 232769; CHECK-P10-NEXT: pli r5, 3567587329770; CHECK-P10-NEXT: rldimi r5, r4, 32, 0771; CHECK-P10-NEXT: or r3, r3, r5772; CHECK-P10-NEXT: lhz r3, 0(r3)773; CHECK-P10-NEXT: extsh r3, r3774; CHECK-P10-NEXT: blr775;776; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_uint16_t:777; CHECK-PREP10: # %bb.0: # %entry778; CHECK-PREP10-NEXT: li r4, 29779; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24780; CHECK-PREP10-NEXT: oris r4, r4, 54437781; CHECK-PREP10-NEXT: ori r4, r4, 4097782; CHECK-PREP10-NEXT: or r3, r3, r4783; CHECK-PREP10-NEXT: lhz r3, 0(r3)784; CHECK-PREP10-NEXT: extsh r3, r3785; CHECK-PREP10-NEXT: blr786entry:787 %or = or i64 %ptr, 1000000000001788 %0 = inttoptr i64 %or to ptr789 %1 = load atomic i16, ptr %0 monotonic, align 2790 ret i16 %1791}792 793; Function Attrs: nofree norecurse nounwind uwtable willreturn794define dso_local signext i16 @ld_disjoint_align64_int16_t_uint16_t(i64 %ptr) {795; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_uint16_t:796; CHECK-P10: # %bb.0: # %entry797; CHECK-P10-NEXT: pli r4, 244140625798; CHECK-P10-NEXT: rldicr r3, r3, 0, 23799; CHECK-P10-NEXT: rldic r4, r4, 12, 24800; CHECK-P10-NEXT: lhzx r3, r3, r4801; CHECK-P10-NEXT: extsh r3, r3802; CHECK-P10-NEXT: blr803;804; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_uint16_t:805; CHECK-PREP10: # %bb.0: # %entry806; CHECK-PREP10-NEXT: lis r4, 3725807; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23808; CHECK-PREP10-NEXT: ori r4, r4, 19025809; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24810; CHECK-PREP10-NEXT: lhzx r3, r3, r4811; CHECK-PREP10-NEXT: extsh r3, r3812; CHECK-PREP10-NEXT: blr813entry:814 %and = and i64 %ptr, -1099511627776815 %or = or i64 %and, 1000000000000816 %0 = inttoptr i64 %or to ptr817 %1 = load atomic i16, ptr %0 monotonic, align 4096818 ret i16 %1819}820 821; Function Attrs: nofree norecurse nounwind uwtable willreturn822define dso_local signext i16 @ld_cst_align16_int16_t_uint16_t() {823; CHECK-LABEL: ld_cst_align16_int16_t_uint16_t:824; CHECK: # %bb.0: # %entry825; CHECK-NEXT: lhz r3, 4080(0)826; CHECK-NEXT: extsh r3, r3827; CHECK-NEXT: blr828entry:829 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 16830 ret i16 %0831}832 833; Function Attrs: nofree norecurse nounwind uwtable willreturn834define dso_local signext i16 @ld_cst_align32_int16_t_uint16_t() {835; CHECK-LABEL: ld_cst_align32_int16_t_uint16_t:836; CHECK: # %bb.0: # %entry837; CHECK-NEXT: lis r3, 153838; CHECK-NEXT: lhz r3, -27108(r3)839; CHECK-NEXT: extsh r3, r3840; CHECK-NEXT: blr841entry:842 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4843 ret i16 %0844}845 846; Function Attrs: nofree norecurse nounwind uwtable willreturn847define dso_local signext i16 @ld_cst_align64_int16_t_uint16_t() {848; CHECK-P10-LABEL: ld_cst_align64_int16_t_uint16_t:849; CHECK-P10: # %bb.0: # %entry850; CHECK-P10-NEXT: pli r3, 244140625851; CHECK-P10-NEXT: rldic r3, r3, 12, 24852; CHECK-P10-NEXT: lhz r3, 0(r3)853; CHECK-P10-NEXT: extsh r3, r3854; CHECK-P10-NEXT: blr855;856; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_uint16_t:857; CHECK-PREP10: # %bb.0: # %entry858; CHECK-PREP10-NEXT: lis r3, 3725859; CHECK-PREP10-NEXT: ori r3, r3, 19025860; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24861; CHECK-PREP10-NEXT: lhz r3, 0(r3)862; CHECK-PREP10-NEXT: extsh r3, r3863; CHECK-PREP10-NEXT: blr864entry:865 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096866 ret i16 %0867}868 869; Function Attrs: nofree norecurse nounwind uwtable willreturn870define dso_local signext i16 @ld_0_int16_t_uint32_t(i64 %ptr) {871; CHECK-LABEL: ld_0_int16_t_uint32_t:872; CHECK: # %bb.0: # %entry873; CHECK-NEXT: lwz r3, 0(r3)874; CHECK-NEXT: extsh r3, r3875; CHECK-NEXT: blr876entry:877 %0 = inttoptr i64 %ptr to ptr878 %1 = load atomic i32, ptr %0 monotonic, align 4879 %conv = trunc i32 %1 to i16880 ret i16 %conv881}882 883; Function Attrs: nofree norecurse nounwind uwtable willreturn884define dso_local signext i16 @ld_align16_int16_t_uint32_t(ptr nocapture readonly %ptr) {885; CHECK-LABEL: ld_align16_int16_t_uint32_t:886; CHECK: # %bb.0: # %entry887; CHECK-NEXT: lwz r3, 8(r3)888; CHECK-NEXT: extsh r3, r3889; CHECK-NEXT: blr890entry:891 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8892 %0 = load atomic i32, ptr %add.ptr monotonic, align 4893 %conv = trunc i32 %0 to i16894 ret i16 %conv895}896 897; Function Attrs: nofree norecurse nounwind uwtable willreturn898define dso_local signext i16 @ld_align32_int16_t_uint32_t(ptr nocapture readonly %ptr) {899; CHECK-P10-LABEL: ld_align32_int16_t_uint32_t:900; CHECK-P10: # %bb.0: # %entry901; CHECK-P10-NEXT: plwz r3, 99999000(r3), 0902; CHECK-P10-NEXT: extsh r3, r3903; CHECK-P10-NEXT: blr904;905; CHECK-PREP10-LABEL: ld_align32_int16_t_uint32_t:906; CHECK-PREP10: # %bb.0: # %entry907; CHECK-PREP10-NEXT: lis r4, 1525908; CHECK-PREP10-NEXT: ori r4, r4, 56600909; CHECK-PREP10-NEXT: lwzx r3, r3, r4910; CHECK-PREP10-NEXT: extsh r3, r3911; CHECK-PREP10-NEXT: blr912entry:913 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000914 %0 = load atomic i32, ptr %add.ptr monotonic, align 4915 %conv = trunc i32 %0 to i16916 ret i16 %conv917}918 919; Function Attrs: nofree norecurse nounwind uwtable willreturn920define dso_local signext i16 @ld_align64_int16_t_uint32_t(ptr nocapture readonly %ptr) {921; CHECK-P10-LABEL: ld_align64_int16_t_uint32_t:922; CHECK-P10: # %bb.0: # %entry923; CHECK-P10-NEXT: pli r4, 244140625924; CHECK-P10-NEXT: rldic r4, r4, 12, 24925; CHECK-P10-NEXT: lwzx r3, r3, r4926; CHECK-P10-NEXT: extsh r3, r3927; CHECK-P10-NEXT: blr928;929; CHECK-PREP10-LABEL: ld_align64_int16_t_uint32_t:930; CHECK-PREP10: # %bb.0: # %entry931; CHECK-PREP10-NEXT: lis r4, 3725932; CHECK-PREP10-NEXT: ori r4, r4, 19025933; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24934; CHECK-PREP10-NEXT: lwzx r3, r3, r4935; CHECK-PREP10-NEXT: extsh r3, r3936; CHECK-PREP10-NEXT: blr937entry:938 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000939 %0 = load atomic i32, ptr %add.ptr monotonic, align 4940 %conv = trunc i32 %0 to i16941 ret i16 %conv942}943 944; Function Attrs: nofree norecurse nounwind uwtable willreturn945define dso_local signext i16 @ld_reg_int16_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {946; CHECK-LABEL: ld_reg_int16_t_uint32_t:947; CHECK: # %bb.0: # %entry948; CHECK-NEXT: lwzx r3, r3, r4949; CHECK-NEXT: extsh r3, r3950; CHECK-NEXT: blr951entry:952 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off953 %0 = load atomic i32, ptr %add.ptr monotonic, align 4954 %conv = trunc i32 %0 to i16955 ret i16 %conv956}957 958; Function Attrs: nofree norecurse nounwind uwtable willreturn959define dso_local signext i16 @ld_or_int16_t_uint32_t(i64 %ptr, i8 zeroext %off) {960; CHECK-LABEL: ld_or_int16_t_uint32_t:961; CHECK: # %bb.0: # %entry962; CHECK-NEXT: or r3, r4, r3963; CHECK-NEXT: lwz r3, 0(r3)964; CHECK-NEXT: extsh r3, r3965; CHECK-NEXT: blr966entry:967 %conv = zext i8 %off to i64968 %or = or i64 %conv, %ptr969 %0 = inttoptr i64 %or to ptr970 %1 = load atomic i32, ptr %0 monotonic, align 4971 %conv1 = trunc i32 %1 to i16972 ret i16 %conv1973}974 975; Function Attrs: nofree norecurse nounwind uwtable willreturn976define dso_local signext i16 @ld_not_disjoint16_int16_t_uint32_t(i64 %ptr) {977; CHECK-LABEL: ld_not_disjoint16_int16_t_uint32_t:978; CHECK: # %bb.0: # %entry979; CHECK-NEXT: ori r3, r3, 6980; CHECK-NEXT: lwz r3, 0(r3)981; CHECK-NEXT: extsh r3, r3982; CHECK-NEXT: blr983entry:984 %or = or i64 %ptr, 6985 %0 = inttoptr i64 %or to ptr986 %1 = load atomic i32, ptr %0 monotonic, align 4987 %conv = trunc i32 %1 to i16988 ret i16 %conv989}990 991; Function Attrs: nofree norecurse nounwind uwtable willreturn992define dso_local signext i16 @ld_disjoint_align16_int16_t_uint32_t(i64 %ptr) {993; CHECK-LABEL: ld_disjoint_align16_int16_t_uint32_t:994; CHECK: # %bb.0: # %entry995; CHECK-NEXT: rldicr r3, r3, 0, 51996; CHECK-NEXT: lwz r3, 24(r3)997; CHECK-NEXT: extsh r3, r3998; CHECK-NEXT: blr999entry:1000 %and = and i64 %ptr, -40961001 %or = or i64 %and, 241002 %0 = inttoptr i64 %or to ptr1003 %1 = load atomic i32, ptr %0 monotonic, align 81004 %conv = trunc i32 %1 to i161005 ret i16 %conv1006}1007 1008; Function Attrs: nofree norecurse nounwind uwtable willreturn1009define dso_local signext i16 @ld_not_disjoint32_int16_t_uint32_t(i64 %ptr) {1010; CHECK-LABEL: ld_not_disjoint32_int16_t_uint32_t:1011; CHECK: # %bb.0: # %entry1012; CHECK-NEXT: ori r3, r3, 344631013; CHECK-NEXT: oris r3, r3, 11014; CHECK-NEXT: lwz r3, 0(r3)1015; CHECK-NEXT: extsh r3, r31016; CHECK-NEXT: blr1017entry:1018 %or = or i64 %ptr, 999991019 %0 = inttoptr i64 %or to ptr1020 %1 = load atomic i32, ptr %0 monotonic, align 41021 %conv = trunc i32 %1 to i161022 ret i16 %conv1023}1024 1025; Function Attrs: nofree norecurse nounwind uwtable willreturn1026define dso_local signext i16 @ld_disjoint_align32_int16_t_uint32_t(i64 %ptr) {1027; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_uint32_t:1028; CHECK-P10: # %bb.0: # %entry1029; CHECK-P10-NEXT: lis r4, -152641030; CHECK-P10-NEXT: and r3, r3, r41031; CHECK-P10-NEXT: plwz r3, 999990000(r3), 01032; CHECK-P10-NEXT: extsh r3, r31033; CHECK-P10-NEXT: blr1034;1035; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_uint32_t:1036; CHECK-PREP10: # %bb.0: # %entry1037; CHECK-PREP10-NEXT: lis r4, -152641038; CHECK-PREP10-NEXT: and r3, r3, r41039; CHECK-PREP10-NEXT: lis r4, 152581040; CHECK-PREP10-NEXT: ori r4, r4, 417121041; CHECK-PREP10-NEXT: lwzx r3, r3, r41042; CHECK-PREP10-NEXT: extsh r3, r31043; CHECK-PREP10-NEXT: blr1044entry:1045 %and = and i64 %ptr, -10003415041046 %or = or i64 %and, 9999900001047 %0 = inttoptr i64 %or to ptr1048 %1 = load atomic i32, ptr %0 monotonic, align 161049 %conv = trunc i32 %1 to i161050 ret i16 %conv1051}1052 1053; Function Attrs: nofree norecurse nounwind uwtable willreturn1054define dso_local signext i16 @ld_not_disjoint64_int16_t_uint32_t(i64 %ptr) {1055; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_uint32_t:1056; CHECK-P10: # %bb.0: # %entry1057; CHECK-P10-NEXT: pli r4, 2321058; CHECK-P10-NEXT: pli r5, 35675873291059; CHECK-P10-NEXT: rldimi r5, r4, 32, 01060; CHECK-P10-NEXT: or r3, r3, r51061; CHECK-P10-NEXT: lwz r3, 0(r3)1062; CHECK-P10-NEXT: extsh r3, r31063; CHECK-P10-NEXT: blr1064;1065; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_uint32_t:1066; CHECK-PREP10: # %bb.0: # %entry1067; CHECK-PREP10-NEXT: li r4, 291068; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241069; CHECK-PREP10-NEXT: oris r4, r4, 544371070; CHECK-PREP10-NEXT: ori r4, r4, 40971071; CHECK-PREP10-NEXT: or r3, r3, r41072; CHECK-PREP10-NEXT: lwz r3, 0(r3)1073; CHECK-PREP10-NEXT: extsh r3, r31074; CHECK-PREP10-NEXT: blr1075entry:1076 %or = or i64 %ptr, 10000000000011077 %0 = inttoptr i64 %or to ptr1078 %1 = load atomic i32, ptr %0 monotonic, align 41079 %conv = trunc i32 %1 to i161080 ret i16 %conv1081}1082 1083; Function Attrs: nofree norecurse nounwind uwtable willreturn1084define dso_local signext i16 @ld_disjoint_align64_int16_t_uint32_t(i64 %ptr) {1085; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_uint32_t:1086; CHECK-P10: # %bb.0: # %entry1087; CHECK-P10-NEXT: pli r4, 2441406251088; CHECK-P10-NEXT: rldicr r3, r3, 0, 231089; CHECK-P10-NEXT: rldic r4, r4, 12, 241090; CHECK-P10-NEXT: lwzx r3, r3, r41091; CHECK-P10-NEXT: extsh r3, r31092; CHECK-P10-NEXT: blr1093;1094; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_uint32_t:1095; CHECK-PREP10: # %bb.0: # %entry1096; CHECK-PREP10-NEXT: lis r4, 37251097; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231098; CHECK-PREP10-NEXT: ori r4, r4, 190251099; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241100; CHECK-PREP10-NEXT: lwzx r3, r3, r41101; CHECK-PREP10-NEXT: extsh r3, r31102; CHECK-PREP10-NEXT: blr1103entry:1104 %and = and i64 %ptr, -10995116277761105 %or = or i64 %and, 10000000000001106 %0 = inttoptr i64 %or to ptr1107 %1 = load atomic i32, ptr %0 monotonic, align 40961108 %conv = trunc i32 %1 to i161109 ret i16 %conv1110}1111 1112; Function Attrs: nofree norecurse nounwind uwtable willreturn1113define dso_local signext i16 @ld_cst_align16_int16_t_uint32_t() {1114; CHECK-LABEL: ld_cst_align16_int16_t_uint32_t:1115; CHECK: # %bb.0: # %entry1116; CHECK-NEXT: lwz r3, 4080(0)1117; CHECK-NEXT: extsh r3, r31118; CHECK-NEXT: blr1119entry:1120 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 161121 %conv = trunc i32 %0 to i161122 ret i16 %conv1123}1124 1125; Function Attrs: nofree norecurse nounwind uwtable willreturn1126define dso_local signext i16 @ld_cst_align32_int16_t_uint32_t() {1127; CHECK-LABEL: ld_cst_align32_int16_t_uint32_t:1128; CHECK: # %bb.0: # %entry1129; CHECK-NEXT: lis r3, 1531130; CHECK-NEXT: lwz r3, -27108(r3)1131; CHECK-NEXT: extsh r3, r31132; CHECK-NEXT: blr1133entry:1134 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 41135 %conv = trunc i32 %0 to i161136 ret i16 %conv1137}1138 1139; Function Attrs: nofree norecurse nounwind uwtable willreturn1140define dso_local signext i16 @ld_cst_align64_int16_t_uint32_t() {1141; CHECK-P10-LABEL: ld_cst_align64_int16_t_uint32_t:1142; CHECK-P10: # %bb.0: # %entry1143; CHECK-P10-NEXT: pli r3, 2441406251144; CHECK-P10-NEXT: rldic r3, r3, 12, 241145; CHECK-P10-NEXT: lwz r3, 0(r3)1146; CHECK-P10-NEXT: extsh r3, r31147; CHECK-P10-NEXT: blr1148;1149; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_uint32_t:1150; CHECK-PREP10: # %bb.0: # %entry1151; CHECK-PREP10-NEXT: lis r3, 37251152; CHECK-PREP10-NEXT: ori r3, r3, 190251153; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241154; CHECK-PREP10-NEXT: lwz r3, 0(r3)1155; CHECK-PREP10-NEXT: extsh r3, r31156; CHECK-PREP10-NEXT: blr1157entry:1158 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961159 %conv = trunc i32 %0 to i161160 ret i16 %conv1161}1162 1163; Function Attrs: nofree norecurse nounwind uwtable willreturn1164define dso_local signext i16 @ld_0_int16_t_uint64_t(i64 %ptr) {1165; CHECK-LABEL: ld_0_int16_t_uint64_t:1166; CHECK: # %bb.0: # %entry1167; CHECK-NEXT: ld r3, 0(r3)1168; CHECK-NEXT: extsh r3, r31169; CHECK-NEXT: blr1170entry:1171 %0 = inttoptr i64 %ptr to ptr1172 %1 = load atomic i64, ptr %0 monotonic, align 81173 %conv = trunc i64 %1 to i161174 ret i16 %conv1175}1176 1177; Function Attrs: nofree norecurse nounwind uwtable willreturn1178define dso_local signext i16 @ld_align16_int16_t_uint64_t(ptr nocapture readonly %ptr) {1179; CHECK-LABEL: ld_align16_int16_t_uint64_t:1180; CHECK: # %bb.0: # %entry1181; CHECK-NEXT: ld r3, 8(r3)1182; CHECK-NEXT: extsh r3, r31183; CHECK-NEXT: blr1184entry:1185 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81186 %0 = load atomic i64, ptr %add.ptr monotonic, align 81187 %conv = trunc i64 %0 to i161188 ret i16 %conv1189}1190 1191; Function Attrs: nofree norecurse nounwind uwtable willreturn1192define dso_local signext i16 @ld_align32_int16_t_uint64_t(ptr nocapture readonly %ptr) {1193; CHECK-P10-LABEL: ld_align32_int16_t_uint64_t:1194; CHECK-P10: # %bb.0: # %entry1195; CHECK-P10-NEXT: pld r3, 99999000(r3), 01196; CHECK-P10-NEXT: extsh r3, r31197; CHECK-P10-NEXT: blr1198;1199; CHECK-PREP10-LABEL: ld_align32_int16_t_uint64_t:1200; CHECK-PREP10: # %bb.0: # %entry1201; CHECK-PREP10-NEXT: lis r4, 15251202; CHECK-PREP10-NEXT: ori r4, r4, 566001203; CHECK-PREP10-NEXT: ldx r3, r3, r41204; CHECK-PREP10-NEXT: extsh r3, r31205; CHECK-PREP10-NEXT: blr1206entry:1207 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001208 %0 = load atomic i64, ptr %add.ptr monotonic, align 81209 %conv = trunc i64 %0 to i161210 ret i16 %conv1211}1212 1213; Function Attrs: nofree norecurse nounwind uwtable willreturn1214define dso_local signext i16 @ld_align64_int16_t_uint64_t(ptr nocapture readonly %ptr) {1215; CHECK-P10-LABEL: ld_align64_int16_t_uint64_t:1216; CHECK-P10: # %bb.0: # %entry1217; CHECK-P10-NEXT: pli r4, 2441406251218; CHECK-P10-NEXT: rldic r4, r4, 12, 241219; CHECK-P10-NEXT: ldx r3, r3, r41220; CHECK-P10-NEXT: extsh r3, r31221; CHECK-P10-NEXT: blr1222;1223; CHECK-PREP10-LABEL: ld_align64_int16_t_uint64_t:1224; CHECK-PREP10: # %bb.0: # %entry1225; CHECK-PREP10-NEXT: lis r4, 37251226; CHECK-PREP10-NEXT: ori r4, r4, 190251227; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241228; CHECK-PREP10-NEXT: ldx r3, r3, r41229; CHECK-PREP10-NEXT: extsh r3, r31230; CHECK-PREP10-NEXT: blr1231entry:1232 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001233 %0 = load atomic i64, ptr %add.ptr monotonic, align 81234 %conv = trunc i64 %0 to i161235 ret i16 %conv1236}1237 1238; Function Attrs: nofree norecurse nounwind uwtable willreturn1239define dso_local signext i16 @ld_reg_int16_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {1240; CHECK-LABEL: ld_reg_int16_t_uint64_t:1241; CHECK: # %bb.0: # %entry1242; CHECK-NEXT: ldx r3, r3, r41243; CHECK-NEXT: extsh r3, r31244; CHECK-NEXT: blr1245entry:1246 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1247 %0 = load atomic i64, ptr %add.ptr monotonic, align 81248 %conv = trunc i64 %0 to i161249 ret i16 %conv1250}1251 1252; Function Attrs: nofree norecurse nounwind uwtable willreturn1253define dso_local signext i16 @ld_or_int16_t_uint64_t(i64 %ptr, i8 zeroext %off) {1254; CHECK-LABEL: ld_or_int16_t_uint64_t:1255; CHECK: # %bb.0: # %entry1256; CHECK-NEXT: or r3, r4, r31257; CHECK-NEXT: ld r3, 0(r3)1258; CHECK-NEXT: extsh r3, r31259; CHECK-NEXT: blr1260entry:1261 %conv = zext i8 %off to i641262 %or = or i64 %conv, %ptr1263 %0 = inttoptr i64 %or to ptr1264 %1 = load atomic i64, ptr %0 monotonic, align 81265 %conv1 = trunc i64 %1 to i161266 ret i16 %conv11267}1268 1269; Function Attrs: nofree norecurse nounwind uwtable willreturn1270define dso_local signext i16 @ld_not_disjoint16_int16_t_uint64_t(i64 %ptr) {1271; CHECK-LABEL: ld_not_disjoint16_int16_t_uint64_t:1272; CHECK: # %bb.0: # %entry1273; CHECK-NEXT: ori r3, r3, 61274; CHECK-NEXT: ld r3, 0(r3)1275; CHECK-NEXT: extsh r3, r31276; CHECK-NEXT: blr1277entry:1278 %or = or i64 %ptr, 61279 %0 = inttoptr i64 %or to ptr1280 %1 = load atomic i64, ptr %0 monotonic, align 81281 %conv = trunc i64 %1 to i161282 ret i16 %conv1283}1284 1285; Function Attrs: nofree norecurse nounwind uwtable willreturn1286define dso_local signext i16 @ld_disjoint_align16_int16_t_uint64_t(i64 %ptr) {1287; CHECK-LABEL: ld_disjoint_align16_int16_t_uint64_t:1288; CHECK: # %bb.0: # %entry1289; CHECK-NEXT: rldicr r3, r3, 0, 511290; CHECK-NEXT: ld r3, 24(r3)1291; CHECK-NEXT: extsh r3, r31292; CHECK-NEXT: blr1293entry:1294 %and = and i64 %ptr, -40961295 %or = or i64 %and, 241296 %0 = inttoptr i64 %or to ptr1297 %1 = load atomic i64, ptr %0 monotonic, align 81298 %conv = trunc i64 %1 to i161299 ret i16 %conv1300}1301 1302; Function Attrs: nofree norecurse nounwind uwtable willreturn1303define dso_local signext i16 @ld_not_disjoint32_int16_t_uint64_t(i64 %ptr) {1304; CHECK-LABEL: ld_not_disjoint32_int16_t_uint64_t:1305; CHECK: # %bb.0: # %entry1306; CHECK-NEXT: ori r3, r3, 344631307; CHECK-NEXT: oris r3, r3, 11308; CHECK-NEXT: ld r3, 0(r3)1309; CHECK-NEXT: extsh r3, r31310; CHECK-NEXT: blr1311entry:1312 %or = or i64 %ptr, 999991313 %0 = inttoptr i64 %or to ptr1314 %1 = load atomic i64, ptr %0 monotonic, align 81315 %conv = trunc i64 %1 to i161316 ret i16 %conv1317}1318 1319; Function Attrs: nofree norecurse nounwind uwtable willreturn1320define dso_local signext i16 @ld_disjoint_align32_int16_t_uint64_t(i64 %ptr) {1321; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_uint64_t:1322; CHECK-P10: # %bb.0: # %entry1323; CHECK-P10-NEXT: lis r4, -152641324; CHECK-P10-NEXT: and r3, r3, r41325; CHECK-P10-NEXT: pld r3, 999990000(r3), 01326; CHECK-P10-NEXT: extsh r3, r31327; CHECK-P10-NEXT: blr1328;1329; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_uint64_t:1330; CHECK-PREP10: # %bb.0: # %entry1331; CHECK-PREP10-NEXT: lis r4, -152641332; CHECK-PREP10-NEXT: and r3, r3, r41333; CHECK-PREP10-NEXT: lis r4, 152581334; CHECK-PREP10-NEXT: ori r4, r4, 417121335; CHECK-PREP10-NEXT: ldx r3, r3, r41336; CHECK-PREP10-NEXT: extsh r3, r31337; CHECK-PREP10-NEXT: blr1338entry:1339 %and = and i64 %ptr, -10003415041340 %or = or i64 %and, 9999900001341 %0 = inttoptr i64 %or to ptr1342 %1 = load atomic i64, ptr %0 monotonic, align 161343 %conv = trunc i64 %1 to i161344 ret i16 %conv1345}1346 1347; Function Attrs: nofree norecurse nounwind uwtable willreturn1348define dso_local signext i16 @ld_not_disjoint64_int16_t_uint64_t(i64 %ptr) {1349; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_uint64_t:1350; CHECK-P10: # %bb.0: # %entry1351; CHECK-P10-NEXT: pli r4, 2321352; CHECK-P10-NEXT: pli r5, 35675873291353; CHECK-P10-NEXT: rldimi r5, r4, 32, 01354; CHECK-P10-NEXT: or r3, r3, r51355; CHECK-P10-NEXT: ld r3, 0(r3)1356; CHECK-P10-NEXT: extsh r3, r31357; CHECK-P10-NEXT: blr1358;1359; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_uint64_t:1360; CHECK-PREP10: # %bb.0: # %entry1361; CHECK-PREP10-NEXT: li r4, 291362; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241363; CHECK-PREP10-NEXT: oris r4, r4, 544371364; CHECK-PREP10-NEXT: ori r4, r4, 40971365; CHECK-PREP10-NEXT: or r3, r3, r41366; CHECK-PREP10-NEXT: ld r3, 0(r3)1367; CHECK-PREP10-NEXT: extsh r3, r31368; CHECK-PREP10-NEXT: blr1369entry:1370 %or = or i64 %ptr, 10000000000011371 %0 = inttoptr i64 %or to ptr1372 %1 = load atomic i64, ptr %0 monotonic, align 81373 %conv = trunc i64 %1 to i161374 ret i16 %conv1375}1376 1377; Function Attrs: nofree norecurse nounwind uwtable willreturn1378define dso_local signext i16 @ld_disjoint_align64_int16_t_uint64_t(i64 %ptr) {1379; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_uint64_t:1380; CHECK-P10: # %bb.0: # %entry1381; CHECK-P10-NEXT: pli r4, 2441406251382; CHECK-P10-NEXT: rldicr r3, r3, 0, 231383; CHECK-P10-NEXT: rldic r4, r4, 12, 241384; CHECK-P10-NEXT: ldx r3, r3, r41385; CHECK-P10-NEXT: extsh r3, r31386; CHECK-P10-NEXT: blr1387;1388; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_uint64_t:1389; CHECK-PREP10: # %bb.0: # %entry1390; CHECK-PREP10-NEXT: lis r4, 37251391; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231392; CHECK-PREP10-NEXT: ori r4, r4, 190251393; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241394; CHECK-PREP10-NEXT: ldx r3, r3, r41395; CHECK-PREP10-NEXT: extsh r3, r31396; CHECK-PREP10-NEXT: blr1397entry:1398 %and = and i64 %ptr, -10995116277761399 %or = or i64 %and, 10000000000001400 %0 = inttoptr i64 %or to ptr1401 %1 = load atomic i64, ptr %0 monotonic, align 40961402 %conv = trunc i64 %1 to i161403 ret i16 %conv1404}1405 1406; Function Attrs: nofree norecurse nounwind uwtable willreturn1407define dso_local signext i16 @ld_cst_align16_int16_t_uint64_t() {1408; CHECK-LABEL: ld_cst_align16_int16_t_uint64_t:1409; CHECK: # %bb.0: # %entry1410; CHECK-NEXT: ld r3, 4080(0)1411; CHECK-NEXT: extsh r3, r31412; CHECK-NEXT: blr1413entry:1414 %0 = load atomic i64, ptr inttoptr (i64 4080 to ptr) monotonic, align 161415 %conv = trunc i64 %0 to i161416 ret i16 %conv1417}1418 1419; Function Attrs: nofree norecurse nounwind uwtable willreturn1420define dso_local signext i16 @ld_cst_align32_int16_t_uint64_t() {1421; CHECK-LABEL: ld_cst_align32_int16_t_uint64_t:1422; CHECK: # %bb.0: # %entry1423; CHECK-NEXT: lis r3, 1531424; CHECK-NEXT: ld r3, -27108(r3)1425; CHECK-NEXT: extsh r3, r31426; CHECK-NEXT: blr1427entry:1428 %0 = load atomic i64, ptr inttoptr (i64 9999900 to ptr) monotonic, align 81429 %conv = trunc i64 %0 to i161430 ret i16 %conv1431}1432 1433; Function Attrs: nofree norecurse nounwind uwtable willreturn1434define dso_local signext i16 @ld_cst_align64_int16_t_uint64_t() {1435; CHECK-P10-LABEL: ld_cst_align64_int16_t_uint64_t:1436; CHECK-P10: # %bb.0: # %entry1437; CHECK-P10-NEXT: pli r3, 2441406251438; CHECK-P10-NEXT: rldic r3, r3, 12, 241439; CHECK-P10-NEXT: ld r3, 0(r3)1440; CHECK-P10-NEXT: extsh r3, r31441; CHECK-P10-NEXT: blr1442;1443; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_uint64_t:1444; CHECK-PREP10: # %bb.0: # %entry1445; CHECK-PREP10-NEXT: lis r3, 37251446; CHECK-PREP10-NEXT: ori r3, r3, 190251447; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241448; CHECK-PREP10-NEXT: ld r3, 0(r3)1449; CHECK-PREP10-NEXT: extsh r3, r31450; CHECK-PREP10-NEXT: blr1451entry:1452 %0 = load atomic i64, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961453 %conv = trunc i64 %0 to i161454 ret i16 %conv1455}1456 1457; Function Attrs: nofree norecurse nounwind uwtable willreturn1458define dso_local zeroext i16 @ld_0_uint16_t_uint8_t(i64 %ptr) {1459; CHECK-LABEL: ld_0_uint16_t_uint8_t:1460; CHECK: # %bb.0: # %entry1461; CHECK-NEXT: lbz r3, 0(r3)1462; CHECK-NEXT: blr1463entry:1464 %0 = inttoptr i64 %ptr to ptr1465 %1 = load atomic i8, ptr %0 monotonic, align 11466 %conv = zext i8 %1 to i161467 ret i16 %conv1468}1469 1470; Function Attrs: nofree norecurse nounwind uwtable willreturn1471define dso_local zeroext i16 @ld_align16_uint16_t_uint8_t(ptr nocapture readonly %ptr) {1472; CHECK-LABEL: ld_align16_uint16_t_uint8_t:1473; CHECK: # %bb.0: # %entry1474; CHECK-NEXT: lbz r3, 8(r3)1475; CHECK-NEXT: blr1476entry:1477 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81478 %0 = load atomic i8, ptr %add.ptr monotonic, align 11479 %conv = zext i8 %0 to i161480 ret i16 %conv1481}1482 1483; Function Attrs: nofree norecurse nounwind uwtable willreturn1484define dso_local zeroext i16 @ld_align32_uint16_t_uint8_t(ptr nocapture readonly %ptr) {1485; CHECK-P10-LABEL: ld_align32_uint16_t_uint8_t:1486; CHECK-P10: # %bb.0: # %entry1487; CHECK-P10-NEXT: plbz r3, 99999000(r3), 01488; CHECK-P10-NEXT: clrldi r3, r3, 321489; CHECK-P10-NEXT: blr1490;1491; CHECK-PREP10-LABEL: ld_align32_uint16_t_uint8_t:1492; CHECK-PREP10: # %bb.0: # %entry1493; CHECK-PREP10-NEXT: lis r4, 15251494; CHECK-PREP10-NEXT: ori r4, r4, 566001495; CHECK-PREP10-NEXT: lbzx r3, r3, r41496; CHECK-PREP10-NEXT: blr1497entry:1498 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001499 %0 = load atomic i8, ptr %add.ptr monotonic, align 11500 %conv = zext i8 %0 to i161501 ret i16 %conv1502}1503 1504; Function Attrs: nofree norecurse nounwind uwtable willreturn1505define dso_local zeroext i16 @ld_align64_uint16_t_uint8_t(ptr nocapture readonly %ptr) {1506; CHECK-P10-LABEL: ld_align64_uint16_t_uint8_t:1507; CHECK-P10: # %bb.0: # %entry1508; CHECK-P10-NEXT: pli r4, 2441406251509; CHECK-P10-NEXT: rldic r4, r4, 12, 241510; CHECK-P10-NEXT: lbzx r3, r3, r41511; CHECK-P10-NEXT: blr1512;1513; CHECK-PREP10-LABEL: ld_align64_uint16_t_uint8_t:1514; CHECK-PREP10: # %bb.0: # %entry1515; CHECK-PREP10-NEXT: lis r4, 37251516; CHECK-PREP10-NEXT: ori r4, r4, 190251517; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241518; CHECK-PREP10-NEXT: lbzx r3, r3, r41519; CHECK-PREP10-NEXT: blr1520entry:1521 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001522 %0 = load atomic i8, ptr %add.ptr monotonic, align 11523 %conv = zext i8 %0 to i161524 ret i16 %conv1525}1526 1527; Function Attrs: nofree norecurse nounwind uwtable willreturn1528define dso_local zeroext i16 @ld_reg_uint16_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) {1529; CHECK-LABEL: ld_reg_uint16_t_uint8_t:1530; CHECK: # %bb.0: # %entry1531; CHECK-NEXT: lbzx r3, r3, r41532; CHECK-NEXT: blr1533entry:1534 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1535 %0 = load atomic i8, ptr %add.ptr monotonic, align 11536 %conv = zext i8 %0 to i161537 ret i16 %conv1538}1539 1540; Function Attrs: nofree norecurse nounwind uwtable willreturn1541define dso_local zeroext i16 @ld_or_uint16_t_uint8_t(i64 %ptr, i8 zeroext %off) {1542; CHECK-LABEL: ld_or_uint16_t_uint8_t:1543; CHECK: # %bb.0: # %entry1544; CHECK-NEXT: or r3, r4, r31545; CHECK-NEXT: lbz r3, 0(r3)1546; CHECK-NEXT: blr1547entry:1548 %conv = zext i8 %off to i641549 %or = or i64 %conv, %ptr1550 %0 = inttoptr i64 %or to ptr1551 %1 = load atomic i8, ptr %0 monotonic, align 11552 %conv1 = zext i8 %1 to i161553 ret i16 %conv11554}1555 1556; Function Attrs: nofree norecurse nounwind uwtable willreturn1557define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint8_t(i64 %ptr) {1558; CHECK-LABEL: ld_not_disjoint16_uint16_t_uint8_t:1559; CHECK: # %bb.0: # %entry1560; CHECK-NEXT: ori r3, r3, 61561; CHECK-NEXT: lbz r3, 0(r3)1562; CHECK-NEXT: blr1563entry:1564 %or = or i64 %ptr, 61565 %0 = inttoptr i64 %or to ptr1566 %1 = load atomic i8, ptr %0 monotonic, align 11567 %conv = zext i8 %1 to i161568 ret i16 %conv1569}1570 1571; Function Attrs: nofree norecurse nounwind uwtable willreturn1572define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint8_t(i64 %ptr) {1573; CHECK-LABEL: ld_disjoint_align16_uint16_t_uint8_t:1574; CHECK: # %bb.0: # %entry1575; CHECK-NEXT: rldicr r3, r3, 0, 511576; CHECK-NEXT: lbz r3, 24(r3)1577; CHECK-NEXT: blr1578entry:1579 %and = and i64 %ptr, -40961580 %or = or i64 %and, 241581 %0 = inttoptr i64 %or to ptr1582 %1 = load atomic i8, ptr %0 monotonic, align 81583 %conv = zext i8 %1 to i161584 ret i16 %conv1585}1586 1587; Function Attrs: nofree norecurse nounwind uwtable willreturn1588define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint8_t(i64 %ptr) {1589; CHECK-LABEL: ld_not_disjoint32_uint16_t_uint8_t:1590; CHECK: # %bb.0: # %entry1591; CHECK-NEXT: ori r3, r3, 344631592; CHECK-NEXT: oris r3, r3, 11593; CHECK-NEXT: lbz r3, 0(r3)1594; CHECK-NEXT: blr1595entry:1596 %or = or i64 %ptr, 999991597 %0 = inttoptr i64 %or to ptr1598 %1 = load atomic i8, ptr %0 monotonic, align 11599 %conv = zext i8 %1 to i161600 ret i16 %conv1601}1602 1603; Function Attrs: nofree norecurse nounwind uwtable willreturn1604define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint8_t(i64 %ptr) {1605; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_uint8_t:1606; CHECK-P10: # %bb.0: # %entry1607; CHECK-P10-NEXT: lis r4, -152641608; CHECK-P10-NEXT: and r3, r3, r41609; CHECK-P10-NEXT: plbz r3, 999990000(r3), 01610; CHECK-P10-NEXT: clrldi r3, r3, 321611; CHECK-P10-NEXT: blr1612;1613; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_uint8_t:1614; CHECK-PREP10: # %bb.0: # %entry1615; CHECK-PREP10-NEXT: lis r4, -152641616; CHECK-PREP10-NEXT: and r3, r3, r41617; CHECK-PREP10-NEXT: lis r4, 152581618; CHECK-PREP10-NEXT: ori r4, r4, 417121619; CHECK-PREP10-NEXT: lbzx r3, r3, r41620; CHECK-PREP10-NEXT: blr1621entry:1622 %and = and i64 %ptr, -10003415041623 %or = or i64 %and, 9999900001624 %0 = inttoptr i64 %or to ptr1625 %1 = load atomic i8, ptr %0 monotonic, align 161626 %conv = zext i8 %1 to i161627 ret i16 %conv1628}1629 1630; Function Attrs: nofree norecurse nounwind uwtable willreturn1631define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint8_t(i64 %ptr) {1632; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_uint8_t:1633; CHECK-P10: # %bb.0: # %entry1634; CHECK-P10-NEXT: pli r4, 2321635; CHECK-P10-NEXT: pli r5, 35675873291636; CHECK-P10-NEXT: rldimi r5, r4, 32, 01637; CHECK-P10-NEXT: or r3, r3, r51638; CHECK-P10-NEXT: lbz r3, 0(r3)1639; CHECK-P10-NEXT: blr1640;1641; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_uint8_t:1642; CHECK-PREP10: # %bb.0: # %entry1643; CHECK-PREP10-NEXT: li r4, 291644; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241645; CHECK-PREP10-NEXT: oris r4, r4, 544371646; CHECK-PREP10-NEXT: ori r4, r4, 40971647; CHECK-PREP10-NEXT: or r3, r3, r41648; CHECK-PREP10-NEXT: lbz r3, 0(r3)1649; CHECK-PREP10-NEXT: blr1650entry:1651 %or = or i64 %ptr, 10000000000011652 %0 = inttoptr i64 %or to ptr1653 %1 = load atomic i8, ptr %0 monotonic, align 11654 %conv = zext i8 %1 to i161655 ret i16 %conv1656}1657 1658; Function Attrs: nofree norecurse nounwind uwtable willreturn1659define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint8_t(i64 %ptr) {1660; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_uint8_t:1661; CHECK-P10: # %bb.0: # %entry1662; CHECK-P10-NEXT: pli r4, 2441406251663; CHECK-P10-NEXT: rldicr r3, r3, 0, 231664; CHECK-P10-NEXT: rldic r4, r4, 12, 241665; CHECK-P10-NEXT: lbzx r3, r3, r41666; CHECK-P10-NEXT: blr1667;1668; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_uint8_t:1669; CHECK-PREP10: # %bb.0: # %entry1670; CHECK-PREP10-NEXT: lis r4, 37251671; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231672; CHECK-PREP10-NEXT: ori r4, r4, 190251673; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241674; CHECK-PREP10-NEXT: lbzx r3, r3, r41675; CHECK-PREP10-NEXT: blr1676entry:1677 %and = and i64 %ptr, -10995116277761678 %or = or i64 %and, 10000000000001679 %0 = inttoptr i64 %or to ptr1680 %1 = load atomic i8, ptr %0 monotonic, align 40961681 %conv = zext i8 %1 to i161682 ret i16 %conv1683}1684 1685; Function Attrs: nofree norecurse nounwind uwtable willreturn1686define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint8_t() {1687; CHECK-LABEL: ld_cst_align16_uint16_t_uint8_t:1688; CHECK: # %bb.0: # %entry1689; CHECK-NEXT: lbz r3, 4080(0)1690; CHECK-NEXT: blr1691entry:1692 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 161693 %conv = zext i8 %0 to i161694 ret i16 %conv1695}1696 1697; Function Attrs: nofree norecurse nounwind uwtable willreturn1698define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint8_t() {1699; CHECK-LABEL: ld_cst_align32_uint16_t_uint8_t:1700; CHECK: # %bb.0: # %entry1701; CHECK-NEXT: lis r3, 1531702; CHECK-NEXT: lbz r3, -27108(r3)1703; CHECK-NEXT: blr1704entry:1705 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 41706 %conv = zext i8 %0 to i161707 ret i16 %conv1708}1709 1710; Function Attrs: nofree norecurse nounwind uwtable willreturn1711define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint8_t() {1712; CHECK-P10-LABEL: ld_cst_align64_uint16_t_uint8_t:1713; CHECK-P10: # %bb.0: # %entry1714; CHECK-P10-NEXT: pli r3, 2441406251715; CHECK-P10-NEXT: rldic r3, r3, 12, 241716; CHECK-P10-NEXT: lbz r3, 0(r3)1717; CHECK-P10-NEXT: blr1718;1719; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_uint8_t:1720; CHECK-PREP10: # %bb.0: # %entry1721; CHECK-PREP10-NEXT: lis r3, 37251722; CHECK-PREP10-NEXT: ori r3, r3, 190251723; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241724; CHECK-PREP10-NEXT: lbz r3, 0(r3)1725; CHECK-PREP10-NEXT: blr1726entry:1727 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40961728 %conv = zext i8 %0 to i161729 ret i16 %conv1730}1731 1732; Function Attrs: nofree norecurse nounwind uwtable willreturn1733define dso_local zeroext i16 @ld_0_uint16_t_int8_t(i64 %ptr) {1734; CHECK-LABEL: ld_0_uint16_t_int8_t:1735; CHECK: # %bb.0: # %entry1736; CHECK-NEXT: lbz r3, 0(r3)1737; CHECK-NEXT: extsb r3, r31738; CHECK-NEXT: clrldi r3, r3, 481739; CHECK-NEXT: blr1740entry:1741 %0 = inttoptr i64 %ptr to ptr1742 %1 = load atomic i8, ptr %0 monotonic, align 11743 %conv = sext i8 %1 to i161744 ret i16 %conv1745}1746 1747; Function Attrs: nofree norecurse nounwind uwtable willreturn1748define dso_local zeroext i16 @ld_align16_uint16_t_int8_t(ptr nocapture readonly %ptr) {1749; CHECK-LABEL: ld_align16_uint16_t_int8_t:1750; CHECK: # %bb.0: # %entry1751; CHECK-NEXT: lbz r3, 8(r3)1752; CHECK-NEXT: extsb r3, r31753; CHECK-NEXT: clrldi r3, r3, 481754; CHECK-NEXT: blr1755entry:1756 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81757 %0 = load atomic i8, ptr %add.ptr monotonic, align 11758 %conv = sext i8 %0 to i161759 ret i16 %conv1760}1761 1762; Function Attrs: nofree norecurse nounwind uwtable willreturn1763define dso_local zeroext i16 @ld_align32_uint16_t_int8_t(ptr nocapture readonly %ptr) {1764; CHECK-P10-LABEL: ld_align32_uint16_t_int8_t:1765; CHECK-P10: # %bb.0: # %entry1766; CHECK-P10-NEXT: plbz r3, 99999000(r3), 01767; CHECK-P10-NEXT: extsb r3, r31768; CHECK-P10-NEXT: clrldi r3, r3, 481769; CHECK-P10-NEXT: blr1770;1771; CHECK-PREP10-LABEL: ld_align32_uint16_t_int8_t:1772; CHECK-PREP10: # %bb.0: # %entry1773; CHECK-PREP10-NEXT: lis r4, 15251774; CHECK-PREP10-NEXT: ori r4, r4, 566001775; CHECK-PREP10-NEXT: lbzx r3, r3, r41776; CHECK-PREP10-NEXT: extsb r3, r31777; CHECK-PREP10-NEXT: clrldi r3, r3, 481778; CHECK-PREP10-NEXT: blr1779entry:1780 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001781 %0 = load atomic i8, ptr %add.ptr monotonic, align 11782 %conv = sext i8 %0 to i161783 ret i16 %conv1784}1785 1786; Function Attrs: nofree norecurse nounwind uwtable willreturn1787define dso_local zeroext i16 @ld_align64_uint16_t_int8_t(ptr nocapture readonly %ptr) {1788; CHECK-P10-LABEL: ld_align64_uint16_t_int8_t:1789; CHECK-P10: # %bb.0: # %entry1790; CHECK-P10-NEXT: pli r4, 2441406251791; CHECK-P10-NEXT: rldic r4, r4, 12, 241792; CHECK-P10-NEXT: lbzx r3, r3, r41793; CHECK-P10-NEXT: extsb r3, r31794; CHECK-P10-NEXT: clrldi r3, r3, 481795; CHECK-P10-NEXT: blr1796;1797; CHECK-PREP10-LABEL: ld_align64_uint16_t_int8_t:1798; CHECK-PREP10: # %bb.0: # %entry1799; CHECK-PREP10-NEXT: lis r4, 37251800; CHECK-PREP10-NEXT: ori r4, r4, 190251801; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241802; CHECK-PREP10-NEXT: lbzx r3, r3, r41803; CHECK-PREP10-NEXT: extsb r3, r31804; CHECK-PREP10-NEXT: clrldi r3, r3, 481805; CHECK-PREP10-NEXT: blr1806entry:1807 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001808 %0 = load atomic i8, ptr %add.ptr monotonic, align 11809 %conv = sext i8 %0 to i161810 ret i16 %conv1811}1812 1813; Function Attrs: nofree norecurse nounwind uwtable willreturn1814define dso_local zeroext i16 @ld_reg_uint16_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {1815; CHECK-LABEL: ld_reg_uint16_t_int8_t:1816; CHECK: # %bb.0: # %entry1817; CHECK-NEXT: lbzx r3, r3, r41818; CHECK-NEXT: extsb r3, r31819; CHECK-NEXT: clrldi r3, r3, 481820; CHECK-NEXT: blr1821entry:1822 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1823 %0 = load atomic i8, ptr %add.ptr monotonic, align 11824 %conv = sext i8 %0 to i161825 ret i16 %conv1826}1827 1828; Function Attrs: nofree norecurse nounwind uwtable willreturn1829define dso_local zeroext i16 @ld_or_uint16_t_int8_t(i64 %ptr, i8 zeroext %off) {1830; CHECK-LABEL: ld_or_uint16_t_int8_t:1831; CHECK: # %bb.0: # %entry1832; CHECK-NEXT: or r3, r4, r31833; CHECK-NEXT: lbz r3, 0(r3)1834; CHECK-NEXT: extsb r3, r31835; CHECK-NEXT: clrldi r3, r3, 481836; CHECK-NEXT: blr1837entry:1838 %conv = zext i8 %off to i641839 %or = or i64 %conv, %ptr1840 %0 = inttoptr i64 %or to ptr1841 %1 = load atomic i8, ptr %0 monotonic, align 11842 %conv1 = sext i8 %1 to i161843 ret i16 %conv11844}1845 1846; Function Attrs: nofree norecurse nounwind uwtable willreturn1847define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_int8_t(i64 %ptr) {1848; CHECK-LABEL: ld_not_disjoint16_uint16_t_int8_t:1849; CHECK: # %bb.0: # %entry1850; CHECK-NEXT: ori r3, r3, 61851; CHECK-NEXT: lbz r3, 0(r3)1852; CHECK-NEXT: extsb r3, r31853; CHECK-NEXT: clrldi r3, r3, 481854; CHECK-NEXT: blr1855entry:1856 %or = or i64 %ptr, 61857 %0 = inttoptr i64 %or to ptr1858 %1 = load atomic i8, ptr %0 monotonic, align 11859 %conv = sext i8 %1 to i161860 ret i16 %conv1861}1862 1863; Function Attrs: nofree norecurse nounwind uwtable willreturn1864define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_int8_t(i64 %ptr) {1865; CHECK-LABEL: ld_disjoint_align16_uint16_t_int8_t:1866; CHECK: # %bb.0: # %entry1867; CHECK-NEXT: rldicr r3, r3, 0, 511868; CHECK-NEXT: lbz r3, 24(r3)1869; CHECK-NEXT: extsb r3, r31870; CHECK-NEXT: clrldi r3, r3, 481871; CHECK-NEXT: blr1872entry:1873 %and = and i64 %ptr, -40961874 %or = or i64 %and, 241875 %0 = inttoptr i64 %or to ptr1876 %1 = load atomic i8, ptr %0 monotonic, align 81877 %conv = sext i8 %1 to i161878 ret i16 %conv1879}1880 1881; Function Attrs: nofree norecurse nounwind uwtable willreturn1882define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_int8_t(i64 %ptr) {1883; CHECK-LABEL: ld_not_disjoint32_uint16_t_int8_t:1884; CHECK: # %bb.0: # %entry1885; CHECK-NEXT: ori r3, r3, 344631886; CHECK-NEXT: oris r3, r3, 11887; CHECK-NEXT: lbz r3, 0(r3)1888; CHECK-NEXT: extsb r3, r31889; CHECK-NEXT: clrldi r3, r3, 481890; CHECK-NEXT: blr1891entry:1892 %or = or i64 %ptr, 999991893 %0 = inttoptr i64 %or to ptr1894 %1 = load atomic i8, ptr %0 monotonic, align 11895 %conv = sext i8 %1 to i161896 ret i16 %conv1897}1898 1899; Function Attrs: nofree norecurse nounwind uwtable willreturn1900define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_int8_t(i64 %ptr) {1901; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_int8_t:1902; CHECK-P10: # %bb.0: # %entry1903; CHECK-P10-NEXT: lis r4, -152641904; CHECK-P10-NEXT: and r3, r3, r41905; CHECK-P10-NEXT: plbz r3, 999990000(r3), 01906; CHECK-P10-NEXT: extsb r3, r31907; CHECK-P10-NEXT: clrldi r3, r3, 481908; CHECK-P10-NEXT: blr1909;1910; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_int8_t:1911; CHECK-PREP10: # %bb.0: # %entry1912; CHECK-PREP10-NEXT: lis r4, -152641913; CHECK-PREP10-NEXT: and r3, r3, r41914; CHECK-PREP10-NEXT: lis r4, 152581915; CHECK-PREP10-NEXT: ori r4, r4, 417121916; CHECK-PREP10-NEXT: lbzx r3, r3, r41917; CHECK-PREP10-NEXT: extsb r3, r31918; CHECK-PREP10-NEXT: clrldi r3, r3, 481919; CHECK-PREP10-NEXT: blr1920entry:1921 %and = and i64 %ptr, -10003415041922 %or = or i64 %and, 9999900001923 %0 = inttoptr i64 %or to ptr1924 %1 = load atomic i8, ptr %0 monotonic, align 161925 %conv = sext i8 %1 to i161926 ret i16 %conv1927}1928 1929; Function Attrs: nofree norecurse nounwind uwtable willreturn1930define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_int8_t(i64 %ptr) {1931; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_int8_t:1932; CHECK-P10: # %bb.0: # %entry1933; CHECK-P10-NEXT: pli r4, 2321934; CHECK-P10-NEXT: pli r5, 35675873291935; CHECK-P10-NEXT: rldimi r5, r4, 32, 01936; CHECK-P10-NEXT: or r3, r3, r51937; CHECK-P10-NEXT: lbz r3, 0(r3)1938; CHECK-P10-NEXT: extsb r3, r31939; CHECK-P10-NEXT: clrldi r3, r3, 481940; CHECK-P10-NEXT: blr1941;1942; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_int8_t:1943; CHECK-PREP10: # %bb.0: # %entry1944; CHECK-PREP10-NEXT: li r4, 291945; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241946; CHECK-PREP10-NEXT: oris r4, r4, 544371947; CHECK-PREP10-NEXT: ori r4, r4, 40971948; CHECK-PREP10-NEXT: or r3, r3, r41949; CHECK-PREP10-NEXT: lbz r3, 0(r3)1950; CHECK-PREP10-NEXT: extsb r3, r31951; CHECK-PREP10-NEXT: clrldi r3, r3, 481952; CHECK-PREP10-NEXT: blr1953entry:1954 %or = or i64 %ptr, 10000000000011955 %0 = inttoptr i64 %or to ptr1956 %1 = load atomic i8, ptr %0 monotonic, align 11957 %conv = sext i8 %1 to i161958 ret i16 %conv1959}1960 1961; Function Attrs: nofree norecurse nounwind uwtable willreturn1962define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_int8_t(i64 %ptr) {1963; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_int8_t:1964; CHECK-P10: # %bb.0: # %entry1965; CHECK-P10-NEXT: pli r4, 2441406251966; CHECK-P10-NEXT: rldicr r3, r3, 0, 231967; CHECK-P10-NEXT: rldic r4, r4, 12, 241968; CHECK-P10-NEXT: lbzx r3, r3, r41969; CHECK-P10-NEXT: extsb r3, r31970; CHECK-P10-NEXT: clrldi r3, r3, 481971; CHECK-P10-NEXT: blr1972;1973; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_int8_t:1974; CHECK-PREP10: # %bb.0: # %entry1975; CHECK-PREP10-NEXT: lis r4, 37251976; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231977; CHECK-PREP10-NEXT: ori r4, r4, 190251978; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241979; CHECK-PREP10-NEXT: lbzx r3, r3, r41980; CHECK-PREP10-NEXT: extsb r3, r31981; CHECK-PREP10-NEXT: clrldi r3, r3, 481982; CHECK-PREP10-NEXT: blr1983entry:1984 %and = and i64 %ptr, -10995116277761985 %or = or i64 %and, 10000000000001986 %0 = inttoptr i64 %or to ptr1987 %1 = load atomic i8, ptr %0 monotonic, align 40961988 %conv = sext i8 %1 to i161989 ret i16 %conv1990}1991 1992; Function Attrs: nofree norecurse nounwind uwtable willreturn1993define dso_local zeroext i16 @ld_cst_align16_uint16_t_int8_t() {1994; CHECK-LABEL: ld_cst_align16_uint16_t_int8_t:1995; CHECK: # %bb.0: # %entry1996; CHECK-NEXT: lbz r3, 4080(0)1997; CHECK-NEXT: extsb r3, r31998; CHECK-NEXT: clrldi r3, r3, 481999; CHECK-NEXT: blr2000entry:2001 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 162002 %conv = sext i8 %0 to i162003 ret i16 %conv2004}2005 2006; Function Attrs: nofree norecurse nounwind uwtable willreturn2007define dso_local zeroext i16 @ld_cst_align32_uint16_t_int8_t() {2008; CHECK-LABEL: ld_cst_align32_uint16_t_int8_t:2009; CHECK: # %bb.0: # %entry2010; CHECK-NEXT: lis r3, 1532011; CHECK-NEXT: lbz r3, -27108(r3)2012; CHECK-NEXT: extsb r3, r32013; CHECK-NEXT: clrldi r3, r3, 482014; CHECK-NEXT: blr2015entry:2016 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42017 %conv = sext i8 %0 to i162018 ret i16 %conv2019}2020 2021; Function Attrs: nofree norecurse nounwind uwtable willreturn2022define dso_local zeroext i16 @ld_cst_align64_uint16_t_int8_t() {2023; CHECK-P10-LABEL: ld_cst_align64_uint16_t_int8_t:2024; CHECK-P10: # %bb.0: # %entry2025; CHECK-P10-NEXT: pli r3, 2441406252026; CHECK-P10-NEXT: rldic r3, r3, 12, 242027; CHECK-P10-NEXT: lbz r3, 0(r3)2028; CHECK-P10-NEXT: extsb r3, r32029; CHECK-P10-NEXT: clrldi r3, r3, 482030; CHECK-P10-NEXT: blr2031;2032; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_int8_t:2033; CHECK-PREP10: # %bb.0: # %entry2034; CHECK-PREP10-NEXT: lis r3, 37252035; CHECK-PREP10-NEXT: ori r3, r3, 190252036; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242037; CHECK-PREP10-NEXT: lbz r3, 0(r3)2038; CHECK-PREP10-NEXT: extsb r3, r32039; CHECK-PREP10-NEXT: clrldi r3, r3, 482040; CHECK-PREP10-NEXT: blr2041entry:2042 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962043 %conv = sext i8 %0 to i162044 ret i16 %conv2045}2046 2047; Function Attrs: nofree norecurse nounwind uwtable willreturn2048define dso_local zeroext i16 @ld_0_uint16_t_uint16_t(i64 %ptr) {2049; CHECK-LABEL: ld_0_uint16_t_uint16_t:2050; CHECK: # %bb.0: # %entry2051; CHECK-NEXT: lhz r3, 0(r3)2052; CHECK-NEXT: blr2053entry:2054 %0 = inttoptr i64 %ptr to ptr2055 %1 = load atomic i16, ptr %0 monotonic, align 22056 ret i16 %12057}2058 2059; Function Attrs: nofree norecurse nounwind uwtable willreturn2060define dso_local zeroext i16 @ld_align16_uint16_t_uint16_t(ptr nocapture readonly %ptr) {2061; CHECK-LABEL: ld_align16_uint16_t_uint16_t:2062; CHECK: # %bb.0: # %entry2063; CHECK-NEXT: lhz r3, 8(r3)2064; CHECK-NEXT: blr2065entry:2066 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82067 %0 = load atomic i16, ptr %add.ptr monotonic, align 22068 ret i16 %02069}2070 2071; Function Attrs: nofree norecurse nounwind uwtable willreturn2072define dso_local zeroext i16 @ld_align32_uint16_t_uint16_t(ptr nocapture readonly %ptr) {2073; CHECK-P10-LABEL: ld_align32_uint16_t_uint16_t:2074; CHECK-P10: # %bb.0: # %entry2075; CHECK-P10-NEXT: plhz r3, 99999000(r3), 02076; CHECK-P10-NEXT: clrldi r3, r3, 322077; CHECK-P10-NEXT: blr2078;2079; CHECK-PREP10-LABEL: ld_align32_uint16_t_uint16_t:2080; CHECK-PREP10: # %bb.0: # %entry2081; CHECK-PREP10-NEXT: lis r4, 15252082; CHECK-PREP10-NEXT: ori r4, r4, 566002083; CHECK-PREP10-NEXT: lhzx r3, r3, r42084; CHECK-PREP10-NEXT: blr2085entry:2086 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002087 %0 = load atomic i16, ptr %add.ptr monotonic, align 22088 ret i16 %02089}2090 2091; Function Attrs: nofree norecurse nounwind uwtable willreturn2092define dso_local zeroext i16 @ld_align64_uint16_t_uint16_t(ptr nocapture readonly %ptr) {2093; CHECK-P10-LABEL: ld_align64_uint16_t_uint16_t:2094; CHECK-P10: # %bb.0: # %entry2095; CHECK-P10-NEXT: pli r4, 2441406252096; CHECK-P10-NEXT: rldic r4, r4, 12, 242097; CHECK-P10-NEXT: lhzx r3, r3, r42098; CHECK-P10-NEXT: blr2099;2100; CHECK-PREP10-LABEL: ld_align64_uint16_t_uint16_t:2101; CHECK-PREP10: # %bb.0: # %entry2102; CHECK-PREP10-NEXT: lis r4, 37252103; CHECK-PREP10-NEXT: ori r4, r4, 190252104; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242105; CHECK-PREP10-NEXT: lhzx r3, r3, r42106; CHECK-PREP10-NEXT: blr2107entry:2108 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002109 %0 = load atomic i16, ptr %add.ptr monotonic, align 22110 ret i16 %02111}2112 2113; Function Attrs: nofree norecurse nounwind uwtable willreturn2114define dso_local zeroext i16 @ld_reg_uint16_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {2115; CHECK-LABEL: ld_reg_uint16_t_uint16_t:2116; CHECK: # %bb.0: # %entry2117; CHECK-NEXT: lhzx r3, r3, r42118; CHECK-NEXT: blr2119entry:2120 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2121 %0 = load atomic i16, ptr %add.ptr monotonic, align 22122 ret i16 %02123}2124 2125; Function Attrs: nofree norecurse nounwind uwtable willreturn2126define dso_local zeroext i16 @ld_or_uint16_t_uint16_t(i64 %ptr, i8 zeroext %off) {2127; CHECK-LABEL: ld_or_uint16_t_uint16_t:2128; CHECK: # %bb.0: # %entry2129; CHECK-NEXT: or r3, r4, r32130; CHECK-NEXT: lhz r3, 0(r3)2131; CHECK-NEXT: blr2132entry:2133 %conv = zext i8 %off to i642134 %or = or i64 %conv, %ptr2135 %0 = inttoptr i64 %or to ptr2136 %1 = load atomic i16, ptr %0 monotonic, align 22137 ret i16 %12138}2139 2140; Function Attrs: nofree norecurse nounwind uwtable willreturn2141define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint16_t(i64 %ptr) {2142; CHECK-LABEL: ld_not_disjoint16_uint16_t_uint16_t:2143; CHECK: # %bb.0: # %entry2144; CHECK-NEXT: ori r3, r3, 62145; CHECK-NEXT: lhz r3, 0(r3)2146; CHECK-NEXT: blr2147entry:2148 %or = or i64 %ptr, 62149 %0 = inttoptr i64 %or to ptr2150 %1 = load atomic i16, ptr %0 monotonic, align 22151 ret i16 %12152}2153 2154; Function Attrs: nofree norecurse nounwind uwtable willreturn2155define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint16_t(i64 %ptr) {2156; CHECK-LABEL: ld_disjoint_align16_uint16_t_uint16_t:2157; CHECK: # %bb.0: # %entry2158; CHECK-NEXT: rldicr r3, r3, 0, 512159; CHECK-NEXT: lhz r3, 24(r3)2160; CHECK-NEXT: blr2161entry:2162 %and = and i64 %ptr, -40962163 %or = or i64 %and, 242164 %0 = inttoptr i64 %or to ptr2165 %1 = load atomic i16, ptr %0 monotonic, align 82166 ret i16 %12167}2168 2169; Function Attrs: nofree norecurse nounwind uwtable willreturn2170define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint16_t(i64 %ptr) {2171; CHECK-LABEL: ld_not_disjoint32_uint16_t_uint16_t:2172; CHECK: # %bb.0: # %entry2173; CHECK-NEXT: ori r3, r3, 344632174; CHECK-NEXT: oris r3, r3, 12175; CHECK-NEXT: lhz r3, 0(r3)2176; CHECK-NEXT: blr2177entry:2178 %or = or i64 %ptr, 999992179 %0 = inttoptr i64 %or to ptr2180 %1 = load atomic i16, ptr %0 monotonic, align 22181 ret i16 %12182}2183 2184; Function Attrs: nofree norecurse nounwind uwtable willreturn2185define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint16_t(i64 %ptr) {2186; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_uint16_t:2187; CHECK-P10: # %bb.0: # %entry2188; CHECK-P10-NEXT: lis r4, -152642189; CHECK-P10-NEXT: and r3, r3, r42190; CHECK-P10-NEXT: plhz r3, 999990000(r3), 02191; CHECK-P10-NEXT: clrldi r3, r3, 322192; CHECK-P10-NEXT: blr2193;2194; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_uint16_t:2195; CHECK-PREP10: # %bb.0: # %entry2196; CHECK-PREP10-NEXT: lis r4, -152642197; CHECK-PREP10-NEXT: and r3, r3, r42198; CHECK-PREP10-NEXT: lis r4, 152582199; CHECK-PREP10-NEXT: ori r4, r4, 417122200; CHECK-PREP10-NEXT: lhzx r3, r3, r42201; CHECK-PREP10-NEXT: blr2202entry:2203 %and = and i64 %ptr, -10003415042204 %or = or i64 %and, 9999900002205 %0 = inttoptr i64 %or to ptr2206 %1 = load atomic i16, ptr %0 monotonic, align 162207 ret i16 %12208}2209 2210; Function Attrs: nofree norecurse nounwind uwtable willreturn2211define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint16_t(i64 %ptr) {2212; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_uint16_t:2213; CHECK-P10: # %bb.0: # %entry2214; CHECK-P10-NEXT: pli r4, 2322215; CHECK-P10-NEXT: pli r5, 35675873292216; CHECK-P10-NEXT: rldimi r5, r4, 32, 02217; CHECK-P10-NEXT: or r3, r3, r52218; CHECK-P10-NEXT: lhz r3, 0(r3)2219; CHECK-P10-NEXT: blr2220;2221; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_uint16_t:2222; CHECK-PREP10: # %bb.0: # %entry2223; CHECK-PREP10-NEXT: li r4, 292224; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242225; CHECK-PREP10-NEXT: oris r4, r4, 544372226; CHECK-PREP10-NEXT: ori r4, r4, 40972227; CHECK-PREP10-NEXT: or r3, r3, r42228; CHECK-PREP10-NEXT: lhz r3, 0(r3)2229; CHECK-PREP10-NEXT: blr2230entry:2231 %or = or i64 %ptr, 10000000000012232 %0 = inttoptr i64 %or to ptr2233 %1 = load atomic i16, ptr %0 monotonic, align 22234 ret i16 %12235}2236 2237; Function Attrs: nofree norecurse nounwind uwtable willreturn2238define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint16_t(i64 %ptr) {2239; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_uint16_t:2240; CHECK-P10: # %bb.0: # %entry2241; CHECK-P10-NEXT: pli r4, 2441406252242; CHECK-P10-NEXT: rldicr r3, r3, 0, 232243; CHECK-P10-NEXT: rldic r4, r4, 12, 242244; CHECK-P10-NEXT: lhzx r3, r3, r42245; CHECK-P10-NEXT: blr2246;2247; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_uint16_t:2248; CHECK-PREP10: # %bb.0: # %entry2249; CHECK-PREP10-NEXT: lis r4, 37252250; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232251; CHECK-PREP10-NEXT: ori r4, r4, 190252252; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242253; CHECK-PREP10-NEXT: lhzx r3, r3, r42254; CHECK-PREP10-NEXT: blr2255entry:2256 %and = and i64 %ptr, -10995116277762257 %or = or i64 %and, 10000000000002258 %0 = inttoptr i64 %or to ptr2259 %1 = load atomic i16, ptr %0 monotonic, align 40962260 ret i16 %12261}2262 2263; Function Attrs: nofree norecurse nounwind uwtable willreturn2264define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint16_t() {2265; CHECK-LABEL: ld_cst_align16_uint16_t_uint16_t:2266; CHECK: # %bb.0: # %entry2267; CHECK-NEXT: lhz r3, 4080(0)2268; CHECK-NEXT: blr2269entry:2270 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 162271 ret i16 %02272}2273 2274; Function Attrs: nofree norecurse nounwind uwtable willreturn2275define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint16_t() {2276; CHECK-LABEL: ld_cst_align32_uint16_t_uint16_t:2277; CHECK: # %bb.0: # %entry2278; CHECK-NEXT: lis r3, 1532279; CHECK-NEXT: lhz r3, -27108(r3)2280; CHECK-NEXT: blr2281entry:2282 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42283 ret i16 %02284}2285 2286; Function Attrs: nofree norecurse nounwind uwtable willreturn2287define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint16_t() {2288; CHECK-P10-LABEL: ld_cst_align64_uint16_t_uint16_t:2289; CHECK-P10: # %bb.0: # %entry2290; CHECK-P10-NEXT: pli r3, 2441406252291; CHECK-P10-NEXT: rldic r3, r3, 12, 242292; CHECK-P10-NEXT: lhz r3, 0(r3)2293; CHECK-P10-NEXT: blr2294;2295; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_uint16_t:2296; CHECK-PREP10: # %bb.0: # %entry2297; CHECK-PREP10-NEXT: lis r3, 37252298; CHECK-PREP10-NEXT: ori r3, r3, 190252299; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242300; CHECK-PREP10-NEXT: lhz r3, 0(r3)2301; CHECK-PREP10-NEXT: blr2302entry:2303 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962304 ret i16 %02305}2306 2307; Function Attrs: nofree norecurse nounwind uwtable willreturn2308define dso_local zeroext i16 @ld_0_uint16_t_uint32_t(i64 %ptr) {2309; CHECK-LABEL: ld_0_uint16_t_uint32_t:2310; CHECK: # %bb.0: # %entry2311; CHECK-NEXT: lwz r3, 0(r3)2312; CHECK-NEXT: clrldi r3, r3, 482313; CHECK-NEXT: blr2314entry:2315 %0 = inttoptr i64 %ptr to ptr2316 %1 = load atomic i32, ptr %0 monotonic, align 42317 %conv = trunc i32 %1 to i162318 ret i16 %conv2319}2320 2321; Function Attrs: nofree norecurse nounwind uwtable willreturn2322define dso_local zeroext i16 @ld_align16_uint16_t_uint32_t(ptr nocapture readonly %ptr) {2323; CHECK-LABEL: ld_align16_uint16_t_uint32_t:2324; CHECK: # %bb.0: # %entry2325; CHECK-NEXT: lwz r3, 8(r3)2326; CHECK-NEXT: clrldi r3, r3, 482327; CHECK-NEXT: blr2328entry:2329 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82330 %0 = load atomic i32, ptr %add.ptr monotonic, align 42331 %conv = trunc i32 %0 to i162332 ret i16 %conv2333}2334 2335; Function Attrs: nofree norecurse nounwind uwtable willreturn2336define dso_local zeroext i16 @ld_align32_uint16_t_uint32_t(ptr nocapture readonly %ptr) {2337; CHECK-P10-LABEL: ld_align32_uint16_t_uint32_t:2338; CHECK-P10: # %bb.0: # %entry2339; CHECK-P10-NEXT: plwz r3, 99999000(r3), 02340; CHECK-P10-NEXT: clrldi r3, r3, 482341; CHECK-P10-NEXT: blr2342;2343; CHECK-PREP10-LABEL: ld_align32_uint16_t_uint32_t:2344; CHECK-PREP10: # %bb.0: # %entry2345; CHECK-PREP10-NEXT: lis r4, 15252346; CHECK-PREP10-NEXT: ori r4, r4, 566002347; CHECK-PREP10-NEXT: lwzx r3, r3, r42348; CHECK-PREP10-NEXT: clrldi r3, r3, 482349; CHECK-PREP10-NEXT: blr2350entry:2351 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002352 %0 = load atomic i32, ptr %add.ptr monotonic, align 42353 %conv = trunc i32 %0 to i162354 ret i16 %conv2355}2356 2357; Function Attrs: nofree norecurse nounwind uwtable willreturn2358define dso_local zeroext i16 @ld_align64_uint16_t_uint32_t(ptr nocapture readonly %ptr) {2359; CHECK-P10-LABEL: ld_align64_uint16_t_uint32_t:2360; CHECK-P10: # %bb.0: # %entry2361; CHECK-P10-NEXT: pli r4, 2441406252362; CHECK-P10-NEXT: rldic r4, r4, 12, 242363; CHECK-P10-NEXT: lwzx r3, r3, r42364; CHECK-P10-NEXT: clrldi r3, r3, 482365; CHECK-P10-NEXT: blr2366;2367; CHECK-PREP10-LABEL: ld_align64_uint16_t_uint32_t:2368; CHECK-PREP10: # %bb.0: # %entry2369; CHECK-PREP10-NEXT: lis r4, 37252370; CHECK-PREP10-NEXT: ori r4, r4, 190252371; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242372; CHECK-PREP10-NEXT: lwzx r3, r3, r42373; CHECK-PREP10-NEXT: clrldi r3, r3, 482374; CHECK-PREP10-NEXT: blr2375entry:2376 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002377 %0 = load atomic i32, ptr %add.ptr monotonic, align 42378 %conv = trunc i32 %0 to i162379 ret i16 %conv2380}2381 2382; Function Attrs: nofree norecurse nounwind uwtable willreturn2383define dso_local zeroext i16 @ld_reg_uint16_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {2384; CHECK-LABEL: ld_reg_uint16_t_uint32_t:2385; CHECK: # %bb.0: # %entry2386; CHECK-NEXT: lwzx r3, r3, r42387; CHECK-NEXT: clrldi r3, r3, 482388; CHECK-NEXT: blr2389entry:2390 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2391 %0 = load atomic i32, ptr %add.ptr monotonic, align 42392 %conv = trunc i32 %0 to i162393 ret i16 %conv2394}2395 2396; Function Attrs: nofree norecurse nounwind uwtable willreturn2397define dso_local zeroext i16 @ld_or_uint16_t_uint32_t(i64 %ptr, i8 zeroext %off) {2398; CHECK-LABEL: ld_or_uint16_t_uint32_t:2399; CHECK: # %bb.0: # %entry2400; CHECK-NEXT: or r3, r4, r32401; CHECK-NEXT: lwz r3, 0(r3)2402; CHECK-NEXT: clrldi r3, r3, 482403; CHECK-NEXT: blr2404entry:2405 %conv = zext i8 %off to i642406 %or = or i64 %conv, %ptr2407 %0 = inttoptr i64 %or to ptr2408 %1 = load atomic i32, ptr %0 monotonic, align 42409 %conv1 = trunc i32 %1 to i162410 ret i16 %conv12411}2412 2413; Function Attrs: nofree norecurse nounwind uwtable willreturn2414define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint32_t(i64 %ptr) {2415; CHECK-LABEL: ld_not_disjoint16_uint16_t_uint32_t:2416; CHECK: # %bb.0: # %entry2417; CHECK-NEXT: ori r3, r3, 62418; CHECK-NEXT: lwz r3, 0(r3)2419; CHECK-NEXT: clrldi r3, r3, 482420; CHECK-NEXT: blr2421entry:2422 %or = or i64 %ptr, 62423 %0 = inttoptr i64 %or to ptr2424 %1 = load atomic i32, ptr %0 monotonic, align 42425 %conv = trunc i32 %1 to i162426 ret i16 %conv2427}2428 2429; Function Attrs: nofree norecurse nounwind uwtable willreturn2430define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint32_t(i64 %ptr) {2431; CHECK-LABEL: ld_disjoint_align16_uint16_t_uint32_t:2432; CHECK: # %bb.0: # %entry2433; CHECK-NEXT: rldicr r3, r3, 0, 512434; CHECK-NEXT: lwz r3, 24(r3)2435; CHECK-NEXT: clrldi r3, r3, 482436; CHECK-NEXT: blr2437entry:2438 %and = and i64 %ptr, -40962439 %or = or i64 %and, 242440 %0 = inttoptr i64 %or to ptr2441 %1 = load atomic i32, ptr %0 monotonic, align 82442 %conv = trunc i32 %1 to i162443 ret i16 %conv2444}2445 2446; Function Attrs: nofree norecurse nounwind uwtable willreturn2447define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint32_t(i64 %ptr) {2448; CHECK-LABEL: ld_not_disjoint32_uint16_t_uint32_t:2449; CHECK: # %bb.0: # %entry2450; CHECK-NEXT: ori r3, r3, 344632451; CHECK-NEXT: oris r3, r3, 12452; CHECK-NEXT: lwz r3, 0(r3)2453; CHECK-NEXT: clrldi r3, r3, 482454; CHECK-NEXT: blr2455entry:2456 %or = or i64 %ptr, 999992457 %0 = inttoptr i64 %or to ptr2458 %1 = load atomic i32, ptr %0 monotonic, align 42459 %conv = trunc i32 %1 to i162460 ret i16 %conv2461}2462 2463; Function Attrs: nofree norecurse nounwind uwtable willreturn2464define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint32_t(i64 %ptr) {2465; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_uint32_t:2466; CHECK-P10: # %bb.0: # %entry2467; CHECK-P10-NEXT: lis r4, -152642468; CHECK-P10-NEXT: and r3, r3, r42469; CHECK-P10-NEXT: plwz r3, 999990000(r3), 02470; CHECK-P10-NEXT: clrldi r3, r3, 482471; CHECK-P10-NEXT: blr2472;2473; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_uint32_t:2474; CHECK-PREP10: # %bb.0: # %entry2475; CHECK-PREP10-NEXT: lis r4, -152642476; CHECK-PREP10-NEXT: and r3, r3, r42477; CHECK-PREP10-NEXT: lis r4, 152582478; CHECK-PREP10-NEXT: ori r4, r4, 417122479; CHECK-PREP10-NEXT: lwzx r3, r3, r42480; CHECK-PREP10-NEXT: clrldi r3, r3, 482481; CHECK-PREP10-NEXT: blr2482entry:2483 %and = and i64 %ptr, -10003415042484 %or = or i64 %and, 9999900002485 %0 = inttoptr i64 %or to ptr2486 %1 = load atomic i32, ptr %0 monotonic, align 162487 %conv = trunc i32 %1 to i162488 ret i16 %conv2489}2490 2491; Function Attrs: nofree norecurse nounwind uwtable willreturn2492define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint32_t(i64 %ptr) {2493; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_uint32_t:2494; CHECK-P10: # %bb.0: # %entry2495; CHECK-P10-NEXT: pli r4, 2322496; CHECK-P10-NEXT: pli r5, 35675873292497; CHECK-P10-NEXT: rldimi r5, r4, 32, 02498; CHECK-P10-NEXT: or r3, r3, r52499; CHECK-P10-NEXT: lwz r3, 0(r3)2500; CHECK-P10-NEXT: clrldi r3, r3, 482501; CHECK-P10-NEXT: blr2502;2503; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_uint32_t:2504; CHECK-PREP10: # %bb.0: # %entry2505; CHECK-PREP10-NEXT: li r4, 292506; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242507; CHECK-PREP10-NEXT: oris r4, r4, 544372508; CHECK-PREP10-NEXT: ori r4, r4, 40972509; CHECK-PREP10-NEXT: or r3, r3, r42510; CHECK-PREP10-NEXT: lwz r3, 0(r3)2511; CHECK-PREP10-NEXT: clrldi r3, r3, 482512; CHECK-PREP10-NEXT: blr2513entry:2514 %or = or i64 %ptr, 10000000000012515 %0 = inttoptr i64 %or to ptr2516 %1 = load atomic i32, ptr %0 monotonic, align 42517 %conv = trunc i32 %1 to i162518 ret i16 %conv2519}2520 2521; Function Attrs: nofree norecurse nounwind uwtable willreturn2522define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint32_t(i64 %ptr) {2523; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_uint32_t:2524; CHECK-P10: # %bb.0: # %entry2525; CHECK-P10-NEXT: pli r4, 2441406252526; CHECK-P10-NEXT: rldicr r3, r3, 0, 232527; CHECK-P10-NEXT: rldic r4, r4, 12, 242528; CHECK-P10-NEXT: lwzx r3, r3, r42529; CHECK-P10-NEXT: clrldi r3, r3, 482530; CHECK-P10-NEXT: blr2531;2532; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_uint32_t:2533; CHECK-PREP10: # %bb.0: # %entry2534; CHECK-PREP10-NEXT: lis r4, 37252535; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232536; CHECK-PREP10-NEXT: ori r4, r4, 190252537; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242538; CHECK-PREP10-NEXT: lwzx r3, r3, r42539; CHECK-PREP10-NEXT: clrldi r3, r3, 482540; CHECK-PREP10-NEXT: blr2541entry:2542 %and = and i64 %ptr, -10995116277762543 %or = or i64 %and, 10000000000002544 %0 = inttoptr i64 %or to ptr2545 %1 = load atomic i32, ptr %0 monotonic, align 40962546 %conv = trunc i32 %1 to i162547 ret i16 %conv2548}2549 2550; Function Attrs: nofree norecurse nounwind uwtable willreturn2551define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint32_t() {2552; CHECK-LABEL: ld_cst_align16_uint16_t_uint32_t:2553; CHECK: # %bb.0: # %entry2554; CHECK-NEXT: lwz r3, 4080(0)2555; CHECK-NEXT: clrldi r3, r3, 482556; CHECK-NEXT: blr2557entry:2558 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 162559 %conv = trunc i32 %0 to i162560 ret i16 %conv2561}2562 2563; Function Attrs: nofree norecurse nounwind uwtable willreturn2564define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint32_t() {2565; CHECK-LABEL: ld_cst_align32_uint16_t_uint32_t:2566; CHECK: # %bb.0: # %entry2567; CHECK-NEXT: lis r3, 1532568; CHECK-NEXT: lwz r3, -27108(r3)2569; CHECK-NEXT: clrldi r3, r3, 482570; CHECK-NEXT: blr2571entry:2572 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 42573 %conv = trunc i32 %0 to i162574 ret i16 %conv2575}2576 2577; Function Attrs: nofree norecurse nounwind uwtable willreturn2578define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint32_t() {2579; CHECK-P10-LABEL: ld_cst_align64_uint16_t_uint32_t:2580; CHECK-P10: # %bb.0: # %entry2581; CHECK-P10-NEXT: pli r3, 2441406252582; CHECK-P10-NEXT: rldic r3, r3, 12, 242583; CHECK-P10-NEXT: lwz r3, 0(r3)2584; CHECK-P10-NEXT: clrldi r3, r3, 482585; CHECK-P10-NEXT: blr2586;2587; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_uint32_t:2588; CHECK-PREP10: # %bb.0: # %entry2589; CHECK-PREP10-NEXT: lis r3, 37252590; CHECK-PREP10-NEXT: ori r3, r3, 190252591; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242592; CHECK-PREP10-NEXT: lwz r3, 0(r3)2593; CHECK-PREP10-NEXT: clrldi r3, r3, 482594; CHECK-PREP10-NEXT: blr2595entry:2596 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962597 %conv = trunc i32 %0 to i162598 ret i16 %conv2599}2600 2601; Function Attrs: nofree norecurse nounwind uwtable willreturn2602define dso_local zeroext i16 @ld_0_uint16_t_uint64_t(i64 %ptr) {2603; CHECK-LABEL: ld_0_uint16_t_uint64_t:2604; CHECK: # %bb.0: # %entry2605; CHECK-NEXT: ld r3, 0(r3)2606; CHECK-NEXT: clrldi r3, r3, 482607; CHECK-NEXT: blr2608entry:2609 %0 = inttoptr i64 %ptr to ptr2610 %1 = load atomic i64, ptr %0 monotonic, align 82611 %conv = trunc i64 %1 to i162612 ret i16 %conv2613}2614 2615; Function Attrs: nofree norecurse nounwind uwtable willreturn2616define dso_local zeroext i16 @ld_align16_uint16_t_uint64_t(ptr nocapture readonly %ptr) {2617; CHECK-LABEL: ld_align16_uint16_t_uint64_t:2618; CHECK: # %bb.0: # %entry2619; CHECK-NEXT: ld r3, 8(r3)2620; CHECK-NEXT: clrldi r3, r3, 482621; CHECK-NEXT: blr2622entry:2623 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82624 %0 = load atomic i64, ptr %add.ptr monotonic, align 82625 %conv = trunc i64 %0 to i162626 ret i16 %conv2627}2628 2629; Function Attrs: nofree norecurse nounwind uwtable willreturn2630define dso_local zeroext i16 @ld_align32_uint16_t_uint64_t(ptr nocapture readonly %ptr) {2631; CHECK-P10-LABEL: ld_align32_uint16_t_uint64_t:2632; CHECK-P10: # %bb.0: # %entry2633; CHECK-P10-NEXT: pld r3, 99999000(r3), 02634; CHECK-P10-NEXT: clrldi r3, r3, 482635; CHECK-P10-NEXT: blr2636;2637; CHECK-PREP10-LABEL: ld_align32_uint16_t_uint64_t:2638; CHECK-PREP10: # %bb.0: # %entry2639; CHECK-PREP10-NEXT: lis r4, 15252640; CHECK-PREP10-NEXT: ori r4, r4, 566002641; CHECK-PREP10-NEXT: ldx r3, r3, r42642; CHECK-PREP10-NEXT: clrldi r3, r3, 482643; CHECK-PREP10-NEXT: blr2644entry:2645 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002646 %0 = load atomic i64, ptr %add.ptr monotonic, align 82647 %conv = trunc i64 %0 to i162648 ret i16 %conv2649}2650 2651; Function Attrs: nofree norecurse nounwind uwtable willreturn2652define dso_local zeroext i16 @ld_align64_uint16_t_uint64_t(ptr nocapture readonly %ptr) {2653; CHECK-P10-LABEL: ld_align64_uint16_t_uint64_t:2654; CHECK-P10: # %bb.0: # %entry2655; CHECK-P10-NEXT: pli r4, 2441406252656; CHECK-P10-NEXT: rldic r4, r4, 12, 242657; CHECK-P10-NEXT: ldx r3, r3, r42658; CHECK-P10-NEXT: clrldi r3, r3, 482659; CHECK-P10-NEXT: blr2660;2661; CHECK-PREP10-LABEL: ld_align64_uint16_t_uint64_t:2662; CHECK-PREP10: # %bb.0: # %entry2663; CHECK-PREP10-NEXT: lis r4, 37252664; CHECK-PREP10-NEXT: ori r4, r4, 190252665; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242666; CHECK-PREP10-NEXT: ldx r3, r3, r42667; CHECK-PREP10-NEXT: clrldi r3, r3, 482668; CHECK-PREP10-NEXT: blr2669entry:2670 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002671 %0 = load atomic i64, ptr %add.ptr monotonic, align 82672 %conv = trunc i64 %0 to i162673 ret i16 %conv2674}2675 2676; Function Attrs: nofree norecurse nounwind uwtable willreturn2677define dso_local zeroext i16 @ld_reg_uint16_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {2678; CHECK-LABEL: ld_reg_uint16_t_uint64_t:2679; CHECK: # %bb.0: # %entry2680; CHECK-NEXT: ldx r3, r3, r42681; CHECK-NEXT: clrldi r3, r3, 482682; CHECK-NEXT: blr2683entry:2684 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2685 %0 = load atomic i64, ptr %add.ptr monotonic, align 82686 %conv = trunc i64 %0 to i162687 ret i16 %conv2688}2689 2690; Function Attrs: nofree norecurse nounwind uwtable willreturn2691define dso_local zeroext i16 @ld_or_uint16_t_uint64_t(i64 %ptr, i8 zeroext %off) {2692; CHECK-LABEL: ld_or_uint16_t_uint64_t:2693; CHECK: # %bb.0: # %entry2694; CHECK-NEXT: or r3, r4, r32695; CHECK-NEXT: ld r3, 0(r3)2696; CHECK-NEXT: clrldi r3, r3, 482697; CHECK-NEXT: blr2698entry:2699 %conv = zext i8 %off to i642700 %or = or i64 %conv, %ptr2701 %0 = inttoptr i64 %or to ptr2702 %1 = load atomic i64, ptr %0 monotonic, align 82703 %conv1 = trunc i64 %1 to i162704 ret i16 %conv12705}2706 2707; Function Attrs: nofree norecurse nounwind uwtable willreturn2708define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint64_t(i64 %ptr) {2709; CHECK-LABEL: ld_not_disjoint16_uint16_t_uint64_t:2710; CHECK: # %bb.0: # %entry2711; CHECK-NEXT: ori r3, r3, 62712; CHECK-NEXT: ld r3, 0(r3)2713; CHECK-NEXT: clrldi r3, r3, 482714; CHECK-NEXT: blr2715entry:2716 %or = or i64 %ptr, 62717 %0 = inttoptr i64 %or to ptr2718 %1 = load atomic i64, ptr %0 monotonic, align 82719 %conv = trunc i64 %1 to i162720 ret i16 %conv2721}2722 2723; Function Attrs: nofree norecurse nounwind uwtable willreturn2724define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint64_t(i64 %ptr) {2725; CHECK-LABEL: ld_disjoint_align16_uint16_t_uint64_t:2726; CHECK: # %bb.0: # %entry2727; CHECK-NEXT: rldicr r3, r3, 0, 512728; CHECK-NEXT: ld r3, 24(r3)2729; CHECK-NEXT: clrldi r3, r3, 482730; CHECK-NEXT: blr2731entry:2732 %and = and i64 %ptr, -40962733 %or = or i64 %and, 242734 %0 = inttoptr i64 %or to ptr2735 %1 = load atomic i64, ptr %0 monotonic, align 82736 %conv = trunc i64 %1 to i162737 ret i16 %conv2738}2739 2740; Function Attrs: nofree norecurse nounwind uwtable willreturn2741define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint64_t(i64 %ptr) {2742; CHECK-LABEL: ld_not_disjoint32_uint16_t_uint64_t:2743; CHECK: # %bb.0: # %entry2744; CHECK-NEXT: ori r3, r3, 344632745; CHECK-NEXT: oris r3, r3, 12746; CHECK-NEXT: ld r3, 0(r3)2747; CHECK-NEXT: clrldi r3, r3, 482748; CHECK-NEXT: blr2749entry:2750 %or = or i64 %ptr, 999992751 %0 = inttoptr i64 %or to ptr2752 %1 = load atomic i64, ptr %0 monotonic, align 82753 %conv = trunc i64 %1 to i162754 ret i16 %conv2755}2756 2757; Function Attrs: nofree norecurse nounwind uwtable willreturn2758define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint64_t(i64 %ptr) {2759; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_uint64_t:2760; CHECK-P10: # %bb.0: # %entry2761; CHECK-P10-NEXT: lis r4, -152642762; CHECK-P10-NEXT: and r3, r3, r42763; CHECK-P10-NEXT: pld r3, 999990000(r3), 02764; CHECK-P10-NEXT: clrldi r3, r3, 482765; CHECK-P10-NEXT: blr2766;2767; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_uint64_t:2768; CHECK-PREP10: # %bb.0: # %entry2769; CHECK-PREP10-NEXT: lis r4, -152642770; CHECK-PREP10-NEXT: and r3, r3, r42771; CHECK-PREP10-NEXT: lis r4, 152582772; CHECK-PREP10-NEXT: ori r4, r4, 417122773; CHECK-PREP10-NEXT: ldx r3, r3, r42774; CHECK-PREP10-NEXT: clrldi r3, r3, 482775; CHECK-PREP10-NEXT: blr2776entry:2777 %and = and i64 %ptr, -10003415042778 %or = or i64 %and, 9999900002779 %0 = inttoptr i64 %or to ptr2780 %1 = load atomic i64, ptr %0 monotonic, align 162781 %conv = trunc i64 %1 to i162782 ret i16 %conv2783}2784 2785; Function Attrs: nofree norecurse nounwind uwtable willreturn2786define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint64_t(i64 %ptr) {2787; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_uint64_t:2788; CHECK-P10: # %bb.0: # %entry2789; CHECK-P10-NEXT: pli r4, 2322790; CHECK-P10-NEXT: pli r5, 35675873292791; CHECK-P10-NEXT: rldimi r5, r4, 32, 02792; CHECK-P10-NEXT: or r3, r3, r52793; CHECK-P10-NEXT: ld r3, 0(r3)2794; CHECK-P10-NEXT: clrldi r3, r3, 482795; CHECK-P10-NEXT: blr2796;2797; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_uint64_t:2798; CHECK-PREP10: # %bb.0: # %entry2799; CHECK-PREP10-NEXT: li r4, 292800; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242801; CHECK-PREP10-NEXT: oris r4, r4, 544372802; CHECK-PREP10-NEXT: ori r4, r4, 40972803; CHECK-PREP10-NEXT: or r3, r3, r42804; CHECK-PREP10-NEXT: ld r3, 0(r3)2805; CHECK-PREP10-NEXT: clrldi r3, r3, 482806; CHECK-PREP10-NEXT: blr2807entry:2808 %or = or i64 %ptr, 10000000000012809 %0 = inttoptr i64 %or to ptr2810 %1 = load atomic i64, ptr %0 monotonic, align 82811 %conv = trunc i64 %1 to i162812 ret i16 %conv2813}2814 2815; Function Attrs: nofree norecurse nounwind uwtable willreturn2816define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint64_t(i64 %ptr) {2817; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_uint64_t:2818; CHECK-P10: # %bb.0: # %entry2819; CHECK-P10-NEXT: pli r4, 2441406252820; CHECK-P10-NEXT: rldicr r3, r3, 0, 232821; CHECK-P10-NEXT: rldic r4, r4, 12, 242822; CHECK-P10-NEXT: ldx r3, r3, r42823; CHECK-P10-NEXT: clrldi r3, r3, 482824; CHECK-P10-NEXT: blr2825;2826; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_uint64_t:2827; CHECK-PREP10: # %bb.0: # %entry2828; CHECK-PREP10-NEXT: lis r4, 37252829; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232830; CHECK-PREP10-NEXT: ori r4, r4, 190252831; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242832; CHECK-PREP10-NEXT: ldx r3, r3, r42833; CHECK-PREP10-NEXT: clrldi r3, r3, 482834; CHECK-PREP10-NEXT: blr2835entry:2836 %and = and i64 %ptr, -10995116277762837 %or = or i64 %and, 10000000000002838 %0 = inttoptr i64 %or to ptr2839 %1 = load atomic i64, ptr %0 monotonic, align 40962840 %conv = trunc i64 %1 to i162841 ret i16 %conv2842}2843 2844; Function Attrs: nofree norecurse nounwind uwtable willreturn2845define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint64_t() {2846; CHECK-LABEL: ld_cst_align16_uint16_t_uint64_t:2847; CHECK: # %bb.0: # %entry2848; CHECK-NEXT: ld r3, 4080(0)2849; CHECK-NEXT: clrldi r3, r3, 482850; CHECK-NEXT: blr2851entry:2852 %0 = load atomic i64, ptr inttoptr (i64 4080 to ptr) monotonic, align 162853 %conv = trunc i64 %0 to i162854 ret i16 %conv2855}2856 2857; Function Attrs: nofree norecurse nounwind uwtable willreturn2858define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint64_t() {2859; CHECK-LABEL: ld_cst_align32_uint16_t_uint64_t:2860; CHECK: # %bb.0: # %entry2861; CHECK-NEXT: lis r3, 1532862; CHECK-NEXT: ld r3, -27108(r3)2863; CHECK-NEXT: clrldi r3, r3, 482864; CHECK-NEXT: blr2865entry:2866 %0 = load atomic i64, ptr inttoptr (i64 9999900 to ptr) monotonic, align 82867 %conv = trunc i64 %0 to i162868 ret i16 %conv2869}2870 2871; Function Attrs: nofree norecurse nounwind uwtable willreturn2872define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint64_t() {2873; CHECK-P10-LABEL: ld_cst_align64_uint16_t_uint64_t:2874; CHECK-P10: # %bb.0: # %entry2875; CHECK-P10-NEXT: pli r3, 2441406252876; CHECK-P10-NEXT: rldic r3, r3, 12, 242877; CHECK-P10-NEXT: ld r3, 0(r3)2878; CHECK-P10-NEXT: clrldi r3, r3, 482879; CHECK-P10-NEXT: blr2880;2881; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_uint64_t:2882; CHECK-PREP10: # %bb.0: # %entry2883; CHECK-PREP10-NEXT: lis r3, 37252884; CHECK-PREP10-NEXT: ori r3, r3, 190252885; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242886; CHECK-PREP10-NEXT: ld r3, 0(r3)2887; CHECK-PREP10-NEXT: clrldi r3, r3, 482888; CHECK-PREP10-NEXT: blr2889entry:2890 %0 = load atomic i64, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40962891 %conv = trunc i64 %0 to i162892 ret i16 %conv2893}2894 2895; Function Attrs: nofree norecurse nounwind uwtable willreturn2896define dso_local void @st_0_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {2897; CHECK-LABEL: st_0_uint16_t_uint8_t:2898; CHECK: # %bb.0: # %entry2899; CHECK-NEXT: stb r4, 0(r3)2900; CHECK-NEXT: blr2901entry:2902 %0 = inttoptr i64 %ptr to ptr2903 %conv = trunc i16 %str to i82904 store atomic i8 %conv, ptr %0 monotonic, align 12905 ret void2906}2907 2908; Function Attrs: nofree norecurse nounwind uwtable willreturn2909define dso_local void @st_align16_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) {2910; CHECK-LABEL: st_align16_uint16_t_uint8_t:2911; CHECK: # %bb.0: # %entry2912; CHECK-NEXT: stb r4, 8(r3)2913; CHECK-NEXT: blr2914entry:2915 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82916 %conv = trunc i16 %str to i82917 store atomic i8 %conv, ptr %add.ptr monotonic, align 12918 ret void2919}2920 2921; Function Attrs: nofree norecurse nounwind uwtable willreturn2922define dso_local void @st_align32_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) {2923; CHECK-P10-LABEL: st_align32_uint16_t_uint8_t:2924; CHECK-P10: # %bb.0: # %entry2925; CHECK-P10-NEXT: pstb r4, 99999000(r3), 02926; CHECK-P10-NEXT: blr2927;2928; CHECK-PREP10-LABEL: st_align32_uint16_t_uint8_t:2929; CHECK-PREP10: # %bb.0: # %entry2930; CHECK-PREP10-NEXT: lis r5, 15252931; CHECK-PREP10-NEXT: ori r5, r5, 566002932; CHECK-PREP10-NEXT: stbx r4, r3, r52933; CHECK-PREP10-NEXT: blr2934entry:2935 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002936 %conv = trunc i16 %str to i82937 store atomic i8 %conv, ptr %add.ptr monotonic, align 12938 ret void2939}2940 2941; Function Attrs: nofree norecurse nounwind uwtable willreturn2942define dso_local void @st_align64_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) {2943; CHECK-P10-LABEL: st_align64_uint16_t_uint8_t:2944; CHECK-P10: # %bb.0: # %entry2945; CHECK-P10-NEXT: pli r5, 2441406252946; CHECK-P10-NEXT: rldic r5, r5, 12, 242947; CHECK-P10-NEXT: stbx r4, r3, r52948; CHECK-P10-NEXT: blr2949;2950; CHECK-PREP10-LABEL: st_align64_uint16_t_uint8_t:2951; CHECK-PREP10: # %bb.0: # %entry2952; CHECK-PREP10-NEXT: lis r5, 37252953; CHECK-PREP10-NEXT: ori r5, r5, 190252954; CHECK-PREP10-NEXT: rldic r5, r5, 12, 242955; CHECK-PREP10-NEXT: stbx r4, r3, r52956; CHECK-PREP10-NEXT: blr2957entry:2958 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002959 %conv = trunc i16 %str to i82960 store atomic i8 %conv, ptr %add.ptr monotonic, align 12961 ret void2962}2963 2964; Function Attrs: nofree norecurse nounwind uwtable willreturn2965define dso_local void @st_reg_uint16_t_uint8_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {2966; CHECK-LABEL: st_reg_uint16_t_uint8_t:2967; CHECK: # %bb.0: # %entry2968; CHECK-NEXT: stbx r5, r3, r42969; CHECK-NEXT: blr2970entry:2971 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2972 %conv = trunc i16 %str to i82973 store atomic i8 %conv, ptr %add.ptr monotonic, align 12974 ret void2975}2976 2977; Function Attrs: nofree norecurse nounwind uwtable willreturn2978define dso_local void @st_or1_uint16_t_uint8_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {2979; CHECK-LABEL: st_or1_uint16_t_uint8_t:2980; CHECK: # %bb.0: # %entry2981; CHECK-NEXT: or r3, r4, r32982; CHECK-NEXT: stb r5, 0(r3)2983; CHECK-NEXT: blr2984entry:2985 %conv = zext i8 %off to i642986 %or = or i64 %conv, %ptr2987 %0 = inttoptr i64 %or to ptr2988 %conv1 = trunc i16 %str to i82989 store atomic i8 %conv1, ptr %0 monotonic, align 12990 ret void2991}2992 2993; Function Attrs: nofree norecurse nounwind uwtable willreturn2994define dso_local void @st_not_disjoint16_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {2995; CHECK-LABEL: st_not_disjoint16_uint16_t_uint8_t:2996; CHECK: # %bb.0: # %entry2997; CHECK-NEXT: ori r3, r3, 62998; CHECK-NEXT: stb r4, 0(r3)2999; CHECK-NEXT: blr3000entry:3001 %or = or i64 %ptr, 63002 %0 = inttoptr i64 %or to ptr3003 %conv = trunc i16 %str to i83004 store atomic i8 %conv, ptr %0 monotonic, align 13005 ret void3006}3007 3008; Function Attrs: nofree norecurse nounwind uwtable willreturn3009define dso_local void @st_disjoint_align16_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {3010; CHECK-LABEL: st_disjoint_align16_uint16_t_uint8_t:3011; CHECK: # %bb.0: # %entry3012; CHECK-NEXT: rldicr r3, r3, 0, 513013; CHECK-NEXT: stb r4, 24(r3)3014; CHECK-NEXT: blr3015entry:3016 %and = and i64 %ptr, -40963017 %or = or i64 %and, 243018 %0 = inttoptr i64 %or to ptr3019 %conv = trunc i16 %str to i83020 store atomic i8 %conv, ptr %0 monotonic, align 83021 ret void3022}3023 3024; Function Attrs: nofree norecurse nounwind uwtable willreturn3025define dso_local void @st_not_disjoint32_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {3026; CHECK-LABEL: st_not_disjoint32_uint16_t_uint8_t:3027; CHECK: # %bb.0: # %entry3028; CHECK-NEXT: ori r3, r3, 344633029; CHECK-NEXT: oris r3, r3, 13030; CHECK-NEXT: stb r4, 0(r3)3031; CHECK-NEXT: blr3032entry:3033 %or = or i64 %ptr, 999993034 %0 = inttoptr i64 %or to ptr3035 %conv = trunc i16 %str to i83036 store atomic i8 %conv, ptr %0 monotonic, align 13037 ret void3038}3039 3040; Function Attrs: nofree norecurse nounwind uwtable willreturn3041define dso_local void @st_disjoint_align32_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {3042; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint8_t:3043; CHECK-P10: # %bb.0: # %entry3044; CHECK-P10-NEXT: lis r5, -152643045; CHECK-P10-NEXT: and r3, r3, r53046; CHECK-P10-NEXT: pstb r4, 999990000(r3), 03047; CHECK-P10-NEXT: blr3048;3049; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint8_t:3050; CHECK-PREP10: # %bb.0: # %entry3051; CHECK-PREP10-NEXT: lis r5, -152643052; CHECK-PREP10-NEXT: and r3, r3, r53053; CHECK-PREP10-NEXT: lis r5, 152583054; CHECK-PREP10-NEXT: ori r5, r5, 417123055; CHECK-PREP10-NEXT: stbx r4, r3, r53056; CHECK-PREP10-NEXT: blr3057entry:3058 %and = and i64 %ptr, -10003415043059 %or = or i64 %and, 9999900003060 %0 = inttoptr i64 %or to ptr3061 %conv = trunc i16 %str to i83062 store atomic i8 %conv, ptr %0 monotonic, align 163063 ret void3064}3065 3066; Function Attrs: nofree norecurse nounwind uwtable willreturn3067define dso_local void @st_not_disjoint64_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {3068; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint8_t:3069; CHECK-P10: # %bb.0: # %entry3070; CHECK-P10-NEXT: pli r5, 2323071; CHECK-P10-NEXT: pli r6, 35675873293072; CHECK-P10-NEXT: rldimi r6, r5, 32, 03073; CHECK-P10-NEXT: or r3, r3, r63074; CHECK-P10-NEXT: stb r4, 0(r3)3075; CHECK-P10-NEXT: blr3076;3077; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint8_t:3078; CHECK-PREP10: # %bb.0: # %entry3079; CHECK-PREP10-NEXT: li r5, 293080; CHECK-PREP10-NEXT: rldic r5, r5, 35, 243081; CHECK-PREP10-NEXT: oris r5, r5, 544373082; CHECK-PREP10-NEXT: ori r5, r5, 40973083; CHECK-PREP10-NEXT: or r3, r3, r53084; CHECK-PREP10-NEXT: stb r4, 0(r3)3085; CHECK-PREP10-NEXT: blr3086entry:3087 %or = or i64 %ptr, 10000000000013088 %0 = inttoptr i64 %or to ptr3089 %conv = trunc i16 %str to i83090 store atomic i8 %conv, ptr %0 monotonic, align 13091 ret void3092}3093 3094; Function Attrs: nofree norecurse nounwind uwtable willreturn3095define dso_local void @st_disjoint_align64_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {3096; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint8_t:3097; CHECK-P10: # %bb.0: # %entry3098; CHECK-P10-NEXT: pli r5, 2441406253099; CHECK-P10-NEXT: rldicr r3, r3, 0, 233100; CHECK-P10-NEXT: rldic r5, r5, 12, 243101; CHECK-P10-NEXT: stbx r4, r3, r53102; CHECK-P10-NEXT: blr3103;3104; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint8_t:3105; CHECK-PREP10: # %bb.0: # %entry3106; CHECK-PREP10-NEXT: lis r5, 37253107; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233108; CHECK-PREP10-NEXT: ori r5, r5, 190253109; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243110; CHECK-PREP10-NEXT: stbx r4, r3, r53111; CHECK-PREP10-NEXT: blr3112entry:3113 %and = and i64 %ptr, -10995116277763114 %or = or i64 %and, 10000000000003115 %0 = inttoptr i64 %or to ptr3116 %conv = trunc i16 %str to i83117 store atomic i8 %conv, ptr %0 monotonic, align 40963118 ret void3119}3120 3121; Function Attrs: nofree norecurse nounwind uwtable willreturn3122define dso_local void @st_cst_align16_uint16_t_uint8_t(i16 zeroext %str) {3123; CHECK-LABEL: st_cst_align16_uint16_t_uint8_t:3124; CHECK: # %bb.0: # %entry3125; CHECK-NEXT: stb r3, 4080(0)3126; CHECK-NEXT: blr3127entry:3128 %conv = trunc i16 %str to i83129 store atomic i8 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 163130 ret void3131}3132 3133; Function Attrs: nofree norecurse nounwind uwtable willreturn3134define dso_local void @st_cst_align32_uint16_t_uint8_t(i16 zeroext %str) {3135; CHECK-LABEL: st_cst_align32_uint16_t_uint8_t:3136; CHECK: # %bb.0: # %entry3137; CHECK-NEXT: lis r4, 1533138; CHECK-NEXT: stb r3, -27108(r4)3139; CHECK-NEXT: blr3140entry:3141 %conv = trunc i16 %str to i83142 store atomic i8 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43143 ret void3144}3145 3146; Function Attrs: nofree norecurse nounwind uwtable willreturn3147define dso_local void @st_cst_align64_uint16_t_uint8_t(i16 zeroext %str) {3148; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint8_t:3149; CHECK-P10: # %bb.0: # %entry3150; CHECK-P10-NEXT: pli r4, 2441406253151; CHECK-P10-NEXT: rldic r4, r4, 12, 243152; CHECK-P10-NEXT: stb r3, 0(r4)3153; CHECK-P10-NEXT: blr3154;3155; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint8_t:3156; CHECK-PREP10: # %bb.0: # %entry3157; CHECK-PREP10-NEXT: lis r4, 37253158; CHECK-PREP10-NEXT: ori r4, r4, 190253159; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243160; CHECK-PREP10-NEXT: stb r3, 0(r4)3161; CHECK-PREP10-NEXT: blr3162entry:3163 %conv = trunc i16 %str to i83164 store atomic i8 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963165 ret void3166}3167 3168; Function Attrs: nofree norecurse nounwind uwtable willreturn3169define dso_local void @st_0_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {3170; CHECK-LABEL: st_0_uint16_t_uint16_t:3171; CHECK: # %bb.0: # %entry3172; CHECK-NEXT: sth r4, 0(r3)3173; CHECK-NEXT: blr3174entry:3175 %0 = inttoptr i64 %ptr to ptr3176 store atomic i16 %str, ptr %0 monotonic, align 23177 ret void3178}3179 3180; Function Attrs: nofree norecurse nounwind uwtable willreturn3181define dso_local void @st_align16_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) {3182; CHECK-LABEL: st_align16_uint16_t_uint16_t:3183; CHECK: # %bb.0: # %entry3184; CHECK-NEXT: sth r4, 8(r3)3185; CHECK-NEXT: blr3186entry:3187 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83188 store atomic i16 %str, ptr %add.ptr monotonic, align 23189 ret void3190}3191 3192; Function Attrs: nofree norecurse nounwind uwtable willreturn3193define dso_local void @st_align32_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) {3194; CHECK-P10-LABEL: st_align32_uint16_t_uint16_t:3195; CHECK-P10: # %bb.0: # %entry3196; CHECK-P10-NEXT: psth r4, 99999000(r3), 03197; CHECK-P10-NEXT: blr3198;3199; CHECK-PREP10-LABEL: st_align32_uint16_t_uint16_t:3200; CHECK-PREP10: # %bb.0: # %entry3201; CHECK-PREP10-NEXT: lis r5, 15253202; CHECK-PREP10-NEXT: ori r5, r5, 566003203; CHECK-PREP10-NEXT: sthx r4, r3, r53204; CHECK-PREP10-NEXT: blr3205entry:3206 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003207 store atomic i16 %str, ptr %add.ptr monotonic, align 23208 ret void3209}3210 3211; Function Attrs: nofree norecurse nounwind uwtable willreturn3212define dso_local void @st_align64_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) {3213; CHECK-P10-LABEL: st_align64_uint16_t_uint16_t:3214; CHECK-P10: # %bb.0: # %entry3215; CHECK-P10-NEXT: pli r5, 2441406253216; CHECK-P10-NEXT: rldic r5, r5, 12, 243217; CHECK-P10-NEXT: sthx r4, r3, r53218; CHECK-P10-NEXT: blr3219;3220; CHECK-PREP10-LABEL: st_align64_uint16_t_uint16_t:3221; CHECK-PREP10: # %bb.0: # %entry3222; CHECK-PREP10-NEXT: lis r5, 37253223; CHECK-PREP10-NEXT: ori r5, r5, 190253224; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243225; CHECK-PREP10-NEXT: sthx r4, r3, r53226; CHECK-PREP10-NEXT: blr3227entry:3228 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003229 store atomic i16 %str, ptr %add.ptr monotonic, align 23230 ret void3231}3232 3233; Function Attrs: nofree norecurse nounwind uwtable willreturn3234define dso_local void @st_reg_uint16_t_uint16_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {3235; CHECK-LABEL: st_reg_uint16_t_uint16_t:3236; CHECK: # %bb.0: # %entry3237; CHECK-NEXT: sthx r5, r3, r43238; CHECK-NEXT: blr3239entry:3240 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3241 store atomic i16 %str, ptr %add.ptr monotonic, align 23242 ret void3243}3244 3245; Function Attrs: nofree norecurse nounwind uwtable willreturn3246define dso_local void @st_or1_uint16_t_uint16_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {3247; CHECK-LABEL: st_or1_uint16_t_uint16_t:3248; CHECK: # %bb.0: # %entry3249; CHECK-NEXT: or r3, r4, r33250; CHECK-NEXT: sth r5, 0(r3)3251; CHECK-NEXT: blr3252entry:3253 %conv = zext i8 %off to i643254 %or = or i64 %conv, %ptr3255 %0 = inttoptr i64 %or to ptr3256 store atomic i16 %str, ptr %0 monotonic, align 23257 ret void3258}3259 3260; Function Attrs: nofree norecurse nounwind uwtable willreturn3261define dso_local void @st_not_disjoint16_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {3262; CHECK-LABEL: st_not_disjoint16_uint16_t_uint16_t:3263; CHECK: # %bb.0: # %entry3264; CHECK-NEXT: ori r3, r3, 63265; CHECK-NEXT: sth r4, 0(r3)3266; CHECK-NEXT: blr3267entry:3268 %or = or i64 %ptr, 63269 %0 = inttoptr i64 %or to ptr3270 store atomic i16 %str, ptr %0 monotonic, align 23271 ret void3272}3273 3274; Function Attrs: nofree norecurse nounwind uwtable willreturn3275define dso_local void @st_disjoint_align16_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {3276; CHECK-LABEL: st_disjoint_align16_uint16_t_uint16_t:3277; CHECK: # %bb.0: # %entry3278; CHECK-NEXT: rldicr r3, r3, 0, 513279; CHECK-NEXT: sth r4, 24(r3)3280; CHECK-NEXT: blr3281entry:3282 %and = and i64 %ptr, -40963283 %or = or i64 %and, 243284 %0 = inttoptr i64 %or to ptr3285 store atomic i16 %str, ptr %0 monotonic, align 83286 ret void3287}3288 3289; Function Attrs: nofree norecurse nounwind uwtable willreturn3290define dso_local void @st_not_disjoint32_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {3291; CHECK-LABEL: st_not_disjoint32_uint16_t_uint16_t:3292; CHECK: # %bb.0: # %entry3293; CHECK-NEXT: ori r3, r3, 344633294; CHECK-NEXT: oris r3, r3, 13295; CHECK-NEXT: sth r4, 0(r3)3296; CHECK-NEXT: blr3297entry:3298 %or = or i64 %ptr, 999993299 %0 = inttoptr i64 %or to ptr3300 store atomic i16 %str, ptr %0 monotonic, align 23301 ret void3302}3303 3304; Function Attrs: nofree norecurse nounwind uwtable willreturn3305define dso_local void @st_disjoint_align32_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {3306; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint16_t:3307; CHECK-P10: # %bb.0: # %entry3308; CHECK-P10-NEXT: lis r5, -152643309; CHECK-P10-NEXT: and r3, r3, r53310; CHECK-P10-NEXT: psth r4, 999990000(r3), 03311; CHECK-P10-NEXT: blr3312;3313; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint16_t:3314; CHECK-PREP10: # %bb.0: # %entry3315; CHECK-PREP10-NEXT: lis r5, -152643316; CHECK-PREP10-NEXT: and r3, r3, r53317; CHECK-PREP10-NEXT: lis r5, 152583318; CHECK-PREP10-NEXT: ori r5, r5, 417123319; CHECK-PREP10-NEXT: sthx r4, r3, r53320; CHECK-PREP10-NEXT: blr3321entry:3322 %and = and i64 %ptr, -10003415043323 %or = or i64 %and, 9999900003324 %0 = inttoptr i64 %or to ptr3325 store atomic i16 %str, ptr %0 monotonic, align 163326 ret void3327}3328 3329; Function Attrs: nofree norecurse nounwind uwtable willreturn3330define dso_local void @st_not_disjoint64_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {3331; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint16_t:3332; CHECK-P10: # %bb.0: # %entry3333; CHECK-P10-NEXT: pli r5, 2323334; CHECK-P10-NEXT: pli r6, 35675873293335; CHECK-P10-NEXT: rldimi r6, r5, 32, 03336; CHECK-P10-NEXT: or r3, r3, r63337; CHECK-P10-NEXT: sth r4, 0(r3)3338; CHECK-P10-NEXT: blr3339;3340; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint16_t:3341; CHECK-PREP10: # %bb.0: # %entry3342; CHECK-PREP10-NEXT: li r5, 293343; CHECK-PREP10-NEXT: rldic r5, r5, 35, 243344; CHECK-PREP10-NEXT: oris r5, r5, 544373345; CHECK-PREP10-NEXT: ori r5, r5, 40973346; CHECK-PREP10-NEXT: or r3, r3, r53347; CHECK-PREP10-NEXT: sth r4, 0(r3)3348; CHECK-PREP10-NEXT: blr3349entry:3350 %or = or i64 %ptr, 10000000000013351 %0 = inttoptr i64 %or to ptr3352 store atomic i16 %str, ptr %0 monotonic, align 23353 ret void3354}3355 3356; Function Attrs: nofree norecurse nounwind uwtable willreturn3357define dso_local void @st_disjoint_align64_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {3358; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint16_t:3359; CHECK-P10: # %bb.0: # %entry3360; CHECK-P10-NEXT: pli r5, 2441406253361; CHECK-P10-NEXT: rldicr r3, r3, 0, 233362; CHECK-P10-NEXT: rldic r5, r5, 12, 243363; CHECK-P10-NEXT: sthx r4, r3, r53364; CHECK-P10-NEXT: blr3365;3366; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint16_t:3367; CHECK-PREP10: # %bb.0: # %entry3368; CHECK-PREP10-NEXT: lis r5, 37253369; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233370; CHECK-PREP10-NEXT: ori r5, r5, 190253371; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243372; CHECK-PREP10-NEXT: sthx r4, r3, r53373; CHECK-PREP10-NEXT: blr3374entry:3375 %and = and i64 %ptr, -10995116277763376 %or = or i64 %and, 10000000000003377 %0 = inttoptr i64 %or to ptr3378 store atomic i16 %str, ptr %0 monotonic, align 40963379 ret void3380}3381 3382; Function Attrs: nofree norecurse nounwind uwtable willreturn3383define dso_local void @st_cst_align16_uint16_t_uint16_t(i16 zeroext %str) {3384; CHECK-LABEL: st_cst_align16_uint16_t_uint16_t:3385; CHECK: # %bb.0: # %entry3386; CHECK-NEXT: sth r3, 4080(0)3387; CHECK-NEXT: blr3388entry:3389 store atomic i16 %str, ptr inttoptr (i64 4080 to ptr) monotonic, align 163390 ret void3391}3392 3393; Function Attrs: nofree norecurse nounwind uwtable willreturn3394define dso_local void @st_cst_align32_uint16_t_uint16_t(i16 zeroext %str) {3395; CHECK-LABEL: st_cst_align32_uint16_t_uint16_t:3396; CHECK: # %bb.0: # %entry3397; CHECK-NEXT: lis r4, 1533398; CHECK-NEXT: sth r3, -27108(r4)3399; CHECK-NEXT: blr3400entry:3401 store atomic i16 %str, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43402 ret void3403}3404 3405; Function Attrs: nofree norecurse nounwind uwtable willreturn3406define dso_local void @st_cst_align64_uint16_t_uint16_t(i16 zeroext %str) {3407; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint16_t:3408; CHECK-P10: # %bb.0: # %entry3409; CHECK-P10-NEXT: pli r4, 2441406253410; CHECK-P10-NEXT: rldic r4, r4, 12, 243411; CHECK-P10-NEXT: sth r3, 0(r4)3412; CHECK-P10-NEXT: blr3413;3414; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint16_t:3415; CHECK-PREP10: # %bb.0: # %entry3416; CHECK-PREP10-NEXT: lis r4, 37253417; CHECK-PREP10-NEXT: ori r4, r4, 190253418; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243419; CHECK-PREP10-NEXT: sth r3, 0(r4)3420; CHECK-PREP10-NEXT: blr3421entry:3422 store atomic i16 %str, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963423 ret void3424}3425 3426; Function Attrs: nofree norecurse nounwind uwtable willreturn3427define dso_local void @st_0_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {3428; CHECK-LABEL: st_0_uint16_t_uint32_t:3429; CHECK: # %bb.0: # %entry3430; CHECK-NEXT: stw r4, 0(r3)3431; CHECK-NEXT: blr3432entry:3433 %0 = inttoptr i64 %ptr to ptr3434 %conv = zext i16 %str to i323435 store atomic i32 %conv, ptr %0 monotonic, align 43436 ret void3437}3438 3439; Function Attrs: nofree norecurse nounwind uwtable willreturn3440define dso_local void @st_align16_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) {3441; CHECK-LABEL: st_align16_uint16_t_uint32_t:3442; CHECK: # %bb.0: # %entry3443; CHECK-NEXT: stw r4, 8(r3)3444; CHECK-NEXT: blr3445entry:3446 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83447 %conv = zext i16 %str to i323448 store atomic i32 %conv, ptr %add.ptr monotonic, align 43449 ret void3450}3451 3452; Function Attrs: nofree norecurse nounwind uwtable willreturn3453define dso_local void @st_align32_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) {3454; CHECK-P10-LABEL: st_align32_uint16_t_uint32_t:3455; CHECK-P10: # %bb.0: # %entry3456; CHECK-P10-NEXT: pstw r4, 99999000(r3), 03457; CHECK-P10-NEXT: blr3458;3459; CHECK-PREP10-LABEL: st_align32_uint16_t_uint32_t:3460; CHECK-PREP10: # %bb.0: # %entry3461; CHECK-PREP10-NEXT: lis r5, 15253462; CHECK-PREP10-NEXT: ori r5, r5, 566003463; CHECK-PREP10-NEXT: stwx r4, r3, r53464; CHECK-PREP10-NEXT: blr3465entry:3466 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003467 %conv = zext i16 %str to i323468 store atomic i32 %conv, ptr %add.ptr monotonic, align 43469 ret void3470}3471 3472; Function Attrs: nofree norecurse nounwind uwtable willreturn3473define dso_local void @st_align64_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) {3474; CHECK-P10-LABEL: st_align64_uint16_t_uint32_t:3475; CHECK-P10: # %bb.0: # %entry3476; CHECK-P10-NEXT: pli r5, 2441406253477; CHECK-P10-NEXT: rldic r5, r5, 12, 243478; CHECK-P10-NEXT: stwx r4, r3, r53479; CHECK-P10-NEXT: blr3480;3481; CHECK-PREP10-LABEL: st_align64_uint16_t_uint32_t:3482; CHECK-PREP10: # %bb.0: # %entry3483; CHECK-PREP10-NEXT: lis r5, 37253484; CHECK-PREP10-NEXT: ori r5, r5, 190253485; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243486; CHECK-PREP10-NEXT: stwx r4, r3, r53487; CHECK-PREP10-NEXT: blr3488entry:3489 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003490 %conv = zext i16 %str to i323491 store atomic i32 %conv, ptr %add.ptr monotonic, align 43492 ret void3493}3494 3495; Function Attrs: nofree norecurse nounwind uwtable willreturn3496define dso_local void @st_reg_uint16_t_uint32_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {3497; CHECK-LABEL: st_reg_uint16_t_uint32_t:3498; CHECK: # %bb.0: # %entry3499; CHECK-NEXT: stwx r5, r3, r43500; CHECK-NEXT: blr3501entry:3502 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3503 %conv = zext i16 %str to i323504 store atomic i32 %conv, ptr %add.ptr monotonic, align 43505 ret void3506}3507 3508; Function Attrs: nofree norecurse nounwind uwtable willreturn3509define dso_local void @st_or1_uint16_t_uint32_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {3510; CHECK-LABEL: st_or1_uint16_t_uint32_t:3511; CHECK: # %bb.0: # %entry3512; CHECK-NEXT: or r3, r4, r33513; CHECK-NEXT: stw r5, 0(r3)3514; CHECK-NEXT: blr3515entry:3516 %conv = zext i8 %off to i643517 %or = or i64 %conv, %ptr3518 %0 = inttoptr i64 %or to ptr3519 %conv1 = zext i16 %str to i323520 store atomic i32 %conv1, ptr %0 monotonic, align 43521 ret void3522}3523 3524; Function Attrs: nofree norecurse nounwind uwtable willreturn3525define dso_local void @st_not_disjoint16_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {3526; CHECK-LABEL: st_not_disjoint16_uint16_t_uint32_t:3527; CHECK: # %bb.0: # %entry3528; CHECK-NEXT: ori r3, r3, 63529; CHECK-NEXT: stw r4, 0(r3)3530; CHECK-NEXT: blr3531entry:3532 %or = or i64 %ptr, 63533 %0 = inttoptr i64 %or to ptr3534 %conv = zext i16 %str to i323535 store atomic i32 %conv, ptr %0 monotonic, align 43536 ret void3537}3538 3539; Function Attrs: nofree norecurse nounwind uwtable willreturn3540define dso_local void @st_disjoint_align16_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {3541; CHECK-LABEL: st_disjoint_align16_uint16_t_uint32_t:3542; CHECK: # %bb.0: # %entry3543; CHECK-NEXT: rldicr r3, r3, 0, 513544; CHECK-NEXT: stw r4, 24(r3)3545; CHECK-NEXT: blr3546entry:3547 %and = and i64 %ptr, -40963548 %or = or i64 %and, 243549 %0 = inttoptr i64 %or to ptr3550 %conv = zext i16 %str to i323551 store atomic i32 %conv, ptr %0 monotonic, align 83552 ret void3553}3554 3555; Function Attrs: nofree norecurse nounwind uwtable willreturn3556define dso_local void @st_not_disjoint32_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {3557; CHECK-LABEL: st_not_disjoint32_uint16_t_uint32_t:3558; CHECK: # %bb.0: # %entry3559; CHECK-NEXT: ori r3, r3, 344633560; CHECK-NEXT: oris r3, r3, 13561; CHECK-NEXT: stw r4, 0(r3)3562; CHECK-NEXT: blr3563entry:3564 %or = or i64 %ptr, 999993565 %0 = inttoptr i64 %or to ptr3566 %conv = zext i16 %str to i323567 store atomic i32 %conv, ptr %0 monotonic, align 43568 ret void3569}3570 3571; Function Attrs: nofree norecurse nounwind uwtable willreturn3572define dso_local void @st_disjoint_align32_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {3573; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint32_t:3574; CHECK-P10: # %bb.0: # %entry3575; CHECK-P10-NEXT: lis r5, -152643576; CHECK-P10-NEXT: and r3, r3, r53577; CHECK-P10-NEXT: pstw r4, 999990000(r3), 03578; CHECK-P10-NEXT: blr3579;3580; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint32_t:3581; CHECK-PREP10: # %bb.0: # %entry3582; CHECK-PREP10-NEXT: lis r5, -152643583; CHECK-PREP10-NEXT: and r3, r3, r53584; CHECK-PREP10-NEXT: lis r5, 152583585; CHECK-PREP10-NEXT: ori r5, r5, 417123586; CHECK-PREP10-NEXT: stwx r4, r3, r53587; CHECK-PREP10-NEXT: blr3588entry:3589 %and = and i64 %ptr, -10003415043590 %or = or i64 %and, 9999900003591 %0 = inttoptr i64 %or to ptr3592 %conv = zext i16 %str to i323593 store atomic i32 %conv, ptr %0 monotonic, align 163594 ret void3595}3596 3597; Function Attrs: nofree norecurse nounwind uwtable willreturn3598define dso_local void @st_not_disjoint64_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {3599; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint32_t:3600; CHECK-P10: # %bb.0: # %entry3601; CHECK-P10-NEXT: pli r5, 2323602; CHECK-P10-NEXT: pli r6, 35675873293603; CHECK-P10-NEXT: rldimi r6, r5, 32, 03604; CHECK-P10-NEXT: or r3, r3, r63605; CHECK-P10-NEXT: stw r4, 0(r3)3606; CHECK-P10-NEXT: blr3607;3608; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint32_t:3609; CHECK-PREP10: # %bb.0: # %entry3610; CHECK-PREP10-NEXT: li r5, 293611; CHECK-PREP10-NEXT: rldic r5, r5, 35, 243612; CHECK-PREP10-NEXT: oris r5, r5, 544373613; CHECK-PREP10-NEXT: ori r5, r5, 40973614; CHECK-PREP10-NEXT: or r3, r3, r53615; CHECK-PREP10-NEXT: stw r4, 0(r3)3616; CHECK-PREP10-NEXT: blr3617entry:3618 %or = or i64 %ptr, 10000000000013619 %0 = inttoptr i64 %or to ptr3620 %conv = zext i16 %str to i323621 store atomic i32 %conv, ptr %0 monotonic, align 43622 ret void3623}3624 3625; Function Attrs: nofree norecurse nounwind uwtable willreturn3626define dso_local void @st_disjoint_align64_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {3627; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint32_t:3628; CHECK-P10: # %bb.0: # %entry3629; CHECK-P10-NEXT: pli r5, 2441406253630; CHECK-P10-NEXT: rldicr r3, r3, 0, 233631; CHECK-P10-NEXT: rldic r5, r5, 12, 243632; CHECK-P10-NEXT: stwx r4, r3, r53633; CHECK-P10-NEXT: blr3634;3635; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint32_t:3636; CHECK-PREP10: # %bb.0: # %entry3637; CHECK-PREP10-NEXT: lis r5, 37253638; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233639; CHECK-PREP10-NEXT: ori r5, r5, 190253640; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243641; CHECK-PREP10-NEXT: stwx r4, r3, r53642; CHECK-PREP10-NEXT: blr3643entry:3644 %and = and i64 %ptr, -10995116277763645 %or = or i64 %and, 10000000000003646 %0 = inttoptr i64 %or to ptr3647 %conv = zext i16 %str to i323648 store atomic i32 %conv, ptr %0 monotonic, align 40963649 ret void3650}3651 3652; Function Attrs: nofree norecurse nounwind uwtable willreturn3653define dso_local void @st_cst_align16_uint16_t_uint32_t(i16 zeroext %str) {3654; CHECK-LABEL: st_cst_align16_uint16_t_uint32_t:3655; CHECK: # %bb.0: # %entry3656; CHECK-NEXT: stw r3, 4080(0)3657; CHECK-NEXT: blr3658entry:3659 %conv = zext i16 %str to i323660 store atomic i32 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 163661 ret void3662}3663 3664; Function Attrs: nofree norecurse nounwind uwtable willreturn3665define dso_local void @st_cst_align32_uint16_t_uint32_t(i16 zeroext %str) {3666; CHECK-LABEL: st_cst_align32_uint16_t_uint32_t:3667; CHECK: # %bb.0: # %entry3668; CHECK-NEXT: lis r4, 1533669; CHECK-NEXT: stw r3, -27108(r4)3670; CHECK-NEXT: blr3671entry:3672 %conv = zext i16 %str to i323673 store atomic i32 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 43674 ret void3675}3676 3677; Function Attrs: nofree norecurse nounwind uwtable willreturn3678define dso_local void @st_cst_align64_uint16_t_uint32_t(i16 zeroext %str) {3679; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint32_t:3680; CHECK-P10: # %bb.0: # %entry3681; CHECK-P10-NEXT: pli r4, 2441406253682; CHECK-P10-NEXT: rldic r4, r4, 12, 243683; CHECK-P10-NEXT: stw r3, 0(r4)3684; CHECK-P10-NEXT: blr3685;3686; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint32_t:3687; CHECK-PREP10: # %bb.0: # %entry3688; CHECK-PREP10-NEXT: lis r4, 37253689; CHECK-PREP10-NEXT: ori r4, r4, 190253690; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243691; CHECK-PREP10-NEXT: stw r3, 0(r4)3692; CHECK-PREP10-NEXT: blr3693entry:3694 %conv = zext i16 %str to i323695 store atomic i32 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963696 ret void3697}3698 3699; Function Attrs: nofree norecurse nounwind uwtable willreturn3700define dso_local void @st_0_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {3701; CHECK-LABEL: st_0_uint16_t_uint64_t:3702; CHECK: # %bb.0: # %entry3703; CHECK-NEXT: std r4, 0(r3)3704; CHECK-NEXT: blr3705entry:3706 %0 = inttoptr i64 %ptr to ptr3707 %conv = zext i16 %str to i643708 store atomic i64 %conv, ptr %0 monotonic, align 83709 ret void3710}3711 3712; Function Attrs: nofree norecurse nounwind uwtable willreturn3713define dso_local void @st_align16_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) {3714; CHECK-LABEL: st_align16_uint16_t_uint64_t:3715; CHECK: # %bb.0: # %entry3716; CHECK-NEXT: std r4, 8(r3)3717; CHECK-NEXT: blr3718entry:3719 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83720 %conv = zext i16 %str to i643721 store atomic i64 %conv, ptr %add.ptr monotonic, align 83722 ret void3723}3724 3725; Function Attrs: nofree norecurse nounwind uwtable willreturn3726define dso_local void @st_align32_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) {3727; CHECK-P10-LABEL: st_align32_uint16_t_uint64_t:3728; CHECK-P10: # %bb.0: # %entry3729; CHECK-P10-NEXT: pstd r4, 99999000(r3), 03730; CHECK-P10-NEXT: blr3731;3732; CHECK-PREP10-LABEL: st_align32_uint16_t_uint64_t:3733; CHECK-PREP10: # %bb.0: # %entry3734; CHECK-PREP10-NEXT: lis r5, 15253735; CHECK-PREP10-NEXT: ori r5, r5, 566003736; CHECK-PREP10-NEXT: stdx r4, r3, r53737; CHECK-PREP10-NEXT: blr3738entry:3739 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003740 %conv = zext i16 %str to i643741 store atomic i64 %conv, ptr %add.ptr monotonic, align 83742 ret void3743}3744 3745; Function Attrs: nofree norecurse nounwind uwtable willreturn3746define dso_local void @st_align64_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) {3747; CHECK-P10-LABEL: st_align64_uint16_t_uint64_t:3748; CHECK-P10: # %bb.0: # %entry3749; CHECK-P10-NEXT: pli r5, 2441406253750; CHECK-P10-NEXT: rldic r5, r5, 12, 243751; CHECK-P10-NEXT: stdx r4, r3, r53752; CHECK-P10-NEXT: blr3753;3754; CHECK-PREP10-LABEL: st_align64_uint16_t_uint64_t:3755; CHECK-PREP10: # %bb.0: # %entry3756; CHECK-PREP10-NEXT: lis r5, 37253757; CHECK-PREP10-NEXT: ori r5, r5, 190253758; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243759; CHECK-PREP10-NEXT: stdx r4, r3, r53760; CHECK-PREP10-NEXT: blr3761entry:3762 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003763 %conv = zext i16 %str to i643764 store atomic i64 %conv, ptr %add.ptr monotonic, align 83765 ret void3766}3767 3768; Function Attrs: nofree norecurse nounwind uwtable willreturn3769define dso_local void @st_reg_uint16_t_uint64_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {3770; CHECK-LABEL: st_reg_uint16_t_uint64_t:3771; CHECK: # %bb.0: # %entry3772; CHECK-NEXT: stdx r5, r3, r43773; CHECK-NEXT: blr3774entry:3775 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3776 %conv = zext i16 %str to i643777 store atomic i64 %conv, ptr %add.ptr monotonic, align 83778 ret void3779}3780 3781; Function Attrs: nofree norecurse nounwind uwtable willreturn3782define dso_local void @st_or1_uint16_t_uint64_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {3783; CHECK-LABEL: st_or1_uint16_t_uint64_t:3784; CHECK: # %bb.0: # %entry3785; CHECK-NEXT: or r3, r4, r33786; CHECK-NEXT: std r5, 0(r3)3787; CHECK-NEXT: blr3788entry:3789 %conv = zext i8 %off to i643790 %or = or i64 %conv, %ptr3791 %0 = inttoptr i64 %or to ptr3792 %conv1 = zext i16 %str to i643793 store atomic i64 %conv1, ptr %0 monotonic, align 83794 ret void3795}3796 3797; Function Attrs: nofree norecurse nounwind uwtable willreturn3798define dso_local void @st_not_disjoint16_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {3799; CHECK-LABEL: st_not_disjoint16_uint16_t_uint64_t:3800; CHECK: # %bb.0: # %entry3801; CHECK-NEXT: ori r3, r3, 63802; CHECK-NEXT: std r4, 0(r3)3803; CHECK-NEXT: blr3804entry:3805 %or = or i64 %ptr, 63806 %0 = inttoptr i64 %or to ptr3807 %conv = zext i16 %str to i643808 store atomic i64 %conv, ptr %0 monotonic, align 83809 ret void3810}3811 3812; Function Attrs: nofree norecurse nounwind uwtable willreturn3813define dso_local void @st_disjoint_align16_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {3814; CHECK-LABEL: st_disjoint_align16_uint16_t_uint64_t:3815; CHECK: # %bb.0: # %entry3816; CHECK-NEXT: rldicr r3, r3, 0, 513817; CHECK-NEXT: std r4, 24(r3)3818; CHECK-NEXT: blr3819entry:3820 %and = and i64 %ptr, -40963821 %or = or i64 %and, 243822 %0 = inttoptr i64 %or to ptr3823 %conv = zext i16 %str to i643824 store atomic i64 %conv, ptr %0 monotonic, align 83825 ret void3826}3827 3828; Function Attrs: nofree norecurse nounwind uwtable willreturn3829define dso_local void @st_not_disjoint32_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {3830; CHECK-LABEL: st_not_disjoint32_uint16_t_uint64_t:3831; CHECK: # %bb.0: # %entry3832; CHECK-NEXT: ori r3, r3, 344633833; CHECK-NEXT: oris r3, r3, 13834; CHECK-NEXT: std r4, 0(r3)3835; CHECK-NEXT: blr3836entry:3837 %or = or i64 %ptr, 999993838 %0 = inttoptr i64 %or to ptr3839 %conv = zext i16 %str to i643840 store atomic i64 %conv, ptr %0 monotonic, align 83841 ret void3842}3843 3844; Function Attrs: nofree norecurse nounwind uwtable willreturn3845define dso_local void @st_disjoint_align32_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {3846; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint64_t:3847; CHECK-P10: # %bb.0: # %entry3848; CHECK-P10-NEXT: lis r5, -152643849; CHECK-P10-NEXT: and r3, r3, r53850; CHECK-P10-NEXT: pstd r4, 999990000(r3), 03851; CHECK-P10-NEXT: blr3852;3853; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint64_t:3854; CHECK-PREP10: # %bb.0: # %entry3855; CHECK-PREP10-NEXT: lis r5, -152643856; CHECK-PREP10-NEXT: and r3, r3, r53857; CHECK-PREP10-NEXT: lis r5, 152583858; CHECK-PREP10-NEXT: ori r5, r5, 417123859; CHECK-PREP10-NEXT: stdx r4, r3, r53860; CHECK-PREP10-NEXT: blr3861entry:3862 %and = and i64 %ptr, -10003415043863 %or = or i64 %and, 9999900003864 %0 = inttoptr i64 %or to ptr3865 %conv = zext i16 %str to i643866 store atomic i64 %conv, ptr %0 monotonic, align 163867 ret void3868}3869 3870; Function Attrs: nofree norecurse nounwind uwtable willreturn3871define dso_local void @st_not_disjoint64_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {3872; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint64_t:3873; CHECK-P10: # %bb.0: # %entry3874; CHECK-P10-NEXT: pli r5, 2323875; CHECK-P10-NEXT: pli r6, 35675873293876; CHECK-P10-NEXT: rldimi r6, r5, 32, 03877; CHECK-P10-NEXT: or r3, r3, r63878; CHECK-P10-NEXT: std r4, 0(r3)3879; CHECK-P10-NEXT: blr3880;3881; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint64_t:3882; CHECK-PREP10: # %bb.0: # %entry3883; CHECK-PREP10-NEXT: li r5, 293884; CHECK-PREP10-NEXT: rldic r5, r5, 35, 243885; CHECK-PREP10-NEXT: oris r5, r5, 544373886; CHECK-PREP10-NEXT: ori r5, r5, 40973887; CHECK-PREP10-NEXT: or r3, r3, r53888; CHECK-PREP10-NEXT: std r4, 0(r3)3889; CHECK-PREP10-NEXT: blr3890entry:3891 %or = or i64 %ptr, 10000000000013892 %0 = inttoptr i64 %or to ptr3893 %conv = zext i16 %str to i643894 store atomic i64 %conv, ptr %0 monotonic, align 83895 ret void3896}3897 3898; Function Attrs: nofree norecurse nounwind uwtable willreturn3899define dso_local void @st_disjoint_align64_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {3900; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint64_t:3901; CHECK-P10: # %bb.0: # %entry3902; CHECK-P10-NEXT: pli r5, 2441406253903; CHECK-P10-NEXT: rldicr r3, r3, 0, 233904; CHECK-P10-NEXT: rldic r5, r5, 12, 243905; CHECK-P10-NEXT: stdx r4, r3, r53906; CHECK-P10-NEXT: blr3907;3908; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint64_t:3909; CHECK-PREP10: # %bb.0: # %entry3910; CHECK-PREP10-NEXT: lis r5, 37253911; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233912; CHECK-PREP10-NEXT: ori r5, r5, 190253913; CHECK-PREP10-NEXT: rldic r5, r5, 12, 243914; CHECK-PREP10-NEXT: stdx r4, r3, r53915; CHECK-PREP10-NEXT: blr3916entry:3917 %and = and i64 %ptr, -10995116277763918 %or = or i64 %and, 10000000000003919 %0 = inttoptr i64 %or to ptr3920 %conv = zext i16 %str to i643921 store atomic i64 %conv, ptr %0 monotonic, align 40963922 ret void3923}3924 3925; Function Attrs: nofree norecurse nounwind uwtable willreturn3926define dso_local void @st_cst_align16_uint16_t_uint64_t(i16 zeroext %str) {3927; CHECK-LABEL: st_cst_align16_uint16_t_uint64_t:3928; CHECK: # %bb.0: # %entry3929; CHECK-NEXT: std r3, 4080(0)3930; CHECK-NEXT: blr3931entry:3932 %conv = zext i16 %str to i643933 store atomic i64 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 163934 ret void3935}3936 3937; Function Attrs: nofree norecurse nounwind uwtable willreturn3938define dso_local void @st_cst_align32_uint16_t_uint64_t(i16 zeroext %str) {3939; CHECK-LABEL: st_cst_align32_uint16_t_uint64_t:3940; CHECK: # %bb.0: # %entry3941; CHECK-NEXT: lis r4, 1533942; CHECK-NEXT: std r3, -27108(r4)3943; CHECK-NEXT: blr3944entry:3945 %conv = zext i16 %str to i643946 store atomic i64 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 83947 ret void3948}3949 3950; Function Attrs: nofree norecurse nounwind uwtable willreturn3951define dso_local void @st_cst_align64_uint16_t_uint64_t(i16 zeroext %str) {3952; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint64_t:3953; CHECK-P10: # %bb.0: # %entry3954; CHECK-P10-NEXT: pli r4, 2441406253955; CHECK-P10-NEXT: rldic r4, r4, 12, 243956; CHECK-P10-NEXT: std r3, 0(r4)3957; CHECK-P10-NEXT: blr3958;3959; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint64_t:3960; CHECK-PREP10: # %bb.0: # %entry3961; CHECK-PREP10-NEXT: lis r4, 37253962; CHECK-PREP10-NEXT: ori r4, r4, 190253963; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243964; CHECK-PREP10-NEXT: std r3, 0(r4)3965; CHECK-PREP10-NEXT: blr3966entry:3967 %conv = zext i16 %str to i643968 store atomic i64 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40963969 ret void3970}3971 3972; Function Attrs: nofree norecurse nounwind uwtable willreturn3973define dso_local void @st_0_int16_t_uint32_t(i64 %ptr, i16 signext %str) {3974; CHECK-LABEL: st_0_int16_t_uint32_t:3975; CHECK: # %bb.0: # %entry3976; CHECK-NEXT: stw r4, 0(r3)3977; CHECK-NEXT: blr3978entry:3979 %0 = inttoptr i64 %ptr to ptr3980 %conv = sext i16 %str to i323981 store atomic i32 %conv, ptr %0 monotonic, align 43982 ret void3983}3984 3985; Function Attrs: nofree norecurse nounwind uwtable willreturn3986define dso_local void @st_align16_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) {3987; CHECK-LABEL: st_align16_int16_t_uint32_t:3988; CHECK: # %bb.0: # %entry3989; CHECK-NEXT: stw r4, 8(r3)3990; CHECK-NEXT: blr3991entry:3992 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83993 %conv = sext i16 %str to i323994 store atomic i32 %conv, ptr %add.ptr monotonic, align 43995 ret void3996}3997 3998; Function Attrs: nofree norecurse nounwind uwtable willreturn3999define dso_local void @st_align32_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) {4000; CHECK-P10-LABEL: st_align32_int16_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_int16_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 %conv = sext i16 %str to i324014 store atomic i32 %conv, ptr %add.ptr monotonic, align 44015 ret void4016}4017 4018; Function Attrs: nofree norecurse nounwind uwtable willreturn4019define dso_local void @st_align64_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) {4020; CHECK-P10-LABEL: st_align64_int16_t_uint32_t:4021; CHECK-P10: # %bb.0: # %entry4022; CHECK-P10-NEXT: pli r5, 2441406254023; CHECK-P10-NEXT: rldic r5, r5, 12, 244024; CHECK-P10-NEXT: stwx r4, r3, r54025; CHECK-P10-NEXT: blr4026;4027; CHECK-PREP10-LABEL: st_align64_int16_t_uint32_t:4028; CHECK-PREP10: # %bb.0: # %entry4029; CHECK-PREP10-NEXT: lis r5, 37254030; CHECK-PREP10-NEXT: ori r5, r5, 190254031; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244032; CHECK-PREP10-NEXT: stwx r4, r3, r54033; CHECK-PREP10-NEXT: blr4034entry:4035 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004036 %conv = sext i16 %str to i324037 store atomic i32 %conv, ptr %add.ptr monotonic, align 44038 ret void4039}4040 4041; Function Attrs: nofree norecurse nounwind uwtable willreturn4042define dso_local void @st_reg_int16_t_uint32_t(ptr nocapture %ptr, i64 %off, i16 signext %str) {4043; CHECK-LABEL: st_reg_int16_t_uint32_t:4044; CHECK: # %bb.0: # %entry4045; CHECK-NEXT: stwx r5, r3, r44046; CHECK-NEXT: blr4047entry:4048 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4049 %conv = sext i16 %str to i324050 store atomic i32 %conv, ptr %add.ptr monotonic, align 44051 ret void4052}4053 4054; Function Attrs: nofree norecurse nounwind uwtable willreturn4055define dso_local void @st_or1_int16_t_uint32_t(i64 %ptr, i8 zeroext %off, i16 signext %str) {4056; CHECK-LABEL: st_or1_int16_t_uint32_t:4057; CHECK: # %bb.0: # %entry4058; CHECK-NEXT: or r3, r4, r34059; CHECK-NEXT: stw r5, 0(r3)4060; CHECK-NEXT: blr4061entry:4062 %conv = zext i8 %off to i644063 %or = or i64 %conv, %ptr4064 %0 = inttoptr i64 %or to ptr4065 %conv1 = sext i16 %str to i324066 store atomic i32 %conv1, ptr %0 monotonic, align 44067 ret void4068}4069 4070; Function Attrs: nofree norecurse nounwind uwtable willreturn4071define dso_local void @st_not_disjoint16_int16_t_uint32_t(i64 %ptr, i16 signext %str) {4072; CHECK-LABEL: st_not_disjoint16_int16_t_uint32_t:4073; CHECK: # %bb.0: # %entry4074; CHECK-NEXT: ori r3, r3, 64075; CHECK-NEXT: stw r4, 0(r3)4076; CHECK-NEXT: blr4077entry:4078 %or = or i64 %ptr, 64079 %0 = inttoptr i64 %or to ptr4080 %conv = sext i16 %str to i324081 store atomic i32 %conv, ptr %0 monotonic, align 44082 ret void4083}4084 4085; Function Attrs: nofree norecurse nounwind uwtable willreturn4086define dso_local void @st_disjoint_align16_int16_t_uint32_t(i64 %ptr, i16 signext %str) {4087; CHECK-LABEL: st_disjoint_align16_int16_t_uint32_t:4088; CHECK: # %bb.0: # %entry4089; CHECK-NEXT: rldicr r3, r3, 0, 514090; CHECK-NEXT: stw r4, 24(r3)4091; CHECK-NEXT: blr4092entry:4093 %and = and i64 %ptr, -40964094 %or = or i64 %and, 244095 %0 = inttoptr i64 %or to ptr4096 %conv = sext i16 %str to i324097 store atomic i32 %conv, ptr %0 monotonic, align 84098 ret void4099}4100 4101; Function Attrs: nofree norecurse nounwind uwtable willreturn4102define dso_local void @st_not_disjoint32_int16_t_uint32_t(i64 %ptr, i16 signext %str) {4103; CHECK-LABEL: st_not_disjoint32_int16_t_uint32_t:4104; CHECK: # %bb.0: # %entry4105; CHECK-NEXT: ori r3, r3, 344634106; CHECK-NEXT: oris r3, r3, 14107; CHECK-NEXT: stw r4, 0(r3)4108; CHECK-NEXT: blr4109entry:4110 %or = or i64 %ptr, 999994111 %0 = inttoptr i64 %or to ptr4112 %conv = sext i16 %str to i324113 store atomic i32 %conv, ptr %0 monotonic, align 44114 ret void4115}4116 4117; Function Attrs: nofree norecurse nounwind uwtable willreturn4118define dso_local void @st_disjoint_align32_int16_t_uint32_t(i64 %ptr, i16 signext %str) {4119; CHECK-P10-LABEL: st_disjoint_align32_int16_t_uint32_t:4120; CHECK-P10: # %bb.0: # %entry4121; CHECK-P10-NEXT: lis r5, -152644122; CHECK-P10-NEXT: and r3, r3, r54123; CHECK-P10-NEXT: pstw r4, 999990000(r3), 04124; CHECK-P10-NEXT: blr4125;4126; CHECK-PREP10-LABEL: st_disjoint_align32_int16_t_uint32_t:4127; CHECK-PREP10: # %bb.0: # %entry4128; CHECK-PREP10-NEXT: lis r5, -152644129; CHECK-PREP10-NEXT: and r3, r3, r54130; CHECK-PREP10-NEXT: lis r5, 152584131; CHECK-PREP10-NEXT: ori r5, r5, 417124132; CHECK-PREP10-NEXT: stwx r4, r3, r54133; CHECK-PREP10-NEXT: blr4134entry:4135 %and = and i64 %ptr, -10003415044136 %or = or i64 %and, 9999900004137 %0 = inttoptr i64 %or to ptr4138 %conv = sext i16 %str to i324139 store atomic i32 %conv, ptr %0 monotonic, align 164140 ret void4141}4142 4143; Function Attrs: nofree norecurse nounwind uwtable willreturn4144define dso_local void @st_not_disjoint64_int16_t_uint32_t(i64 %ptr, i16 signext %str) {4145; CHECK-P10-LABEL: st_not_disjoint64_int16_t_uint32_t:4146; CHECK-P10: # %bb.0: # %entry4147; CHECK-P10-NEXT: pli r5, 2324148; CHECK-P10-NEXT: pli r6, 35675873294149; CHECK-P10-NEXT: rldimi r6, r5, 32, 04150; CHECK-P10-NEXT: or r3, r3, r64151; CHECK-P10-NEXT: stw r4, 0(r3)4152; CHECK-P10-NEXT: blr4153;4154; CHECK-PREP10-LABEL: st_not_disjoint64_int16_t_uint32_t:4155; CHECK-PREP10: # %bb.0: # %entry4156; CHECK-PREP10-NEXT: li r5, 294157; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244158; CHECK-PREP10-NEXT: oris r5, r5, 544374159; CHECK-PREP10-NEXT: ori r5, r5, 40974160; CHECK-PREP10-NEXT: or r3, r3, r54161; CHECK-PREP10-NEXT: stw r4, 0(r3)4162; CHECK-PREP10-NEXT: blr4163entry:4164 %or = or i64 %ptr, 10000000000014165 %0 = inttoptr i64 %or to ptr4166 %conv = sext i16 %str to i324167 store atomic i32 %conv, ptr %0 monotonic, align 44168 ret void4169}4170 4171; Function Attrs: nofree norecurse nounwind uwtable willreturn4172define dso_local void @st_disjoint_align64_int16_t_uint32_t(i64 %ptr, i16 signext %str) {4173; CHECK-P10-LABEL: st_disjoint_align64_int16_t_uint32_t:4174; CHECK-P10: # %bb.0: # %entry4175; CHECK-P10-NEXT: pli r5, 2441406254176; CHECK-P10-NEXT: rldicr r3, r3, 0, 234177; CHECK-P10-NEXT: rldic r5, r5, 12, 244178; CHECK-P10-NEXT: stwx r4, r3, r54179; CHECK-P10-NEXT: blr4180;4181; CHECK-PREP10-LABEL: st_disjoint_align64_int16_t_uint32_t:4182; CHECK-PREP10: # %bb.0: # %entry4183; CHECK-PREP10-NEXT: lis r5, 37254184; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234185; CHECK-PREP10-NEXT: ori r5, r5, 190254186; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244187; CHECK-PREP10-NEXT: stwx r4, r3, r54188; CHECK-PREP10-NEXT: blr4189entry:4190 %and = and i64 %ptr, -10995116277764191 %or = or i64 %and, 10000000000004192 %0 = inttoptr i64 %or to ptr4193 %conv = sext i16 %str to i324194 store atomic i32 %conv, ptr %0 monotonic, align 40964195 ret void4196}4197 4198; Function Attrs: nofree norecurse nounwind uwtable willreturn4199define dso_local void @st_cst_align16_int16_t_uint32_t(i16 signext %str) {4200; CHECK-LABEL: st_cst_align16_int16_t_uint32_t:4201; CHECK: # %bb.0: # %entry4202; CHECK-NEXT: stw r3, 4080(0)4203; CHECK-NEXT: blr4204entry:4205 %conv = sext i16 %str to i324206 store atomic i32 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 164207 ret void4208}4209 4210; Function Attrs: nofree norecurse nounwind uwtable willreturn4211define dso_local void @st_cst_align32_int16_t_uint32_t(i16 signext %str) {4212; CHECK-LABEL: st_cst_align32_int16_t_uint32_t:4213; CHECK: # %bb.0: # %entry4214; CHECK-NEXT: lis r4, 1534215; CHECK-NEXT: stw r3, -27108(r4)4216; CHECK-NEXT: blr4217entry:4218 %conv = sext i16 %str to i324219 store atomic i32 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 44220 ret void4221}4222 4223; Function Attrs: nofree norecurse nounwind uwtable willreturn4224define dso_local void @st_cst_align64_int16_t_uint32_t(i16 signext %str) {4225; CHECK-P10-LABEL: st_cst_align64_int16_t_uint32_t:4226; CHECK-P10: # %bb.0: # %entry4227; CHECK-P10-NEXT: pli r4, 2441406254228; CHECK-P10-NEXT: rldic r4, r4, 12, 244229; CHECK-P10-NEXT: stw r3, 0(r4)4230; CHECK-P10-NEXT: blr4231;4232; CHECK-PREP10-LABEL: st_cst_align64_int16_t_uint32_t:4233; CHECK-PREP10: # %bb.0: # %entry4234; CHECK-PREP10-NEXT: lis r4, 37254235; CHECK-PREP10-NEXT: ori r4, r4, 190254236; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244237; CHECK-PREP10-NEXT: stw r3, 0(r4)4238; CHECK-PREP10-NEXT: blr4239entry:4240 %conv = sext i16 %str to i324241 store atomic i32 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964242 ret void4243}4244 4245; Function Attrs: nofree norecurse nounwind uwtable willreturn4246define dso_local void @st_0_int16_t_uint64_t(i64 %ptr, i16 signext %str) {4247; CHECK-LABEL: st_0_int16_t_uint64_t:4248; CHECK: # %bb.0: # %entry4249; CHECK-NEXT: std r4, 0(r3)4250; CHECK-NEXT: blr4251entry:4252 %0 = inttoptr i64 %ptr to ptr4253 %conv = sext i16 %str to i644254 store atomic i64 %conv, ptr %0 monotonic, align 84255 ret void4256}4257 4258; Function Attrs: nofree norecurse nounwind uwtable willreturn4259define dso_local void @st_align16_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) {4260; CHECK-LABEL: st_align16_int16_t_uint64_t:4261; CHECK: # %bb.0: # %entry4262; CHECK-NEXT: std r4, 8(r3)4263; CHECK-NEXT: blr4264entry:4265 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84266 %conv = sext i16 %str to i644267 store atomic i64 %conv, ptr %add.ptr monotonic, align 84268 ret void4269}4270 4271; Function Attrs: nofree norecurse nounwind uwtable willreturn4272define dso_local void @st_align32_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) {4273; CHECK-P10-LABEL: st_align32_int16_t_uint64_t:4274; CHECK-P10: # %bb.0: # %entry4275; CHECK-P10-NEXT: pstd r4, 99999000(r3), 04276; CHECK-P10-NEXT: blr4277;4278; CHECK-PREP10-LABEL: st_align32_int16_t_uint64_t:4279; CHECK-PREP10: # %bb.0: # %entry4280; CHECK-PREP10-NEXT: lis r5, 15254281; CHECK-PREP10-NEXT: ori r5, r5, 566004282; CHECK-PREP10-NEXT: stdx r4, r3, r54283; CHECK-PREP10-NEXT: blr4284entry:4285 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004286 %conv = sext i16 %str to i644287 store atomic i64 %conv, ptr %add.ptr monotonic, align 84288 ret void4289}4290 4291; Function Attrs: nofree norecurse nounwind uwtable willreturn4292define dso_local void @st_align64_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) {4293; CHECK-P10-LABEL: st_align64_int16_t_uint64_t:4294; CHECK-P10: # %bb.0: # %entry4295; CHECK-P10-NEXT: pli r5, 2441406254296; CHECK-P10-NEXT: rldic r5, r5, 12, 244297; CHECK-P10-NEXT: stdx r4, r3, r54298; CHECK-P10-NEXT: blr4299;4300; CHECK-PREP10-LABEL: st_align64_int16_t_uint64_t:4301; CHECK-PREP10: # %bb.0: # %entry4302; CHECK-PREP10-NEXT: lis r5, 37254303; CHECK-PREP10-NEXT: ori r5, r5, 190254304; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244305; CHECK-PREP10-NEXT: stdx r4, r3, r54306; CHECK-PREP10-NEXT: blr4307entry:4308 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004309 %conv = sext i16 %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_reg_int16_t_uint64_t(ptr nocapture %ptr, i64 %off, i16 signext %str) {4316; CHECK-LABEL: st_reg_int16_t_uint64_t:4317; CHECK: # %bb.0: # %entry4318; CHECK-NEXT: stdx r5, r3, r44319; CHECK-NEXT: blr4320entry:4321 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4322 %conv = sext i16 %str to i644323 store atomic i64 %conv, ptr %add.ptr monotonic, align 84324 ret void4325}4326 4327; Function Attrs: nofree norecurse nounwind uwtable willreturn4328define dso_local void @st_or1_int16_t_uint64_t(i64 %ptr, i8 zeroext %off, i16 signext %str) {4329; CHECK-LABEL: st_or1_int16_t_uint64_t:4330; CHECK: # %bb.0: # %entry4331; CHECK-NEXT: or r3, r4, r34332; CHECK-NEXT: std r5, 0(r3)4333; CHECK-NEXT: blr4334entry:4335 %conv = zext i8 %off to i644336 %or = or i64 %conv, %ptr4337 %0 = inttoptr i64 %or to ptr4338 %conv1 = sext i16 %str to i644339 store atomic i64 %conv1, ptr %0 monotonic, align 84340 ret void4341}4342 4343; Function Attrs: nofree norecurse nounwind uwtable willreturn4344define dso_local void @st_not_disjoint16_int16_t_uint64_t(i64 %ptr, i16 signext %str) {4345; CHECK-LABEL: st_not_disjoint16_int16_t_uint64_t:4346; CHECK: # %bb.0: # %entry4347; CHECK-NEXT: ori r3, r3, 64348; CHECK-NEXT: std r4, 0(r3)4349; CHECK-NEXT: blr4350entry:4351 %or = or i64 %ptr, 64352 %0 = inttoptr i64 %or to ptr4353 %conv = sext i16 %str to i644354 store atomic i64 %conv, ptr %0 monotonic, align 84355 ret void4356}4357 4358; Function Attrs: nofree norecurse nounwind uwtable willreturn4359define dso_local void @st_disjoint_align16_int16_t_uint64_t(i64 %ptr, i16 signext %str) {4360; CHECK-LABEL: st_disjoint_align16_int16_t_uint64_t:4361; CHECK: # %bb.0: # %entry4362; CHECK-NEXT: rldicr r3, r3, 0, 514363; CHECK-NEXT: std r4, 24(r3)4364; CHECK-NEXT: blr4365entry:4366 %and = and i64 %ptr, -40964367 %or = or i64 %and, 244368 %0 = inttoptr i64 %or to ptr4369 %conv = sext i16 %str to i644370 store atomic i64 %conv, ptr %0 monotonic, align 84371 ret void4372}4373 4374; Function Attrs: nofree norecurse nounwind uwtable willreturn4375define dso_local void @st_not_disjoint32_int16_t_uint64_t(i64 %ptr, i16 signext %str) {4376; CHECK-LABEL: st_not_disjoint32_int16_t_uint64_t:4377; CHECK: # %bb.0: # %entry4378; CHECK-NEXT: ori r3, r3, 344634379; CHECK-NEXT: oris r3, r3, 14380; CHECK-NEXT: std r4, 0(r3)4381; CHECK-NEXT: blr4382entry:4383 %or = or i64 %ptr, 999994384 %0 = inttoptr i64 %or to ptr4385 %conv = sext i16 %str to i644386 store atomic i64 %conv, ptr %0 monotonic, align 84387 ret void4388}4389 4390; Function Attrs: nofree norecurse nounwind uwtable willreturn4391define dso_local void @st_disjoint_align32_int16_t_uint64_t(i64 %ptr, i16 signext %str) {4392; CHECK-P10-LABEL: st_disjoint_align32_int16_t_uint64_t:4393; CHECK-P10: # %bb.0: # %entry4394; CHECK-P10-NEXT: lis r5, -152644395; CHECK-P10-NEXT: and r3, r3, r54396; CHECK-P10-NEXT: pstd r4, 999990000(r3), 04397; CHECK-P10-NEXT: blr4398;4399; CHECK-PREP10-LABEL: st_disjoint_align32_int16_t_uint64_t:4400; CHECK-PREP10: # %bb.0: # %entry4401; CHECK-PREP10-NEXT: lis r5, -152644402; CHECK-PREP10-NEXT: and r3, r3, r54403; CHECK-PREP10-NEXT: lis r5, 152584404; CHECK-PREP10-NEXT: ori r5, r5, 417124405; CHECK-PREP10-NEXT: stdx r4, r3, r54406; CHECK-PREP10-NEXT: blr4407entry:4408 %and = and i64 %ptr, -10003415044409 %or = or i64 %and, 9999900004410 %0 = inttoptr i64 %or to ptr4411 %conv = sext i16 %str to i644412 store atomic i64 %conv, ptr %0 monotonic, align 164413 ret void4414}4415 4416; Function Attrs: nofree norecurse nounwind uwtable willreturn4417define dso_local void @st_not_disjoint64_int16_t_uint64_t(i64 %ptr, i16 signext %str) {4418; CHECK-P10-LABEL: st_not_disjoint64_int16_t_uint64_t:4419; CHECK-P10: # %bb.0: # %entry4420; CHECK-P10-NEXT: pli r5, 2324421; CHECK-P10-NEXT: pli r6, 35675873294422; CHECK-P10-NEXT: rldimi r6, r5, 32, 04423; CHECK-P10-NEXT: or r3, r3, r64424; CHECK-P10-NEXT: std r4, 0(r3)4425; CHECK-P10-NEXT: blr4426;4427; CHECK-PREP10-LABEL: st_not_disjoint64_int16_t_uint64_t:4428; CHECK-PREP10: # %bb.0: # %entry4429; CHECK-PREP10-NEXT: li r5, 294430; CHECK-PREP10-NEXT: rldic r5, r5, 35, 244431; CHECK-PREP10-NEXT: oris r5, r5, 544374432; CHECK-PREP10-NEXT: ori r5, r5, 40974433; CHECK-PREP10-NEXT: or r3, r3, r54434; CHECK-PREP10-NEXT: std r4, 0(r3)4435; CHECK-PREP10-NEXT: blr4436entry:4437 %or = or i64 %ptr, 10000000000014438 %0 = inttoptr i64 %or to ptr4439 %conv = sext i16 %str to i644440 store atomic i64 %conv, ptr %0 monotonic, align 84441 ret void4442}4443 4444; Function Attrs: nofree norecurse nounwind uwtable willreturn4445define dso_local void @st_disjoint_align64_int16_t_uint64_t(i64 %ptr, i16 signext %str) {4446; CHECK-P10-LABEL: st_disjoint_align64_int16_t_uint64_t:4447; CHECK-P10: # %bb.0: # %entry4448; CHECK-P10-NEXT: pli r5, 2441406254449; CHECK-P10-NEXT: rldicr r3, r3, 0, 234450; CHECK-P10-NEXT: rldic r5, r5, 12, 244451; CHECK-P10-NEXT: stdx r4, r3, r54452; CHECK-P10-NEXT: blr4453;4454; CHECK-PREP10-LABEL: st_disjoint_align64_int16_t_uint64_t:4455; CHECK-PREP10: # %bb.0: # %entry4456; CHECK-PREP10-NEXT: lis r5, 37254457; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234458; CHECK-PREP10-NEXT: ori r5, r5, 190254459; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244460; CHECK-PREP10-NEXT: stdx r4, r3, r54461; CHECK-PREP10-NEXT: blr4462entry:4463 %and = and i64 %ptr, -10995116277764464 %or = or i64 %and, 10000000000004465 %0 = inttoptr i64 %or to ptr4466 %conv = sext i16 %str to i644467 store atomic i64 %conv, ptr %0 monotonic, align 40964468 ret void4469}4470 4471; Function Attrs: nofree norecurse nounwind uwtable willreturn4472define dso_local void @st_cst_align16_int16_t_uint64_t(i16 signext %str) {4473; CHECK-LABEL: st_cst_align16_int16_t_uint64_t:4474; CHECK: # %bb.0: # %entry4475; CHECK-NEXT: std r3, 4080(0)4476; CHECK-NEXT: blr4477entry:4478 %conv = sext i16 %str to i644479 store atomic i64 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 164480 ret void4481}4482 4483; Function Attrs: nofree norecurse nounwind uwtable willreturn4484define dso_local void @st_cst_align32_int16_t_uint64_t(i16 signext %str) {4485; CHECK-LABEL: st_cst_align32_int16_t_uint64_t:4486; CHECK: # %bb.0: # %entry4487; CHECK-NEXT: lis r4, 1534488; CHECK-NEXT: std r3, -27108(r4)4489; CHECK-NEXT: blr4490entry:4491 %conv = sext i16 %str to i644492 store atomic i64 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 84493 ret void4494}4495 4496; Function Attrs: nofree norecurse nounwind uwtable willreturn4497define dso_local void @st_cst_align64_int16_t_uint64_t(i16 signext %str) {4498; CHECK-P10-LABEL: st_cst_align64_int16_t_uint64_t:4499; CHECK-P10: # %bb.0: # %entry4500; CHECK-P10-NEXT: pli r4, 2441406254501; CHECK-P10-NEXT: rldic r4, r4, 12, 244502; CHECK-P10-NEXT: std r3, 0(r4)4503; CHECK-P10-NEXT: blr4504;4505; CHECK-PREP10-LABEL: st_cst_align64_int16_t_uint64_t:4506; CHECK-PREP10: # %bb.0: # %entry4507; CHECK-PREP10-NEXT: lis r4, 37254508; CHECK-PREP10-NEXT: ori r4, r4, 190254509; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244510; CHECK-PREP10-NEXT: std r3, 0(r4)4511; CHECK-PREP10-NEXT: blr4512entry:4513 %conv = sext i16 %str to i644514 store atomic i64 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 40964515 ret void4516}4517