8034 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-P10,CHECK-LE,CHECK-P10-LE5; 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-P10,CHECK-BE,CHECK-P10-BE8; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \9; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \10; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P9,CHECK-LE,CHECK-P9-LE11; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \12; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \13; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P9,CHECK-BE,CHECK-P9-BE14; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \15; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \16; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P8,CHECK-LE,CHECK-P8-LE17; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \18; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \19; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P8,CHECK-BE,CHECK-P8-BE20 21; Function Attrs: norecurse nounwind readonly uwtable willreturn22define dso_local signext i16 @ld_0_int16_t_int8_t(i64 %ptr) {23; CHECK-LABEL: ld_0_int16_t_int8_t:24; CHECK: # %bb.0: # %entry25; CHECK-NEXT: lbz r3, 0(r3)26; CHECK-NEXT: extsb r3, r327; CHECK-NEXT: blr28entry:29 %0 = inttoptr i64 %ptr to ptr30 %1 = load i8, ptr %0, align 131 %conv = sext i8 %1 to i1632 ret i16 %conv33}34 35; Function Attrs: norecurse nounwind readonly uwtable willreturn36define dso_local signext i16 @ld_align16_int16_t_int8_t(ptr nocapture readonly %ptr) {37; CHECK-LABEL: ld_align16_int16_t_int8_t:38; CHECK: # %bb.0: # %entry39; CHECK-NEXT: lbz r3, 8(r3)40; CHECK-NEXT: extsb r3, r341; CHECK-NEXT: blr42entry:43 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 844 %0 = load i8, ptr %add.ptr, align 145 %conv = sext i8 %0 to i1646 ret i16 %conv47}48 49; Function Attrs: norecurse nounwind readonly uwtable willreturn50define dso_local signext i16 @ld_align32_int16_t_int8_t(ptr nocapture readonly %ptr) {51; CHECK-P10-LABEL: ld_align32_int16_t_int8_t:52; CHECK-P10: # %bb.0: # %entry53; CHECK-P10-NEXT: plbz r3, 99999000(r3), 054; CHECK-P10-NEXT: extsb r3, r355; CHECK-P10-NEXT: blr56;57; CHECK-PREP10-LABEL: ld_align32_int16_t_int8_t:58; CHECK-PREP10: # %bb.0: # %entry59; CHECK-PREP10-NEXT: lis r4, 152560; CHECK-PREP10-NEXT: ori r4, r4, 5660061; CHECK-PREP10-NEXT: lbzx r3, r3, r462; CHECK-PREP10-NEXT: extsb r3, r363; CHECK-PREP10-NEXT: blr64entry:65 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 9999900066 %0 = load i8, ptr %add.ptr, align 167 %conv = sext i8 %0 to i1668 ret i16 %conv69}70 71; Function Attrs: norecurse nounwind readonly uwtable willreturn72define dso_local signext i16 @ld_align64_int16_t_int8_t(ptr nocapture readonly %ptr) {73; CHECK-P10-LABEL: ld_align64_int16_t_int8_t:74; CHECK-P10: # %bb.0: # %entry75; CHECK-P10-NEXT: pli r4, 24414062576; CHECK-P10-NEXT: rldic r4, r4, 12, 2477; CHECK-P10-NEXT: lbzx r3, r3, r478; CHECK-P10-NEXT: extsb r3, r379; CHECK-P10-NEXT: blr80;81; CHECK-PREP10-LABEL: ld_align64_int16_t_int8_t:82; CHECK-PREP10: # %bb.0: # %entry83; CHECK-PREP10-NEXT: lis r4, 372584; CHECK-PREP10-NEXT: ori r4, r4, 1902585; CHECK-PREP10-NEXT: rldic r4, r4, 12, 2486; CHECK-PREP10-NEXT: lbzx r3, r3, r487; CHECK-PREP10-NEXT: extsb r3, r388; CHECK-PREP10-NEXT: blr89entry:90 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 100000000000091 %0 = load i8, ptr %add.ptr, align 192 %conv = sext i8 %0 to i1693 ret i16 %conv94}95 96; Function Attrs: norecurse nounwind readonly uwtable willreturn97define dso_local signext i16 @ld_reg_int16_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {98; CHECK-LABEL: ld_reg_int16_t_int8_t:99; CHECK: # %bb.0: # %entry100; CHECK-NEXT: lbzx r3, r3, r4101; CHECK-NEXT: extsb r3, r3102; CHECK-NEXT: blr103entry:104 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off105 %0 = load i8, ptr %add.ptr, align 1106 %conv = sext i8 %0 to i16107 ret i16 %conv108}109 110; Function Attrs: norecurse nounwind readonly uwtable willreturn111define dso_local signext i16 @ld_or_int16_t_int8_t(i64 %ptr, i8 zeroext %off) {112; CHECK-LABEL: ld_or_int16_t_int8_t:113; CHECK: # %bb.0: # %entry114; CHECK-NEXT: or r3, r4, r3115; CHECK-NEXT: lbz r3, 0(r3)116; CHECK-NEXT: extsb r3, r3117; CHECK-NEXT: blr118entry:119 %conv = zext i8 %off to i64120 %or = or i64 %conv, %ptr121 %0 = inttoptr i64 %or to ptr122 %1 = load i8, ptr %0, align 1123 %conv1 = sext i8 %1 to i16124 ret i16 %conv1125}126 127; Function Attrs: norecurse nounwind readonly uwtable willreturn128define dso_local signext i16 @ld_not_disjoint16_int16_t_int8_t(i64 %ptr) {129; CHECK-LABEL: ld_not_disjoint16_int16_t_int8_t:130; CHECK: # %bb.0: # %entry131; CHECK-NEXT: ori r3, r3, 6132; CHECK-NEXT: lbz r3, 0(r3)133; CHECK-NEXT: extsb r3, r3134; CHECK-NEXT: blr135entry:136 %or = or i64 %ptr, 6137 %0 = inttoptr i64 %or to ptr138 %1 = load i8, ptr %0, align 1139 %conv = sext i8 %1 to i16140 ret i16 %conv141}142 143; Function Attrs: norecurse nounwind readonly uwtable willreturn144define dso_local signext i16 @ld_disjoint_align16_int16_t_int8_t(i64 %ptr) {145; CHECK-LABEL: ld_disjoint_align16_int16_t_int8_t:146; CHECK: # %bb.0: # %entry147; CHECK-NEXT: rldicr r3, r3, 0, 51148; CHECK-NEXT: lbz r3, 24(r3)149; CHECK-NEXT: extsb r3, r3150; CHECK-NEXT: blr151entry:152 %and = and i64 %ptr, -4096153 %or = or i64 %and, 24154 %0 = inttoptr i64 %or to ptr155 %1 = load i8, ptr %0, align 8156 %conv = sext i8 %1 to i16157 ret i16 %conv158}159 160; Function Attrs: norecurse nounwind readonly uwtable willreturn161define dso_local signext i16 @ld_not_disjoint32_int16_t_int8_t(i64 %ptr) {162; CHECK-LABEL: ld_not_disjoint32_int16_t_int8_t:163; CHECK: # %bb.0: # %entry164; CHECK-NEXT: ori r3, r3, 34463165; CHECK-NEXT: oris r3, r3, 1166; CHECK-NEXT: lbz r3, 0(r3)167; CHECK-NEXT: extsb r3, r3168; CHECK-NEXT: blr169entry:170 %or = or i64 %ptr, 99999171 %0 = inttoptr i64 %or to ptr172 %1 = load i8, ptr %0, align 1173 %conv = sext i8 %1 to i16174 ret i16 %conv175}176 177; Function Attrs: norecurse nounwind readonly uwtable willreturn178define dso_local signext i16 @ld_disjoint_align32_int16_t_int8_t(i64 %ptr) {179; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_int8_t:180; CHECK-P10: # %bb.0: # %entry181; CHECK-P10-NEXT: lis r4, -15264182; CHECK-P10-NEXT: and r3, r3, r4183; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0184; CHECK-P10-NEXT: extsb r3, r3185; CHECK-P10-NEXT: blr186;187; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_int8_t:188; CHECK-PREP10: # %bb.0: # %entry189; CHECK-PREP10-NEXT: lis r4, -15264190; CHECK-PREP10-NEXT: and r3, r3, r4191; CHECK-PREP10-NEXT: lis r4, 15258192; CHECK-PREP10-NEXT: ori r4, r4, 41712193; CHECK-PREP10-NEXT: lbzx r3, r3, r4194; CHECK-PREP10-NEXT: extsb r3, r3195; CHECK-PREP10-NEXT: blr196entry:197 %and = and i64 %ptr, -1000341504198 %or = or i64 %and, 999990000199 %0 = inttoptr i64 %or to ptr200 %1 = load i8, ptr %0, align 16201 %conv = sext i8 %1 to i16202 ret i16 %conv203}204 205; Function Attrs: norecurse nounwind readonly uwtable willreturn206define dso_local signext i16 @ld_not_disjoint64_int16_t_int8_t(i64 %ptr) {207; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_int8_t:208; CHECK-P10: # %bb.0: # %entry209; CHECK-P10-NEXT: pli r4, 232210; CHECK-P10-NEXT: pli r5, 3567587329211; CHECK-P10-NEXT: rldimi r5, r4, 32, 0212; CHECK-P10-NEXT: or r3, r3, r5213; CHECK-P10-NEXT: lbz r3, 0(r3)214; CHECK-P10-NEXT: extsb r3, r3215; CHECK-P10-NEXT: blr216;217; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_int8_t:218; CHECK-PREP10: # %bb.0: # %entry219; CHECK-PREP10-NEXT: li r4, 29220; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24221; CHECK-PREP10-NEXT: oris r4, r4, 54437222; CHECK-PREP10-NEXT: ori r4, r4, 4097223; CHECK-PREP10-NEXT: or r3, r3, r4224; CHECK-PREP10-NEXT: lbz r3, 0(r3)225; CHECK-PREP10-NEXT: extsb r3, r3226; CHECK-PREP10-NEXT: blr227entry:228 %or = or i64 %ptr, 1000000000001229 %0 = inttoptr i64 %or to ptr230 %1 = load i8, ptr %0, align 1231 %conv = sext i8 %1 to i16232 ret i16 %conv233}234 235; Function Attrs: norecurse nounwind readonly uwtable willreturn236define dso_local signext i16 @ld_disjoint_align64_int16_t_int8_t(i64 %ptr) {237; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_int8_t:238; CHECK-P10: # %bb.0: # %entry239; CHECK-P10-NEXT: pli r4, 244140625240; CHECK-P10-NEXT: rldicr r3, r3, 0, 23241; CHECK-P10-NEXT: rldic r4, r4, 12, 24242; CHECK-P10-NEXT: lbzx r3, r3, r4243; CHECK-P10-NEXT: extsb r3, r3244; CHECK-P10-NEXT: blr245;246; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_int8_t:247; CHECK-PREP10: # %bb.0: # %entry248; CHECK-PREP10-NEXT: lis r4, 3725249; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23250; CHECK-PREP10-NEXT: ori r4, r4, 19025251; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24252; CHECK-PREP10-NEXT: lbzx r3, r3, r4253; CHECK-PREP10-NEXT: extsb r3, r3254; CHECK-PREP10-NEXT: blr255entry:256 %and = and i64 %ptr, -1099511627776257 %or = or i64 %and, 1000000000000258 %0 = inttoptr i64 %or to ptr259 %1 = load i8, ptr %0, align 4096260 %conv = sext i8 %1 to i16261 ret i16 %conv262}263 264; Function Attrs: norecurse nounwind readonly uwtable willreturn265define dso_local signext i16 @ld_cst_align16_int16_t_int8_t() {266; CHECK-LABEL: ld_cst_align16_int16_t_int8_t:267; CHECK: # %bb.0: # %entry268; CHECK-NEXT: lbz r3, 4080(0)269; CHECK-NEXT: extsb r3, r3270; CHECK-NEXT: blr271entry:272 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16273 %conv = sext i8 %0 to i16274 ret i16 %conv275}276 277; Function Attrs: norecurse nounwind readonly uwtable willreturn278define dso_local signext i16 @ld_cst_align32_int16_t_int8_t() {279; CHECK-LABEL: ld_cst_align32_int16_t_int8_t:280; CHECK: # %bb.0: # %entry281; CHECK-NEXT: lis r3, 153282; CHECK-NEXT: lbz r3, -27108(r3)283; CHECK-NEXT: extsb r3, r3284; CHECK-NEXT: blr285entry:286 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4287 %conv = sext i8 %0 to i16288 ret i16 %conv289}290 291; Function Attrs: norecurse nounwind readonly uwtable willreturn292define dso_local signext i16 @ld_cst_align64_int16_t_int8_t() {293; CHECK-P10-LABEL: ld_cst_align64_int16_t_int8_t:294; CHECK-P10: # %bb.0: # %entry295; CHECK-P10-NEXT: pli r3, 244140625296; CHECK-P10-NEXT: rldic r3, r3, 12, 24297; CHECK-P10-NEXT: lbz r3, 0(r3)298; CHECK-P10-NEXT: extsb r3, r3299; CHECK-P10-NEXT: blr300;301; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_int8_t:302; CHECK-PREP10: # %bb.0: # %entry303; CHECK-PREP10-NEXT: lis r3, 3725304; CHECK-PREP10-NEXT: ori r3, r3, 19025305; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24306; CHECK-PREP10-NEXT: lbz r3, 0(r3)307; CHECK-PREP10-NEXT: extsb r3, r3308; CHECK-PREP10-NEXT: blr309entry:310 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096311 %conv = sext i8 %0 to i16312 ret i16 %conv313}314 315; Function Attrs: norecurse nounwind readonly uwtable willreturn316define dso_local signext i16 @ld_0_int16_t_uint16_t(i64 %ptr) {317; CHECK-LABEL: ld_0_int16_t_uint16_t:318; CHECK: # %bb.0: # %entry319; CHECK-NEXT: lha r3, 0(r3)320; CHECK-NEXT: blr321entry:322 %0 = inttoptr i64 %ptr to ptr323 %1 = load i16, ptr %0, align 2324 ret i16 %1325}326 327; Function Attrs: norecurse nounwind readonly uwtable willreturn328define dso_local signext i16 @ld_align16_int16_t_uint16_t(ptr nocapture readonly %ptr) {329; CHECK-LABEL: ld_align16_int16_t_uint16_t:330; CHECK: # %bb.0: # %entry331; CHECK-NEXT: lha r3, 8(r3)332; CHECK-NEXT: blr333entry:334 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8335 %0 = load i16, ptr %add.ptr, align 2336 ret i16 %0337}338 339; Function Attrs: norecurse nounwind readonly uwtable willreturn340define dso_local signext i16 @ld_align32_int16_t_uint16_t(ptr nocapture readonly %ptr) {341; CHECK-P10-LABEL: ld_align32_int16_t_uint16_t:342; CHECK-P10: # %bb.0: # %entry343; CHECK-P10-NEXT: plha r3, 99999000(r3), 0344; CHECK-P10-NEXT: blr345;346; CHECK-PREP10-LABEL: ld_align32_int16_t_uint16_t:347; CHECK-PREP10: # %bb.0: # %entry348; CHECK-PREP10-NEXT: lis r4, 1525349; CHECK-PREP10-NEXT: ori r4, r4, 56600350; CHECK-PREP10-NEXT: lhax r3, r3, r4351; CHECK-PREP10-NEXT: blr352entry:353 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000354 %0 = load i16, ptr %add.ptr, align 2355 ret i16 %0356}357 358; Function Attrs: norecurse nounwind readonly uwtable willreturn359define dso_local signext i16 @ld_align64_int16_t_uint16_t(ptr nocapture readonly %ptr) {360; CHECK-P10-LABEL: ld_align64_int16_t_uint16_t:361; CHECK-P10: # %bb.0: # %entry362; CHECK-P10-NEXT: pli r4, 244140625363; CHECK-P10-NEXT: rldic r4, r4, 12, 24364; CHECK-P10-NEXT: lhax r3, r3, r4365; CHECK-P10-NEXT: blr366;367; CHECK-PREP10-LABEL: ld_align64_int16_t_uint16_t:368; CHECK-PREP10: # %bb.0: # %entry369; CHECK-PREP10-NEXT: lis r4, 3725370; CHECK-PREP10-NEXT: ori r4, r4, 19025371; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24372; CHECK-PREP10-NEXT: lhax r3, r3, r4373; CHECK-PREP10-NEXT: blr374entry:375 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000376 %0 = load i16, ptr %add.ptr, align 2377 ret i16 %0378}379 380; Function Attrs: norecurse nounwind readonly uwtable willreturn381define dso_local signext i16 @ld_reg_int16_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {382; CHECK-LABEL: ld_reg_int16_t_uint16_t:383; CHECK: # %bb.0: # %entry384; CHECK-NEXT: lhax r3, r3, r4385; CHECK-NEXT: blr386entry:387 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off388 %0 = load i16, ptr %add.ptr, align 2389 ret i16 %0390}391 392; Function Attrs: norecurse nounwind readonly uwtable willreturn393define dso_local signext i16 @ld_or_int16_t_uint16_t(i64 %ptr, i8 zeroext %off) {394; CHECK-LABEL: ld_or_int16_t_uint16_t:395; CHECK: # %bb.0: # %entry396; CHECK-NEXT: or r3, r4, r3397; CHECK-NEXT: lha r3, 0(r3)398; CHECK-NEXT: blr399entry:400 %conv = zext i8 %off to i64401 %or = or i64 %conv, %ptr402 %0 = inttoptr i64 %or to ptr403 %1 = load i16, ptr %0, align 2404 ret i16 %1405}406 407; Function Attrs: norecurse nounwind readonly uwtable willreturn408define dso_local signext i16 @ld_not_disjoint16_int16_t_uint16_t(i64 %ptr) {409; CHECK-LABEL: ld_not_disjoint16_int16_t_uint16_t:410; CHECK: # %bb.0: # %entry411; CHECK-NEXT: ori r3, r3, 6412; CHECK-NEXT: lha r3, 0(r3)413; CHECK-NEXT: blr414entry:415 %or = or i64 %ptr, 6416 %0 = inttoptr i64 %or to ptr417 %1 = load i16, ptr %0, align 2418 ret i16 %1419}420 421; Function Attrs: norecurse nounwind readonly uwtable willreturn422define dso_local signext i16 @ld_disjoint_align16_int16_t_uint16_t(i64 %ptr) {423; CHECK-LABEL: ld_disjoint_align16_int16_t_uint16_t:424; CHECK: # %bb.0: # %entry425; CHECK-NEXT: rldicr r3, r3, 0, 51426; CHECK-NEXT: lha r3, 24(r3)427; CHECK-NEXT: blr428entry:429 %and = and i64 %ptr, -4096430 %or = or i64 %and, 24431 %0 = inttoptr i64 %or to ptr432 %1 = load i16, ptr %0, align 8433 ret i16 %1434}435 436; Function Attrs: norecurse nounwind readonly uwtable willreturn437define dso_local signext i16 @ld_not_disjoint32_int16_t_uint16_t(i64 %ptr) {438; CHECK-LABEL: ld_not_disjoint32_int16_t_uint16_t:439; CHECK: # %bb.0: # %entry440; CHECK-NEXT: ori r3, r3, 34463441; CHECK-NEXT: oris r3, r3, 1442; CHECK-NEXT: lha r3, 0(r3)443; CHECK-NEXT: blr444entry:445 %or = or i64 %ptr, 99999446 %0 = inttoptr i64 %or to ptr447 %1 = load i16, ptr %0, align 2448 ret i16 %1449}450 451; Function Attrs: norecurse nounwind readonly uwtable willreturn452define dso_local signext i16 @ld_disjoint_align32_int16_t_uint16_t(i64 %ptr) {453; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_uint16_t:454; CHECK-P10: # %bb.0: # %entry455; CHECK-P10-NEXT: lis r4, -15264456; CHECK-P10-NEXT: and r3, r3, r4457; CHECK-P10-NEXT: plha r3, 999990000(r3), 0458; CHECK-P10-NEXT: blr459;460; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_uint16_t:461; CHECK-PREP10: # %bb.0: # %entry462; CHECK-PREP10-NEXT: lis r4, -15264463; CHECK-PREP10-NEXT: and r3, r3, r4464; CHECK-PREP10-NEXT: lis r4, 15258465; CHECK-PREP10-NEXT: ori r4, r4, 41712466; CHECK-PREP10-NEXT: lhax r3, r3, r4467; CHECK-PREP10-NEXT: blr468entry:469 %and = and i64 %ptr, -1000341504470 %or = or i64 %and, 999990000471 %0 = inttoptr i64 %or to ptr472 %1 = load i16, ptr %0, align 16473 ret i16 %1474}475 476; Function Attrs: norecurse nounwind readonly uwtable willreturn477define dso_local signext i16 @ld_not_disjoint64_int16_t_uint16_t(i64 %ptr) {478; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_uint16_t:479; CHECK-P10: # %bb.0: # %entry480; CHECK-P10-NEXT: pli r4, 232481; CHECK-P10-NEXT: pli r5, 3567587329482; CHECK-P10-NEXT: rldimi r5, r4, 32, 0483; CHECK-P10-NEXT: or r3, r3, r5484; CHECK-P10-NEXT: lha r3, 0(r3)485; CHECK-P10-NEXT: blr486;487; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_uint16_t:488; CHECK-PREP10: # %bb.0: # %entry489; CHECK-PREP10-NEXT: li r4, 29490; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24491; CHECK-PREP10-NEXT: oris r4, r4, 54437492; CHECK-PREP10-NEXT: ori r4, r4, 4097493; CHECK-PREP10-NEXT: or r3, r3, r4494; CHECK-PREP10-NEXT: lha r3, 0(r3)495; CHECK-PREP10-NEXT: blr496entry:497 %or = or i64 %ptr, 1000000000001498 %0 = inttoptr i64 %or to ptr499 %1 = load i16, ptr %0, align 2500 ret i16 %1501}502 503; Function Attrs: norecurse nounwind readonly uwtable willreturn504define dso_local signext i16 @ld_disjoint_align64_int16_t_uint16_t(i64 %ptr) {505; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_uint16_t:506; CHECK-P10: # %bb.0: # %entry507; CHECK-P10-NEXT: pli r4, 244140625508; CHECK-P10-NEXT: rldicr r3, r3, 0, 23509; CHECK-P10-NEXT: rldic r4, r4, 12, 24510; CHECK-P10-NEXT: lhax r3, r3, r4511; CHECK-P10-NEXT: blr512;513; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_uint16_t:514; CHECK-PREP10: # %bb.0: # %entry515; CHECK-PREP10-NEXT: lis r4, 3725516; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23517; CHECK-PREP10-NEXT: ori r4, r4, 19025518; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24519; CHECK-PREP10-NEXT: lhax r3, r3, r4520; CHECK-PREP10-NEXT: blr521entry:522 %and = and i64 %ptr, -1099511627776523 %or = or i64 %and, 1000000000000524 %0 = inttoptr i64 %or to ptr525 %1 = load i16, ptr %0, align 4096526 ret i16 %1527}528 529; Function Attrs: norecurse nounwind readonly uwtable willreturn530define dso_local signext i16 @ld_cst_align16_int16_t_uint16_t() {531; CHECK-LABEL: ld_cst_align16_int16_t_uint16_t:532; CHECK: # %bb.0: # %entry533; CHECK-NEXT: lha r3, 4080(0)534; CHECK-NEXT: blr535entry:536 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16537 ret i16 %0538}539 540; Function Attrs: norecurse nounwind readonly uwtable willreturn541define dso_local signext i16 @ld_cst_align32_int16_t_uint16_t() {542; CHECK-LABEL: ld_cst_align32_int16_t_uint16_t:543; CHECK: # %bb.0: # %entry544; CHECK-NEXT: lis r3, 153545; CHECK-NEXT: lha r3, -27108(r3)546; CHECK-NEXT: blr547entry:548 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4549 ret i16 %0550}551 552; Function Attrs: norecurse nounwind readonly uwtable willreturn553define dso_local signext i16 @ld_cst_align64_int16_t_uint16_t() {554; CHECK-P10-LABEL: ld_cst_align64_int16_t_uint16_t:555; CHECK-P10: # %bb.0: # %entry556; CHECK-P10-NEXT: pli r3, 244140625557; CHECK-P10-NEXT: rldic r3, r3, 12, 24558; CHECK-P10-NEXT: lha r3, 0(r3)559; CHECK-P10-NEXT: blr560;561; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_uint16_t:562; CHECK-PREP10: # %bb.0: # %entry563; CHECK-PREP10-NEXT: lis r3, 3725564; CHECK-PREP10-NEXT: ori r3, r3, 19025565; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24566; CHECK-PREP10-NEXT: lha r3, 0(r3)567; CHECK-PREP10-NEXT: blr568entry:569 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096570 ret i16 %0571}572 573; Function Attrs: norecurse nounwind readonly uwtable willreturn574define dso_local signext i16 @ld_0_int16_t_uint32_t(i64 %ptr) {575; CHECK-LE-LABEL: ld_0_int16_t_uint32_t:576; CHECK-LE: # %bb.0: # %entry577; CHECK-LE-NEXT: lha r3, 0(r3)578; CHECK-LE-NEXT: blr579;580; CHECK-BE-LABEL: ld_0_int16_t_uint32_t:581; CHECK-BE: # %bb.0: # %entry582; CHECK-BE-NEXT: lha r3, 2(r3)583; CHECK-BE-NEXT: blr584entry:585 %0 = inttoptr i64 %ptr to ptr586 %1 = load i32, ptr %0, align 4587 %conv = trunc i32 %1 to i16588 ret i16 %conv589}590 591; Function Attrs: norecurse nounwind readonly uwtable willreturn592define dso_local signext i16 @ld_align16_int16_t_uint32_t(ptr nocapture readonly %ptr) {593; CHECK-LE-LABEL: ld_align16_int16_t_uint32_t:594; CHECK-LE: # %bb.0: # %entry595; CHECK-LE-NEXT: lha r3, 8(r3)596; CHECK-LE-NEXT: blr597;598; CHECK-BE-LABEL: ld_align16_int16_t_uint32_t:599; CHECK-BE: # %bb.0: # %entry600; CHECK-BE-NEXT: lha r3, 10(r3)601; CHECK-BE-NEXT: blr602entry:603 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8604 %0 = load i32, ptr %add.ptr, align 4605 %conv = trunc i32 %0 to i16606 ret i16 %conv607}608 609; Function Attrs: norecurse nounwind readonly uwtable willreturn610define dso_local signext i16 @ld_align32_int16_t_uint32_t(ptr nocapture readonly %ptr) {611; CHECK-P10-LE-LABEL: ld_align32_int16_t_uint32_t:612; CHECK-P10-LE: # %bb.0: # %entry613; CHECK-P10-LE-NEXT: plha r3, 99999000(r3), 0614; CHECK-P10-LE-NEXT: blr615;616; CHECK-P10-BE-LABEL: ld_align32_int16_t_uint32_t:617; CHECK-P10-BE: # %bb.0: # %entry618; CHECK-P10-BE-NEXT: plha r3, 99999002(r3), 0619; CHECK-P10-BE-NEXT: blr620;621; CHECK-P9-LE-LABEL: ld_align32_int16_t_uint32_t:622; CHECK-P9-LE: # %bb.0: # %entry623; CHECK-P9-LE-NEXT: lis r4, 1525624; CHECK-P9-LE-NEXT: ori r4, r4, 56600625; CHECK-P9-LE-NEXT: lhax r3, r3, r4626; CHECK-P9-LE-NEXT: blr627;628; CHECK-P9-BE-LABEL: ld_align32_int16_t_uint32_t:629; CHECK-P9-BE: # %bb.0: # %entry630; CHECK-P9-BE-NEXT: lis r4, 1525631; CHECK-P9-BE-NEXT: ori r4, r4, 56602632; CHECK-P9-BE-NEXT: lhax r3, r3, r4633; CHECK-P9-BE-NEXT: blr634;635; CHECK-P8-LE-LABEL: ld_align32_int16_t_uint32_t:636; CHECK-P8-LE: # %bb.0: # %entry637; CHECK-P8-LE-NEXT: lis r4, 1525638; CHECK-P8-LE-NEXT: ori r4, r4, 56600639; CHECK-P8-LE-NEXT: lhax r3, r3, r4640; CHECK-P8-LE-NEXT: blr641;642; CHECK-P8-BE-LABEL: ld_align32_int16_t_uint32_t:643; CHECK-P8-BE: # %bb.0: # %entry644; CHECK-P8-BE-NEXT: lis r4, 1525645; CHECK-P8-BE-NEXT: ori r4, r4, 56602646; CHECK-P8-BE-NEXT: lhax r3, r3, r4647; CHECK-P8-BE-NEXT: blr648entry:649 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000650 %0 = load i32, ptr %add.ptr, align 4651 %conv = trunc i32 %0 to i16652 ret i16 %conv653}654 655; Function Attrs: norecurse nounwind readonly uwtable willreturn656define dso_local signext i16 @ld_align64_int16_t_uint32_t(ptr nocapture readonly %ptr) {657; CHECK-P10-LE-LABEL: ld_align64_int16_t_uint32_t:658; CHECK-P10-LE: # %bb.0: # %entry659; CHECK-P10-LE-NEXT: pli r4, 244140625660; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24661; CHECK-P10-LE-NEXT: lhax r3, r3, r4662; CHECK-P10-LE-NEXT: blr663;664; CHECK-P10-BE-LABEL: ld_align64_int16_t_uint32_t:665; CHECK-P10-BE: # %bb.0: # %entry666; CHECK-P10-BE-NEXT: pli r4, 232667; CHECK-P10-BE-NEXT: pli r5, 3567587330668; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0669; CHECK-P10-BE-NEXT: lhax r3, r3, r5670; CHECK-P10-BE-NEXT: blr671;672; CHECK-P9-LE-LABEL: ld_align64_int16_t_uint32_t:673; CHECK-P9-LE: # %bb.0: # %entry674; CHECK-P9-LE-NEXT: lis r4, 3725675; CHECK-P9-LE-NEXT: ori r4, r4, 19025676; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24677; CHECK-P9-LE-NEXT: lhax r3, r3, r4678; CHECK-P9-LE-NEXT: blr679;680; CHECK-P9-BE-LABEL: ld_align64_int16_t_uint32_t:681; CHECK-P9-BE: # %bb.0: # %entry682; CHECK-P9-BE-NEXT: li r4, 29683; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24684; CHECK-P9-BE-NEXT: oris r4, r4, 54437685; CHECK-P9-BE-NEXT: ori r4, r4, 4098686; CHECK-P9-BE-NEXT: lhax r3, r3, r4687; CHECK-P9-BE-NEXT: blr688;689; CHECK-P8-LE-LABEL: ld_align64_int16_t_uint32_t:690; CHECK-P8-LE: # %bb.0: # %entry691; CHECK-P8-LE-NEXT: lis r4, 3725692; CHECK-P8-LE-NEXT: ori r4, r4, 19025693; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24694; CHECK-P8-LE-NEXT: lhax r3, r3, r4695; CHECK-P8-LE-NEXT: blr696;697; CHECK-P8-BE-LABEL: ld_align64_int16_t_uint32_t:698; CHECK-P8-BE: # %bb.0: # %entry699; CHECK-P8-BE-NEXT: li r4, 29700; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24701; CHECK-P8-BE-NEXT: oris r4, r4, 54437702; CHECK-P8-BE-NEXT: ori r4, r4, 4098703; CHECK-P8-BE-NEXT: lhax r3, r3, r4704; CHECK-P8-BE-NEXT: blr705entry:706 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000707 %0 = load i32, ptr %add.ptr, align 4708 %conv = trunc i32 %0 to i16709 ret i16 %conv710}711 712; Function Attrs: norecurse nounwind readonly uwtable willreturn713define dso_local signext i16 @ld_reg_int16_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {714; CHECK-LE-LABEL: ld_reg_int16_t_uint32_t:715; CHECK-LE: # %bb.0: # %entry716; CHECK-LE-NEXT: lhax r3, r3, r4717; CHECK-LE-NEXT: blr718;719; CHECK-BE-LABEL: ld_reg_int16_t_uint32_t:720; CHECK-BE: # %bb.0: # %entry721; CHECK-BE-NEXT: add r3, r3, r4722; CHECK-BE-NEXT: lha r3, 2(r3)723; CHECK-BE-NEXT: blr724entry:725 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off726 %0 = load i32, ptr %add.ptr, align 4727 %conv = trunc i32 %0 to i16728 ret i16 %conv729}730 731; Function Attrs: norecurse nounwind readonly uwtable willreturn732define dso_local signext i16 @ld_or_int16_t_uint32_t(i64 %ptr, i8 zeroext %off) {733; CHECK-LE-LABEL: ld_or_int16_t_uint32_t:734; CHECK-LE: # %bb.0: # %entry735; CHECK-LE-NEXT: or r3, r4, r3736; CHECK-LE-NEXT: lha r3, 0(r3)737; CHECK-LE-NEXT: blr738;739; CHECK-BE-LABEL: ld_or_int16_t_uint32_t:740; CHECK-BE: # %bb.0: # %entry741; CHECK-BE-NEXT: or r3, r4, r3742; CHECK-BE-NEXT: lha r3, 2(r3)743; CHECK-BE-NEXT: blr744entry:745 %conv = zext i8 %off to i64746 %or = or i64 %conv, %ptr747 %0 = inttoptr i64 %or to ptr748 %1 = load i32, ptr %0, align 4749 %conv1 = trunc i32 %1 to i16750 ret i16 %conv1751}752 753; Function Attrs: norecurse nounwind readonly uwtable willreturn754define dso_local signext i16 @ld_not_disjoint16_int16_t_uint32_t(i64 %ptr) {755; CHECK-LE-LABEL: ld_not_disjoint16_int16_t_uint32_t:756; CHECK-LE: # %bb.0: # %entry757; CHECK-LE-NEXT: ori r3, r3, 6758; CHECK-LE-NEXT: lha r3, 0(r3)759; CHECK-LE-NEXT: blr760;761; CHECK-BE-LABEL: ld_not_disjoint16_int16_t_uint32_t:762; CHECK-BE: # %bb.0: # %entry763; CHECK-BE-NEXT: ori r3, r3, 6764; CHECK-BE-NEXT: lha r3, 2(r3)765; CHECK-BE-NEXT: blr766entry:767 %or = or i64 %ptr, 6768 %0 = inttoptr i64 %or to ptr769 %1 = load i32, ptr %0, align 4770 %conv = trunc i32 %1 to i16771 ret i16 %conv772}773 774; Function Attrs: norecurse nounwind readonly uwtable willreturn775define dso_local signext i16 @ld_disjoint_align16_int16_t_uint32_t(i64 %ptr) {776; CHECK-LE-LABEL: ld_disjoint_align16_int16_t_uint32_t:777; CHECK-LE: # %bb.0: # %entry778; CHECK-LE-NEXT: rldicr r3, r3, 0, 51779; CHECK-LE-NEXT: lha r3, 24(r3)780; CHECK-LE-NEXT: blr781;782; CHECK-BE-LABEL: ld_disjoint_align16_int16_t_uint32_t:783; CHECK-BE: # %bb.0: # %entry784; CHECK-BE-NEXT: rldicr r3, r3, 0, 51785; CHECK-BE-NEXT: lha r3, 26(r3)786; CHECK-BE-NEXT: blr787entry:788 %and = and i64 %ptr, -4096789 %or = or i64 %and, 24790 %0 = inttoptr i64 %or to ptr791 %1 = load i32, ptr %0, align 8792 %conv = trunc i32 %1 to i16793 ret i16 %conv794}795 796; Function Attrs: norecurse nounwind readonly uwtable willreturn797define dso_local signext i16 @ld_not_disjoint32_int16_t_uint32_t(i64 %ptr) {798; CHECK-LE-LABEL: ld_not_disjoint32_int16_t_uint32_t:799; CHECK-LE: # %bb.0: # %entry800; CHECK-LE-NEXT: ori r3, r3, 34463801; CHECK-LE-NEXT: oris r3, r3, 1802; CHECK-LE-NEXT: lha r3, 0(r3)803; CHECK-LE-NEXT: blr804;805; CHECK-BE-LABEL: ld_not_disjoint32_int16_t_uint32_t:806; CHECK-BE: # %bb.0: # %entry807; CHECK-BE-NEXT: ori r3, r3, 34463808; CHECK-BE-NEXT: oris r3, r3, 1809; CHECK-BE-NEXT: lha r3, 2(r3)810; CHECK-BE-NEXT: blr811entry:812 %or = or i64 %ptr, 99999813 %0 = inttoptr i64 %or to ptr814 %1 = load i32, ptr %0, align 4815 %conv = trunc i32 %1 to i16816 ret i16 %conv817}818 819; Function Attrs: norecurse nounwind readonly uwtable willreturn820define dso_local signext i16 @ld_disjoint_align32_int16_t_uint32_t(i64 %ptr) {821; CHECK-P10-LE-LABEL: ld_disjoint_align32_int16_t_uint32_t:822; CHECK-P10-LE: # %bb.0: # %entry823; CHECK-P10-LE-NEXT: lis r4, -15264824; CHECK-P10-LE-NEXT: and r3, r3, r4825; CHECK-P10-LE-NEXT: plha r3, 999990000(r3), 0826; CHECK-P10-LE-NEXT: blr827;828; CHECK-P10-BE-LABEL: ld_disjoint_align32_int16_t_uint32_t:829; CHECK-P10-BE: # %bb.0: # %entry830; CHECK-P10-BE-NEXT: lis r4, -15264831; CHECK-P10-BE-NEXT: and r3, r3, r4832; CHECK-P10-BE-NEXT: plha r3, 999990002(r3), 0833; CHECK-P10-BE-NEXT: blr834;835; CHECK-P9-LE-LABEL: ld_disjoint_align32_int16_t_uint32_t:836; CHECK-P9-LE: # %bb.0: # %entry837; CHECK-P9-LE-NEXT: lis r4, -15264838; CHECK-P9-LE-NEXT: and r3, r3, r4839; CHECK-P9-LE-NEXT: lis r4, 15258840; CHECK-P9-LE-NEXT: ori r4, r4, 41712841; CHECK-P9-LE-NEXT: lhax r3, r3, r4842; CHECK-P9-LE-NEXT: blr843;844; CHECK-P9-BE-LABEL: ld_disjoint_align32_int16_t_uint32_t:845; CHECK-P9-BE: # %bb.0: # %entry846; CHECK-P9-BE-NEXT: lis r4, -15264847; CHECK-P9-BE-NEXT: and r3, r3, r4848; CHECK-P9-BE-NEXT: lis r4, 15258849; CHECK-P9-BE-NEXT: ori r4, r4, 41714850; CHECK-P9-BE-NEXT: lhax r3, r3, r4851; CHECK-P9-BE-NEXT: blr852;853; CHECK-P8-LE-LABEL: ld_disjoint_align32_int16_t_uint32_t:854; CHECK-P8-LE: # %bb.0: # %entry855; CHECK-P8-LE-NEXT: lis r4, -15264856; CHECK-P8-LE-NEXT: and r3, r3, r4857; CHECK-P8-LE-NEXT: lis r4, 15258858; CHECK-P8-LE-NEXT: ori r4, r4, 41712859; CHECK-P8-LE-NEXT: lhax r3, r3, r4860; CHECK-P8-LE-NEXT: blr861;862; CHECK-P8-BE-LABEL: ld_disjoint_align32_int16_t_uint32_t:863; CHECK-P8-BE: # %bb.0: # %entry864; CHECK-P8-BE-NEXT: lis r4, -15264865; CHECK-P8-BE-NEXT: and r3, r3, r4866; CHECK-P8-BE-NEXT: lis r4, 15258867; CHECK-P8-BE-NEXT: ori r4, r4, 41714868; CHECK-P8-BE-NEXT: lhax r3, r3, r4869; CHECK-P8-BE-NEXT: blr870entry:871 %and = and i64 %ptr, -1000341504872 %or = or i64 %and, 999990000873 %0 = inttoptr i64 %or to ptr874 %1 = load i32, ptr %0, align 16875 %conv = trunc i32 %1 to i16876 ret i16 %conv877}878 879; Function Attrs: norecurse nounwind readonly uwtable willreturn880define dso_local signext i16 @ld_not_disjoint64_int16_t_uint32_t(i64 %ptr) {881; CHECK-P10-LE-LABEL: ld_not_disjoint64_int16_t_uint32_t:882; CHECK-P10-LE: # %bb.0: # %entry883; CHECK-P10-LE-NEXT: pli r4, 232884; CHECK-P10-LE-NEXT: pli r5, 3567587329885; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0886; CHECK-P10-LE-NEXT: or r3, r3, r5887; CHECK-P10-LE-NEXT: lha r3, 0(r3)888; CHECK-P10-LE-NEXT: blr889;890; CHECK-P10-BE-LABEL: ld_not_disjoint64_int16_t_uint32_t:891; CHECK-P10-BE: # %bb.0: # %entry892; CHECK-P10-BE-NEXT: pli r4, 232893; CHECK-P10-BE-NEXT: pli r5, 3567587329894; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0895; CHECK-P10-BE-NEXT: or r3, r3, r5896; CHECK-P10-BE-NEXT: lha r3, 2(r3)897; CHECK-P10-BE-NEXT: blr898;899; CHECK-P9-LE-LABEL: ld_not_disjoint64_int16_t_uint32_t:900; CHECK-P9-LE: # %bb.0: # %entry901; CHECK-P9-LE-NEXT: li r4, 29902; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24903; CHECK-P9-LE-NEXT: oris r4, r4, 54437904; CHECK-P9-LE-NEXT: ori r4, r4, 4097905; CHECK-P9-LE-NEXT: or r3, r3, r4906; CHECK-P9-LE-NEXT: lha r3, 0(r3)907; CHECK-P9-LE-NEXT: blr908;909; CHECK-P9-BE-LABEL: ld_not_disjoint64_int16_t_uint32_t:910; CHECK-P9-BE: # %bb.0: # %entry911; CHECK-P9-BE-NEXT: li r4, 29912; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24913; CHECK-P9-BE-NEXT: oris r4, r4, 54437914; CHECK-P9-BE-NEXT: ori r4, r4, 4097915; CHECK-P9-BE-NEXT: or r3, r3, r4916; CHECK-P9-BE-NEXT: lha r3, 2(r3)917; CHECK-P9-BE-NEXT: blr918;919; CHECK-P8-LE-LABEL: ld_not_disjoint64_int16_t_uint32_t:920; CHECK-P8-LE: # %bb.0: # %entry921; CHECK-P8-LE-NEXT: li r4, 29922; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24923; CHECK-P8-LE-NEXT: oris r4, r4, 54437924; CHECK-P8-LE-NEXT: ori r4, r4, 4097925; CHECK-P8-LE-NEXT: or r3, r3, r4926; CHECK-P8-LE-NEXT: lha r3, 0(r3)927; CHECK-P8-LE-NEXT: blr928;929; CHECK-P8-BE-LABEL: ld_not_disjoint64_int16_t_uint32_t:930; CHECK-P8-BE: # %bb.0: # %entry931; CHECK-P8-BE-NEXT: li r4, 29932; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24933; CHECK-P8-BE-NEXT: oris r4, r4, 54437934; CHECK-P8-BE-NEXT: ori r4, r4, 4097935; CHECK-P8-BE-NEXT: or r3, r3, r4936; CHECK-P8-BE-NEXT: lha r3, 2(r3)937; CHECK-P8-BE-NEXT: blr938entry:939 %or = or i64 %ptr, 1000000000001940 %0 = inttoptr i64 %or to ptr941 %1 = load i32, ptr %0, align 4942 %conv = trunc i32 %1 to i16943 ret i16 %conv944}945 946; Function Attrs: norecurse nounwind readonly uwtable willreturn947define dso_local signext i16 @ld_disjoint_align64_int16_t_uint32_t(i64 %ptr) {948; CHECK-P10-LE-LABEL: ld_disjoint_align64_int16_t_uint32_t:949; CHECK-P10-LE: # %bb.0: # %entry950; CHECK-P10-LE-NEXT: pli r4, 244140625951; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23952; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24953; CHECK-P10-LE-NEXT: lhax r3, r3, r4954; CHECK-P10-LE-NEXT: blr955;956; CHECK-P10-BE-LABEL: ld_disjoint_align64_int16_t_uint32_t:957; CHECK-P10-BE: # %bb.0: # %entry958; CHECK-P10-BE-NEXT: pli r4, 232959; CHECK-P10-BE-NEXT: pli r5, 3567587330960; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23961; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0962; CHECK-P10-BE-NEXT: lhax r3, r3, r5963; CHECK-P10-BE-NEXT: blr964;965; CHECK-P9-LE-LABEL: ld_disjoint_align64_int16_t_uint32_t:966; CHECK-P9-LE: # %bb.0: # %entry967; CHECK-P9-LE-NEXT: lis r4, 3725968; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23969; CHECK-P9-LE-NEXT: ori r4, r4, 19025970; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24971; CHECK-P9-LE-NEXT: lhax r3, r3, r4972; CHECK-P9-LE-NEXT: blr973;974; CHECK-P9-BE-LABEL: ld_disjoint_align64_int16_t_uint32_t:975; CHECK-P9-BE: # %bb.0: # %entry976; CHECK-P9-BE-NEXT: li r4, 29977; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23978; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24979; CHECK-P9-BE-NEXT: oris r4, r4, 54437980; CHECK-P9-BE-NEXT: ori r4, r4, 4098981; CHECK-P9-BE-NEXT: lhax r3, r3, r4982; CHECK-P9-BE-NEXT: blr983;984; CHECK-P8-LE-LABEL: ld_disjoint_align64_int16_t_uint32_t:985; CHECK-P8-LE: # %bb.0: # %entry986; CHECK-P8-LE-NEXT: lis r4, 3725987; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23988; CHECK-P8-LE-NEXT: ori r4, r4, 19025989; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24990; CHECK-P8-LE-NEXT: lhax r3, r3, r4991; CHECK-P8-LE-NEXT: blr992;993; CHECK-P8-BE-LABEL: ld_disjoint_align64_int16_t_uint32_t:994; CHECK-P8-BE: # %bb.0: # %entry995; CHECK-P8-BE-NEXT: li r4, 29996; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23997; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24998; CHECK-P8-BE-NEXT: oris r4, r4, 54437999; CHECK-P8-BE-NEXT: ori r4, r4, 40981000; CHECK-P8-BE-NEXT: lhax r3, r3, r41001; CHECK-P8-BE-NEXT: blr1002entry:1003 %and = and i64 %ptr, -10995116277761004 %or = or i64 %and, 10000000000001005 %0 = inttoptr i64 %or to ptr1006 %1 = load i32, ptr %0, align 40961007 %conv = trunc i32 %1 to i161008 ret i16 %conv1009}1010 1011; Function Attrs: norecurse nounwind readonly uwtable willreturn1012define dso_local signext i16 @ld_cst_align16_int16_t_uint32_t() {1013; CHECK-LE-LABEL: ld_cst_align16_int16_t_uint32_t:1014; CHECK-LE: # %bb.0: # %entry1015; CHECK-LE-NEXT: lha r3, 4080(0)1016; CHECK-LE-NEXT: blr1017;1018; CHECK-BE-LABEL: ld_cst_align16_int16_t_uint32_t:1019; CHECK-BE: # %bb.0: # %entry1020; CHECK-BE-NEXT: lha r3, 4082(0)1021; CHECK-BE-NEXT: blr1022entry:1023 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 161024 %conv = trunc i32 %0 to i161025 ret i16 %conv1026}1027 1028; Function Attrs: norecurse nounwind readonly uwtable willreturn1029define dso_local signext i16 @ld_cst_align32_int16_t_uint32_t() {1030; CHECK-LE-LABEL: ld_cst_align32_int16_t_uint32_t:1031; CHECK-LE: # %bb.0: # %entry1032; CHECK-LE-NEXT: lis r3, 1531033; CHECK-LE-NEXT: lha r3, -27108(r3)1034; CHECK-LE-NEXT: blr1035;1036; CHECK-BE-LABEL: ld_cst_align32_int16_t_uint32_t:1037; CHECK-BE: # %bb.0: # %entry1038; CHECK-BE-NEXT: lis r3, 1531039; CHECK-BE-NEXT: lha r3, -27106(r3)1040; CHECK-BE-NEXT: blr1041entry:1042 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 41043 %conv = trunc i32 %0 to i161044 ret i16 %conv1045}1046 1047; Function Attrs: norecurse nounwind readonly uwtable willreturn1048define dso_local signext i16 @ld_cst_align64_int16_t_uint32_t() {1049; CHECK-P10-LE-LABEL: ld_cst_align64_int16_t_uint32_t:1050; CHECK-P10-LE: # %bb.0: # %entry1051; CHECK-P10-LE-NEXT: pli r3, 2441406251052; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 241053; CHECK-P10-LE-NEXT: lha r3, 0(r3)1054; CHECK-P10-LE-NEXT: blr1055;1056; CHECK-P10-BE-LABEL: ld_cst_align64_int16_t_uint32_t:1057; CHECK-P10-BE: # %bb.0: # %entry1058; CHECK-P10-BE-NEXT: pli r3, 2321059; CHECK-P10-BE-NEXT: pli r4, 35675873301060; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 01061; CHECK-P10-BE-NEXT: lha r3, 0(r4)1062; CHECK-P10-BE-NEXT: blr1063;1064; CHECK-P9-LE-LABEL: ld_cst_align64_int16_t_uint32_t:1065; CHECK-P9-LE: # %bb.0: # %entry1066; CHECK-P9-LE-NEXT: lis r3, 37251067; CHECK-P9-LE-NEXT: ori r3, r3, 190251068; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 241069; CHECK-P9-LE-NEXT: lha r3, 0(r3)1070; CHECK-P9-LE-NEXT: blr1071;1072; CHECK-P9-BE-LABEL: ld_cst_align64_int16_t_uint32_t:1073; CHECK-P9-BE: # %bb.0: # %entry1074; CHECK-P9-BE-NEXT: li r3, 291075; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 241076; CHECK-P9-BE-NEXT: oris r3, r3, 544371077; CHECK-P9-BE-NEXT: ori r3, r3, 40981078; CHECK-P9-BE-NEXT: lha r3, 0(r3)1079; CHECK-P9-BE-NEXT: blr1080;1081; CHECK-P8-LE-LABEL: ld_cst_align64_int16_t_uint32_t:1082; CHECK-P8-LE: # %bb.0: # %entry1083; CHECK-P8-LE-NEXT: lis r3, 37251084; CHECK-P8-LE-NEXT: ori r3, r3, 190251085; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 241086; CHECK-P8-LE-NEXT: lha r3, 0(r3)1087; CHECK-P8-LE-NEXT: blr1088;1089; CHECK-P8-BE-LABEL: ld_cst_align64_int16_t_uint32_t:1090; CHECK-P8-BE: # %bb.0: # %entry1091; CHECK-P8-BE-NEXT: li r3, 291092; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 241093; CHECK-P8-BE-NEXT: oris r3, r3, 544371094; CHECK-P8-BE-NEXT: ori r3, r3, 40981095; CHECK-P8-BE-NEXT: lha r3, 0(r3)1096; CHECK-P8-BE-NEXT: blr1097entry:1098 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 40961099 %conv = trunc i32 %0 to i161100 ret i16 %conv1101}1102 1103; Function Attrs: norecurse nounwind readonly uwtable willreturn1104define dso_local signext i16 @ld_0_int16_t_uint64_t(i64 %ptr) {1105; CHECK-LE-LABEL: ld_0_int16_t_uint64_t:1106; CHECK-LE: # %bb.0: # %entry1107; CHECK-LE-NEXT: lha r3, 0(r3)1108; CHECK-LE-NEXT: blr1109;1110; CHECK-BE-LABEL: ld_0_int16_t_uint64_t:1111; CHECK-BE: # %bb.0: # %entry1112; CHECK-BE-NEXT: lha r3, 6(r3)1113; CHECK-BE-NEXT: blr1114entry:1115 %0 = inttoptr i64 %ptr to ptr1116 %1 = load i64, ptr %0, align 81117 %conv = trunc i64 %1 to i161118 ret i16 %conv1119}1120 1121; Function Attrs: norecurse nounwind readonly uwtable willreturn1122define dso_local signext i16 @ld_align16_int16_t_uint64_t(ptr nocapture readonly %ptr) {1123; CHECK-LE-LABEL: ld_align16_int16_t_uint64_t:1124; CHECK-LE: # %bb.0: # %entry1125; CHECK-LE-NEXT: lha r3, 8(r3)1126; CHECK-LE-NEXT: blr1127;1128; CHECK-BE-LABEL: ld_align16_int16_t_uint64_t:1129; CHECK-BE: # %bb.0: # %entry1130; CHECK-BE-NEXT: lha r3, 14(r3)1131; CHECK-BE-NEXT: blr1132entry:1133 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81134 %0 = load i64, ptr %add.ptr, align 81135 %conv = trunc i64 %0 to i161136 ret i16 %conv1137}1138 1139; Function Attrs: norecurse nounwind readonly uwtable willreturn1140define dso_local signext i16 @ld_align32_int16_t_uint64_t(ptr nocapture readonly %ptr) {1141; CHECK-P10-LE-LABEL: ld_align32_int16_t_uint64_t:1142; CHECK-P10-LE: # %bb.0: # %entry1143; CHECK-P10-LE-NEXT: plha r3, 99999000(r3), 01144; CHECK-P10-LE-NEXT: blr1145;1146; CHECK-P10-BE-LABEL: ld_align32_int16_t_uint64_t:1147; CHECK-P10-BE: # %bb.0: # %entry1148; CHECK-P10-BE-NEXT: plha r3, 99999006(r3), 01149; CHECK-P10-BE-NEXT: blr1150;1151; CHECK-P9-LE-LABEL: ld_align32_int16_t_uint64_t:1152; CHECK-P9-LE: # %bb.0: # %entry1153; CHECK-P9-LE-NEXT: lis r4, 15251154; CHECK-P9-LE-NEXT: ori r4, r4, 566001155; CHECK-P9-LE-NEXT: lhax r3, r3, r41156; CHECK-P9-LE-NEXT: blr1157;1158; CHECK-P9-BE-LABEL: ld_align32_int16_t_uint64_t:1159; CHECK-P9-BE: # %bb.0: # %entry1160; CHECK-P9-BE-NEXT: lis r4, 15251161; CHECK-P9-BE-NEXT: ori r4, r4, 566061162; CHECK-P9-BE-NEXT: lhax r3, r3, r41163; CHECK-P9-BE-NEXT: blr1164;1165; CHECK-P8-LE-LABEL: ld_align32_int16_t_uint64_t:1166; CHECK-P8-LE: # %bb.0: # %entry1167; CHECK-P8-LE-NEXT: lis r4, 15251168; CHECK-P8-LE-NEXT: ori r4, r4, 566001169; CHECK-P8-LE-NEXT: lhax r3, r3, r41170; CHECK-P8-LE-NEXT: blr1171;1172; CHECK-P8-BE-LABEL: ld_align32_int16_t_uint64_t:1173; CHECK-P8-BE: # %bb.0: # %entry1174; CHECK-P8-BE-NEXT: lis r4, 15251175; CHECK-P8-BE-NEXT: ori r4, r4, 566061176; CHECK-P8-BE-NEXT: lhax r3, r3, r41177; CHECK-P8-BE-NEXT: blr1178entry:1179 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001180 %0 = load i64, ptr %add.ptr, align 81181 %conv = trunc i64 %0 to i161182 ret i16 %conv1183}1184 1185; Function Attrs: norecurse nounwind readonly uwtable willreturn1186define dso_local signext i16 @ld_align64_int16_t_uint64_t(ptr nocapture readonly %ptr) {1187; CHECK-P10-LE-LABEL: ld_align64_int16_t_uint64_t:1188; CHECK-P10-LE: # %bb.0: # %entry1189; CHECK-P10-LE-NEXT: pli r4, 2441406251190; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 241191; CHECK-P10-LE-NEXT: lhax r3, r3, r41192; CHECK-P10-LE-NEXT: blr1193;1194; CHECK-P10-BE-LABEL: ld_align64_int16_t_uint64_t:1195; CHECK-P10-BE: # %bb.0: # %entry1196; CHECK-P10-BE-NEXT: pli r4, 2321197; CHECK-P10-BE-NEXT: pli r5, 35675873341198; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 01199; CHECK-P10-BE-NEXT: lhax r3, r3, r51200; CHECK-P10-BE-NEXT: blr1201;1202; CHECK-P9-LE-LABEL: ld_align64_int16_t_uint64_t:1203; CHECK-P9-LE: # %bb.0: # %entry1204; CHECK-P9-LE-NEXT: lis r4, 37251205; CHECK-P9-LE-NEXT: ori r4, r4, 190251206; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 241207; CHECK-P9-LE-NEXT: lhax r3, r3, r41208; CHECK-P9-LE-NEXT: blr1209;1210; CHECK-P9-BE-LABEL: ld_align64_int16_t_uint64_t:1211; CHECK-P9-BE: # %bb.0: # %entry1212; CHECK-P9-BE-NEXT: li r4, 291213; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 241214; CHECK-P9-BE-NEXT: oris r4, r4, 544371215; CHECK-P9-BE-NEXT: ori r4, r4, 41021216; CHECK-P9-BE-NEXT: lhax r3, r3, r41217; CHECK-P9-BE-NEXT: blr1218;1219; CHECK-P8-LE-LABEL: ld_align64_int16_t_uint64_t:1220; CHECK-P8-LE: # %bb.0: # %entry1221; CHECK-P8-LE-NEXT: lis r4, 37251222; CHECK-P8-LE-NEXT: ori r4, r4, 190251223; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 241224; CHECK-P8-LE-NEXT: lhax r3, r3, r41225; CHECK-P8-LE-NEXT: blr1226;1227; CHECK-P8-BE-LABEL: ld_align64_int16_t_uint64_t:1228; CHECK-P8-BE: # %bb.0: # %entry1229; CHECK-P8-BE-NEXT: li r4, 291230; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 241231; CHECK-P8-BE-NEXT: oris r4, r4, 544371232; CHECK-P8-BE-NEXT: ori r4, r4, 41021233; CHECK-P8-BE-NEXT: lhax r3, r3, r41234; CHECK-P8-BE-NEXT: blr1235entry:1236 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001237 %0 = load i64, ptr %add.ptr, align 81238 %conv = trunc i64 %0 to i161239 ret i16 %conv1240}1241 1242; Function Attrs: norecurse nounwind readonly uwtable willreturn1243define dso_local signext i16 @ld_reg_int16_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {1244; CHECK-LE-LABEL: ld_reg_int16_t_uint64_t:1245; CHECK-LE: # %bb.0: # %entry1246; CHECK-LE-NEXT: lhax r3, r3, r41247; CHECK-LE-NEXT: blr1248;1249; CHECK-BE-LABEL: ld_reg_int16_t_uint64_t:1250; CHECK-BE: # %bb.0: # %entry1251; CHECK-BE-NEXT: add r3, r3, r41252; CHECK-BE-NEXT: lha r3, 6(r3)1253; CHECK-BE-NEXT: blr1254entry:1255 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1256 %0 = load i64, ptr %add.ptr, align 81257 %conv = trunc i64 %0 to i161258 ret i16 %conv1259}1260 1261; Function Attrs: norecurse nounwind readonly uwtable willreturn1262define dso_local signext i16 @ld_or_int16_t_uint64_t(i64 %ptr, i8 zeroext %off) {1263; CHECK-LE-LABEL: ld_or_int16_t_uint64_t:1264; CHECK-LE: # %bb.0: # %entry1265; CHECK-LE-NEXT: or r3, r4, r31266; CHECK-LE-NEXT: lha r3, 0(r3)1267; CHECK-LE-NEXT: blr1268;1269; CHECK-BE-LABEL: ld_or_int16_t_uint64_t:1270; CHECK-BE: # %bb.0: # %entry1271; CHECK-BE-NEXT: or r3, r4, r31272; CHECK-BE-NEXT: lha r3, 6(r3)1273; CHECK-BE-NEXT: blr1274entry:1275 %conv = zext i8 %off to i641276 %or = or i64 %conv, %ptr1277 %0 = inttoptr i64 %or to ptr1278 %1 = load i64, ptr %0, align 81279 %conv1 = trunc i64 %1 to i161280 ret i16 %conv11281}1282 1283; Function Attrs: norecurse nounwind readonly uwtable willreturn1284define dso_local signext i16 @ld_not_disjoint16_int16_t_uint64_t(i64 %ptr) {1285; CHECK-LE-LABEL: ld_not_disjoint16_int16_t_uint64_t:1286; CHECK-LE: # %bb.0: # %entry1287; CHECK-LE-NEXT: ori r3, r3, 61288; CHECK-LE-NEXT: lha r3, 0(r3)1289; CHECK-LE-NEXT: blr1290;1291; CHECK-BE-LABEL: ld_not_disjoint16_int16_t_uint64_t:1292; CHECK-BE: # %bb.0: # %entry1293; CHECK-BE-NEXT: ori r3, r3, 61294; CHECK-BE-NEXT: lha r3, 6(r3)1295; CHECK-BE-NEXT: blr1296entry:1297 %or = or i64 %ptr, 61298 %0 = inttoptr i64 %or to ptr1299 %1 = load i64, ptr %0, align 81300 %conv = trunc i64 %1 to i161301 ret i16 %conv1302}1303 1304; Function Attrs: norecurse nounwind readonly uwtable willreturn1305define dso_local signext i16 @ld_disjoint_align16_int16_t_uint64_t(i64 %ptr) {1306; CHECK-LE-LABEL: ld_disjoint_align16_int16_t_uint64_t:1307; CHECK-LE: # %bb.0: # %entry1308; CHECK-LE-NEXT: rldicr r3, r3, 0, 511309; CHECK-LE-NEXT: lha r3, 24(r3)1310; CHECK-LE-NEXT: blr1311;1312; CHECK-BE-LABEL: ld_disjoint_align16_int16_t_uint64_t:1313; CHECK-BE: # %bb.0: # %entry1314; CHECK-BE-NEXT: rldicr r3, r3, 0, 511315; CHECK-BE-NEXT: lha r3, 30(r3)1316; CHECK-BE-NEXT: blr1317entry:1318 %and = and i64 %ptr, -40961319 %or = or i64 %and, 241320 %0 = inttoptr i64 %or to ptr1321 %1 = load i64, ptr %0, align 81322 %conv = trunc i64 %1 to i161323 ret i16 %conv1324}1325 1326; Function Attrs: norecurse nounwind readonly uwtable willreturn1327define dso_local signext i16 @ld_not_disjoint32_int16_t_uint64_t(i64 %ptr) {1328; CHECK-LE-LABEL: ld_not_disjoint32_int16_t_uint64_t:1329; CHECK-LE: # %bb.0: # %entry1330; CHECK-LE-NEXT: ori r3, r3, 344631331; CHECK-LE-NEXT: oris r3, r3, 11332; CHECK-LE-NEXT: lha r3, 0(r3)1333; CHECK-LE-NEXT: blr1334;1335; CHECK-BE-LABEL: ld_not_disjoint32_int16_t_uint64_t:1336; CHECK-BE: # %bb.0: # %entry1337; CHECK-BE-NEXT: ori r3, r3, 344631338; CHECK-BE-NEXT: oris r3, r3, 11339; CHECK-BE-NEXT: lha r3, 6(r3)1340; CHECK-BE-NEXT: blr1341entry:1342 %or = or i64 %ptr, 999991343 %0 = inttoptr i64 %or to ptr1344 %1 = load i64, ptr %0, align 81345 %conv = trunc i64 %1 to i161346 ret i16 %conv1347}1348 1349; Function Attrs: norecurse nounwind readonly uwtable willreturn1350define dso_local signext i16 @ld_disjoint_align32_int16_t_uint64_t(i64 %ptr) {1351; CHECK-P10-LE-LABEL: ld_disjoint_align32_int16_t_uint64_t:1352; CHECK-P10-LE: # %bb.0: # %entry1353; CHECK-P10-LE-NEXT: lis r4, -152641354; CHECK-P10-LE-NEXT: and r3, r3, r41355; CHECK-P10-LE-NEXT: plha r3, 999990000(r3), 01356; CHECK-P10-LE-NEXT: blr1357;1358; CHECK-P10-BE-LABEL: ld_disjoint_align32_int16_t_uint64_t:1359; CHECK-P10-BE: # %bb.0: # %entry1360; CHECK-P10-BE-NEXT: lis r4, -152641361; CHECK-P10-BE-NEXT: and r3, r3, r41362; CHECK-P10-BE-NEXT: plha r3, 999990006(r3), 01363; CHECK-P10-BE-NEXT: blr1364;1365; CHECK-P9-LE-LABEL: ld_disjoint_align32_int16_t_uint64_t:1366; CHECK-P9-LE: # %bb.0: # %entry1367; CHECK-P9-LE-NEXT: lis r4, -152641368; CHECK-P9-LE-NEXT: and r3, r3, r41369; CHECK-P9-LE-NEXT: lis r4, 152581370; CHECK-P9-LE-NEXT: ori r4, r4, 417121371; CHECK-P9-LE-NEXT: lhax r3, r3, r41372; CHECK-P9-LE-NEXT: blr1373;1374; CHECK-P9-BE-LABEL: ld_disjoint_align32_int16_t_uint64_t:1375; CHECK-P9-BE: # %bb.0: # %entry1376; CHECK-P9-BE-NEXT: lis r4, -152641377; CHECK-P9-BE-NEXT: and r3, r3, r41378; CHECK-P9-BE-NEXT: lis r4, 152581379; CHECK-P9-BE-NEXT: ori r4, r4, 417181380; CHECK-P9-BE-NEXT: lhax r3, r3, r41381; CHECK-P9-BE-NEXT: blr1382;1383; CHECK-P8-LE-LABEL: ld_disjoint_align32_int16_t_uint64_t:1384; CHECK-P8-LE: # %bb.0: # %entry1385; CHECK-P8-LE-NEXT: lis r4, -152641386; CHECK-P8-LE-NEXT: and r3, r3, r41387; CHECK-P8-LE-NEXT: lis r4, 152581388; CHECK-P8-LE-NEXT: ori r4, r4, 417121389; CHECK-P8-LE-NEXT: lhax r3, r3, r41390; CHECK-P8-LE-NEXT: blr1391;1392; CHECK-P8-BE-LABEL: ld_disjoint_align32_int16_t_uint64_t:1393; CHECK-P8-BE: # %bb.0: # %entry1394; CHECK-P8-BE-NEXT: lis r4, -152641395; CHECK-P8-BE-NEXT: and r3, r3, r41396; CHECK-P8-BE-NEXT: lis r4, 152581397; CHECK-P8-BE-NEXT: ori r4, r4, 417181398; CHECK-P8-BE-NEXT: lhax r3, r3, r41399; CHECK-P8-BE-NEXT: blr1400entry:1401 %and = and i64 %ptr, -10003415041402 %or = or i64 %and, 9999900001403 %0 = inttoptr i64 %or to ptr1404 %1 = load i64, ptr %0, align 161405 %conv = trunc i64 %1 to i161406 ret i16 %conv1407}1408 1409; Function Attrs: norecurse nounwind readonly uwtable willreturn1410define dso_local signext i16 @ld_not_disjoint64_int16_t_uint64_t(i64 %ptr) {1411; CHECK-P10-LE-LABEL: ld_not_disjoint64_int16_t_uint64_t:1412; CHECK-P10-LE: # %bb.0: # %entry1413; CHECK-P10-LE-NEXT: pli r4, 2321414; CHECK-P10-LE-NEXT: pli r5, 35675873291415; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 01416; CHECK-P10-LE-NEXT: or r3, r3, r51417; CHECK-P10-LE-NEXT: lha r3, 0(r3)1418; CHECK-P10-LE-NEXT: blr1419;1420; CHECK-P10-BE-LABEL: ld_not_disjoint64_int16_t_uint64_t:1421; CHECK-P10-BE: # %bb.0: # %entry1422; CHECK-P10-BE-NEXT: pli r4, 2321423; CHECK-P10-BE-NEXT: pli r5, 35675873291424; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 01425; CHECK-P10-BE-NEXT: or r3, r3, r51426; CHECK-P10-BE-NEXT: lha r3, 6(r3)1427; CHECK-P10-BE-NEXT: blr1428;1429; CHECK-P9-LE-LABEL: ld_not_disjoint64_int16_t_uint64_t:1430; CHECK-P9-LE: # %bb.0: # %entry1431; CHECK-P9-LE-NEXT: li r4, 291432; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 241433; CHECK-P9-LE-NEXT: oris r4, r4, 544371434; CHECK-P9-LE-NEXT: ori r4, r4, 40971435; CHECK-P9-LE-NEXT: or r3, r3, r41436; CHECK-P9-LE-NEXT: lha r3, 0(r3)1437; CHECK-P9-LE-NEXT: blr1438;1439; CHECK-P9-BE-LABEL: ld_not_disjoint64_int16_t_uint64_t:1440; CHECK-P9-BE: # %bb.0: # %entry1441; CHECK-P9-BE-NEXT: li r4, 291442; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 241443; CHECK-P9-BE-NEXT: oris r4, r4, 544371444; CHECK-P9-BE-NEXT: ori r4, r4, 40971445; CHECK-P9-BE-NEXT: or r3, r3, r41446; CHECK-P9-BE-NEXT: lha r3, 6(r3)1447; CHECK-P9-BE-NEXT: blr1448;1449; CHECK-P8-LE-LABEL: ld_not_disjoint64_int16_t_uint64_t:1450; CHECK-P8-LE: # %bb.0: # %entry1451; CHECK-P8-LE-NEXT: li r4, 291452; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 241453; CHECK-P8-LE-NEXT: oris r4, r4, 544371454; CHECK-P8-LE-NEXT: ori r4, r4, 40971455; CHECK-P8-LE-NEXT: or r3, r3, r41456; CHECK-P8-LE-NEXT: lha r3, 0(r3)1457; CHECK-P8-LE-NEXT: blr1458;1459; CHECK-P8-BE-LABEL: ld_not_disjoint64_int16_t_uint64_t:1460; CHECK-P8-BE: # %bb.0: # %entry1461; CHECK-P8-BE-NEXT: li r4, 291462; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 241463; CHECK-P8-BE-NEXT: oris r4, r4, 544371464; CHECK-P8-BE-NEXT: ori r4, r4, 40971465; CHECK-P8-BE-NEXT: or r3, r3, r41466; CHECK-P8-BE-NEXT: lha r3, 6(r3)1467; CHECK-P8-BE-NEXT: blr1468entry:1469 %or = or i64 %ptr, 10000000000011470 %0 = inttoptr i64 %or to ptr1471 %1 = load i64, ptr %0, align 81472 %conv = trunc i64 %1 to i161473 ret i16 %conv1474}1475 1476; Function Attrs: norecurse nounwind readonly uwtable willreturn1477define dso_local signext i16 @ld_disjoint_align64_int16_t_uint64_t(i64 %ptr) {1478; CHECK-P10-LE-LABEL: ld_disjoint_align64_int16_t_uint64_t:1479; CHECK-P10-LE: # %bb.0: # %entry1480; CHECK-P10-LE-NEXT: pli r4, 2441406251481; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 231482; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 241483; CHECK-P10-LE-NEXT: lhax r3, r3, r41484; CHECK-P10-LE-NEXT: blr1485;1486; CHECK-P10-BE-LABEL: ld_disjoint_align64_int16_t_uint64_t:1487; CHECK-P10-BE: # %bb.0: # %entry1488; CHECK-P10-BE-NEXT: pli r4, 2321489; CHECK-P10-BE-NEXT: pli r5, 35675873341490; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 231491; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 01492; CHECK-P10-BE-NEXT: lhax r3, r3, r51493; CHECK-P10-BE-NEXT: blr1494;1495; CHECK-P9-LE-LABEL: ld_disjoint_align64_int16_t_uint64_t:1496; CHECK-P9-LE: # %bb.0: # %entry1497; CHECK-P9-LE-NEXT: lis r4, 37251498; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 231499; CHECK-P9-LE-NEXT: ori r4, r4, 190251500; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 241501; CHECK-P9-LE-NEXT: lhax r3, r3, r41502; CHECK-P9-LE-NEXT: blr1503;1504; CHECK-P9-BE-LABEL: ld_disjoint_align64_int16_t_uint64_t:1505; CHECK-P9-BE: # %bb.0: # %entry1506; CHECK-P9-BE-NEXT: li r4, 291507; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 231508; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 241509; CHECK-P9-BE-NEXT: oris r4, r4, 544371510; CHECK-P9-BE-NEXT: ori r4, r4, 41021511; CHECK-P9-BE-NEXT: lhax r3, r3, r41512; CHECK-P9-BE-NEXT: blr1513;1514; CHECK-P8-LE-LABEL: ld_disjoint_align64_int16_t_uint64_t:1515; CHECK-P8-LE: # %bb.0: # %entry1516; CHECK-P8-LE-NEXT: lis r4, 37251517; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 231518; CHECK-P8-LE-NEXT: ori r4, r4, 190251519; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 241520; CHECK-P8-LE-NEXT: lhax r3, r3, r41521; CHECK-P8-LE-NEXT: blr1522;1523; CHECK-P8-BE-LABEL: ld_disjoint_align64_int16_t_uint64_t:1524; CHECK-P8-BE: # %bb.0: # %entry1525; CHECK-P8-BE-NEXT: li r4, 291526; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 231527; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 241528; CHECK-P8-BE-NEXT: oris r4, r4, 544371529; CHECK-P8-BE-NEXT: ori r4, r4, 41021530; CHECK-P8-BE-NEXT: lhax r3, r3, r41531; CHECK-P8-BE-NEXT: blr1532entry:1533 %and = and i64 %ptr, -10995116277761534 %or = or i64 %and, 10000000000001535 %0 = inttoptr i64 %or to ptr1536 %1 = load i64, ptr %0, align 40961537 %conv = trunc i64 %1 to i161538 ret i16 %conv1539}1540 1541; Function Attrs: norecurse nounwind readonly uwtable willreturn1542define dso_local signext i16 @ld_cst_align16_int16_t_uint64_t() {1543; CHECK-LE-LABEL: ld_cst_align16_int16_t_uint64_t:1544; CHECK-LE: # %bb.0: # %entry1545; CHECK-LE-NEXT: lha r3, 4080(0)1546; CHECK-LE-NEXT: blr1547;1548; CHECK-BE-LABEL: ld_cst_align16_int16_t_uint64_t:1549; CHECK-BE: # %bb.0: # %entry1550; CHECK-BE-NEXT: lha r3, 4086(0)1551; CHECK-BE-NEXT: blr1552entry:1553 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 161554 %conv = trunc i64 %0 to i161555 ret i16 %conv1556}1557 1558; Function Attrs: norecurse nounwind readonly uwtable willreturn1559define dso_local signext i16 @ld_cst_align32_int16_t_uint64_t() {1560; CHECK-LE-LABEL: ld_cst_align32_int16_t_uint64_t:1561; CHECK-LE: # %bb.0: # %entry1562; CHECK-LE-NEXT: lis r3, 1531563; CHECK-LE-NEXT: lha r3, -27108(r3)1564; CHECK-LE-NEXT: blr1565;1566; CHECK-BE-LABEL: ld_cst_align32_int16_t_uint64_t:1567; CHECK-BE: # %bb.0: # %entry1568; CHECK-BE-NEXT: lis r3, 1531569; CHECK-BE-NEXT: lha r3, -27102(r3)1570; CHECK-BE-NEXT: blr1571entry:1572 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 81573 %conv = trunc i64 %0 to i161574 ret i16 %conv1575}1576 1577; Function Attrs: norecurse nounwind readonly uwtable willreturn1578define dso_local signext i16 @ld_cst_align64_int16_t_uint64_t() {1579; CHECK-P10-LE-LABEL: ld_cst_align64_int16_t_uint64_t:1580; CHECK-P10-LE: # %bb.0: # %entry1581; CHECK-P10-LE-NEXT: pli r3, 2441406251582; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 241583; CHECK-P10-LE-NEXT: lha r3, 0(r3)1584; CHECK-P10-LE-NEXT: blr1585;1586; CHECK-P10-BE-LABEL: ld_cst_align64_int16_t_uint64_t:1587; CHECK-P10-BE: # %bb.0: # %entry1588; CHECK-P10-BE-NEXT: pli r3, 2321589; CHECK-P10-BE-NEXT: pli r4, 35675873341590; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 01591; CHECK-P10-BE-NEXT: lha r3, 0(r4)1592; CHECK-P10-BE-NEXT: blr1593;1594; CHECK-P9-LE-LABEL: ld_cst_align64_int16_t_uint64_t:1595; CHECK-P9-LE: # %bb.0: # %entry1596; CHECK-P9-LE-NEXT: lis r3, 37251597; CHECK-P9-LE-NEXT: ori r3, r3, 190251598; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 241599; CHECK-P9-LE-NEXT: lha r3, 0(r3)1600; CHECK-P9-LE-NEXT: blr1601;1602; CHECK-P9-BE-LABEL: ld_cst_align64_int16_t_uint64_t:1603; CHECK-P9-BE: # %bb.0: # %entry1604; CHECK-P9-BE-NEXT: li r3, 291605; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 241606; CHECK-P9-BE-NEXT: oris r3, r3, 544371607; CHECK-P9-BE-NEXT: ori r3, r3, 41021608; CHECK-P9-BE-NEXT: lha r3, 0(r3)1609; CHECK-P9-BE-NEXT: blr1610;1611; CHECK-P8-LE-LABEL: ld_cst_align64_int16_t_uint64_t:1612; CHECK-P8-LE: # %bb.0: # %entry1613; CHECK-P8-LE-NEXT: lis r3, 37251614; CHECK-P8-LE-NEXT: ori r3, r3, 190251615; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 241616; CHECK-P8-LE-NEXT: lha r3, 0(r3)1617; CHECK-P8-LE-NEXT: blr1618;1619; CHECK-P8-BE-LABEL: ld_cst_align64_int16_t_uint64_t:1620; CHECK-P8-BE: # %bb.0: # %entry1621; CHECK-P8-BE-NEXT: li r3, 291622; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 241623; CHECK-P8-BE-NEXT: oris r3, r3, 544371624; CHECK-P8-BE-NEXT: ori r3, r3, 41021625; CHECK-P8-BE-NEXT: lha r3, 0(r3)1626; CHECK-P8-BE-NEXT: blr1627entry:1628 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 40961629 %conv = trunc i64 %0 to i161630 ret i16 %conv1631}1632 1633; Function Attrs: norecurse nounwind readonly uwtable willreturn1634define dso_local signext i16 @ld_0_int16_t_float(i64 %ptr) {1635; CHECK-LABEL: ld_0_int16_t_float:1636; CHECK: # %bb.0: # %entry1637; CHECK-NEXT: lfs f0, 0(r3)1638; CHECK-NEXT: xscvdpsxws f0, f01639; CHECK-NEXT: mffprwz r3, f01640; CHECK-NEXT: extsw r3, r31641; CHECK-NEXT: blr1642entry:1643 %0 = inttoptr i64 %ptr to ptr1644 %1 = load float, ptr %0, align 41645 %conv = fptosi float %1 to i161646 ret i16 %conv1647}1648 1649; Function Attrs: norecurse nounwind readonly uwtable willreturn1650define dso_local signext i16 @ld_align16_int16_t_float(ptr nocapture readonly %ptr) {1651; CHECK-LABEL: ld_align16_int16_t_float:1652; CHECK: # %bb.0: # %entry1653; CHECK-NEXT: lfs f0, 8(r3)1654; CHECK-NEXT: xscvdpsxws f0, f01655; CHECK-NEXT: mffprwz r3, f01656; CHECK-NEXT: extsw r3, r31657; CHECK-NEXT: blr1658entry:1659 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81660 %0 = load float, ptr %add.ptr, align 41661 %conv = fptosi float %0 to i161662 ret i16 %conv1663}1664 1665; Function Attrs: norecurse nounwind readonly uwtable willreturn1666define dso_local signext i16 @ld_align32_int16_t_float(ptr nocapture readonly %ptr) {1667; CHECK-P10-LABEL: ld_align32_int16_t_float:1668; CHECK-P10: # %bb.0: # %entry1669; CHECK-P10-NEXT: plfs f0, 99999000(r3), 01670; CHECK-P10-NEXT: xscvdpsxws f0, f01671; CHECK-P10-NEXT: mffprwz r3, f01672; CHECK-P10-NEXT: extsw r3, r31673; CHECK-P10-NEXT: blr1674;1675; CHECK-PREP10-LABEL: ld_align32_int16_t_float:1676; CHECK-PREP10: # %bb.0: # %entry1677; CHECK-PREP10-NEXT: lis r4, 15251678; CHECK-PREP10-NEXT: ori r4, r4, 566001679; CHECK-PREP10-NEXT: lfsx f0, r3, r41680; CHECK-PREP10-NEXT: xscvdpsxws f0, f01681; CHECK-PREP10-NEXT: mffprwz r3, f01682; CHECK-PREP10-NEXT: extsw r3, r31683; CHECK-PREP10-NEXT: blr1684entry:1685 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990001686 %0 = load float, ptr %add.ptr, align 41687 %conv = fptosi float %0 to i161688 ret i16 %conv1689}1690 1691; Function Attrs: norecurse nounwind readonly uwtable willreturn1692define dso_local signext i16 @ld_align64_int16_t_float(ptr nocapture readonly %ptr) {1693; CHECK-P10-LABEL: ld_align64_int16_t_float:1694; CHECK-P10: # %bb.0: # %entry1695; CHECK-P10-NEXT: pli r4, 2441406251696; CHECK-P10-NEXT: rldic r4, r4, 12, 241697; CHECK-P10-NEXT: lfsx f0, r3, r41698; CHECK-P10-NEXT: xscvdpsxws f0, f01699; CHECK-P10-NEXT: mffprwz r3, f01700; CHECK-P10-NEXT: extsw r3, r31701; CHECK-P10-NEXT: blr1702;1703; CHECK-PREP10-LABEL: ld_align64_int16_t_float:1704; CHECK-PREP10: # %bb.0: # %entry1705; CHECK-PREP10-NEXT: lis r4, 37251706; CHECK-PREP10-NEXT: ori r4, r4, 190251707; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241708; CHECK-PREP10-NEXT: lfsx f0, r3, r41709; CHECK-PREP10-NEXT: xscvdpsxws f0, f01710; CHECK-PREP10-NEXT: mffprwz r3, f01711; CHECK-PREP10-NEXT: extsw r3, r31712; CHECK-PREP10-NEXT: blr1713entry:1714 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000001715 %0 = load float, ptr %add.ptr, align 41716 %conv = fptosi float %0 to i161717 ret i16 %conv1718}1719 1720; Function Attrs: norecurse nounwind readonly uwtable willreturn1721define dso_local signext i16 @ld_reg_int16_t_float(ptr nocapture readonly %ptr, i64 %off) {1722; CHECK-LABEL: ld_reg_int16_t_float:1723; CHECK: # %bb.0: # %entry1724; CHECK-NEXT: lfsx f0, r3, r41725; CHECK-NEXT: xscvdpsxws f0, f01726; CHECK-NEXT: mffprwz r3, f01727; CHECK-NEXT: extsw r3, r31728; CHECK-NEXT: blr1729entry:1730 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off1731 %0 = load float, ptr %add.ptr, align 41732 %conv = fptosi float %0 to i161733 ret i16 %conv1734}1735 1736; Function Attrs: norecurse nounwind readonly uwtable willreturn1737define dso_local signext i16 @ld_or_int16_t_float(i64 %ptr, i8 zeroext %off) {1738; CHECK-LABEL: ld_or_int16_t_float:1739; CHECK: # %bb.0: # %entry1740; CHECK-NEXT: or r3, r4, r31741; CHECK-NEXT: lfs f0, 0(r3)1742; CHECK-NEXT: xscvdpsxws f0, f01743; CHECK-NEXT: mffprwz r3, f01744; CHECK-NEXT: extsw r3, r31745; CHECK-NEXT: blr1746entry:1747 %conv = zext i8 %off to i641748 %or = or i64 %conv, %ptr1749 %0 = inttoptr i64 %or to ptr1750 %1 = load float, ptr %0, align 41751 %conv1 = fptosi float %1 to i161752 ret i16 %conv11753}1754 1755; Function Attrs: norecurse nounwind readonly uwtable willreturn1756define dso_local signext i16 @ld_not_disjoint16_int16_t_float(i64 %ptr) {1757; CHECK-LABEL: ld_not_disjoint16_int16_t_float:1758; CHECK: # %bb.0: # %entry1759; CHECK-NEXT: ori r3, r3, 61760; CHECK-NEXT: lfs f0, 0(r3)1761; CHECK-NEXT: xscvdpsxws f0, f01762; CHECK-NEXT: mffprwz r3, f01763; CHECK-NEXT: extsw r3, r31764; CHECK-NEXT: blr1765entry:1766 %or = or i64 %ptr, 61767 %0 = inttoptr i64 %or to ptr1768 %1 = load float, ptr %0, align 41769 %conv = fptosi float %1 to i161770 ret i16 %conv1771}1772 1773; Function Attrs: norecurse nounwind readonly uwtable willreturn1774define dso_local signext i16 @ld_disjoint_align16_int16_t_float(i64 %ptr) {1775; CHECK-LABEL: ld_disjoint_align16_int16_t_float:1776; CHECK: # %bb.0: # %entry1777; CHECK-NEXT: rldicr r3, r3, 0, 511778; CHECK-NEXT: lfs f0, 24(r3)1779; CHECK-NEXT: xscvdpsxws f0, f01780; CHECK-NEXT: mffprwz r3, f01781; CHECK-NEXT: extsw r3, r31782; CHECK-NEXT: blr1783entry:1784 %and = and i64 %ptr, -40961785 %or = or i64 %and, 241786 %0 = inttoptr i64 %or to ptr1787 %1 = load float, ptr %0, align 81788 %conv = fptosi float %1 to i161789 ret i16 %conv1790}1791 1792; Function Attrs: norecurse nounwind readonly uwtable willreturn1793define dso_local signext i16 @ld_not_disjoint32_int16_t_float(i64 %ptr) {1794; CHECK-LABEL: ld_not_disjoint32_int16_t_float:1795; CHECK: # %bb.0: # %entry1796; CHECK-NEXT: ori r3, r3, 344631797; CHECK-NEXT: oris r3, r3, 11798; CHECK-NEXT: lfs f0, 0(r3)1799; CHECK-NEXT: xscvdpsxws f0, f01800; CHECK-NEXT: mffprwz r3, f01801; CHECK-NEXT: extsw r3, r31802; CHECK-NEXT: blr1803entry:1804 %or = or i64 %ptr, 999991805 %0 = inttoptr i64 %or to ptr1806 %1 = load float, ptr %0, align 41807 %conv = fptosi float %1 to i161808 ret i16 %conv1809}1810 1811; Function Attrs: norecurse nounwind readonly uwtable willreturn1812define dso_local signext i16 @ld_disjoint_align32_int16_t_float(i64 %ptr) {1813; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_float:1814; CHECK-P10: # %bb.0: # %entry1815; CHECK-P10-NEXT: lis r4, -152641816; CHECK-P10-NEXT: and r3, r3, r41817; CHECK-P10-NEXT: plfs f0, 999990000(r3), 01818; CHECK-P10-NEXT: xscvdpsxws f0, f01819; CHECK-P10-NEXT: mffprwz r3, f01820; CHECK-P10-NEXT: extsw r3, r31821; CHECK-P10-NEXT: blr1822;1823; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_float:1824; CHECK-PREP10: # %bb.0: # %entry1825; CHECK-PREP10-NEXT: lis r4, -152641826; CHECK-PREP10-NEXT: and r3, r3, r41827; CHECK-PREP10-NEXT: lis r4, 152581828; CHECK-PREP10-NEXT: ori r4, r4, 417121829; CHECK-PREP10-NEXT: lfsx f0, r3, r41830; CHECK-PREP10-NEXT: xscvdpsxws f0, f01831; CHECK-PREP10-NEXT: mffprwz r3, f01832; CHECK-PREP10-NEXT: extsw r3, r31833; CHECK-PREP10-NEXT: blr1834entry:1835 %and = and i64 %ptr, -10003415041836 %or = or i64 %and, 9999900001837 %0 = inttoptr i64 %or to ptr1838 %1 = load float, ptr %0, align 161839 %conv = fptosi float %1 to i161840 ret i16 %conv1841}1842 1843; Function Attrs: norecurse nounwind readonly uwtable willreturn1844define dso_local signext i16 @ld_not_disjoint64_int16_t_float(i64 %ptr) {1845; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_float:1846; CHECK-P10: # %bb.0: # %entry1847; CHECK-P10-NEXT: pli r4, 2321848; CHECK-P10-NEXT: pli r5, 35675873291849; CHECK-P10-NEXT: rldimi r5, r4, 32, 01850; CHECK-P10-NEXT: or r3, r3, r51851; CHECK-P10-NEXT: lfs f0, 0(r3)1852; CHECK-P10-NEXT: xscvdpsxws f0, f01853; CHECK-P10-NEXT: mffprwz r3, f01854; CHECK-P10-NEXT: extsw r3, r31855; CHECK-P10-NEXT: blr1856;1857; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_float:1858; CHECK-PREP10: # %bb.0: # %entry1859; CHECK-PREP10-NEXT: li r4, 291860; CHECK-PREP10-NEXT: rldic r4, r4, 35, 241861; CHECK-PREP10-NEXT: oris r4, r4, 544371862; CHECK-PREP10-NEXT: ori r4, r4, 40971863; CHECK-PREP10-NEXT: or r3, r3, r41864; CHECK-PREP10-NEXT: lfs f0, 0(r3)1865; CHECK-PREP10-NEXT: xscvdpsxws f0, f01866; CHECK-PREP10-NEXT: mffprwz r3, f01867; CHECK-PREP10-NEXT: extsw r3, r31868; CHECK-PREP10-NEXT: blr1869entry:1870 %or = or i64 %ptr, 10000000000011871 %0 = inttoptr i64 %or to ptr1872 %1 = load float, ptr %0, align 41873 %conv = fptosi float %1 to i161874 ret i16 %conv1875}1876 1877 1878; Function Attrs: norecurse nounwind readonly uwtable willreturn1879define dso_local signext i16 @ld_disjoint_align64_int16_t_float(i64 %ptr) {1880; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_float:1881; CHECK-P10: # %bb.0: # %entry1882; CHECK-P10-NEXT: pli r4, 2441406251883; CHECK-P10-NEXT: rldicr r3, r3, 0, 231884; CHECK-P10-NEXT: rldic r4, r4, 12, 241885; CHECK-P10-NEXT: lfsx f0, r3, r41886; CHECK-P10-NEXT: xscvdpsxws f0, f01887; CHECK-P10-NEXT: mffprwz r3, f01888; CHECK-P10-NEXT: extsw r3, r31889; CHECK-P10-NEXT: blr1890;1891; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_float:1892; CHECK-PREP10: # %bb.0: # %entry1893; CHECK-PREP10-NEXT: lis r4, 37251894; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 231895; CHECK-PREP10-NEXT: ori r4, r4, 190251896; CHECK-PREP10-NEXT: rldic r4, r4, 12, 241897; CHECK-PREP10-NEXT: lfsx f0, r3, r41898; CHECK-PREP10-NEXT: xscvdpsxws f0, f01899; CHECK-PREP10-NEXT: mffprwz r3, f01900; CHECK-PREP10-NEXT: extsw r3, r31901; CHECK-PREP10-NEXT: blr1902entry:1903 %and = and i64 %ptr, -10995116277761904 %or = or i64 %and, 10000000000001905 %0 = inttoptr i64 %or to ptr1906 %1 = load float, ptr %0, align 40961907 %conv = fptosi float %1 to i161908 ret i16 %conv1909}1910 1911; Function Attrs: norecurse nounwind readonly uwtable willreturn1912define dso_local signext i16 @ld_cst_align16_int16_t_float() {1913; CHECK-LABEL: ld_cst_align16_int16_t_float:1914; CHECK: # %bb.0: # %entry1915; CHECK-NEXT: lfs f0, 4080(0)1916; CHECK-NEXT: xscvdpsxws f0, f01917; CHECK-NEXT: mffprwz r3, f01918; CHECK-NEXT: extsw r3, r31919; CHECK-NEXT: blr1920entry:1921 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 161922 %conv = fptosi float %0 to i161923 ret i16 %conv1924}1925 1926; Function Attrs: norecurse nounwind readonly uwtable willreturn1927define dso_local signext i16 @ld_cst_align32_int16_t_float() {1928; CHECK-LABEL: ld_cst_align32_int16_t_float:1929; CHECK: # %bb.0: # %entry1930; CHECK-NEXT: lis r3, 1531931; CHECK-NEXT: lfs f0, -27108(r3)1932; CHECK-NEXT: xscvdpsxws f0, f01933; CHECK-NEXT: mffprwz r3, f01934; CHECK-NEXT: extsw r3, r31935; CHECK-NEXT: blr1936entry:1937 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 41938 %conv = fptosi float %0 to i161939 ret i16 %conv1940}1941 1942; Function Attrs: norecurse nounwind readonly uwtable willreturn1943define dso_local signext i16 @ld_cst_align64_int16_t_float() {1944; CHECK-P10-LABEL: ld_cst_align64_int16_t_float:1945; CHECK-P10: # %bb.0: # %entry1946; CHECK-P10-NEXT: pli r3, 2441406251947; CHECK-P10-NEXT: rldic r3, r3, 12, 241948; CHECK-P10-NEXT: lfs f0, 0(r3)1949; CHECK-P10-NEXT: xscvdpsxws f0, f01950; CHECK-P10-NEXT: mffprwz r3, f01951; CHECK-P10-NEXT: extsw r3, r31952; CHECK-P10-NEXT: blr1953;1954; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_float:1955; CHECK-PREP10: # %bb.0: # %entry1956; CHECK-PREP10-NEXT: lis r3, 37251957; CHECK-PREP10-NEXT: ori r3, r3, 190251958; CHECK-PREP10-NEXT: rldic r3, r3, 12, 241959; CHECK-PREP10-NEXT: lfs f0, 0(r3)1960; CHECK-PREP10-NEXT: xscvdpsxws f0, f01961; CHECK-PREP10-NEXT: mffprwz r3, f01962; CHECK-PREP10-NEXT: extsw r3, r31963; CHECK-PREP10-NEXT: blr1964entry:1965 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 40961966 %conv = fptosi float %0 to i161967 ret i16 %conv1968}1969 1970; Function Attrs: norecurse nounwind readonly uwtable willreturn1971define dso_local signext i16 @ld_0_int16_t_double(i64 %ptr) {1972; CHECK-LABEL: ld_0_int16_t_double:1973; CHECK: # %bb.0: # %entry1974; CHECK-NEXT: lfd f0, 0(r3)1975; CHECK-NEXT: xscvdpsxws f0, f01976; CHECK-NEXT: mffprwz r3, f01977; CHECK-NEXT: extsw r3, r31978; CHECK-NEXT: blr1979entry:1980 %0 = inttoptr i64 %ptr to ptr1981 %1 = load double, ptr %0, align 81982 %conv = fptosi double %1 to i161983 ret i16 %conv1984}1985 1986; Function Attrs: norecurse nounwind readonly uwtable willreturn1987define dso_local signext i16 @ld_align16_int16_t_double(ptr nocapture readonly %ptr) {1988; CHECK-LABEL: ld_align16_int16_t_double:1989; CHECK: # %bb.0: # %entry1990; CHECK-NEXT: lfd f0, 8(r3)1991; CHECK-NEXT: xscvdpsxws f0, f01992; CHECK-NEXT: mffprwz r3, f01993; CHECK-NEXT: extsw r3, r31994; CHECK-NEXT: blr1995entry:1996 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 81997 %0 = load double, ptr %add.ptr, align 81998 %conv = fptosi double %0 to i161999 ret i16 %conv2000}2001 2002; Function Attrs: norecurse nounwind readonly uwtable willreturn2003define dso_local signext i16 @ld_align32_int16_t_double(ptr nocapture readonly %ptr) {2004; CHECK-P10-LABEL: ld_align32_int16_t_double:2005; CHECK-P10: # %bb.0: # %entry2006; CHECK-P10-NEXT: plfd f0, 99999000(r3), 02007; CHECK-P10-NEXT: xscvdpsxws f0, f02008; CHECK-P10-NEXT: mffprwz r3, f02009; CHECK-P10-NEXT: extsw r3, r32010; CHECK-P10-NEXT: blr2011;2012; CHECK-PREP10-LABEL: ld_align32_int16_t_double:2013; CHECK-PREP10: # %bb.0: # %entry2014; CHECK-PREP10-NEXT: lis r4, 15252015; CHECK-PREP10-NEXT: ori r4, r4, 566002016; CHECK-PREP10-NEXT: lfdx f0, r3, r42017; CHECK-PREP10-NEXT: xscvdpsxws f0, f02018; CHECK-PREP10-NEXT: mffprwz r3, f02019; CHECK-PREP10-NEXT: extsw r3, r32020; CHECK-PREP10-NEXT: blr2021entry:2022 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002023 %0 = load double, ptr %add.ptr, align 82024 %conv = fptosi double %0 to i162025 ret i16 %conv2026}2027 2028; Function Attrs: norecurse nounwind readonly uwtable willreturn2029define dso_local signext i16 @ld_align64_int16_t_double(ptr nocapture readonly %ptr) {2030; CHECK-P10-LABEL: ld_align64_int16_t_double:2031; CHECK-P10: # %bb.0: # %entry2032; CHECK-P10-NEXT: pli r4, 2441406252033; CHECK-P10-NEXT: rldic r4, r4, 12, 242034; CHECK-P10-NEXT: lfdx f0, r3, r42035; CHECK-P10-NEXT: xscvdpsxws f0, f02036; CHECK-P10-NEXT: mffprwz r3, f02037; CHECK-P10-NEXT: extsw r3, r32038; CHECK-P10-NEXT: blr2039;2040; CHECK-PREP10-LABEL: ld_align64_int16_t_double:2041; CHECK-PREP10: # %bb.0: # %entry2042; CHECK-PREP10-NEXT: lis r4, 37252043; CHECK-PREP10-NEXT: ori r4, r4, 190252044; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242045; CHECK-PREP10-NEXT: lfdx f0, r3, r42046; CHECK-PREP10-NEXT: xscvdpsxws f0, f02047; CHECK-PREP10-NEXT: mffprwz r3, f02048; CHECK-PREP10-NEXT: extsw r3, r32049; CHECK-PREP10-NEXT: blr2050entry:2051 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002052 %0 = load double, ptr %add.ptr, align 82053 %conv = fptosi double %0 to i162054 ret i16 %conv2055}2056 2057; Function Attrs: norecurse nounwind readonly uwtable willreturn2058define dso_local signext i16 @ld_reg_int16_t_double(ptr nocapture readonly %ptr, i64 %off) {2059; CHECK-LABEL: ld_reg_int16_t_double:2060; CHECK: # %bb.0: # %entry2061; CHECK-NEXT: lfdx f0, r3, r42062; CHECK-NEXT: xscvdpsxws f0, f02063; CHECK-NEXT: mffprwz r3, f02064; CHECK-NEXT: extsw r3, r32065; CHECK-NEXT: blr2066entry:2067 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2068 %0 = load double, ptr %add.ptr, align 82069 %conv = fptosi double %0 to i162070 ret i16 %conv2071}2072 2073; Function Attrs: norecurse nounwind readonly uwtable willreturn2074define dso_local signext i16 @ld_or_int16_t_double(i64 %ptr, i8 zeroext %off) {2075; CHECK-LABEL: ld_or_int16_t_double:2076; CHECK: # %bb.0: # %entry2077; CHECK-NEXT: or r3, r4, r32078; CHECK-NEXT: lfd f0, 0(r3)2079; CHECK-NEXT: xscvdpsxws f0, f02080; CHECK-NEXT: mffprwz r3, f02081; CHECK-NEXT: extsw r3, r32082; CHECK-NEXT: blr2083entry:2084 %conv = zext i8 %off to i642085 %or = or i64 %conv, %ptr2086 %0 = inttoptr i64 %or to ptr2087 %1 = load double, ptr %0, align 82088 %conv1 = fptosi double %1 to i162089 ret i16 %conv12090}2091 2092; Function Attrs: norecurse nounwind readonly uwtable willreturn2093define dso_local signext i16 @ld_not_disjoint16_int16_t_double(i64 %ptr) {2094; CHECK-LABEL: ld_not_disjoint16_int16_t_double:2095; CHECK: # %bb.0: # %entry2096; CHECK-NEXT: ori r3, r3, 62097; CHECK-NEXT: lfd f0, 0(r3)2098; CHECK-NEXT: xscvdpsxws f0, f02099; CHECK-NEXT: mffprwz r3, f02100; CHECK-NEXT: extsw r3, r32101; CHECK-NEXT: blr2102entry:2103 %or = or i64 %ptr, 62104 %0 = inttoptr i64 %or to ptr2105 %1 = load double, ptr %0, align 82106 %conv = fptosi double %1 to i162107 ret i16 %conv2108}2109 2110; Function Attrs: norecurse nounwind readonly uwtable willreturn2111define dso_local signext i16 @ld_disjoint_align16_int16_t_double(i64 %ptr) {2112; CHECK-LABEL: ld_disjoint_align16_int16_t_double:2113; CHECK: # %bb.0: # %entry2114; CHECK-NEXT: rldicr r3, r3, 0, 512115; CHECK-NEXT: lfd f0, 24(r3)2116; CHECK-NEXT: xscvdpsxws f0, f02117; CHECK-NEXT: mffprwz r3, f02118; CHECK-NEXT: extsw r3, r32119; CHECK-NEXT: blr2120entry:2121 %and = and i64 %ptr, -40962122 %or = or i64 %and, 242123 %0 = inttoptr i64 %or to ptr2124 %1 = load double, ptr %0, align 82125 %conv = fptosi double %1 to i162126 ret i16 %conv2127}2128 2129; Function Attrs: norecurse nounwind readonly uwtable willreturn2130define dso_local signext i16 @ld_not_disjoint32_int16_t_double(i64 %ptr) {2131; CHECK-LABEL: ld_not_disjoint32_int16_t_double:2132; CHECK: # %bb.0: # %entry2133; CHECK-NEXT: ori r3, r3, 344632134; CHECK-NEXT: oris r3, r3, 12135; CHECK-NEXT: lfd f0, 0(r3)2136; CHECK-NEXT: xscvdpsxws f0, f02137; CHECK-NEXT: mffprwz r3, f02138; CHECK-NEXT: extsw r3, r32139; CHECK-NEXT: blr2140entry:2141 %or = or i64 %ptr, 999992142 %0 = inttoptr i64 %or to ptr2143 %1 = load double, ptr %0, align 82144 %conv = fptosi double %1 to i162145 ret i16 %conv2146}2147 2148; Function Attrs: norecurse nounwind readonly uwtable willreturn2149define dso_local signext i16 @ld_disjoint_align32_int16_t_double(i64 %ptr) {2150; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_double:2151; CHECK-P10: # %bb.0: # %entry2152; CHECK-P10-NEXT: lis r4, -152642153; CHECK-P10-NEXT: and r3, r3, r42154; CHECK-P10-NEXT: plfd f0, 999990000(r3), 02155; CHECK-P10-NEXT: xscvdpsxws f0, f02156; CHECK-P10-NEXT: mffprwz r3, f02157; CHECK-P10-NEXT: extsw r3, r32158; CHECK-P10-NEXT: blr2159;2160; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_double:2161; CHECK-PREP10: # %bb.0: # %entry2162; CHECK-PREP10-NEXT: lis r4, -152642163; CHECK-PREP10-NEXT: and r3, r3, r42164; CHECK-PREP10-NEXT: lis r4, 152582165; CHECK-PREP10-NEXT: ori r4, r4, 417122166; CHECK-PREP10-NEXT: lfdx f0, r3, r42167; CHECK-PREP10-NEXT: xscvdpsxws f0, f02168; CHECK-PREP10-NEXT: mffprwz r3, f02169; CHECK-PREP10-NEXT: extsw r3, r32170; CHECK-PREP10-NEXT: blr2171entry:2172 %and = and i64 %ptr, -10003415042173 %or = or i64 %and, 9999900002174 %0 = inttoptr i64 %or to ptr2175 %1 = load double, ptr %0, align 162176 %conv = fptosi double %1 to i162177 ret i16 %conv2178}2179 2180; Function Attrs: norecurse nounwind readonly uwtable willreturn2181define dso_local signext i16 @ld_not_disjoint64_int16_t_double(i64 %ptr) {2182; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_double:2183; CHECK-P10: # %bb.0: # %entry2184; CHECK-P10-NEXT: pli r4, 2322185; CHECK-P10-NEXT: pli r5, 35675873292186; CHECK-P10-NEXT: rldimi r5, r4, 32, 02187; CHECK-P10-NEXT: or r3, r3, r52188; CHECK-P10-NEXT: lfd f0, 0(r3)2189; CHECK-P10-NEXT: xscvdpsxws f0, f02190; CHECK-P10-NEXT: mffprwz r3, f02191; CHECK-P10-NEXT: extsw r3, r32192; CHECK-P10-NEXT: blr2193;2194; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_double:2195; CHECK-PREP10: # %bb.0: # %entry2196; CHECK-PREP10-NEXT: li r4, 292197; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242198; CHECK-PREP10-NEXT: oris r4, r4, 544372199; CHECK-PREP10-NEXT: ori r4, r4, 40972200; CHECK-PREP10-NEXT: or r3, r3, r42201; CHECK-PREP10-NEXT: lfd f0, 0(r3)2202; CHECK-PREP10-NEXT: xscvdpsxws f0, f02203; CHECK-PREP10-NEXT: mffprwz r3, f02204; CHECK-PREP10-NEXT: extsw r3, r32205; CHECK-PREP10-NEXT: blr2206entry:2207 %or = or i64 %ptr, 10000000000012208 %0 = inttoptr i64 %or to ptr2209 %1 = load double, ptr %0, align 82210 %conv = fptosi double %1 to i162211 ret i16 %conv2212}2213 2214; Function Attrs: norecurse nounwind readonly uwtable willreturn2215define dso_local signext i16 @ld_disjoint_align64_int16_t_double(i64 %ptr) {2216; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_double:2217; CHECK-P10: # %bb.0: # %entry2218; CHECK-P10-NEXT: pli r4, 2441406252219; CHECK-P10-NEXT: rldicr r3, r3, 0, 232220; CHECK-P10-NEXT: rldic r4, r4, 12, 242221; CHECK-P10-NEXT: lfdx f0, r3, r42222; CHECK-P10-NEXT: xscvdpsxws f0, f02223; CHECK-P10-NEXT: mffprwz r3, f02224; CHECK-P10-NEXT: extsw r3, r32225; CHECK-P10-NEXT: blr2226;2227; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_double:2228; CHECK-PREP10: # %bb.0: # %entry2229; CHECK-PREP10-NEXT: lis r4, 37252230; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232231; CHECK-PREP10-NEXT: ori r4, r4, 190252232; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242233; CHECK-PREP10-NEXT: lfdx f0, r3, r42234; CHECK-PREP10-NEXT: xscvdpsxws f0, f02235; CHECK-PREP10-NEXT: mffprwz r3, f02236; CHECK-PREP10-NEXT: extsw r3, r32237; CHECK-PREP10-NEXT: blr2238entry:2239 %and = and i64 %ptr, -10995116277762240 %or = or i64 %and, 10000000000002241 %0 = inttoptr i64 %or to ptr2242 %1 = load double, ptr %0, align 40962243 %conv = fptosi double %1 to i162244 ret i16 %conv2245}2246 2247; Function Attrs: norecurse nounwind readonly uwtable willreturn2248define dso_local signext i16 @ld_cst_align16_int16_t_double() {2249; CHECK-LABEL: ld_cst_align16_int16_t_double:2250; CHECK: # %bb.0: # %entry2251; CHECK-NEXT: lfd f0, 4080(0)2252; CHECK-NEXT: xscvdpsxws f0, f02253; CHECK-NEXT: mffprwz r3, f02254; CHECK-NEXT: extsw r3, r32255; CHECK-NEXT: blr2256entry:2257 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 162258 %conv = fptosi double %0 to i162259 ret i16 %conv2260}2261 2262; Function Attrs: norecurse nounwind readonly uwtable willreturn2263define dso_local signext i16 @ld_cst_align32_int16_t_double() {2264; CHECK-LABEL: ld_cst_align32_int16_t_double:2265; CHECK: # %bb.0: # %entry2266; CHECK-NEXT: lis r3, 1532267; CHECK-NEXT: lfd f0, -27108(r3)2268; CHECK-NEXT: xscvdpsxws f0, f02269; CHECK-NEXT: mffprwz r3, f02270; CHECK-NEXT: extsw r3, r32271; CHECK-NEXT: blr2272entry:2273 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 82274 %conv = fptosi double %0 to i162275 ret i16 %conv2276}2277 2278; Function Attrs: norecurse nounwind readonly uwtable willreturn2279define dso_local signext i16 @ld_cst_align64_int16_t_double() {2280; CHECK-P10-LABEL: ld_cst_align64_int16_t_double:2281; CHECK-P10: # %bb.0: # %entry2282; CHECK-P10-NEXT: pli r3, 2441406252283; CHECK-P10-NEXT: rldic r3, r3, 12, 242284; CHECK-P10-NEXT: lfd f0, 0(r3)2285; CHECK-P10-NEXT: xscvdpsxws f0, f02286; CHECK-P10-NEXT: mffprwz r3, f02287; CHECK-P10-NEXT: extsw r3, r32288; CHECK-P10-NEXT: blr2289;2290; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_double:2291; CHECK-PREP10: # %bb.0: # %entry2292; CHECK-PREP10-NEXT: lis r3, 37252293; CHECK-PREP10-NEXT: ori r3, r3, 190252294; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242295; CHECK-PREP10-NEXT: lfd f0, 0(r3)2296; CHECK-PREP10-NEXT: xscvdpsxws f0, f02297; CHECK-PREP10-NEXT: mffprwz r3, f02298; CHECK-PREP10-NEXT: extsw r3, r32299; CHECK-PREP10-NEXT: blr2300entry:2301 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 40962302 %conv = fptosi double %0 to i162303 ret i16 %conv2304}2305 2306; Function Attrs: norecurse nounwind readonly uwtable willreturn2307define dso_local zeroext i16 @ld_0_uint16_t_uint8_t(i64 %ptr) {2308; CHECK-LABEL: ld_0_uint16_t_uint8_t:2309; CHECK: # %bb.0: # %entry2310; CHECK-NEXT: lbz r3, 0(r3)2311; CHECK-NEXT: blr2312entry:2313 %0 = inttoptr i64 %ptr to ptr2314 %1 = load i8, ptr %0, align 12315 %conv = zext i8 %1 to i162316 ret i16 %conv2317}2318 2319; Function Attrs: norecurse nounwind readonly uwtable willreturn2320define dso_local zeroext i16 @ld_align16_uint16_t_uint8_t(ptr nocapture readonly %ptr) {2321; CHECK-LABEL: ld_align16_uint16_t_uint8_t:2322; CHECK: # %bb.0: # %entry2323; CHECK-NEXT: lbz r3, 8(r3)2324; CHECK-NEXT: blr2325entry:2326 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82327 %0 = load i8, ptr %add.ptr, align 12328 %conv = zext i8 %0 to i162329 ret i16 %conv2330}2331 2332; Function Attrs: norecurse nounwind readonly uwtable willreturn2333define dso_local zeroext i16 @ld_align32_uint16_t_uint8_t(ptr nocapture readonly %ptr) {2334; CHECK-P10-LABEL: ld_align32_uint16_t_uint8_t:2335; CHECK-P10: # %bb.0: # %entry2336; CHECK-P10-NEXT: plbz r3, 99999000(r3), 02337; CHECK-P10-NEXT: blr2338;2339; CHECK-PREP10-LABEL: ld_align32_uint16_t_uint8_t:2340; CHECK-PREP10: # %bb.0: # %entry2341; CHECK-PREP10-NEXT: lis r4, 15252342; CHECK-PREP10-NEXT: ori r4, r4, 566002343; CHECK-PREP10-NEXT: lbzx r3, r3, r42344; CHECK-PREP10-NEXT: blr2345entry:2346 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002347 %0 = load i8, ptr %add.ptr, align 12348 %conv = zext i8 %0 to i162349 ret i16 %conv2350}2351 2352; Function Attrs: norecurse nounwind readonly uwtable willreturn2353define dso_local zeroext i16 @ld_align64_uint16_t_uint8_t(ptr nocapture readonly %ptr) {2354; CHECK-P10-LABEL: ld_align64_uint16_t_uint8_t:2355; CHECK-P10: # %bb.0: # %entry2356; CHECK-P10-NEXT: pli r4, 2441406252357; CHECK-P10-NEXT: rldic r4, r4, 12, 242358; CHECK-P10-NEXT: lbzx r3, r3, r42359; CHECK-P10-NEXT: blr2360;2361; CHECK-PREP10-LABEL: ld_align64_uint16_t_uint8_t:2362; CHECK-PREP10: # %bb.0: # %entry2363; CHECK-PREP10-NEXT: lis r4, 37252364; CHECK-PREP10-NEXT: ori r4, r4, 190252365; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242366; CHECK-PREP10-NEXT: lbzx r3, r3, r42367; CHECK-PREP10-NEXT: blr2368entry:2369 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002370 %0 = load i8, ptr %add.ptr, align 12371 %conv = zext i8 %0 to i162372 ret i16 %conv2373}2374 2375; Function Attrs: norecurse nounwind readonly uwtable willreturn2376define dso_local zeroext i16 @ld_reg_uint16_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) {2377; CHECK-LABEL: ld_reg_uint16_t_uint8_t:2378; CHECK: # %bb.0: # %entry2379; CHECK-NEXT: lbzx r3, r3, r42380; CHECK-NEXT: blr2381entry:2382 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2383 %0 = load i8, ptr %add.ptr, align 12384 %conv = zext i8 %0 to i162385 ret i16 %conv2386}2387 2388; Function Attrs: norecurse nounwind readonly uwtable willreturn2389define dso_local zeroext i16 @ld_or_uint16_t_uint8_t(i64 %ptr, i8 zeroext %off) {2390; CHECK-LABEL: ld_or_uint16_t_uint8_t:2391; CHECK: # %bb.0: # %entry2392; CHECK-NEXT: or r3, r4, r32393; CHECK-NEXT: lbz r3, 0(r3)2394; CHECK-NEXT: blr2395entry:2396 %conv = zext i8 %off to i642397 %or = or i64 %conv, %ptr2398 %0 = inttoptr i64 %or to ptr2399 %1 = load i8, ptr %0, align 12400 %conv1 = zext i8 %1 to i162401 ret i16 %conv12402}2403 2404; Function Attrs: norecurse nounwind readonly uwtable willreturn2405define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint8_t(i64 %ptr) {2406; CHECK-LABEL: ld_not_disjoint16_uint16_t_uint8_t:2407; CHECK: # %bb.0: # %entry2408; CHECK-NEXT: ori r3, r3, 62409; CHECK-NEXT: lbz r3, 0(r3)2410; CHECK-NEXT: blr2411entry:2412 %or = or i64 %ptr, 62413 %0 = inttoptr i64 %or to ptr2414 %1 = load i8, ptr %0, align 12415 %conv = zext i8 %1 to i162416 ret i16 %conv2417}2418 2419; Function Attrs: norecurse nounwind readonly uwtable willreturn2420define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint8_t(i64 %ptr) {2421; CHECK-LABEL: ld_disjoint_align16_uint16_t_uint8_t:2422; CHECK: # %bb.0: # %entry2423; CHECK-NEXT: rldicr r3, r3, 0, 512424; CHECK-NEXT: lbz r3, 24(r3)2425; CHECK-NEXT: blr2426entry:2427 %and = and i64 %ptr, -40962428 %or = or i64 %and, 242429 %0 = inttoptr i64 %or to ptr2430 %1 = load i8, ptr %0, align 82431 %conv = zext i8 %1 to i162432 ret i16 %conv2433}2434 2435; Function Attrs: norecurse nounwind readonly uwtable willreturn2436define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint8_t(i64 %ptr) {2437; CHECK-LABEL: ld_not_disjoint32_uint16_t_uint8_t:2438; CHECK: # %bb.0: # %entry2439; CHECK-NEXT: ori r3, r3, 344632440; CHECK-NEXT: oris r3, r3, 12441; CHECK-NEXT: lbz r3, 0(r3)2442; CHECK-NEXT: blr2443entry:2444 %or = or i64 %ptr, 999992445 %0 = inttoptr i64 %or to ptr2446 %1 = load i8, ptr %0, align 12447 %conv = zext i8 %1 to i162448 ret i16 %conv2449}2450 2451; Function Attrs: norecurse nounwind readonly uwtable willreturn2452define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint8_t(i64 %ptr) {2453; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_uint8_t:2454; CHECK-P10: # %bb.0: # %entry2455; CHECK-P10-NEXT: lis r4, -152642456; CHECK-P10-NEXT: and r3, r3, r42457; CHECK-P10-NEXT: plbz r3, 999990000(r3), 02458; CHECK-P10-NEXT: blr2459;2460; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_uint8_t:2461; CHECK-PREP10: # %bb.0: # %entry2462; CHECK-PREP10-NEXT: lis r4, -152642463; CHECK-PREP10-NEXT: and r3, r3, r42464; CHECK-PREP10-NEXT: lis r4, 152582465; CHECK-PREP10-NEXT: ori r4, r4, 417122466; CHECK-PREP10-NEXT: lbzx r3, r3, r42467; CHECK-PREP10-NEXT: blr2468entry:2469 %and = and i64 %ptr, -10003415042470 %or = or i64 %and, 9999900002471 %0 = inttoptr i64 %or to ptr2472 %1 = load i8, ptr %0, align 162473 %conv = zext i8 %1 to i162474 ret i16 %conv2475}2476 2477; Function Attrs: norecurse nounwind readonly uwtable willreturn2478define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint8_t(i64 %ptr) {2479; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_uint8_t:2480; CHECK-P10: # %bb.0: # %entry2481; CHECK-P10-NEXT: pli r4, 2322482; CHECK-P10-NEXT: pli r5, 35675873292483; CHECK-P10-NEXT: rldimi r5, r4, 32, 02484; CHECK-P10-NEXT: or r3, r3, r52485; CHECK-P10-NEXT: lbz r3, 0(r3)2486; CHECK-P10-NEXT: blr2487;2488; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_uint8_t:2489; CHECK-PREP10: # %bb.0: # %entry2490; CHECK-PREP10-NEXT: li r4, 292491; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242492; CHECK-PREP10-NEXT: oris r4, r4, 544372493; CHECK-PREP10-NEXT: ori r4, r4, 40972494; CHECK-PREP10-NEXT: or r3, r3, r42495; CHECK-PREP10-NEXT: lbz r3, 0(r3)2496; CHECK-PREP10-NEXT: blr2497entry:2498 %or = or i64 %ptr, 10000000000012499 %0 = inttoptr i64 %or to ptr2500 %1 = load i8, ptr %0, align 12501 %conv = zext i8 %1 to i162502 ret i16 %conv2503}2504 2505; Function Attrs: norecurse nounwind readonly uwtable willreturn2506define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint8_t(i64 %ptr) {2507; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_uint8_t:2508; CHECK-P10: # %bb.0: # %entry2509; CHECK-P10-NEXT: pli r4, 2441406252510; CHECK-P10-NEXT: rldicr r3, r3, 0, 232511; CHECK-P10-NEXT: rldic r4, r4, 12, 242512; CHECK-P10-NEXT: lbzx r3, r3, r42513; CHECK-P10-NEXT: blr2514;2515; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_uint8_t:2516; CHECK-PREP10: # %bb.0: # %entry2517; CHECK-PREP10-NEXT: lis r4, 37252518; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232519; CHECK-PREP10-NEXT: ori r4, r4, 190252520; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242521; CHECK-PREP10-NEXT: lbzx r3, r3, r42522; CHECK-PREP10-NEXT: blr2523entry:2524 %and = and i64 %ptr, -10995116277762525 %or = or i64 %and, 10000000000002526 %0 = inttoptr i64 %or to ptr2527 %1 = load i8, ptr %0, align 40962528 %conv = zext i8 %1 to i162529 ret i16 %conv2530}2531 2532; Function Attrs: norecurse nounwind readonly uwtable willreturn2533define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint8_t() {2534; CHECK-LABEL: ld_cst_align16_uint16_t_uint8_t:2535; CHECK: # %bb.0: # %entry2536; CHECK-NEXT: lbz r3, 4080(0)2537; CHECK-NEXT: blr2538entry:2539 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 162540 %conv = zext i8 %0 to i162541 ret i16 %conv2542}2543 2544; Function Attrs: norecurse nounwind readonly uwtable willreturn2545define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint8_t() {2546; CHECK-LABEL: ld_cst_align32_uint16_t_uint8_t:2547; CHECK: # %bb.0: # %entry2548; CHECK-NEXT: lis r3, 1532549; CHECK-NEXT: lbz r3, -27108(r3)2550; CHECK-NEXT: blr2551entry:2552 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 42553 %conv = zext i8 %0 to i162554 ret i16 %conv2555}2556 2557; Function Attrs: norecurse nounwind readonly uwtable willreturn2558define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint8_t() {2559; CHECK-P10-LABEL: ld_cst_align64_uint16_t_uint8_t:2560; CHECK-P10: # %bb.0: # %entry2561; CHECK-P10-NEXT: pli r3, 2441406252562; CHECK-P10-NEXT: rldic r3, r3, 12, 242563; CHECK-P10-NEXT: lbz r3, 0(r3)2564; CHECK-P10-NEXT: blr2565;2566; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_uint8_t:2567; CHECK-PREP10: # %bb.0: # %entry2568; CHECK-PREP10-NEXT: lis r3, 37252569; CHECK-PREP10-NEXT: ori r3, r3, 190252570; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242571; CHECK-PREP10-NEXT: lbz r3, 0(r3)2572; CHECK-PREP10-NEXT: blr2573entry:2574 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 40962575 %conv = zext i8 %0 to i162576 ret i16 %conv2577}2578 2579; Function Attrs: norecurse nounwind readonly uwtable willreturn2580define dso_local zeroext i16 @ld_0_uint16_t_int8_t(i64 %ptr) {2581; CHECK-LABEL: ld_0_uint16_t_int8_t:2582; CHECK: # %bb.0: # %entry2583; CHECK-NEXT: lbz r3, 0(r3)2584; CHECK-NEXT: extsb r3, r32585; CHECK-NEXT: clrldi r3, r3, 482586; CHECK-NEXT: blr2587entry:2588 %0 = inttoptr i64 %ptr to ptr2589 %1 = load i8, ptr %0, align 12590 %conv = sext i8 %1 to i162591 ret i16 %conv2592}2593 2594; Function Attrs: norecurse nounwind readonly uwtable willreturn2595define dso_local zeroext i16 @ld_align16_uint16_t_int8_t(ptr nocapture readonly %ptr) {2596; CHECK-LABEL: ld_align16_uint16_t_int8_t:2597; CHECK: # %bb.0: # %entry2598; CHECK-NEXT: lbz r3, 8(r3)2599; CHECK-NEXT: extsb r3, r32600; CHECK-NEXT: clrldi r3, r3, 482601; CHECK-NEXT: blr2602entry:2603 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82604 %0 = load i8, ptr %add.ptr, align 12605 %conv = sext i8 %0 to i162606 ret i16 %conv2607}2608 2609; Function Attrs: norecurse nounwind readonly uwtable willreturn2610define dso_local zeroext i16 @ld_align32_uint16_t_int8_t(ptr nocapture readonly %ptr) {2611; CHECK-P10-LABEL: ld_align32_uint16_t_int8_t:2612; CHECK-P10: # %bb.0: # %entry2613; CHECK-P10-NEXT: plbz r3, 99999000(r3), 02614; CHECK-P10-NEXT: extsb r3, r32615; CHECK-P10-NEXT: clrldi r3, r3, 482616; CHECK-P10-NEXT: blr2617;2618; CHECK-PREP10-LABEL: ld_align32_uint16_t_int8_t:2619; CHECK-PREP10: # %bb.0: # %entry2620; CHECK-PREP10-NEXT: lis r4, 15252621; CHECK-PREP10-NEXT: ori r4, r4, 566002622; CHECK-PREP10-NEXT: lbzx r3, r3, r42623; CHECK-PREP10-NEXT: extsb r3, r32624; CHECK-PREP10-NEXT: clrldi r3, r3, 482625; CHECK-PREP10-NEXT: blr2626entry:2627 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002628 %0 = load i8, ptr %add.ptr, align 12629 %conv = sext i8 %0 to i162630 ret i16 %conv2631}2632 2633; Function Attrs: norecurse nounwind readonly uwtable willreturn2634define dso_local zeroext i16 @ld_align64_uint16_t_int8_t(ptr nocapture readonly %ptr) {2635; CHECK-P10-LABEL: ld_align64_uint16_t_int8_t:2636; CHECK-P10: # %bb.0: # %entry2637; CHECK-P10-NEXT: pli r4, 2441406252638; CHECK-P10-NEXT: rldic r4, r4, 12, 242639; CHECK-P10-NEXT: lbzx r3, r3, r42640; CHECK-P10-NEXT: extsb r3, r32641; CHECK-P10-NEXT: clrldi r3, r3, 482642; CHECK-P10-NEXT: blr2643;2644; CHECK-PREP10-LABEL: ld_align64_uint16_t_int8_t:2645; CHECK-PREP10: # %bb.0: # %entry2646; CHECK-PREP10-NEXT: lis r4, 37252647; CHECK-PREP10-NEXT: ori r4, r4, 190252648; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242649; CHECK-PREP10-NEXT: lbzx r3, r3, r42650; CHECK-PREP10-NEXT: extsb r3, r32651; CHECK-PREP10-NEXT: clrldi r3, r3, 482652; CHECK-PREP10-NEXT: blr2653entry:2654 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002655 %0 = load i8, ptr %add.ptr, align 12656 %conv = sext i8 %0 to i162657 ret i16 %conv2658}2659 2660; Function Attrs: norecurse nounwind readonly uwtable willreturn2661define dso_local zeroext i16 @ld_reg_uint16_t_int8_t(ptr nocapture readonly %ptr, i64 %off) {2662; CHECK-LABEL: ld_reg_uint16_t_int8_t:2663; CHECK: # %bb.0: # %entry2664; CHECK-NEXT: lbzx r3, r3, r42665; CHECK-NEXT: extsb r3, r32666; CHECK-NEXT: clrldi r3, r3, 482667; CHECK-NEXT: blr2668entry:2669 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2670 %0 = load i8, ptr %add.ptr, align 12671 %conv = sext i8 %0 to i162672 ret i16 %conv2673}2674 2675; Function Attrs: norecurse nounwind readonly uwtable willreturn2676define dso_local zeroext i16 @ld_or_uint16_t_int8_t(i64 %ptr, i8 zeroext %off) {2677; CHECK-LABEL: ld_or_uint16_t_int8_t:2678; CHECK: # %bb.0: # %entry2679; CHECK-NEXT: or r3, r4, r32680; CHECK-NEXT: lbz r3, 0(r3)2681; CHECK-NEXT: extsb r3, r32682; CHECK-NEXT: clrldi r3, r3, 482683; CHECK-NEXT: blr2684entry:2685 %conv = zext i8 %off to i642686 %or = or i64 %conv, %ptr2687 %0 = inttoptr i64 %or to ptr2688 %1 = load i8, ptr %0, align 12689 %conv1 = sext i8 %1 to i162690 ret i16 %conv12691}2692 2693; Function Attrs: norecurse nounwind readonly uwtable willreturn2694define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_int8_t(i64 %ptr) {2695; CHECK-LABEL: ld_not_disjoint16_uint16_t_int8_t:2696; CHECK: # %bb.0: # %entry2697; CHECK-NEXT: ori r3, r3, 62698; CHECK-NEXT: lbz r3, 0(r3)2699; CHECK-NEXT: extsb r3, r32700; CHECK-NEXT: clrldi r3, r3, 482701; CHECK-NEXT: blr2702entry:2703 %or = or i64 %ptr, 62704 %0 = inttoptr i64 %or to ptr2705 %1 = load i8, ptr %0, align 12706 %conv = sext i8 %1 to i162707 ret i16 %conv2708}2709 2710; Function Attrs: norecurse nounwind readonly uwtable willreturn2711define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_int8_t(i64 %ptr) {2712; CHECK-LABEL: ld_disjoint_align16_uint16_t_int8_t:2713; CHECK: # %bb.0: # %entry2714; CHECK-NEXT: rldicr r3, r3, 0, 512715; CHECK-NEXT: lbz r3, 24(r3)2716; CHECK-NEXT: extsb r3, r32717; CHECK-NEXT: clrldi r3, r3, 482718; CHECK-NEXT: blr2719entry:2720 %and = and i64 %ptr, -40962721 %or = or i64 %and, 242722 %0 = inttoptr i64 %or to ptr2723 %1 = load i8, ptr %0, align 82724 %conv = sext i8 %1 to i162725 ret i16 %conv2726}2727 2728; Function Attrs: norecurse nounwind readonly uwtable willreturn2729define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_int8_t(i64 %ptr) {2730; CHECK-LABEL: ld_not_disjoint32_uint16_t_int8_t:2731; CHECK: # %bb.0: # %entry2732; CHECK-NEXT: ori r3, r3, 344632733; CHECK-NEXT: oris r3, r3, 12734; CHECK-NEXT: lbz r3, 0(r3)2735; CHECK-NEXT: extsb r3, r32736; CHECK-NEXT: clrldi r3, r3, 482737; CHECK-NEXT: blr2738entry:2739 %or = or i64 %ptr, 999992740 %0 = inttoptr i64 %or to ptr2741 %1 = load i8, ptr %0, align 12742 %conv = sext i8 %1 to i162743 ret i16 %conv2744}2745 2746; Function Attrs: norecurse nounwind readonly uwtable willreturn2747define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_int8_t(i64 %ptr) {2748; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_int8_t:2749; CHECK-P10: # %bb.0: # %entry2750; CHECK-P10-NEXT: lis r4, -152642751; CHECK-P10-NEXT: and r3, r3, r42752; CHECK-P10-NEXT: plbz r3, 999990000(r3), 02753; CHECK-P10-NEXT: extsb r3, r32754; CHECK-P10-NEXT: clrldi r3, r3, 482755; CHECK-P10-NEXT: blr2756;2757; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_int8_t:2758; CHECK-PREP10: # %bb.0: # %entry2759; CHECK-PREP10-NEXT: lis r4, -152642760; CHECK-PREP10-NEXT: and r3, r3, r42761; CHECK-PREP10-NEXT: lis r4, 152582762; CHECK-PREP10-NEXT: ori r4, r4, 417122763; CHECK-PREP10-NEXT: lbzx r3, r3, r42764; CHECK-PREP10-NEXT: extsb r3, r32765; CHECK-PREP10-NEXT: clrldi r3, r3, 482766; CHECK-PREP10-NEXT: blr2767entry:2768 %and = and i64 %ptr, -10003415042769 %or = or i64 %and, 9999900002770 %0 = inttoptr i64 %or to ptr2771 %1 = load i8, ptr %0, align 162772 %conv = sext i8 %1 to i162773 ret i16 %conv2774}2775 2776; Function Attrs: norecurse nounwind readonly uwtable willreturn2777define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_int8_t(i64 %ptr) {2778; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_int8_t:2779; CHECK-P10: # %bb.0: # %entry2780; CHECK-P10-NEXT: pli r4, 2322781; CHECK-P10-NEXT: pli r5, 35675873292782; CHECK-P10-NEXT: rldimi r5, r4, 32, 02783; CHECK-P10-NEXT: or r3, r3, r52784; CHECK-P10-NEXT: lbz r3, 0(r3)2785; CHECK-P10-NEXT: extsb r3, r32786; CHECK-P10-NEXT: clrldi r3, r3, 482787; CHECK-P10-NEXT: blr2788;2789; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_int8_t:2790; CHECK-PREP10: # %bb.0: # %entry2791; CHECK-PREP10-NEXT: li r4, 292792; CHECK-PREP10-NEXT: rldic r4, r4, 35, 242793; CHECK-PREP10-NEXT: oris r4, r4, 544372794; CHECK-PREP10-NEXT: ori r4, r4, 40972795; CHECK-PREP10-NEXT: or r3, r3, r42796; CHECK-PREP10-NEXT: lbz r3, 0(r3)2797; CHECK-PREP10-NEXT: extsb r3, r32798; CHECK-PREP10-NEXT: clrldi r3, r3, 482799; CHECK-PREP10-NEXT: blr2800entry:2801 %or = or i64 %ptr, 10000000000012802 %0 = inttoptr i64 %or to ptr2803 %1 = load i8, ptr %0, align 12804 %conv = sext i8 %1 to i162805 ret i16 %conv2806}2807 2808; Function Attrs: norecurse nounwind readonly uwtable willreturn2809define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_int8_t(i64 %ptr) {2810; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_int8_t:2811; CHECK-P10: # %bb.0: # %entry2812; CHECK-P10-NEXT: pli r4, 2441406252813; CHECK-P10-NEXT: rldicr r3, r3, 0, 232814; CHECK-P10-NEXT: rldic r4, r4, 12, 242815; CHECK-P10-NEXT: lbzx r3, r3, r42816; CHECK-P10-NEXT: extsb r3, r32817; CHECK-P10-NEXT: clrldi r3, r3, 482818; CHECK-P10-NEXT: blr2819;2820; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_int8_t:2821; CHECK-PREP10: # %bb.0: # %entry2822; CHECK-PREP10-NEXT: lis r4, 37252823; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 232824; CHECK-PREP10-NEXT: ori r4, r4, 190252825; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242826; CHECK-PREP10-NEXT: lbzx r3, r3, r42827; CHECK-PREP10-NEXT: extsb r3, r32828; CHECK-PREP10-NEXT: clrldi r3, r3, 482829; CHECK-PREP10-NEXT: blr2830entry:2831 %and = and i64 %ptr, -10995116277762832 %or = or i64 %and, 10000000000002833 %0 = inttoptr i64 %or to ptr2834 %1 = load i8, ptr %0, align 40962835 %conv = sext i8 %1 to i162836 ret i16 %conv2837}2838 2839; Function Attrs: norecurse nounwind readonly uwtable willreturn2840define dso_local zeroext i16 @ld_cst_align16_uint16_t_int8_t() {2841; CHECK-LABEL: ld_cst_align16_uint16_t_int8_t:2842; CHECK: # %bb.0: # %entry2843; CHECK-NEXT: lbz r3, 4080(0)2844; CHECK-NEXT: extsb r3, r32845; CHECK-NEXT: clrldi r3, r3, 482846; CHECK-NEXT: blr2847entry:2848 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 162849 %conv = sext i8 %0 to i162850 ret i16 %conv2851}2852 2853; Function Attrs: norecurse nounwind readonly uwtable willreturn2854define dso_local zeroext i16 @ld_cst_align32_uint16_t_int8_t() {2855; CHECK-LABEL: ld_cst_align32_uint16_t_int8_t:2856; CHECK: # %bb.0: # %entry2857; CHECK-NEXT: lis r3, 1532858; CHECK-NEXT: lbz r3, -27108(r3)2859; CHECK-NEXT: extsb r3, r32860; CHECK-NEXT: clrldi r3, r3, 482861; CHECK-NEXT: blr2862entry:2863 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 42864 %conv = sext i8 %0 to i162865 ret i16 %conv2866}2867 2868; Function Attrs: norecurse nounwind readonly uwtable willreturn2869define dso_local zeroext i16 @ld_cst_align64_uint16_t_int8_t() {2870; CHECK-P10-LABEL: ld_cst_align64_uint16_t_int8_t:2871; CHECK-P10: # %bb.0: # %entry2872; CHECK-P10-NEXT: pli r3, 2441406252873; CHECK-P10-NEXT: rldic r3, r3, 12, 242874; CHECK-P10-NEXT: lbz r3, 0(r3)2875; CHECK-P10-NEXT: extsb r3, r32876; CHECK-P10-NEXT: clrldi r3, r3, 482877; CHECK-P10-NEXT: blr2878;2879; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_int8_t:2880; CHECK-PREP10: # %bb.0: # %entry2881; CHECK-PREP10-NEXT: lis r3, 37252882; CHECK-PREP10-NEXT: ori r3, r3, 190252883; CHECK-PREP10-NEXT: rldic r3, r3, 12, 242884; CHECK-PREP10-NEXT: lbz r3, 0(r3)2885; CHECK-PREP10-NEXT: extsb r3, r32886; CHECK-PREP10-NEXT: clrldi r3, r3, 482887; CHECK-PREP10-NEXT: blr2888entry:2889 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 40962890 %conv = sext i8 %0 to i162891 ret i16 %conv2892}2893 2894; Function Attrs: norecurse nounwind readonly uwtable willreturn2895define dso_local zeroext i16 @ld_0_uint16_t_uint16_t(i64 %ptr) {2896; CHECK-LABEL: ld_0_uint16_t_uint16_t:2897; CHECK: # %bb.0: # %entry2898; CHECK-NEXT: lhz r3, 0(r3)2899; CHECK-NEXT: blr2900entry:2901 %0 = inttoptr i64 %ptr to ptr2902 %1 = load i16, ptr %0, align 22903 ret i16 %12904}2905 2906; Function Attrs: norecurse nounwind readonly uwtable willreturn2907define dso_local zeroext i16 @ld_align16_uint16_t_uint16_t(ptr nocapture readonly %ptr) {2908; CHECK-LABEL: ld_align16_uint16_t_uint16_t:2909; CHECK: # %bb.0: # %entry2910; CHECK-NEXT: lhz r3, 8(r3)2911; CHECK-NEXT: blr2912entry:2913 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 82914 %0 = load i16, ptr %add.ptr, align 22915 ret i16 %02916}2917 2918; Function Attrs: norecurse nounwind readonly uwtable willreturn2919define dso_local zeroext i16 @ld_align32_uint16_t_uint16_t(ptr nocapture readonly %ptr) {2920; CHECK-P10-LABEL: ld_align32_uint16_t_uint16_t:2921; CHECK-P10: # %bb.0: # %entry2922; CHECK-P10-NEXT: plhz r3, 99999000(r3), 02923; CHECK-P10-NEXT: blr2924;2925; CHECK-PREP10-LABEL: ld_align32_uint16_t_uint16_t:2926; CHECK-PREP10: # %bb.0: # %entry2927; CHECK-PREP10-NEXT: lis r4, 15252928; CHECK-PREP10-NEXT: ori r4, r4, 566002929; CHECK-PREP10-NEXT: lhzx r3, r3, r42930; CHECK-PREP10-NEXT: blr2931entry:2932 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990002933 %0 = load i16, ptr %add.ptr, align 22934 ret i16 %02935}2936 2937; Function Attrs: norecurse nounwind readonly uwtable willreturn2938define dso_local zeroext i16 @ld_align64_uint16_t_uint16_t(ptr nocapture readonly %ptr) {2939; CHECK-P10-LABEL: ld_align64_uint16_t_uint16_t:2940; CHECK-P10: # %bb.0: # %entry2941; CHECK-P10-NEXT: pli r4, 2441406252942; CHECK-P10-NEXT: rldic r4, r4, 12, 242943; CHECK-P10-NEXT: lhzx r3, r3, r42944; CHECK-P10-NEXT: blr2945;2946; CHECK-PREP10-LABEL: ld_align64_uint16_t_uint16_t:2947; CHECK-PREP10: # %bb.0: # %entry2948; CHECK-PREP10-NEXT: lis r4, 37252949; CHECK-PREP10-NEXT: ori r4, r4, 190252950; CHECK-PREP10-NEXT: rldic r4, r4, 12, 242951; CHECK-PREP10-NEXT: lhzx r3, r3, r42952; CHECK-PREP10-NEXT: blr2953entry:2954 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000002955 %0 = load i16, ptr %add.ptr, align 22956 ret i16 %02957}2958 2959; Function Attrs: norecurse nounwind readonly uwtable willreturn2960define dso_local zeroext i16 @ld_reg_uint16_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) {2961; CHECK-LABEL: ld_reg_uint16_t_uint16_t:2962; CHECK: # %bb.0: # %entry2963; CHECK-NEXT: lhzx r3, r3, r42964; CHECK-NEXT: blr2965entry:2966 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off2967 %0 = load i16, ptr %add.ptr, align 22968 ret i16 %02969}2970 2971; Function Attrs: norecurse nounwind readonly uwtable willreturn2972define dso_local zeroext i16 @ld_or_uint16_t_uint16_t(i64 %ptr, i8 zeroext %off) {2973; CHECK-LABEL: ld_or_uint16_t_uint16_t:2974; CHECK: # %bb.0: # %entry2975; CHECK-NEXT: or r3, r4, r32976; CHECK-NEXT: lhz r3, 0(r3)2977; CHECK-NEXT: blr2978entry:2979 %conv = zext i8 %off to i642980 %or = or i64 %conv, %ptr2981 %0 = inttoptr i64 %or to ptr2982 %1 = load i16, ptr %0, align 22983 ret i16 %12984}2985 2986; Function Attrs: norecurse nounwind readonly uwtable willreturn2987define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint16_t(i64 %ptr) {2988; CHECK-LABEL: ld_not_disjoint16_uint16_t_uint16_t:2989; CHECK: # %bb.0: # %entry2990; CHECK-NEXT: ori r3, r3, 62991; CHECK-NEXT: lhz r3, 0(r3)2992; CHECK-NEXT: blr2993entry:2994 %or = or i64 %ptr, 62995 %0 = inttoptr i64 %or to ptr2996 %1 = load i16, ptr %0, align 22997 ret i16 %12998}2999 3000; Function Attrs: norecurse nounwind readonly uwtable willreturn3001define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint16_t(i64 %ptr) {3002; CHECK-LABEL: ld_disjoint_align16_uint16_t_uint16_t:3003; CHECK: # %bb.0: # %entry3004; CHECK-NEXT: rldicr r3, r3, 0, 513005; CHECK-NEXT: lhz r3, 24(r3)3006; CHECK-NEXT: blr3007entry:3008 %and = and i64 %ptr, -40963009 %or = or i64 %and, 243010 %0 = inttoptr i64 %or to ptr3011 %1 = load i16, ptr %0, align 83012 ret i16 %13013}3014 3015; Function Attrs: norecurse nounwind readonly uwtable willreturn3016define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint16_t(i64 %ptr) {3017; CHECK-LABEL: ld_not_disjoint32_uint16_t_uint16_t:3018; CHECK: # %bb.0: # %entry3019; CHECK-NEXT: ori r3, r3, 344633020; CHECK-NEXT: oris r3, r3, 13021; CHECK-NEXT: lhz r3, 0(r3)3022; CHECK-NEXT: blr3023entry:3024 %or = or i64 %ptr, 999993025 %0 = inttoptr i64 %or to ptr3026 %1 = load i16, ptr %0, align 23027 ret i16 %13028}3029 3030; Function Attrs: norecurse nounwind readonly uwtable willreturn3031define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint16_t(i64 %ptr) {3032; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_uint16_t:3033; CHECK-P10: # %bb.0: # %entry3034; CHECK-P10-NEXT: lis r4, -152643035; CHECK-P10-NEXT: and r3, r3, r43036; CHECK-P10-NEXT: plhz r3, 999990000(r3), 03037; CHECK-P10-NEXT: blr3038;3039; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_uint16_t:3040; CHECK-PREP10: # %bb.0: # %entry3041; CHECK-PREP10-NEXT: lis r4, -152643042; CHECK-PREP10-NEXT: and r3, r3, r43043; CHECK-PREP10-NEXT: lis r4, 152583044; CHECK-PREP10-NEXT: ori r4, r4, 417123045; CHECK-PREP10-NEXT: lhzx r3, r3, r43046; CHECK-PREP10-NEXT: blr3047entry:3048 %and = and i64 %ptr, -10003415043049 %or = or i64 %and, 9999900003050 %0 = inttoptr i64 %or to ptr3051 %1 = load i16, ptr %0, align 163052 ret i16 %13053}3054 3055; Function Attrs: norecurse nounwind readonly uwtable willreturn3056define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint16_t(i64 %ptr) {3057; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_uint16_t:3058; CHECK-P10: # %bb.0: # %entry3059; CHECK-P10-NEXT: pli r4, 2323060; CHECK-P10-NEXT: pli r5, 35675873293061; CHECK-P10-NEXT: rldimi r5, r4, 32, 03062; CHECK-P10-NEXT: or r3, r3, r53063; CHECK-P10-NEXT: lhz r3, 0(r3)3064; CHECK-P10-NEXT: blr3065;3066; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_uint16_t:3067; CHECK-PREP10: # %bb.0: # %entry3068; CHECK-PREP10-NEXT: li r4, 293069; CHECK-PREP10-NEXT: rldic r4, r4, 35, 243070; CHECK-PREP10-NEXT: oris r4, r4, 544373071; CHECK-PREP10-NEXT: ori r4, r4, 40973072; CHECK-PREP10-NEXT: or r3, r3, r43073; CHECK-PREP10-NEXT: lhz r3, 0(r3)3074; CHECK-PREP10-NEXT: blr3075entry:3076 %or = or i64 %ptr, 10000000000013077 %0 = inttoptr i64 %or to ptr3078 %1 = load i16, ptr %0, align 23079 ret i16 %13080}3081 3082; Function Attrs: norecurse nounwind readonly uwtable willreturn3083define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint16_t(i64 %ptr) {3084; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_uint16_t:3085; CHECK-P10: # %bb.0: # %entry3086; CHECK-P10-NEXT: pli r4, 2441406253087; CHECK-P10-NEXT: rldicr r3, r3, 0, 233088; CHECK-P10-NEXT: rldic r4, r4, 12, 243089; CHECK-P10-NEXT: lhzx r3, r3, r43090; CHECK-P10-NEXT: blr3091;3092; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_uint16_t:3093; CHECK-PREP10: # %bb.0: # %entry3094; CHECK-PREP10-NEXT: lis r4, 37253095; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 233096; CHECK-PREP10-NEXT: ori r4, r4, 190253097; CHECK-PREP10-NEXT: rldic r4, r4, 12, 243098; CHECK-PREP10-NEXT: lhzx r3, r3, r43099; CHECK-PREP10-NEXT: blr3100entry:3101 %and = and i64 %ptr, -10995116277763102 %or = or i64 %and, 10000000000003103 %0 = inttoptr i64 %or to ptr3104 %1 = load i16, ptr %0, align 40963105 ret i16 %13106}3107 3108; Function Attrs: norecurse nounwind readonly uwtable willreturn3109define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint16_t() {3110; CHECK-LABEL: ld_cst_align16_uint16_t_uint16_t:3111; CHECK: # %bb.0: # %entry3112; CHECK-NEXT: lhz r3, 4080(0)3113; CHECK-NEXT: blr3114entry:3115 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 163116 ret i16 %03117}3118 3119; Function Attrs: norecurse nounwind readonly uwtable willreturn3120define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint16_t() {3121; CHECK-LABEL: ld_cst_align32_uint16_t_uint16_t:3122; CHECK: # %bb.0: # %entry3123; CHECK-NEXT: lis r3, 1533124; CHECK-NEXT: lhz r3, -27108(r3)3125; CHECK-NEXT: blr3126entry:3127 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 43128 ret i16 %03129}3130 3131; Function Attrs: norecurse nounwind readonly uwtable willreturn3132define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint16_t() {3133; CHECK-P10-LABEL: ld_cst_align64_uint16_t_uint16_t:3134; CHECK-P10: # %bb.0: # %entry3135; CHECK-P10-NEXT: pli r3, 2441406253136; CHECK-P10-NEXT: rldic r3, r3, 12, 243137; CHECK-P10-NEXT: lhz r3, 0(r3)3138; CHECK-P10-NEXT: blr3139;3140; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_uint16_t:3141; CHECK-PREP10: # %bb.0: # %entry3142; CHECK-PREP10-NEXT: lis r3, 37253143; CHECK-PREP10-NEXT: ori r3, r3, 190253144; CHECK-PREP10-NEXT: rldic r3, r3, 12, 243145; CHECK-PREP10-NEXT: lhz r3, 0(r3)3146; CHECK-PREP10-NEXT: blr3147entry:3148 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 40963149 ret i16 %03150}3151 3152; Function Attrs: norecurse nounwind readonly uwtable willreturn3153define dso_local zeroext i16 @ld_0_uint16_t_uint32_t(i64 %ptr) {3154; CHECK-LE-LABEL: ld_0_uint16_t_uint32_t:3155; CHECK-LE: # %bb.0: # %entry3156; CHECK-LE-NEXT: lhz r3, 0(r3)3157; CHECK-LE-NEXT: blr3158;3159; CHECK-BE-LABEL: ld_0_uint16_t_uint32_t:3160; CHECK-BE: # %bb.0: # %entry3161; CHECK-BE-NEXT: lhz r3, 2(r3)3162; CHECK-BE-NEXT: blr3163entry:3164 %0 = inttoptr i64 %ptr to ptr3165 %1 = load i32, ptr %0, align 43166 %conv = trunc i32 %1 to i163167 ret i16 %conv3168}3169 3170; Function Attrs: norecurse nounwind readonly uwtable willreturn3171define dso_local zeroext i16 @ld_align16_uint16_t_uint32_t(ptr nocapture readonly %ptr) {3172; CHECK-LE-LABEL: ld_align16_uint16_t_uint32_t:3173; CHECK-LE: # %bb.0: # %entry3174; CHECK-LE-NEXT: lhz r3, 8(r3)3175; CHECK-LE-NEXT: blr3176;3177; CHECK-BE-LABEL: ld_align16_uint16_t_uint32_t:3178; CHECK-BE: # %bb.0: # %entry3179; CHECK-BE-NEXT: lhz r3, 10(r3)3180; CHECK-BE-NEXT: blr3181entry:3182 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83183 %0 = load i32, ptr %add.ptr, align 43184 %conv = trunc i32 %0 to i163185 ret i16 %conv3186}3187 3188; Function Attrs: norecurse nounwind readonly uwtable willreturn3189define dso_local zeroext i16 @ld_align32_uint16_t_uint32_t(ptr nocapture readonly %ptr) {3190; CHECK-P10-LE-LABEL: ld_align32_uint16_t_uint32_t:3191; CHECK-P10-LE: # %bb.0: # %entry3192; CHECK-P10-LE-NEXT: plhz r3, 99999000(r3), 03193; CHECK-P10-LE-NEXT: blr3194;3195; CHECK-P10-BE-LABEL: ld_align32_uint16_t_uint32_t:3196; CHECK-P10-BE: # %bb.0: # %entry3197; CHECK-P10-BE-NEXT: plhz r3, 99999002(r3), 03198; CHECK-P10-BE-NEXT: blr3199;3200; CHECK-P9-LE-LABEL: ld_align32_uint16_t_uint32_t:3201; CHECK-P9-LE: # %bb.0: # %entry3202; CHECK-P9-LE-NEXT: lis r4, 15253203; CHECK-P9-LE-NEXT: ori r4, r4, 566003204; CHECK-P9-LE-NEXT: lhzx r3, r3, r43205; CHECK-P9-LE-NEXT: blr3206;3207; CHECK-P9-BE-LABEL: ld_align32_uint16_t_uint32_t:3208; CHECK-P9-BE: # %bb.0: # %entry3209; CHECK-P9-BE-NEXT: lis r4, 15253210; CHECK-P9-BE-NEXT: ori r4, r4, 566023211; CHECK-P9-BE-NEXT: lhzx r3, r3, r43212; CHECK-P9-BE-NEXT: blr3213;3214; CHECK-P8-LE-LABEL: ld_align32_uint16_t_uint32_t:3215; CHECK-P8-LE: # %bb.0: # %entry3216; CHECK-P8-LE-NEXT: lis r4, 15253217; CHECK-P8-LE-NEXT: ori r4, r4, 566003218; CHECK-P8-LE-NEXT: lhzx r3, r3, r43219; CHECK-P8-LE-NEXT: blr3220;3221; CHECK-P8-BE-LABEL: ld_align32_uint16_t_uint32_t:3222; CHECK-P8-BE: # %bb.0: # %entry3223; CHECK-P8-BE-NEXT: lis r4, 15253224; CHECK-P8-BE-NEXT: ori r4, r4, 566023225; CHECK-P8-BE-NEXT: lhzx r3, r3, r43226; CHECK-P8-BE-NEXT: blr3227entry:3228 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003229 %0 = load i32, ptr %add.ptr, align 43230 %conv = trunc i32 %0 to i163231 ret i16 %conv3232}3233 3234; Function Attrs: norecurse nounwind readonly uwtable willreturn3235define dso_local zeroext i16 @ld_align64_uint16_t_uint32_t(ptr nocapture readonly %ptr) {3236; CHECK-P10-LE-LABEL: ld_align64_uint16_t_uint32_t:3237; CHECK-P10-LE: # %bb.0: # %entry3238; CHECK-P10-LE-NEXT: pli r4, 2441406253239; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 243240; CHECK-P10-LE-NEXT: lhzx r3, r3, r43241; CHECK-P10-LE-NEXT: blr3242;3243; CHECK-P10-BE-LABEL: ld_align64_uint16_t_uint32_t:3244; CHECK-P10-BE: # %bb.0: # %entry3245; CHECK-P10-BE-NEXT: pli r4, 2323246; CHECK-P10-BE-NEXT: pli r5, 35675873303247; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 03248; CHECK-P10-BE-NEXT: lhzx r3, r3, r53249; CHECK-P10-BE-NEXT: blr3250;3251; CHECK-P9-LE-LABEL: ld_align64_uint16_t_uint32_t:3252; CHECK-P9-LE: # %bb.0: # %entry3253; CHECK-P9-LE-NEXT: lis r4, 37253254; CHECK-P9-LE-NEXT: ori r4, r4, 190253255; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 243256; CHECK-P9-LE-NEXT: lhzx r3, r3, r43257; CHECK-P9-LE-NEXT: blr3258;3259; CHECK-P9-BE-LABEL: ld_align64_uint16_t_uint32_t:3260; CHECK-P9-BE: # %bb.0: # %entry3261; CHECK-P9-BE-NEXT: li r4, 293262; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 243263; CHECK-P9-BE-NEXT: oris r4, r4, 544373264; CHECK-P9-BE-NEXT: ori r4, r4, 40983265; CHECK-P9-BE-NEXT: lhzx r3, r3, r43266; CHECK-P9-BE-NEXT: blr3267;3268; CHECK-P8-LE-LABEL: ld_align64_uint16_t_uint32_t:3269; CHECK-P8-LE: # %bb.0: # %entry3270; CHECK-P8-LE-NEXT: lis r4, 37253271; CHECK-P8-LE-NEXT: ori r4, r4, 190253272; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 243273; CHECK-P8-LE-NEXT: lhzx r3, r3, r43274; CHECK-P8-LE-NEXT: blr3275;3276; CHECK-P8-BE-LABEL: ld_align64_uint16_t_uint32_t:3277; CHECK-P8-BE: # %bb.0: # %entry3278; CHECK-P8-BE-NEXT: li r4, 293279; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 243280; CHECK-P8-BE-NEXT: oris r4, r4, 544373281; CHECK-P8-BE-NEXT: ori r4, r4, 40983282; CHECK-P8-BE-NEXT: lhzx r3, r3, r43283; CHECK-P8-BE-NEXT: blr3284entry:3285 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003286 %0 = load i32, ptr %add.ptr, align 43287 %conv = trunc i32 %0 to i163288 ret i16 %conv3289}3290 3291; Function Attrs: norecurse nounwind readonly uwtable willreturn3292define dso_local zeroext i16 @ld_reg_uint16_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) {3293; CHECK-LE-LABEL: ld_reg_uint16_t_uint32_t:3294; CHECK-LE: # %bb.0: # %entry3295; CHECK-LE-NEXT: lhzx r3, r3, r43296; CHECK-LE-NEXT: blr3297;3298; CHECK-BE-LABEL: ld_reg_uint16_t_uint32_t:3299; CHECK-BE: # %bb.0: # %entry3300; CHECK-BE-NEXT: add r3, r3, r43301; CHECK-BE-NEXT: lhz r3, 2(r3)3302; CHECK-BE-NEXT: blr3303entry:3304 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3305 %0 = load i32, ptr %add.ptr, align 43306 %conv = trunc i32 %0 to i163307 ret i16 %conv3308}3309 3310; Function Attrs: norecurse nounwind readonly uwtable willreturn3311define dso_local zeroext i16 @ld_or_uint16_t_uint32_t(i64 %ptr, i8 zeroext %off) {3312; CHECK-LE-LABEL: ld_or_uint16_t_uint32_t:3313; CHECK-LE: # %bb.0: # %entry3314; CHECK-LE-NEXT: or r3, r4, r33315; CHECK-LE-NEXT: lhz r3, 0(r3)3316; CHECK-LE-NEXT: blr3317;3318; CHECK-BE-LABEL: ld_or_uint16_t_uint32_t:3319; CHECK-BE: # %bb.0: # %entry3320; CHECK-BE-NEXT: or r3, r4, r33321; CHECK-BE-NEXT: lhz r3, 2(r3)3322; CHECK-BE-NEXT: blr3323entry:3324 %conv = zext i8 %off to i643325 %or = or i64 %conv, %ptr3326 %0 = inttoptr i64 %or to ptr3327 %1 = load i32, ptr %0, align 43328 %conv1 = trunc i32 %1 to i163329 ret i16 %conv13330}3331 3332; Function Attrs: norecurse nounwind readonly uwtable willreturn3333define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint32_t(i64 %ptr) {3334; CHECK-LE-LABEL: ld_not_disjoint16_uint16_t_uint32_t:3335; CHECK-LE: # %bb.0: # %entry3336; CHECK-LE-NEXT: ori r3, r3, 63337; CHECK-LE-NEXT: lhz r3, 0(r3)3338; CHECK-LE-NEXT: blr3339;3340; CHECK-BE-LABEL: ld_not_disjoint16_uint16_t_uint32_t:3341; CHECK-BE: # %bb.0: # %entry3342; CHECK-BE-NEXT: ori r3, r3, 63343; CHECK-BE-NEXT: lhz r3, 2(r3)3344; CHECK-BE-NEXT: blr3345entry:3346 %or = or i64 %ptr, 63347 %0 = inttoptr i64 %or to ptr3348 %1 = load i32, ptr %0, align 43349 %conv = trunc i32 %1 to i163350 ret i16 %conv3351}3352 3353; Function Attrs: norecurse nounwind readonly uwtable willreturn3354define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint32_t(i64 %ptr) {3355; CHECK-LE-LABEL: ld_disjoint_align16_uint16_t_uint32_t:3356; CHECK-LE: # %bb.0: # %entry3357; CHECK-LE-NEXT: rldicr r3, r3, 0, 513358; CHECK-LE-NEXT: lhz r3, 24(r3)3359; CHECK-LE-NEXT: blr3360;3361; CHECK-BE-LABEL: ld_disjoint_align16_uint16_t_uint32_t:3362; CHECK-BE: # %bb.0: # %entry3363; CHECK-BE-NEXT: rldicr r3, r3, 0, 513364; CHECK-BE-NEXT: lhz r3, 26(r3)3365; CHECK-BE-NEXT: blr3366entry:3367 %and = and i64 %ptr, -40963368 %or = or i64 %and, 243369 %0 = inttoptr i64 %or to ptr3370 %1 = load i32, ptr %0, align 83371 %conv = trunc i32 %1 to i163372 ret i16 %conv3373}3374 3375; Function Attrs: norecurse nounwind readonly uwtable willreturn3376define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint32_t(i64 %ptr) {3377; CHECK-LE-LABEL: ld_not_disjoint32_uint16_t_uint32_t:3378; CHECK-LE: # %bb.0: # %entry3379; CHECK-LE-NEXT: ori r3, r3, 344633380; CHECK-LE-NEXT: oris r3, r3, 13381; CHECK-LE-NEXT: lhz r3, 0(r3)3382; CHECK-LE-NEXT: blr3383;3384; CHECK-BE-LABEL: ld_not_disjoint32_uint16_t_uint32_t:3385; CHECK-BE: # %bb.0: # %entry3386; CHECK-BE-NEXT: ori r3, r3, 344633387; CHECK-BE-NEXT: oris r3, r3, 13388; CHECK-BE-NEXT: lhz r3, 2(r3)3389; CHECK-BE-NEXT: blr3390entry:3391 %or = or i64 %ptr, 999993392 %0 = inttoptr i64 %or to ptr3393 %1 = load i32, ptr %0, align 43394 %conv = trunc i32 %1 to i163395 ret i16 %conv3396}3397 3398; Function Attrs: norecurse nounwind readonly uwtable willreturn3399define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint32_t(i64 %ptr) {3400; CHECK-P10-LE-LABEL: ld_disjoint_align32_uint16_t_uint32_t:3401; CHECK-P10-LE: # %bb.0: # %entry3402; CHECK-P10-LE-NEXT: lis r4, -152643403; CHECK-P10-LE-NEXT: and r3, r3, r43404; CHECK-P10-LE-NEXT: plhz r3, 999990000(r3), 03405; CHECK-P10-LE-NEXT: blr3406;3407; CHECK-P10-BE-LABEL: ld_disjoint_align32_uint16_t_uint32_t:3408; CHECK-P10-BE: # %bb.0: # %entry3409; CHECK-P10-BE-NEXT: lis r4, -152643410; CHECK-P10-BE-NEXT: and r3, r3, r43411; CHECK-P10-BE-NEXT: plhz r3, 999990002(r3), 03412; CHECK-P10-BE-NEXT: blr3413;3414; CHECK-P9-LE-LABEL: ld_disjoint_align32_uint16_t_uint32_t:3415; CHECK-P9-LE: # %bb.0: # %entry3416; CHECK-P9-LE-NEXT: lis r4, -152643417; CHECK-P9-LE-NEXT: and r3, r3, r43418; CHECK-P9-LE-NEXT: lis r4, 152583419; CHECK-P9-LE-NEXT: ori r4, r4, 417123420; CHECK-P9-LE-NEXT: lhzx r3, r3, r43421; CHECK-P9-LE-NEXT: blr3422;3423; CHECK-P9-BE-LABEL: ld_disjoint_align32_uint16_t_uint32_t:3424; CHECK-P9-BE: # %bb.0: # %entry3425; CHECK-P9-BE-NEXT: lis r4, -152643426; CHECK-P9-BE-NEXT: and r3, r3, r43427; CHECK-P9-BE-NEXT: lis r4, 152583428; CHECK-P9-BE-NEXT: ori r4, r4, 417143429; CHECK-P9-BE-NEXT: lhzx r3, r3, r43430; CHECK-P9-BE-NEXT: blr3431;3432; CHECK-P8-LE-LABEL: ld_disjoint_align32_uint16_t_uint32_t:3433; CHECK-P8-LE: # %bb.0: # %entry3434; CHECK-P8-LE-NEXT: lis r4, -152643435; CHECK-P8-LE-NEXT: and r3, r3, r43436; CHECK-P8-LE-NEXT: lis r4, 152583437; CHECK-P8-LE-NEXT: ori r4, r4, 417123438; CHECK-P8-LE-NEXT: lhzx r3, r3, r43439; CHECK-P8-LE-NEXT: blr3440;3441; CHECK-P8-BE-LABEL: ld_disjoint_align32_uint16_t_uint32_t:3442; CHECK-P8-BE: # %bb.0: # %entry3443; CHECK-P8-BE-NEXT: lis r4, -152643444; CHECK-P8-BE-NEXT: and r3, r3, r43445; CHECK-P8-BE-NEXT: lis r4, 152583446; CHECK-P8-BE-NEXT: ori r4, r4, 417143447; CHECK-P8-BE-NEXT: lhzx r3, r3, r43448; CHECK-P8-BE-NEXT: blr3449entry:3450 %and = and i64 %ptr, -10003415043451 %or = or i64 %and, 9999900003452 %0 = inttoptr i64 %or to ptr3453 %1 = load i32, ptr %0, align 163454 %conv = trunc i32 %1 to i163455 ret i16 %conv3456}3457 3458; Function Attrs: norecurse nounwind readonly uwtable willreturn3459define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint32_t(i64 %ptr) {3460; CHECK-P10-LE-LABEL: ld_not_disjoint64_uint16_t_uint32_t:3461; CHECK-P10-LE: # %bb.0: # %entry3462; CHECK-P10-LE-NEXT: pli r4, 2323463; CHECK-P10-LE-NEXT: pli r5, 35675873293464; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 03465; CHECK-P10-LE-NEXT: or r3, r3, r53466; CHECK-P10-LE-NEXT: lhz r3, 0(r3)3467; CHECK-P10-LE-NEXT: blr3468;3469; CHECK-P10-BE-LABEL: ld_not_disjoint64_uint16_t_uint32_t:3470; CHECK-P10-BE: # %bb.0: # %entry3471; CHECK-P10-BE-NEXT: pli r4, 2323472; CHECK-P10-BE-NEXT: pli r5, 35675873293473; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 03474; CHECK-P10-BE-NEXT: or r3, r3, r53475; CHECK-P10-BE-NEXT: lhz r3, 2(r3)3476; CHECK-P10-BE-NEXT: blr3477;3478; CHECK-P9-LE-LABEL: ld_not_disjoint64_uint16_t_uint32_t:3479; CHECK-P9-LE: # %bb.0: # %entry3480; CHECK-P9-LE-NEXT: li r4, 293481; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 243482; CHECK-P9-LE-NEXT: oris r4, r4, 544373483; CHECK-P9-LE-NEXT: ori r4, r4, 40973484; CHECK-P9-LE-NEXT: or r3, r3, r43485; CHECK-P9-LE-NEXT: lhz r3, 0(r3)3486; CHECK-P9-LE-NEXT: blr3487;3488; CHECK-P9-BE-LABEL: ld_not_disjoint64_uint16_t_uint32_t:3489; CHECK-P9-BE: # %bb.0: # %entry3490; CHECK-P9-BE-NEXT: li r4, 293491; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 243492; CHECK-P9-BE-NEXT: oris r4, r4, 544373493; CHECK-P9-BE-NEXT: ori r4, r4, 40973494; CHECK-P9-BE-NEXT: or r3, r3, r43495; CHECK-P9-BE-NEXT: lhz r3, 2(r3)3496; CHECK-P9-BE-NEXT: blr3497;3498; CHECK-P8-LE-LABEL: ld_not_disjoint64_uint16_t_uint32_t:3499; CHECK-P8-LE: # %bb.0: # %entry3500; CHECK-P8-LE-NEXT: li r4, 293501; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 243502; CHECK-P8-LE-NEXT: oris r4, r4, 544373503; CHECK-P8-LE-NEXT: ori r4, r4, 40973504; CHECK-P8-LE-NEXT: or r3, r3, r43505; CHECK-P8-LE-NEXT: lhz r3, 0(r3)3506; CHECK-P8-LE-NEXT: blr3507;3508; CHECK-P8-BE-LABEL: ld_not_disjoint64_uint16_t_uint32_t:3509; CHECK-P8-BE: # %bb.0: # %entry3510; CHECK-P8-BE-NEXT: li r4, 293511; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 243512; CHECK-P8-BE-NEXT: oris r4, r4, 544373513; CHECK-P8-BE-NEXT: ori r4, r4, 40973514; CHECK-P8-BE-NEXT: or r3, r3, r43515; CHECK-P8-BE-NEXT: lhz r3, 2(r3)3516; CHECK-P8-BE-NEXT: blr3517entry:3518 %or = or i64 %ptr, 10000000000013519 %0 = inttoptr i64 %or to ptr3520 %1 = load i32, ptr %0, align 43521 %conv = trunc i32 %1 to i163522 ret i16 %conv3523}3524 3525; Function Attrs: norecurse nounwind readonly uwtable willreturn3526define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint32_t(i64 %ptr) {3527; CHECK-P10-LE-LABEL: ld_disjoint_align64_uint16_t_uint32_t:3528; CHECK-P10-LE: # %bb.0: # %entry3529; CHECK-P10-LE-NEXT: pli r4, 2441406253530; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 233531; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 243532; CHECK-P10-LE-NEXT: lhzx r3, r3, r43533; CHECK-P10-LE-NEXT: blr3534;3535; CHECK-P10-BE-LABEL: ld_disjoint_align64_uint16_t_uint32_t:3536; CHECK-P10-BE: # %bb.0: # %entry3537; CHECK-P10-BE-NEXT: pli r4, 2323538; CHECK-P10-BE-NEXT: pli r5, 35675873303539; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 233540; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 03541; CHECK-P10-BE-NEXT: lhzx r3, r3, r53542; CHECK-P10-BE-NEXT: blr3543;3544; CHECK-P9-LE-LABEL: ld_disjoint_align64_uint16_t_uint32_t:3545; CHECK-P9-LE: # %bb.0: # %entry3546; CHECK-P9-LE-NEXT: lis r4, 37253547; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 233548; CHECK-P9-LE-NEXT: ori r4, r4, 190253549; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 243550; CHECK-P9-LE-NEXT: lhzx r3, r3, r43551; CHECK-P9-LE-NEXT: blr3552;3553; CHECK-P9-BE-LABEL: ld_disjoint_align64_uint16_t_uint32_t:3554; CHECK-P9-BE: # %bb.0: # %entry3555; CHECK-P9-BE-NEXT: li r4, 293556; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 233557; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 243558; CHECK-P9-BE-NEXT: oris r4, r4, 544373559; CHECK-P9-BE-NEXT: ori r4, r4, 40983560; CHECK-P9-BE-NEXT: lhzx r3, r3, r43561; CHECK-P9-BE-NEXT: blr3562;3563; CHECK-P8-LE-LABEL: ld_disjoint_align64_uint16_t_uint32_t:3564; CHECK-P8-LE: # %bb.0: # %entry3565; CHECK-P8-LE-NEXT: lis r4, 37253566; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 233567; CHECK-P8-LE-NEXT: ori r4, r4, 190253568; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 243569; CHECK-P8-LE-NEXT: lhzx r3, r3, r43570; CHECK-P8-LE-NEXT: blr3571;3572; CHECK-P8-BE-LABEL: ld_disjoint_align64_uint16_t_uint32_t:3573; CHECK-P8-BE: # %bb.0: # %entry3574; CHECK-P8-BE-NEXT: li r4, 293575; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 233576; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 243577; CHECK-P8-BE-NEXT: oris r4, r4, 544373578; CHECK-P8-BE-NEXT: ori r4, r4, 40983579; CHECK-P8-BE-NEXT: lhzx r3, r3, r43580; CHECK-P8-BE-NEXT: blr3581entry:3582 %and = and i64 %ptr, -10995116277763583 %or = or i64 %and, 10000000000003584 %0 = inttoptr i64 %or to ptr3585 %1 = load i32, ptr %0, align 40963586 %conv = trunc i32 %1 to i163587 ret i16 %conv3588}3589 3590; Function Attrs: norecurse nounwind readonly uwtable willreturn3591define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint32_t() {3592; CHECK-LE-LABEL: ld_cst_align16_uint16_t_uint32_t:3593; CHECK-LE: # %bb.0: # %entry3594; CHECK-LE-NEXT: lhz r3, 4080(0)3595; CHECK-LE-NEXT: blr3596;3597; CHECK-BE-LABEL: ld_cst_align16_uint16_t_uint32_t:3598; CHECK-BE: # %bb.0: # %entry3599; CHECK-BE-NEXT: lhz r3, 4082(0)3600; CHECK-BE-NEXT: blr3601entry:3602 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 163603 %conv = trunc i32 %0 to i163604 ret i16 %conv3605}3606 3607; Function Attrs: norecurse nounwind readonly uwtable willreturn3608define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint32_t() {3609; CHECK-LE-LABEL: ld_cst_align32_uint16_t_uint32_t:3610; CHECK-LE: # %bb.0: # %entry3611; CHECK-LE-NEXT: lis r3, 1533612; CHECK-LE-NEXT: lhz r3, -27108(r3)3613; CHECK-LE-NEXT: blr3614;3615; CHECK-BE-LABEL: ld_cst_align32_uint16_t_uint32_t:3616; CHECK-BE: # %bb.0: # %entry3617; CHECK-BE-NEXT: lis r3, 1533618; CHECK-BE-NEXT: lhz r3, -27106(r3)3619; CHECK-BE-NEXT: blr3620entry:3621 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 43622 %conv = trunc i32 %0 to i163623 ret i16 %conv3624}3625 3626; Function Attrs: norecurse nounwind readonly uwtable willreturn3627define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint32_t() {3628; CHECK-P10-LE-LABEL: ld_cst_align64_uint16_t_uint32_t:3629; CHECK-P10-LE: # %bb.0: # %entry3630; CHECK-P10-LE-NEXT: pli r3, 2441406253631; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 243632; CHECK-P10-LE-NEXT: lhz r3, 0(r3)3633; CHECK-P10-LE-NEXT: blr3634;3635; CHECK-P10-BE-LABEL: ld_cst_align64_uint16_t_uint32_t:3636; CHECK-P10-BE: # %bb.0: # %entry3637; CHECK-P10-BE-NEXT: pli r3, 2323638; CHECK-P10-BE-NEXT: pli r4, 35675873303639; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 03640; CHECK-P10-BE-NEXT: lhz r3, 0(r4)3641; CHECK-P10-BE-NEXT: blr3642;3643; CHECK-P9-LE-LABEL: ld_cst_align64_uint16_t_uint32_t:3644; CHECK-P9-LE: # %bb.0: # %entry3645; CHECK-P9-LE-NEXT: lis r3, 37253646; CHECK-P9-LE-NEXT: ori r3, r3, 190253647; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 243648; CHECK-P9-LE-NEXT: lhz r3, 0(r3)3649; CHECK-P9-LE-NEXT: blr3650;3651; CHECK-P9-BE-LABEL: ld_cst_align64_uint16_t_uint32_t:3652; CHECK-P9-BE: # %bb.0: # %entry3653; CHECK-P9-BE-NEXT: li r3, 293654; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 243655; CHECK-P9-BE-NEXT: oris r3, r3, 544373656; CHECK-P9-BE-NEXT: ori r3, r3, 40983657; CHECK-P9-BE-NEXT: lhz r3, 0(r3)3658; CHECK-P9-BE-NEXT: blr3659;3660; CHECK-P8-LE-LABEL: ld_cst_align64_uint16_t_uint32_t:3661; CHECK-P8-LE: # %bb.0: # %entry3662; CHECK-P8-LE-NEXT: lis r3, 37253663; CHECK-P8-LE-NEXT: ori r3, r3, 190253664; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 243665; CHECK-P8-LE-NEXT: lhz r3, 0(r3)3666; CHECK-P8-LE-NEXT: blr3667;3668; CHECK-P8-BE-LABEL: ld_cst_align64_uint16_t_uint32_t:3669; CHECK-P8-BE: # %bb.0: # %entry3670; CHECK-P8-BE-NEXT: li r3, 293671; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 243672; CHECK-P8-BE-NEXT: oris r3, r3, 544373673; CHECK-P8-BE-NEXT: ori r3, r3, 40983674; CHECK-P8-BE-NEXT: lhz r3, 0(r3)3675; CHECK-P8-BE-NEXT: blr3676entry:3677 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 40963678 %conv = trunc i32 %0 to i163679 ret i16 %conv3680}3681 3682; Function Attrs: norecurse nounwind readonly uwtable willreturn3683define dso_local zeroext i16 @ld_0_uint16_t_uint64_t(i64 %ptr) {3684; CHECK-LE-LABEL: ld_0_uint16_t_uint64_t:3685; CHECK-LE: # %bb.0: # %entry3686; CHECK-LE-NEXT: lhz r3, 0(r3)3687; CHECK-LE-NEXT: blr3688;3689; CHECK-BE-LABEL: ld_0_uint16_t_uint64_t:3690; CHECK-BE: # %bb.0: # %entry3691; CHECK-BE-NEXT: lhz r3, 6(r3)3692; CHECK-BE-NEXT: blr3693entry:3694 %0 = inttoptr i64 %ptr to ptr3695 %1 = load i64, ptr %0, align 83696 %conv = trunc i64 %1 to i163697 ret i16 %conv3698}3699 3700; Function Attrs: norecurse nounwind readonly uwtable willreturn3701define dso_local zeroext i16 @ld_align16_uint16_t_uint64_t(ptr nocapture readonly %ptr) {3702; CHECK-LE-LABEL: ld_align16_uint16_t_uint64_t:3703; CHECK-LE: # %bb.0: # %entry3704; CHECK-LE-NEXT: lhz r3, 8(r3)3705; CHECK-LE-NEXT: blr3706;3707; CHECK-BE-LABEL: ld_align16_uint16_t_uint64_t:3708; CHECK-BE: # %bb.0: # %entry3709; CHECK-BE-NEXT: lhz r3, 14(r3)3710; CHECK-BE-NEXT: blr3711entry:3712 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 83713 %0 = load i64, ptr %add.ptr, align 83714 %conv = trunc i64 %0 to i163715 ret i16 %conv3716}3717 3718; Function Attrs: norecurse nounwind readonly uwtable willreturn3719define dso_local zeroext i16 @ld_align32_uint16_t_uint64_t(ptr nocapture readonly %ptr) {3720; CHECK-P10-LE-LABEL: ld_align32_uint16_t_uint64_t:3721; CHECK-P10-LE: # %bb.0: # %entry3722; CHECK-P10-LE-NEXT: plhz r3, 99999000(r3), 03723; CHECK-P10-LE-NEXT: blr3724;3725; CHECK-P10-BE-LABEL: ld_align32_uint16_t_uint64_t:3726; CHECK-P10-BE: # %bb.0: # %entry3727; CHECK-P10-BE-NEXT: plhz r3, 99999006(r3), 03728; CHECK-P10-BE-NEXT: blr3729;3730; CHECK-P9-LE-LABEL: ld_align32_uint16_t_uint64_t:3731; CHECK-P9-LE: # %bb.0: # %entry3732; CHECK-P9-LE-NEXT: lis r4, 15253733; CHECK-P9-LE-NEXT: ori r4, r4, 566003734; CHECK-P9-LE-NEXT: lhzx r3, r3, r43735; CHECK-P9-LE-NEXT: blr3736;3737; CHECK-P9-BE-LABEL: ld_align32_uint16_t_uint64_t:3738; CHECK-P9-BE: # %bb.0: # %entry3739; CHECK-P9-BE-NEXT: lis r4, 15253740; CHECK-P9-BE-NEXT: ori r4, r4, 566063741; CHECK-P9-BE-NEXT: lhzx r3, r3, r43742; CHECK-P9-BE-NEXT: blr3743;3744; CHECK-P8-LE-LABEL: ld_align32_uint16_t_uint64_t:3745; CHECK-P8-LE: # %bb.0: # %entry3746; CHECK-P8-LE-NEXT: lis r4, 15253747; CHECK-P8-LE-NEXT: ori r4, r4, 566003748; CHECK-P8-LE-NEXT: lhzx r3, r3, r43749; CHECK-P8-LE-NEXT: blr3750;3751; CHECK-P8-BE-LABEL: ld_align32_uint16_t_uint64_t:3752; CHECK-P8-BE: # %bb.0: # %entry3753; CHECK-P8-BE-NEXT: lis r4, 15253754; CHECK-P8-BE-NEXT: ori r4, r4, 566063755; CHECK-P8-BE-NEXT: lhzx r3, r3, r43756; CHECK-P8-BE-NEXT: blr3757entry:3758 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990003759 %0 = load i64, ptr %add.ptr, align 83760 %conv = trunc i64 %0 to i163761 ret i16 %conv3762}3763 3764; Function Attrs: norecurse nounwind readonly uwtable willreturn3765define dso_local zeroext i16 @ld_align64_uint16_t_uint64_t(ptr nocapture readonly %ptr) {3766; CHECK-P10-LE-LABEL: ld_align64_uint16_t_uint64_t:3767; CHECK-P10-LE: # %bb.0: # %entry3768; CHECK-P10-LE-NEXT: pli r4, 2441406253769; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 243770; CHECK-P10-LE-NEXT: lhzx r3, r3, r43771; CHECK-P10-LE-NEXT: blr3772;3773; CHECK-P10-BE-LABEL: ld_align64_uint16_t_uint64_t:3774; CHECK-P10-BE: # %bb.0: # %entry3775; CHECK-P10-BE-NEXT: pli r4, 2323776; CHECK-P10-BE-NEXT: pli r5, 35675873343777; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 03778; CHECK-P10-BE-NEXT: lhzx r3, r3, r53779; CHECK-P10-BE-NEXT: blr3780;3781; CHECK-P9-LE-LABEL: ld_align64_uint16_t_uint64_t:3782; CHECK-P9-LE: # %bb.0: # %entry3783; CHECK-P9-LE-NEXT: lis r4, 37253784; CHECK-P9-LE-NEXT: ori r4, r4, 190253785; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 243786; CHECK-P9-LE-NEXT: lhzx r3, r3, r43787; CHECK-P9-LE-NEXT: blr3788;3789; CHECK-P9-BE-LABEL: ld_align64_uint16_t_uint64_t:3790; CHECK-P9-BE: # %bb.0: # %entry3791; CHECK-P9-BE-NEXT: li r4, 293792; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 243793; CHECK-P9-BE-NEXT: oris r4, r4, 544373794; CHECK-P9-BE-NEXT: ori r4, r4, 41023795; CHECK-P9-BE-NEXT: lhzx r3, r3, r43796; CHECK-P9-BE-NEXT: blr3797;3798; CHECK-P8-LE-LABEL: ld_align64_uint16_t_uint64_t:3799; CHECK-P8-LE: # %bb.0: # %entry3800; CHECK-P8-LE-NEXT: lis r4, 37253801; CHECK-P8-LE-NEXT: ori r4, r4, 190253802; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 243803; CHECK-P8-LE-NEXT: lhzx r3, r3, r43804; CHECK-P8-LE-NEXT: blr3805;3806; CHECK-P8-BE-LABEL: ld_align64_uint16_t_uint64_t:3807; CHECK-P8-BE: # %bb.0: # %entry3808; CHECK-P8-BE-NEXT: li r4, 293809; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 243810; CHECK-P8-BE-NEXT: oris r4, r4, 544373811; CHECK-P8-BE-NEXT: ori r4, r4, 41023812; CHECK-P8-BE-NEXT: lhzx r3, r3, r43813; CHECK-P8-BE-NEXT: blr3814entry:3815 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000003816 %0 = load i64, ptr %add.ptr, align 83817 %conv = trunc i64 %0 to i163818 ret i16 %conv3819}3820 3821; Function Attrs: norecurse nounwind readonly uwtable willreturn3822define dso_local zeroext i16 @ld_reg_uint16_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) {3823; CHECK-LE-LABEL: ld_reg_uint16_t_uint64_t:3824; CHECK-LE: # %bb.0: # %entry3825; CHECK-LE-NEXT: lhzx r3, r3, r43826; CHECK-LE-NEXT: blr3827;3828; CHECK-BE-LABEL: ld_reg_uint16_t_uint64_t:3829; CHECK-BE: # %bb.0: # %entry3830; CHECK-BE-NEXT: add r3, r3, r43831; CHECK-BE-NEXT: lhz r3, 6(r3)3832; CHECK-BE-NEXT: blr3833entry:3834 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off3835 %0 = load i64, ptr %add.ptr, align 83836 %conv = trunc i64 %0 to i163837 ret i16 %conv3838}3839 3840; Function Attrs: norecurse nounwind readonly uwtable willreturn3841define dso_local zeroext i16 @ld_or_uint16_t_uint64_t(i64 %ptr, i8 zeroext %off) {3842; CHECK-LE-LABEL: ld_or_uint16_t_uint64_t:3843; CHECK-LE: # %bb.0: # %entry3844; CHECK-LE-NEXT: or r3, r4, r33845; CHECK-LE-NEXT: lhz r3, 0(r3)3846; CHECK-LE-NEXT: blr3847;3848; CHECK-BE-LABEL: ld_or_uint16_t_uint64_t:3849; CHECK-BE: # %bb.0: # %entry3850; CHECK-BE-NEXT: or r3, r4, r33851; CHECK-BE-NEXT: lhz r3, 6(r3)3852; CHECK-BE-NEXT: blr3853entry:3854 %conv = zext i8 %off to i643855 %or = or i64 %conv, %ptr3856 %0 = inttoptr i64 %or to ptr3857 %1 = load i64, ptr %0, align 83858 %conv1 = trunc i64 %1 to i163859 ret i16 %conv13860}3861 3862; Function Attrs: norecurse nounwind readonly uwtable willreturn3863define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint64_t(i64 %ptr) {3864; CHECK-LE-LABEL: ld_not_disjoint16_uint16_t_uint64_t:3865; CHECK-LE: # %bb.0: # %entry3866; CHECK-LE-NEXT: ori r3, r3, 63867; CHECK-LE-NEXT: lhz r3, 0(r3)3868; CHECK-LE-NEXT: blr3869;3870; CHECK-BE-LABEL: ld_not_disjoint16_uint16_t_uint64_t:3871; CHECK-BE: # %bb.0: # %entry3872; CHECK-BE-NEXT: ori r3, r3, 63873; CHECK-BE-NEXT: lhz r3, 6(r3)3874; CHECK-BE-NEXT: blr3875entry:3876 %or = or i64 %ptr, 63877 %0 = inttoptr i64 %or to ptr3878 %1 = load i64, ptr %0, align 83879 %conv = trunc i64 %1 to i163880 ret i16 %conv3881}3882 3883; Function Attrs: norecurse nounwind readonly uwtable willreturn3884define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint64_t(i64 %ptr) {3885; CHECK-LE-LABEL: ld_disjoint_align16_uint16_t_uint64_t:3886; CHECK-LE: # %bb.0: # %entry3887; CHECK-LE-NEXT: rldicr r3, r3, 0, 513888; CHECK-LE-NEXT: lhz r3, 24(r3)3889; CHECK-LE-NEXT: blr3890;3891; CHECK-BE-LABEL: ld_disjoint_align16_uint16_t_uint64_t:3892; CHECK-BE: # %bb.0: # %entry3893; CHECK-BE-NEXT: rldicr r3, r3, 0, 513894; CHECK-BE-NEXT: lhz r3, 30(r3)3895; CHECK-BE-NEXT: blr3896entry:3897 %and = and i64 %ptr, -40963898 %or = or i64 %and, 243899 %0 = inttoptr i64 %or to ptr3900 %1 = load i64, ptr %0, align 83901 %conv = trunc i64 %1 to i163902 ret i16 %conv3903}3904 3905; Function Attrs: norecurse nounwind readonly uwtable willreturn3906define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint64_t(i64 %ptr) {3907; CHECK-LE-LABEL: ld_not_disjoint32_uint16_t_uint64_t:3908; CHECK-LE: # %bb.0: # %entry3909; CHECK-LE-NEXT: ori r3, r3, 344633910; CHECK-LE-NEXT: oris r3, r3, 13911; CHECK-LE-NEXT: lhz r3, 0(r3)3912; CHECK-LE-NEXT: blr3913;3914; CHECK-BE-LABEL: ld_not_disjoint32_uint16_t_uint64_t:3915; CHECK-BE: # %bb.0: # %entry3916; CHECK-BE-NEXT: ori r3, r3, 344633917; CHECK-BE-NEXT: oris r3, r3, 13918; CHECK-BE-NEXT: lhz r3, 6(r3)3919; CHECK-BE-NEXT: blr3920entry:3921 %or = or i64 %ptr, 999993922 %0 = inttoptr i64 %or to ptr3923 %1 = load i64, ptr %0, align 83924 %conv = trunc i64 %1 to i163925 ret i16 %conv3926}3927 3928; Function Attrs: norecurse nounwind readonly uwtable willreturn3929define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint64_t(i64 %ptr) {3930; CHECK-P10-LE-LABEL: ld_disjoint_align32_uint16_t_uint64_t:3931; CHECK-P10-LE: # %bb.0: # %entry3932; CHECK-P10-LE-NEXT: lis r4, -152643933; CHECK-P10-LE-NEXT: and r3, r3, r43934; CHECK-P10-LE-NEXT: plhz r3, 999990000(r3), 03935; CHECK-P10-LE-NEXT: blr3936;3937; CHECK-P10-BE-LABEL: ld_disjoint_align32_uint16_t_uint64_t:3938; CHECK-P10-BE: # %bb.0: # %entry3939; CHECK-P10-BE-NEXT: lis r4, -152643940; CHECK-P10-BE-NEXT: and r3, r3, r43941; CHECK-P10-BE-NEXT: plhz r3, 999990006(r3), 03942; CHECK-P10-BE-NEXT: blr3943;3944; CHECK-P9-LE-LABEL: ld_disjoint_align32_uint16_t_uint64_t:3945; CHECK-P9-LE: # %bb.0: # %entry3946; CHECK-P9-LE-NEXT: lis r4, -152643947; CHECK-P9-LE-NEXT: and r3, r3, r43948; CHECK-P9-LE-NEXT: lis r4, 152583949; CHECK-P9-LE-NEXT: ori r4, r4, 417123950; CHECK-P9-LE-NEXT: lhzx r3, r3, r43951; CHECK-P9-LE-NEXT: blr3952;3953; CHECK-P9-BE-LABEL: ld_disjoint_align32_uint16_t_uint64_t:3954; CHECK-P9-BE: # %bb.0: # %entry3955; CHECK-P9-BE-NEXT: lis r4, -152643956; CHECK-P9-BE-NEXT: and r3, r3, r43957; CHECK-P9-BE-NEXT: lis r4, 152583958; CHECK-P9-BE-NEXT: ori r4, r4, 417183959; CHECK-P9-BE-NEXT: lhzx r3, r3, r43960; CHECK-P9-BE-NEXT: blr3961;3962; CHECK-P8-LE-LABEL: ld_disjoint_align32_uint16_t_uint64_t:3963; CHECK-P8-LE: # %bb.0: # %entry3964; CHECK-P8-LE-NEXT: lis r4, -152643965; CHECK-P8-LE-NEXT: and r3, r3, r43966; CHECK-P8-LE-NEXT: lis r4, 152583967; CHECK-P8-LE-NEXT: ori r4, r4, 417123968; CHECK-P8-LE-NEXT: lhzx r3, r3, r43969; CHECK-P8-LE-NEXT: blr3970;3971; CHECK-P8-BE-LABEL: ld_disjoint_align32_uint16_t_uint64_t:3972; CHECK-P8-BE: # %bb.0: # %entry3973; CHECK-P8-BE-NEXT: lis r4, -152643974; CHECK-P8-BE-NEXT: and r3, r3, r43975; CHECK-P8-BE-NEXT: lis r4, 152583976; CHECK-P8-BE-NEXT: ori r4, r4, 417183977; CHECK-P8-BE-NEXT: lhzx r3, r3, r43978; CHECK-P8-BE-NEXT: blr3979entry:3980 %and = and i64 %ptr, -10003415043981 %or = or i64 %and, 9999900003982 %0 = inttoptr i64 %or to ptr3983 %1 = load i64, ptr %0, align 163984 %conv = trunc i64 %1 to i163985 ret i16 %conv3986}3987 3988; Function Attrs: norecurse nounwind readonly uwtable willreturn3989define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint64_t(i64 %ptr) {3990; CHECK-P10-LE-LABEL: ld_not_disjoint64_uint16_t_uint64_t:3991; CHECK-P10-LE: # %bb.0: # %entry3992; CHECK-P10-LE-NEXT: pli r4, 2323993; CHECK-P10-LE-NEXT: pli r5, 35675873293994; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 03995; CHECK-P10-LE-NEXT: or r3, r3, r53996; CHECK-P10-LE-NEXT: lhz r3, 0(r3)3997; CHECK-P10-LE-NEXT: blr3998;3999; CHECK-P10-BE-LABEL: ld_not_disjoint64_uint16_t_uint64_t:4000; CHECK-P10-BE: # %bb.0: # %entry4001; CHECK-P10-BE-NEXT: pli r4, 2324002; CHECK-P10-BE-NEXT: pli r5, 35675873294003; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 04004; CHECK-P10-BE-NEXT: or r3, r3, r54005; CHECK-P10-BE-NEXT: lhz r3, 6(r3)4006; CHECK-P10-BE-NEXT: blr4007;4008; CHECK-P9-LE-LABEL: ld_not_disjoint64_uint16_t_uint64_t:4009; CHECK-P9-LE: # %bb.0: # %entry4010; CHECK-P9-LE-NEXT: li r4, 294011; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 244012; CHECK-P9-LE-NEXT: oris r4, r4, 544374013; CHECK-P9-LE-NEXT: ori r4, r4, 40974014; CHECK-P9-LE-NEXT: or r3, r3, r44015; CHECK-P9-LE-NEXT: lhz r3, 0(r3)4016; CHECK-P9-LE-NEXT: blr4017;4018; CHECK-P9-BE-LABEL: ld_not_disjoint64_uint16_t_uint64_t:4019; CHECK-P9-BE: # %bb.0: # %entry4020; CHECK-P9-BE-NEXT: li r4, 294021; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 244022; CHECK-P9-BE-NEXT: oris r4, r4, 544374023; CHECK-P9-BE-NEXT: ori r4, r4, 40974024; CHECK-P9-BE-NEXT: or r3, r3, r44025; CHECK-P9-BE-NEXT: lhz r3, 6(r3)4026; CHECK-P9-BE-NEXT: blr4027;4028; CHECK-P8-LE-LABEL: ld_not_disjoint64_uint16_t_uint64_t:4029; CHECK-P8-LE: # %bb.0: # %entry4030; CHECK-P8-LE-NEXT: li r4, 294031; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 244032; CHECK-P8-LE-NEXT: oris r4, r4, 544374033; CHECK-P8-LE-NEXT: ori r4, r4, 40974034; CHECK-P8-LE-NEXT: or r3, r3, r44035; CHECK-P8-LE-NEXT: lhz r3, 0(r3)4036; CHECK-P8-LE-NEXT: blr4037;4038; CHECK-P8-BE-LABEL: ld_not_disjoint64_uint16_t_uint64_t:4039; CHECK-P8-BE: # %bb.0: # %entry4040; CHECK-P8-BE-NEXT: li r4, 294041; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 244042; CHECK-P8-BE-NEXT: oris r4, r4, 544374043; CHECK-P8-BE-NEXT: ori r4, r4, 40974044; CHECK-P8-BE-NEXT: or r3, r3, r44045; CHECK-P8-BE-NEXT: lhz r3, 6(r3)4046; CHECK-P8-BE-NEXT: blr4047entry:4048 %or = or i64 %ptr, 10000000000014049 %0 = inttoptr i64 %or to ptr4050 %1 = load i64, ptr %0, align 84051 %conv = trunc i64 %1 to i164052 ret i16 %conv4053}4054 4055; Function Attrs: norecurse nounwind readonly uwtable willreturn4056define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint64_t(i64 %ptr) {4057; CHECK-P10-LE-LABEL: ld_disjoint_align64_uint16_t_uint64_t:4058; CHECK-P10-LE: # %bb.0: # %entry4059; CHECK-P10-LE-NEXT: pli r4, 2441406254060; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 234061; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 244062; CHECK-P10-LE-NEXT: lhzx r3, r3, r44063; CHECK-P10-LE-NEXT: blr4064;4065; CHECK-P10-BE-LABEL: ld_disjoint_align64_uint16_t_uint64_t:4066; CHECK-P10-BE: # %bb.0: # %entry4067; CHECK-P10-BE-NEXT: pli r4, 2324068; CHECK-P10-BE-NEXT: pli r5, 35675873344069; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 234070; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 04071; CHECK-P10-BE-NEXT: lhzx r3, r3, r54072; CHECK-P10-BE-NEXT: blr4073;4074; CHECK-P9-LE-LABEL: ld_disjoint_align64_uint16_t_uint64_t:4075; CHECK-P9-LE: # %bb.0: # %entry4076; CHECK-P9-LE-NEXT: lis r4, 37254077; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 234078; CHECK-P9-LE-NEXT: ori r4, r4, 190254079; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 244080; CHECK-P9-LE-NEXT: lhzx r3, r3, r44081; CHECK-P9-LE-NEXT: blr4082;4083; CHECK-P9-BE-LABEL: ld_disjoint_align64_uint16_t_uint64_t:4084; CHECK-P9-BE: # %bb.0: # %entry4085; CHECK-P9-BE-NEXT: li r4, 294086; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 234087; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 244088; CHECK-P9-BE-NEXT: oris r4, r4, 544374089; CHECK-P9-BE-NEXT: ori r4, r4, 41024090; CHECK-P9-BE-NEXT: lhzx r3, r3, r44091; CHECK-P9-BE-NEXT: blr4092;4093; CHECK-P8-LE-LABEL: ld_disjoint_align64_uint16_t_uint64_t:4094; CHECK-P8-LE: # %bb.0: # %entry4095; CHECK-P8-LE-NEXT: lis r4, 37254096; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 234097; CHECK-P8-LE-NEXT: ori r4, r4, 190254098; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 244099; CHECK-P8-LE-NEXT: lhzx r3, r3, r44100; CHECK-P8-LE-NEXT: blr4101;4102; CHECK-P8-BE-LABEL: ld_disjoint_align64_uint16_t_uint64_t:4103; CHECK-P8-BE: # %bb.0: # %entry4104; CHECK-P8-BE-NEXT: li r4, 294105; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 234106; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 244107; CHECK-P8-BE-NEXT: oris r4, r4, 544374108; CHECK-P8-BE-NEXT: ori r4, r4, 41024109; CHECK-P8-BE-NEXT: lhzx r3, r3, r44110; CHECK-P8-BE-NEXT: blr4111entry:4112 %and = and i64 %ptr, -10995116277764113 %or = or i64 %and, 10000000000004114 %0 = inttoptr i64 %or to ptr4115 %1 = load i64, ptr %0, align 40964116 %conv = trunc i64 %1 to i164117 ret i16 %conv4118}4119 4120; Function Attrs: norecurse nounwind readonly uwtable willreturn4121define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint64_t() {4122; CHECK-LE-LABEL: ld_cst_align16_uint16_t_uint64_t:4123; CHECK-LE: # %bb.0: # %entry4124; CHECK-LE-NEXT: lhz r3, 4080(0)4125; CHECK-LE-NEXT: blr4126;4127; CHECK-BE-LABEL: ld_cst_align16_uint16_t_uint64_t:4128; CHECK-BE: # %bb.0: # %entry4129; CHECK-BE-NEXT: lhz r3, 4086(0)4130; CHECK-BE-NEXT: blr4131entry:4132 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 164133 %conv = trunc i64 %0 to i164134 ret i16 %conv4135}4136 4137; Function Attrs: norecurse nounwind readonly uwtable willreturn4138define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint64_t() {4139; CHECK-LE-LABEL: ld_cst_align32_uint16_t_uint64_t:4140; CHECK-LE: # %bb.0: # %entry4141; CHECK-LE-NEXT: lis r3, 1534142; CHECK-LE-NEXT: lhz r3, -27108(r3)4143; CHECK-LE-NEXT: blr4144;4145; CHECK-BE-LABEL: ld_cst_align32_uint16_t_uint64_t:4146; CHECK-BE: # %bb.0: # %entry4147; CHECK-BE-NEXT: lis r3, 1534148; CHECK-BE-NEXT: lhz r3, -27102(r3)4149; CHECK-BE-NEXT: blr4150entry:4151 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 84152 %conv = trunc i64 %0 to i164153 ret i16 %conv4154}4155 4156; Function Attrs: norecurse nounwind readonly uwtable willreturn4157define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint64_t() {4158; CHECK-P10-LE-LABEL: ld_cst_align64_uint16_t_uint64_t:4159; CHECK-P10-LE: # %bb.0: # %entry4160; CHECK-P10-LE-NEXT: pli r3, 2441406254161; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 244162; CHECK-P10-LE-NEXT: lhz r3, 0(r3)4163; CHECK-P10-LE-NEXT: blr4164;4165; CHECK-P10-BE-LABEL: ld_cst_align64_uint16_t_uint64_t:4166; CHECK-P10-BE: # %bb.0: # %entry4167; CHECK-P10-BE-NEXT: pli r3, 2324168; CHECK-P10-BE-NEXT: pli r4, 35675873344169; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 04170; CHECK-P10-BE-NEXT: lhz r3, 0(r4)4171; CHECK-P10-BE-NEXT: blr4172;4173; CHECK-P9-LE-LABEL: ld_cst_align64_uint16_t_uint64_t:4174; CHECK-P9-LE: # %bb.0: # %entry4175; CHECK-P9-LE-NEXT: lis r3, 37254176; CHECK-P9-LE-NEXT: ori r3, r3, 190254177; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 244178; CHECK-P9-LE-NEXT: lhz r3, 0(r3)4179; CHECK-P9-LE-NEXT: blr4180;4181; CHECK-P9-BE-LABEL: ld_cst_align64_uint16_t_uint64_t:4182; CHECK-P9-BE: # %bb.0: # %entry4183; CHECK-P9-BE-NEXT: li r3, 294184; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 244185; CHECK-P9-BE-NEXT: oris r3, r3, 544374186; CHECK-P9-BE-NEXT: ori r3, r3, 41024187; CHECK-P9-BE-NEXT: lhz r3, 0(r3)4188; CHECK-P9-BE-NEXT: blr4189;4190; CHECK-P8-LE-LABEL: ld_cst_align64_uint16_t_uint64_t:4191; CHECK-P8-LE: # %bb.0: # %entry4192; CHECK-P8-LE-NEXT: lis r3, 37254193; CHECK-P8-LE-NEXT: ori r3, r3, 190254194; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 244195; CHECK-P8-LE-NEXT: lhz r3, 0(r3)4196; CHECK-P8-LE-NEXT: blr4197;4198; CHECK-P8-BE-LABEL: ld_cst_align64_uint16_t_uint64_t:4199; CHECK-P8-BE: # %bb.0: # %entry4200; CHECK-P8-BE-NEXT: li r3, 294201; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 244202; CHECK-P8-BE-NEXT: oris r3, r3, 544374203; CHECK-P8-BE-NEXT: ori r3, r3, 41024204; CHECK-P8-BE-NEXT: lhz r3, 0(r3)4205; CHECK-P8-BE-NEXT: blr4206entry:4207 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 40964208 %conv = trunc i64 %0 to i164209 ret i16 %conv4210}4211 4212; Function Attrs: norecurse nounwind readonly uwtable willreturn4213define dso_local zeroext i16 @ld_align16_uint16_t_float(ptr nocapture readonly %ptr) {4214; CHECK-LABEL: ld_align16_uint16_t_float:4215; CHECK: # %bb.0: # %entry4216; CHECK-NEXT: lfs f0, 8(r3)4217; CHECK-NEXT: xscvdpsxws f0, f04218; CHECK-NEXT: mffprwz r3, f04219; CHECK-NEXT: blr4220entry:4221 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84222 %0 = load float, ptr %add.ptr, align 44223 %conv = fptoui float %0 to i164224 ret i16 %conv4225}4226 4227; Function Attrs: norecurse nounwind readonly uwtable willreturn4228define dso_local zeroext i16 @ld_align32_uint16_t_float(ptr nocapture readonly %ptr) {4229; CHECK-P10-LABEL: ld_align32_uint16_t_float:4230; CHECK-P10: # %bb.0: # %entry4231; CHECK-P10-NEXT: plfs f0, 99999000(r3), 04232; CHECK-P10-NEXT: xscvdpsxws f0, f04233; CHECK-P10-NEXT: mffprwz r3, f04234; CHECK-P10-NEXT: blr4235;4236; CHECK-PREP10-LABEL: ld_align32_uint16_t_float:4237; CHECK-PREP10: # %bb.0: # %entry4238; CHECK-PREP10-NEXT: lis r4, 15254239; CHECK-PREP10-NEXT: ori r4, r4, 566004240; CHECK-PREP10-NEXT: lfsx f0, r3, r44241; CHECK-PREP10-NEXT: xscvdpsxws f0, f04242; CHECK-PREP10-NEXT: mffprwz r3, f04243; CHECK-PREP10-NEXT: blr4244entry:4245 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004246 %0 = load float, ptr %add.ptr, align 44247 %conv = fptoui float %0 to i164248 ret i16 %conv4249}4250 4251; Function Attrs: norecurse nounwind readonly uwtable willreturn4252define dso_local zeroext i16 @ld_align64_uint16_t_float(ptr nocapture readonly %ptr) {4253; CHECK-P10-LABEL: ld_align64_uint16_t_float:4254; CHECK-P10: # %bb.0: # %entry4255; CHECK-P10-NEXT: pli r4, 2441406254256; CHECK-P10-NEXT: rldic r4, r4, 12, 244257; CHECK-P10-NEXT: lfsx f0, r3, r44258; CHECK-P10-NEXT: xscvdpsxws f0, f04259; CHECK-P10-NEXT: mffprwz r3, f04260; CHECK-P10-NEXT: blr4261;4262; CHECK-PREP10-LABEL: ld_align64_uint16_t_float:4263; CHECK-PREP10: # %bb.0: # %entry4264; CHECK-PREP10-NEXT: lis r4, 37254265; CHECK-PREP10-NEXT: ori r4, r4, 190254266; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244267; CHECK-PREP10-NEXT: lfsx f0, r3, r44268; CHECK-PREP10-NEXT: xscvdpsxws f0, f04269; CHECK-PREP10-NEXT: mffprwz r3, f04270; CHECK-PREP10-NEXT: blr4271entry:4272 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004273 %0 = load float, ptr %add.ptr, align 44274 %conv = fptoui float %0 to i164275 ret i16 %conv4276}4277 4278; Function Attrs: norecurse nounwind readonly uwtable willreturn4279define dso_local zeroext i16 @ld_reg_uint16_t_float(ptr nocapture readonly %ptr, i64 %off) {4280; CHECK-LABEL: ld_reg_uint16_t_float:4281; CHECK: # %bb.0: # %entry4282; CHECK-NEXT: lfsx f0, r3, r44283; CHECK-NEXT: xscvdpsxws f0, f04284; CHECK-NEXT: mffprwz r3, f04285; CHECK-NEXT: blr4286entry:4287 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4288 %0 = load float, ptr %add.ptr, align 44289 %conv = fptoui float %0 to i164290 ret i16 %conv4291}4292 4293; Function Attrs: norecurse nounwind readonly uwtable willreturn4294define dso_local zeroext i16 @ld_or_uint16_t_float(i64 %ptr, i8 zeroext %off) {4295; CHECK-LABEL: ld_or_uint16_t_float:4296; CHECK: # %bb.0: # %entry4297; CHECK-NEXT: or r3, r4, r34298; CHECK-NEXT: lfs f0, 0(r3)4299; CHECK-NEXT: xscvdpsxws f0, f04300; CHECK-NEXT: mffprwz r3, f04301; CHECK-NEXT: blr4302entry:4303 %conv = zext i8 %off to i644304 %or = or i64 %conv, %ptr4305 %0 = inttoptr i64 %or to ptr4306 %1 = load float, ptr %0, align 44307 %conv1 = fptoui float %1 to i164308 ret i16 %conv14309}4310 4311; Function Attrs: norecurse nounwind readonly uwtable willreturn4312define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_float(i64 %ptr) {4313; CHECK-LABEL: ld_not_disjoint16_uint16_t_float:4314; CHECK: # %bb.0: # %entry4315; CHECK-NEXT: ori r3, r3, 64316; CHECK-NEXT: lfs f0, 0(r3)4317; CHECK-NEXT: xscvdpsxws f0, f04318; CHECK-NEXT: mffprwz r3, f04319; CHECK-NEXT: blr4320entry:4321 %or = or i64 %ptr, 64322 %0 = inttoptr i64 %or to ptr4323 %1 = load float, ptr %0, align 44324 %conv = fptoui float %1 to i164325 ret i16 %conv4326}4327 4328; Function Attrs: norecurse nounwind readonly uwtable willreturn4329define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_float(i64 %ptr) {4330; CHECK-LABEL: ld_disjoint_align16_uint16_t_float:4331; CHECK: # %bb.0: # %entry4332; CHECK-NEXT: rldicr r3, r3, 0, 514333; CHECK-NEXT: lfs f0, 24(r3)4334; CHECK-NEXT: xscvdpsxws f0, f04335; CHECK-NEXT: mffprwz r3, f04336; CHECK-NEXT: blr4337entry:4338 %and = and i64 %ptr, -40964339 %or = or i64 %and, 244340 %0 = inttoptr i64 %or to ptr4341 %1 = load float, ptr %0, align 84342 %conv = fptoui float %1 to i164343 ret i16 %conv4344}4345 4346; Function Attrs: norecurse nounwind readonly uwtable willreturn4347define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_float(i64 %ptr) {4348; CHECK-LABEL: ld_not_disjoint32_uint16_t_float:4349; CHECK: # %bb.0: # %entry4350; CHECK-NEXT: ori r3, r3, 344634351; CHECK-NEXT: oris r3, r3, 14352; CHECK-NEXT: lfs f0, 0(r3)4353; CHECK-NEXT: xscvdpsxws f0, f04354; CHECK-NEXT: mffprwz r3, f04355; CHECK-NEXT: blr4356entry:4357 %or = or i64 %ptr, 999994358 %0 = inttoptr i64 %or to ptr4359 %1 = load float, ptr %0, align 44360 %conv = fptoui float %1 to i164361 ret i16 %conv4362}4363 4364; Function Attrs: norecurse nounwind readonly uwtable willreturn4365define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_float(i64 %ptr) {4366; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_float:4367; CHECK-P10: # %bb.0: # %entry4368; CHECK-P10-NEXT: lis r4, -152644369; CHECK-P10-NEXT: and r3, r3, r44370; CHECK-P10-NEXT: plfs f0, 999990000(r3), 04371; CHECK-P10-NEXT: xscvdpsxws f0, f04372; CHECK-P10-NEXT: mffprwz r3, f04373; CHECK-P10-NEXT: blr4374;4375; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_float:4376; CHECK-PREP10: # %bb.0: # %entry4377; CHECK-PREP10-NEXT: lis r4, -152644378; CHECK-PREP10-NEXT: and r3, r3, r44379; CHECK-PREP10-NEXT: lis r4, 152584380; CHECK-PREP10-NEXT: ori r4, r4, 417124381; CHECK-PREP10-NEXT: lfsx f0, r3, r44382; CHECK-PREP10-NEXT: xscvdpsxws f0, f04383; CHECK-PREP10-NEXT: mffprwz r3, f04384; CHECK-PREP10-NEXT: blr4385entry:4386 %and = and i64 %ptr, -10003415044387 %or = or i64 %and, 9999900004388 %0 = inttoptr i64 %or to ptr4389 %1 = load float, ptr %0, align 164390 %conv = fptoui float %1 to i164391 ret i16 %conv4392}4393 4394; Function Attrs: norecurse nounwind readonly uwtable willreturn4395define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_float(i64 %ptr) {4396; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_float:4397; CHECK-P10: # %bb.0: # %entry4398; CHECK-P10-NEXT: pli r4, 2324399; CHECK-P10-NEXT: pli r5, 35675873294400; CHECK-P10-NEXT: rldimi r5, r4, 32, 04401; CHECK-P10-NEXT: or r3, r3, r54402; CHECK-P10-NEXT: lfs f0, 0(r3)4403; CHECK-P10-NEXT: xscvdpsxws f0, f04404; CHECK-P10-NEXT: mffprwz r3, f04405; CHECK-P10-NEXT: blr4406;4407; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_float:4408; CHECK-PREP10: # %bb.0: # %entry4409; CHECK-PREP10-NEXT: li r4, 294410; CHECK-PREP10-NEXT: rldic r4, r4, 35, 244411; CHECK-PREP10-NEXT: oris r4, r4, 544374412; CHECK-PREP10-NEXT: ori r4, r4, 40974413; CHECK-PREP10-NEXT: or r3, r3, r44414; CHECK-PREP10-NEXT: lfs f0, 0(r3)4415; CHECK-PREP10-NEXT: xscvdpsxws f0, f04416; CHECK-PREP10-NEXT: mffprwz r3, f04417; CHECK-PREP10-NEXT: blr4418entry:4419 %or = or i64 %ptr, 10000000000014420 %0 = inttoptr i64 %or to ptr4421 %1 = load float, ptr %0, align 44422 %conv = fptoui float %1 to i164423 ret i16 %conv4424}4425 4426; Function Attrs: norecurse nounwind readonly uwtable willreturn4427define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_float(i64 %ptr) {4428; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_float:4429; CHECK-P10: # %bb.0: # %entry4430; CHECK-P10-NEXT: pli r4, 2441406254431; CHECK-P10-NEXT: rldicr r3, r3, 0, 234432; CHECK-P10-NEXT: rldic r4, r4, 12, 244433; CHECK-P10-NEXT: lfsx f0, r3, r44434; CHECK-P10-NEXT: xscvdpsxws f0, f04435; CHECK-P10-NEXT: mffprwz r3, f04436; CHECK-P10-NEXT: blr4437;4438; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_float:4439; CHECK-PREP10: # %bb.0: # %entry4440; CHECK-PREP10-NEXT: lis r4, 37254441; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234442; CHECK-PREP10-NEXT: ori r4, r4, 190254443; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244444; CHECK-PREP10-NEXT: lfsx f0, r3, r44445; CHECK-PREP10-NEXT: xscvdpsxws f0, f04446; CHECK-PREP10-NEXT: mffprwz r3, f04447; CHECK-PREP10-NEXT: blr4448entry:4449 %and = and i64 %ptr, -10995116277764450 %or = or i64 %and, 10000000000004451 %0 = inttoptr i64 %or to ptr4452 %1 = load float, ptr %0, align 40964453 %conv = fptoui float %1 to i164454 ret i16 %conv4455}4456 4457; Function Attrs: norecurse nounwind readonly uwtable willreturn4458define dso_local zeroext i16 @ld_cst_align16_uint16_t_float() {4459; CHECK-LABEL: ld_cst_align16_uint16_t_float:4460; CHECK: # %bb.0: # %entry4461; CHECK-NEXT: lfs f0, 4080(0)4462; CHECK-NEXT: xscvdpsxws f0, f04463; CHECK-NEXT: mffprwz r3, f04464; CHECK-NEXT: blr4465entry:4466 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 164467 %conv = fptoui float %0 to i164468 ret i16 %conv4469}4470 4471; Function Attrs: norecurse nounwind readonly uwtable willreturn4472define dso_local zeroext i16 @ld_cst_align32_uint16_t_float() {4473; CHECK-LABEL: ld_cst_align32_uint16_t_float:4474; CHECK: # %bb.0: # %entry4475; CHECK-NEXT: lis r3, 1534476; CHECK-NEXT: lfs f0, -27108(r3)4477; CHECK-NEXT: xscvdpsxws f0, f04478; CHECK-NEXT: mffprwz r3, f04479; CHECK-NEXT: blr4480entry:4481 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 44482 %conv = fptoui float %0 to i164483 ret i16 %conv4484}4485 4486; Function Attrs: norecurse nounwind readonly uwtable willreturn4487define dso_local zeroext i16 @ld_cst_align64_uint16_t_float() {4488; CHECK-P10-LABEL: ld_cst_align64_uint16_t_float:4489; CHECK-P10: # %bb.0: # %entry4490; CHECK-P10-NEXT: pli r3, 2441406254491; CHECK-P10-NEXT: rldic r3, r3, 12, 244492; CHECK-P10-NEXT: lfs f0, 0(r3)4493; CHECK-P10-NEXT: xscvdpsxws f0, f04494; CHECK-P10-NEXT: mffprwz r3, f04495; CHECK-P10-NEXT: blr4496;4497; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_float:4498; CHECK-PREP10: # %bb.0: # %entry4499; CHECK-PREP10-NEXT: lis r3, 37254500; CHECK-PREP10-NEXT: ori r3, r3, 190254501; CHECK-PREP10-NEXT: rldic r3, r3, 12, 244502; CHECK-PREP10-NEXT: lfs f0, 0(r3)4503; CHECK-PREP10-NEXT: xscvdpsxws f0, f04504; CHECK-PREP10-NEXT: mffprwz r3, f04505; CHECK-PREP10-NEXT: blr4506entry:4507 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 40964508 %conv = fptoui float %0 to i164509 ret i16 %conv4510}4511 4512; Function Attrs: norecurse nounwind readonly uwtable willreturn4513define dso_local zeroext i16 @ld_0_uint16_t_double(i64 %ptr) {4514; CHECK-LABEL: ld_0_uint16_t_double:4515; CHECK: # %bb.0: # %entry4516; CHECK-NEXT: lfd f0, 0(r3)4517; CHECK-NEXT: xscvdpsxws f0, f04518; CHECK-NEXT: mffprwz r3, f04519; CHECK-NEXT: blr4520entry:4521 %0 = inttoptr i64 %ptr to ptr4522 %1 = load double, ptr %0, align 84523 %conv = fptoui double %1 to i164524 ret i16 %conv4525}4526 4527; Function Attrs: norecurse nounwind readonly uwtable willreturn4528define dso_local zeroext i16 @ld_align16_uint16_t_double(ptr nocapture readonly %ptr) {4529; CHECK-LABEL: ld_align16_uint16_t_double:4530; CHECK: # %bb.0: # %entry4531; CHECK-NEXT: lfd f0, 8(r3)4532; CHECK-NEXT: xscvdpsxws f0, f04533; CHECK-NEXT: mffprwz r3, f04534; CHECK-NEXT: blr4535entry:4536 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84537 %0 = load double, ptr %add.ptr, align 84538 %conv = fptoui double %0 to i164539 ret i16 %conv4540}4541 4542; Function Attrs: norecurse nounwind readonly uwtable willreturn4543define dso_local zeroext i16 @ld_align32_uint16_t_double(ptr nocapture readonly %ptr) {4544; CHECK-P10-LABEL: ld_align32_uint16_t_double:4545; CHECK-P10: # %bb.0: # %entry4546; CHECK-P10-NEXT: plfd f0, 99999000(r3), 04547; CHECK-P10-NEXT: xscvdpsxws f0, f04548; CHECK-P10-NEXT: mffprwz r3, f04549; CHECK-P10-NEXT: blr4550;4551; CHECK-PREP10-LABEL: ld_align32_uint16_t_double:4552; CHECK-PREP10: # %bb.0: # %entry4553; CHECK-PREP10-NEXT: lis r4, 15254554; CHECK-PREP10-NEXT: ori r4, r4, 566004555; CHECK-PREP10-NEXT: lfdx f0, r3, r44556; CHECK-PREP10-NEXT: xscvdpsxws f0, f04557; CHECK-PREP10-NEXT: mffprwz r3, f04558; CHECK-PREP10-NEXT: blr4559entry:4560 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004561 %0 = load double, ptr %add.ptr, align 84562 %conv = fptoui double %0 to i164563 ret i16 %conv4564}4565 4566; Function Attrs: norecurse nounwind readonly uwtable willreturn4567define dso_local zeroext i16 @ld_align64_uint16_t_double(ptr nocapture readonly %ptr) {4568; CHECK-P10-LABEL: ld_align64_uint16_t_double:4569; CHECK-P10: # %bb.0: # %entry4570; CHECK-P10-NEXT: pli r4, 2441406254571; CHECK-P10-NEXT: rldic r4, r4, 12, 244572; CHECK-P10-NEXT: lfdx f0, r3, r44573; CHECK-P10-NEXT: xscvdpsxws f0, f04574; CHECK-P10-NEXT: mffprwz r3, f04575; CHECK-P10-NEXT: blr4576;4577; CHECK-PREP10-LABEL: ld_align64_uint16_t_double:4578; CHECK-PREP10: # %bb.0: # %entry4579; CHECK-PREP10-NEXT: lis r4, 37254580; CHECK-PREP10-NEXT: ori r4, r4, 190254581; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244582; CHECK-PREP10-NEXT: lfdx f0, r3, r44583; CHECK-PREP10-NEXT: xscvdpsxws f0, f04584; CHECK-PREP10-NEXT: mffprwz r3, f04585; CHECK-PREP10-NEXT: blr4586entry:4587 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004588 %0 = load double, ptr %add.ptr, align 84589 %conv = fptoui double %0 to i164590 ret i16 %conv4591}4592 4593; Function Attrs: norecurse nounwind readonly uwtable willreturn4594define dso_local zeroext i16 @ld_reg_uint16_t_double(ptr nocapture readonly %ptr, i64 %off) {4595; CHECK-LABEL: ld_reg_uint16_t_double:4596; CHECK: # %bb.0: # %entry4597; CHECK-NEXT: lfdx f0, r3, r44598; CHECK-NEXT: xscvdpsxws f0, f04599; CHECK-NEXT: mffprwz r3, f04600; CHECK-NEXT: blr4601entry:4602 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4603 %0 = load double, ptr %add.ptr, align 84604 %conv = fptoui double %0 to i164605 ret i16 %conv4606}4607 4608; Function Attrs: norecurse nounwind readonly uwtable willreturn4609define dso_local zeroext i16 @ld_or_uint16_t_double(i64 %ptr, i8 zeroext %off) {4610; CHECK-LABEL: ld_or_uint16_t_double:4611; CHECK: # %bb.0: # %entry4612; CHECK-NEXT: or r3, r4, r34613; CHECK-NEXT: lfd f0, 0(r3)4614; CHECK-NEXT: xscvdpsxws f0, f04615; CHECK-NEXT: mffprwz r3, f04616; CHECK-NEXT: blr4617entry:4618 %conv = zext i8 %off to i644619 %or = or i64 %conv, %ptr4620 %0 = inttoptr i64 %or to ptr4621 %1 = load double, ptr %0, align 84622 %conv1 = fptoui double %1 to i164623 ret i16 %conv14624}4625 4626; Function Attrs: norecurse nounwind readonly uwtable willreturn4627define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_double(i64 %ptr) {4628; CHECK-LABEL: ld_not_disjoint16_uint16_t_double:4629; CHECK: # %bb.0: # %entry4630; CHECK-NEXT: ori r3, r3, 64631; CHECK-NEXT: lfd f0, 0(r3)4632; CHECK-NEXT: xscvdpsxws f0, f04633; CHECK-NEXT: mffprwz r3, f04634; CHECK-NEXT: blr4635entry:4636 %or = or i64 %ptr, 64637 %0 = inttoptr i64 %or to ptr4638 %1 = load double, ptr %0, align 84639 %conv = fptoui double %1 to i164640 ret i16 %conv4641}4642 4643; Function Attrs: norecurse nounwind readonly uwtable willreturn4644define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_double(i64 %ptr) {4645; CHECK-LABEL: ld_disjoint_align16_uint16_t_double:4646; CHECK: # %bb.0: # %entry4647; CHECK-NEXT: rldicr r3, r3, 0, 514648; CHECK-NEXT: lfd f0, 24(r3)4649; CHECK-NEXT: xscvdpsxws f0, f04650; CHECK-NEXT: mffprwz r3, f04651; CHECK-NEXT: blr4652entry:4653 %and = and i64 %ptr, -40964654 %or = or i64 %and, 244655 %0 = inttoptr i64 %or to ptr4656 %1 = load double, ptr %0, align 84657 %conv = fptoui double %1 to i164658 ret i16 %conv4659}4660 4661; Function Attrs: norecurse nounwind readonly uwtable willreturn4662define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_double(i64 %ptr) {4663; CHECK-LABEL: ld_not_disjoint32_uint16_t_double:4664; CHECK: # %bb.0: # %entry4665; CHECK-NEXT: ori r3, r3, 344634666; CHECK-NEXT: oris r3, r3, 14667; CHECK-NEXT: lfd f0, 0(r3)4668; CHECK-NEXT: xscvdpsxws f0, f04669; CHECK-NEXT: mffprwz r3, f04670; CHECK-NEXT: blr4671entry:4672 %or = or i64 %ptr, 999994673 %0 = inttoptr i64 %or to ptr4674 %1 = load double, ptr %0, align 84675 %conv = fptoui double %1 to i164676 ret i16 %conv4677}4678 4679; Function Attrs: norecurse nounwind readonly uwtable willreturn4680define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_double(i64 %ptr) {4681; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_double:4682; CHECK-P10: # %bb.0: # %entry4683; CHECK-P10-NEXT: lis r4, -152644684; CHECK-P10-NEXT: and r3, r3, r44685; CHECK-P10-NEXT: plfd f0, 999990000(r3), 04686; CHECK-P10-NEXT: xscvdpsxws f0, f04687; CHECK-P10-NEXT: mffprwz r3, f04688; CHECK-P10-NEXT: blr4689;4690; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_double:4691; CHECK-PREP10: # %bb.0: # %entry4692; CHECK-PREP10-NEXT: lis r4, -152644693; CHECK-PREP10-NEXT: and r3, r3, r44694; CHECK-PREP10-NEXT: lis r4, 152584695; CHECK-PREP10-NEXT: ori r4, r4, 417124696; CHECK-PREP10-NEXT: lfdx f0, r3, r44697; CHECK-PREP10-NEXT: xscvdpsxws f0, f04698; CHECK-PREP10-NEXT: mffprwz r3, f04699; CHECK-PREP10-NEXT: blr4700entry:4701 %and = and i64 %ptr, -10003415044702 %or = or i64 %and, 9999900004703 %0 = inttoptr i64 %or to ptr4704 %1 = load double, ptr %0, align 164705 %conv = fptoui double %1 to i164706 ret i16 %conv4707}4708 4709; Function Attrs: norecurse nounwind readonly uwtable willreturn4710define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_double(i64 %ptr) {4711; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_double:4712; CHECK-P10: # %bb.0: # %entry4713; CHECK-P10-NEXT: pli r4, 2324714; CHECK-P10-NEXT: pli r5, 35675873294715; CHECK-P10-NEXT: rldimi r5, r4, 32, 04716; CHECK-P10-NEXT: or r3, r3, r54717; CHECK-P10-NEXT: lfd f0, 0(r3)4718; CHECK-P10-NEXT: xscvdpsxws f0, f04719; CHECK-P10-NEXT: mffprwz r3, f04720; CHECK-P10-NEXT: blr4721;4722; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_double:4723; CHECK-PREP10: # %bb.0: # %entry4724; CHECK-PREP10-NEXT: li r4, 294725; CHECK-PREP10-NEXT: rldic r4, r4, 35, 244726; CHECK-PREP10-NEXT: oris r4, r4, 544374727; CHECK-PREP10-NEXT: ori r4, r4, 40974728; CHECK-PREP10-NEXT: or r3, r3, r44729; CHECK-PREP10-NEXT: lfd f0, 0(r3)4730; CHECK-PREP10-NEXT: xscvdpsxws f0, f04731; CHECK-PREP10-NEXT: mffprwz r3, f04732; CHECK-PREP10-NEXT: blr4733entry:4734 %or = or i64 %ptr, 10000000000014735 %0 = inttoptr i64 %or to ptr4736 %1 = load double, ptr %0, align 84737 %conv = fptoui double %1 to i164738 ret i16 %conv4739}4740 4741; Function Attrs: norecurse nounwind readonly uwtable willreturn4742define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_double(i64 %ptr) {4743; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_double:4744; CHECK-P10: # %bb.0: # %entry4745; CHECK-P10-NEXT: pli r4, 2441406254746; CHECK-P10-NEXT: rldicr r3, r3, 0, 234747; CHECK-P10-NEXT: rldic r4, r4, 12, 244748; CHECK-P10-NEXT: lfdx f0, r3, r44749; CHECK-P10-NEXT: xscvdpsxws f0, f04750; CHECK-P10-NEXT: mffprwz r3, f04751; CHECK-P10-NEXT: blr4752;4753; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_double:4754; CHECK-PREP10: # %bb.0: # %entry4755; CHECK-PREP10-NEXT: lis r4, 37254756; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 234757; CHECK-PREP10-NEXT: ori r4, r4, 190254758; CHECK-PREP10-NEXT: rldic r4, r4, 12, 244759; CHECK-PREP10-NEXT: lfdx f0, r3, r44760; CHECK-PREP10-NEXT: xscvdpsxws f0, f04761; CHECK-PREP10-NEXT: mffprwz r3, f04762; CHECK-PREP10-NEXT: blr4763entry:4764 %and = and i64 %ptr, -10995116277764765 %or = or i64 %and, 10000000000004766 %0 = inttoptr i64 %or to ptr4767 %1 = load double, ptr %0, align 40964768 %conv = fptoui double %1 to i164769 ret i16 %conv4770}4771 4772; Function Attrs: norecurse nounwind readonly uwtable willreturn4773define dso_local zeroext i16 @ld_cst_align16_uint16_t_double() {4774; CHECK-LABEL: ld_cst_align16_uint16_t_double:4775; CHECK: # %bb.0: # %entry4776; CHECK-NEXT: lfd f0, 4080(0)4777; CHECK-NEXT: xscvdpsxws f0, f04778; CHECK-NEXT: mffprwz r3, f04779; CHECK-NEXT: blr4780entry:4781 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 164782 %conv = fptoui double %0 to i164783 ret i16 %conv4784}4785 4786; Function Attrs: norecurse nounwind readonly uwtable willreturn4787define dso_local zeroext i16 @ld_cst_align32_uint16_t_double() {4788; CHECK-LABEL: ld_cst_align32_uint16_t_double:4789; CHECK: # %bb.0: # %entry4790; CHECK-NEXT: lis r3, 1534791; CHECK-NEXT: lfd f0, -27108(r3)4792; CHECK-NEXT: xscvdpsxws f0, f04793; CHECK-NEXT: mffprwz r3, f04794; CHECK-NEXT: blr4795entry:4796 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 84797 %conv = fptoui double %0 to i164798 ret i16 %conv4799}4800 4801; Function Attrs: norecurse nounwind readonly uwtable willreturn4802define dso_local zeroext i16 @ld_cst_align64_uint16_t_double() {4803; CHECK-P10-LABEL: ld_cst_align64_uint16_t_double:4804; CHECK-P10: # %bb.0: # %entry4805; CHECK-P10-NEXT: pli r3, 2441406254806; CHECK-P10-NEXT: rldic r3, r3, 12, 244807; CHECK-P10-NEXT: lfd f0, 0(r3)4808; CHECK-P10-NEXT: xscvdpsxws f0, f04809; CHECK-P10-NEXT: mffprwz r3, f04810; CHECK-P10-NEXT: blr4811;4812; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_double:4813; CHECK-PREP10: # %bb.0: # %entry4814; CHECK-PREP10-NEXT: lis r3, 37254815; CHECK-PREP10-NEXT: ori r3, r3, 190254816; CHECK-PREP10-NEXT: rldic r3, r3, 12, 244817; CHECK-PREP10-NEXT: lfd f0, 0(r3)4818; CHECK-PREP10-NEXT: xscvdpsxws f0, f04819; CHECK-PREP10-NEXT: mffprwz r3, f04820; CHECK-PREP10-NEXT: blr4821entry:4822 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 40964823 %conv = fptoui double %0 to i164824 ret i16 %conv4825}4826 4827; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4828define dso_local void @st_0_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {4829; CHECK-LABEL: st_0_uint16_t_uint8_t:4830; CHECK: # %bb.0: # %entry4831; CHECK-NEXT: stb r4, 0(r3)4832; CHECK-NEXT: blr4833entry:4834 %conv = trunc i16 %str to i84835 %0 = inttoptr i64 %ptr to ptr4836 store i8 %conv, ptr %0, align 14837 ret void4838}4839 4840; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4841define dso_local void @st_align16_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) {4842; CHECK-LABEL: st_align16_uint16_t_uint8_t:4843; CHECK: # %bb.0: # %entry4844; CHECK-NEXT: stb r4, 8(r3)4845; CHECK-NEXT: blr4846entry:4847 %conv = trunc i16 %str to i84848 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 84849 store i8 %conv, ptr %add.ptr, align 14850 ret void4851}4852 4853; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4854define dso_local void @st_align32_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) {4855; CHECK-P10-LABEL: st_align32_uint16_t_uint8_t:4856; CHECK-P10: # %bb.0: # %entry4857; CHECK-P10-NEXT: pstb r4, 99999000(r3), 04858; CHECK-P10-NEXT: blr4859;4860; CHECK-PREP10-LABEL: st_align32_uint16_t_uint8_t:4861; CHECK-PREP10: # %bb.0: # %entry4862; CHECK-PREP10-NEXT: lis r5, 15254863; CHECK-PREP10-NEXT: ori r5, r5, 566004864; CHECK-PREP10-NEXT: stbx r4, r3, r54865; CHECK-PREP10-NEXT: blr4866entry:4867 %conv = trunc i16 %str to i84868 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990004869 store i8 %conv, ptr %add.ptr, align 14870 ret void4871}4872 4873; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4874define dso_local void @st_align64_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) {4875; CHECK-P10-LABEL: st_align64_uint16_t_uint8_t:4876; CHECK-P10: # %bb.0: # %entry4877; CHECK-P10-NEXT: pli r5, 2441406254878; CHECK-P10-NEXT: rldic r5, r5, 12, 244879; CHECK-P10-NEXT: stbx r4, r3, r54880; CHECK-P10-NEXT: blr4881;4882; CHECK-PREP10-LABEL: st_align64_uint16_t_uint8_t:4883; CHECK-PREP10: # %bb.0: # %entry4884; CHECK-PREP10-NEXT: lis r5, 37254885; CHECK-PREP10-NEXT: ori r5, r5, 190254886; CHECK-PREP10-NEXT: rldic r5, r5, 12, 244887; CHECK-PREP10-NEXT: stbx r4, r3, r54888; CHECK-PREP10-NEXT: blr4889entry:4890 %conv = trunc i16 %str to i84891 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000004892 store i8 %conv, ptr %add.ptr, align 14893 ret void4894}4895 4896; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4897define dso_local void @st_reg_uint16_t_uint8_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {4898; CHECK-LABEL: st_reg_uint16_t_uint8_t:4899; CHECK: # %bb.0: # %entry4900; CHECK-NEXT: stbx r5, r3, r44901; CHECK-NEXT: blr4902entry:4903 %conv = trunc i16 %str to i84904 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off4905 store i8 %conv, ptr %add.ptr, align 14906 ret void4907}4908 4909; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4910define dso_local void @st_or1_uint16_t_uint8_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {4911; CHECK-LABEL: st_or1_uint16_t_uint8_t:4912; CHECK: # %bb.0: # %entry4913; CHECK-NEXT: or r3, r4, r34914; CHECK-NEXT: stb r5, 0(r3)4915; CHECK-NEXT: blr4916entry:4917 %conv = trunc i16 %str to i84918 %conv1 = zext i8 %off to i644919 %or = or i64 %conv1, %ptr4920 %0 = inttoptr i64 %or to ptr4921 store i8 %conv, ptr %0, align 14922 ret void4923}4924 4925; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4926define dso_local void @st_not_disjoint16_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {4927; CHECK-LABEL: st_not_disjoint16_uint16_t_uint8_t:4928; CHECK: # %bb.0: # %entry4929; CHECK-NEXT: ori r3, r3, 64930; CHECK-NEXT: stb r4, 0(r3)4931; CHECK-NEXT: blr4932entry:4933 %conv = trunc i16 %str to i84934 %or = or i64 %ptr, 64935 %0 = inttoptr i64 %or to ptr4936 store i8 %conv, ptr %0, align 14937 ret void4938}4939 4940; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4941define dso_local void @st_disjoint_align16_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {4942; CHECK-LABEL: st_disjoint_align16_uint16_t_uint8_t:4943; CHECK: # %bb.0: # %entry4944; CHECK-NEXT: rldicr r3, r3, 0, 514945; CHECK-NEXT: stb r4, 24(r3)4946; CHECK-NEXT: blr4947entry:4948 %and = and i64 %ptr, -40964949 %conv = trunc i16 %str to i84950 %or = or i64 %and, 244951 %0 = inttoptr i64 %or to ptr4952 store i8 %conv, ptr %0, align 84953 ret void4954}4955 4956; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4957define dso_local void @st_not_disjoint32_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {4958; CHECK-LABEL: st_not_disjoint32_uint16_t_uint8_t:4959; CHECK: # %bb.0: # %entry4960; CHECK-NEXT: ori r3, r3, 344634961; CHECK-NEXT: oris r3, r3, 14962; CHECK-NEXT: stb r4, 0(r3)4963; CHECK-NEXT: blr4964entry:4965 %conv = trunc i16 %str to i84966 %or = or i64 %ptr, 999994967 %0 = inttoptr i64 %or to ptr4968 store i8 %conv, ptr %0, align 14969 ret void4970}4971 4972; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4973define dso_local void @st_disjoint_align32_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {4974; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint8_t:4975; CHECK-P10: # %bb.0: # %entry4976; CHECK-P10-NEXT: lis r5, -152644977; CHECK-P10-NEXT: and r3, r3, r54978; CHECK-P10-NEXT: pstb r4, 999990000(r3), 04979; CHECK-P10-NEXT: blr4980;4981; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint8_t:4982; CHECK-PREP10: # %bb.0: # %entry4983; CHECK-PREP10-NEXT: lis r5, -152644984; CHECK-PREP10-NEXT: and r3, r3, r54985; CHECK-PREP10-NEXT: lis r5, 152584986; CHECK-PREP10-NEXT: ori r5, r5, 417124987; CHECK-PREP10-NEXT: stbx r4, r3, r54988; CHECK-PREP10-NEXT: blr4989entry:4990 %and = and i64 %ptr, -10003415044991 %conv = trunc i16 %str to i84992 %or = or i64 %and, 9999900004993 %0 = inttoptr i64 %or to ptr4994 store i8 %conv, ptr %0, align 164995 ret void4996}4997 4998; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly4999define dso_local void @st_not_disjoint64_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {5000; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint8_t:5001; CHECK-P10: # %bb.0: # %entry5002; CHECK-P10-NEXT: pli r5, 2325003; CHECK-P10-NEXT: pli r6, 35675873295004; CHECK-P10-NEXT: rldimi r6, r5, 32, 05005; CHECK-P10-NEXT: or r3, r3, r65006; CHECK-P10-NEXT: stb r4, 0(r3)5007; CHECK-P10-NEXT: blr5008;5009; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint8_t:5010; CHECK-PREP10: # %bb.0: # %entry5011; CHECK-PREP10-NEXT: li r5, 295012; CHECK-PREP10-NEXT: rldic r5, r5, 35, 245013; CHECK-PREP10-NEXT: oris r5, r5, 544375014; CHECK-PREP10-NEXT: ori r5, r5, 40975015; CHECK-PREP10-NEXT: or r3, r3, r55016; CHECK-PREP10-NEXT: stb r4, 0(r3)5017; CHECK-PREP10-NEXT: blr5018entry:5019 %conv = trunc i16 %str to i85020 %or = or i64 %ptr, 10000000000015021 %0 = inttoptr i64 %or to ptr5022 store i8 %conv, ptr %0, align 15023 ret void5024}5025 5026; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5027define dso_local void @st_disjoint_align64_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) {5028; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint8_t:5029; CHECK-P10: # %bb.0: # %entry5030; CHECK-P10-NEXT: pli r5, 2441406255031; CHECK-P10-NEXT: rldicr r3, r3, 0, 235032; CHECK-P10-NEXT: rldic r5, r5, 12, 245033; CHECK-P10-NEXT: stbx r4, r3, r55034; CHECK-P10-NEXT: blr5035;5036; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint8_t:5037; CHECK-PREP10: # %bb.0: # %entry5038; CHECK-PREP10-NEXT: lis r5, 37255039; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 235040; CHECK-PREP10-NEXT: ori r5, r5, 190255041; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245042; CHECK-PREP10-NEXT: stbx r4, r3, r55043; CHECK-PREP10-NEXT: blr5044entry:5045 %and = and i64 %ptr, -10995116277765046 %conv = trunc i16 %str to i85047 %or = or i64 %and, 10000000000005048 %0 = inttoptr i64 %or to ptr5049 store i8 %conv, ptr %0, align 40965050 ret void5051}5052 5053; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5054define dso_local void @st_cst_align16_uint16_t_uint8_t(i16 zeroext %str) {5055; CHECK-LABEL: st_cst_align16_uint16_t_uint8_t:5056; CHECK: # %bb.0: # %entry5057; CHECK-NEXT: stb r3, 4080(0)5058; CHECK-NEXT: blr5059entry:5060 %conv = trunc i16 %str to i85061 store i8 %conv, ptr inttoptr (i64 4080 to ptr), align 165062 ret void5063}5064 5065; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5066define dso_local void @st_cst_align32_uint16_t_uint8_t(i16 zeroext %str) {5067; CHECK-LABEL: st_cst_align32_uint16_t_uint8_t:5068; CHECK: # %bb.0: # %entry5069; CHECK-NEXT: lis r4, 1535070; CHECK-NEXT: stb r3, -27108(r4)5071; CHECK-NEXT: blr5072entry:5073 %conv = trunc i16 %str to i85074 store i8 %conv, ptr inttoptr (i64 9999900 to ptr), align 45075 ret void5076}5077 5078; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5079define dso_local void @st_cst_align64_uint16_t_uint8_t(i16 zeroext %str) {5080; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint8_t:5081; CHECK-P10: # %bb.0: # %entry5082; CHECK-P10-NEXT: pli r4, 2441406255083; CHECK-P10-NEXT: rldic r4, r4, 12, 245084; CHECK-P10-NEXT: stb r3, 0(r4)5085; CHECK-P10-NEXT: blr5086;5087; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint8_t:5088; CHECK-PREP10: # %bb.0: # %entry5089; CHECK-PREP10-NEXT: lis r4, 37255090; CHECK-PREP10-NEXT: ori r4, r4, 190255091; CHECK-PREP10-NEXT: rldic r4, r4, 12, 245092; CHECK-PREP10-NEXT: stb r3, 0(r4)5093; CHECK-PREP10-NEXT: blr5094entry:5095 %conv = trunc i16 %str to i85096 store i8 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40965097 ret void5098}5099 5100; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5101define dso_local void @st_0_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {5102; CHECK-LABEL: st_0_uint16_t_uint16_t:5103; CHECK: # %bb.0: # %entry5104; CHECK-NEXT: sth r4, 0(r3)5105; CHECK-NEXT: blr5106entry:5107 %0 = inttoptr i64 %ptr to ptr5108 store i16 %str, ptr %0, align 25109 ret void5110}5111 5112; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5113define dso_local void @st_align16_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) {5114; CHECK-LABEL: st_align16_uint16_t_uint16_t:5115; CHECK: # %bb.0: # %entry5116; CHECK-NEXT: sth r4, 8(r3)5117; CHECK-NEXT: blr5118entry:5119 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 85120 store i16 %str, ptr %add.ptr, align 25121 ret void5122}5123 5124; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5125define dso_local void @st_align32_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) {5126; CHECK-P10-LABEL: st_align32_uint16_t_uint16_t:5127; CHECK-P10: # %bb.0: # %entry5128; CHECK-P10-NEXT: psth r4, 99999000(r3), 05129; CHECK-P10-NEXT: blr5130;5131; CHECK-PREP10-LABEL: st_align32_uint16_t_uint16_t:5132; CHECK-PREP10: # %bb.0: # %entry5133; CHECK-PREP10-NEXT: lis r5, 15255134; CHECK-PREP10-NEXT: ori r5, r5, 566005135; CHECK-PREP10-NEXT: sthx r4, r3, r55136; CHECK-PREP10-NEXT: blr5137entry:5138 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990005139 store i16 %str, ptr %add.ptr, align 25140 ret void5141}5142 5143; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5144define dso_local void @st_align64_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) {5145; CHECK-P10-LABEL: st_align64_uint16_t_uint16_t:5146; CHECK-P10: # %bb.0: # %entry5147; CHECK-P10-NEXT: pli r5, 2441406255148; CHECK-P10-NEXT: rldic r5, r5, 12, 245149; CHECK-P10-NEXT: sthx r4, r3, r55150; CHECK-P10-NEXT: blr5151;5152; CHECK-PREP10-LABEL: st_align64_uint16_t_uint16_t:5153; CHECK-PREP10: # %bb.0: # %entry5154; CHECK-PREP10-NEXT: lis r5, 37255155; CHECK-PREP10-NEXT: ori r5, r5, 190255156; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245157; CHECK-PREP10-NEXT: sthx r4, r3, r55158; CHECK-PREP10-NEXT: blr5159entry:5160 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000005161 store i16 %str, ptr %add.ptr, align 25162 ret void5163}5164 5165; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5166define dso_local void @st_reg_uint16_t_uint16_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {5167; CHECK-LABEL: st_reg_uint16_t_uint16_t:5168; CHECK: # %bb.0: # %entry5169; CHECK-NEXT: sthx r5, r3, r45170; CHECK-NEXT: blr5171entry:5172 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off5173 store i16 %str, ptr %add.ptr, align 25174 ret void5175}5176 5177; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5178define dso_local void @st_or1_uint16_t_uint16_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {5179; CHECK-LABEL: st_or1_uint16_t_uint16_t:5180; CHECK: # %bb.0: # %entry5181; CHECK-NEXT: or r3, r4, r35182; CHECK-NEXT: sth r5, 0(r3)5183; CHECK-NEXT: blr5184entry:5185 %conv = zext i8 %off to i645186 %or = or i64 %conv, %ptr5187 %0 = inttoptr i64 %or to ptr5188 store i16 %str, ptr %0, align 25189 ret void5190}5191 5192; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5193define dso_local void @st_not_disjoint16_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {5194; CHECK-LABEL: st_not_disjoint16_uint16_t_uint16_t:5195; CHECK: # %bb.0: # %entry5196; CHECK-NEXT: ori r3, r3, 65197; CHECK-NEXT: sth r4, 0(r3)5198; CHECK-NEXT: blr5199entry:5200 %or = or i64 %ptr, 65201 %0 = inttoptr i64 %or to ptr5202 store i16 %str, ptr %0, align 25203 ret void5204}5205 5206; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5207define dso_local void @st_disjoint_align16_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {5208; CHECK-LABEL: st_disjoint_align16_uint16_t_uint16_t:5209; CHECK: # %bb.0: # %entry5210; CHECK-NEXT: rldicr r3, r3, 0, 515211; CHECK-NEXT: sth r4, 24(r3)5212; CHECK-NEXT: blr5213entry:5214 %and = and i64 %ptr, -40965215 %or = or i64 %and, 245216 %0 = inttoptr i64 %or to ptr5217 store i16 %str, ptr %0, align 85218 ret void5219}5220 5221; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5222define dso_local void @st_not_disjoint32_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {5223; CHECK-LABEL: st_not_disjoint32_uint16_t_uint16_t:5224; CHECK: # %bb.0: # %entry5225; CHECK-NEXT: ori r3, r3, 344635226; CHECK-NEXT: oris r3, r3, 15227; CHECK-NEXT: sth r4, 0(r3)5228; CHECK-NEXT: blr5229entry:5230 %or = or i64 %ptr, 999995231 %0 = inttoptr i64 %or to ptr5232 store i16 %str, ptr %0, align 25233 ret void5234}5235 5236; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5237define dso_local void @st_disjoint_align32_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {5238; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint16_t:5239; CHECK-P10: # %bb.0: # %entry5240; CHECK-P10-NEXT: lis r5, -152645241; CHECK-P10-NEXT: and r3, r3, r55242; CHECK-P10-NEXT: psth r4, 999990000(r3), 05243; CHECK-P10-NEXT: blr5244;5245; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint16_t:5246; CHECK-PREP10: # %bb.0: # %entry5247; CHECK-PREP10-NEXT: lis r5, -152645248; CHECK-PREP10-NEXT: and r3, r3, r55249; CHECK-PREP10-NEXT: lis r5, 152585250; CHECK-PREP10-NEXT: ori r5, r5, 417125251; CHECK-PREP10-NEXT: sthx r4, r3, r55252; CHECK-PREP10-NEXT: blr5253entry:5254 %and = and i64 %ptr, -10003415045255 %or = or i64 %and, 9999900005256 %0 = inttoptr i64 %or to ptr5257 store i16 %str, ptr %0, align 165258 ret void5259}5260 5261; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5262define dso_local void @st_not_disjoint64_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {5263; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint16_t:5264; CHECK-P10: # %bb.0: # %entry5265; CHECK-P10-NEXT: pli r5, 2325266; CHECK-P10-NEXT: pli r6, 35675873295267; CHECK-P10-NEXT: rldimi r6, r5, 32, 05268; CHECK-P10-NEXT: or r3, r3, r65269; CHECK-P10-NEXT: sth r4, 0(r3)5270; CHECK-P10-NEXT: blr5271;5272; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint16_t:5273; CHECK-PREP10: # %bb.0: # %entry5274; CHECK-PREP10-NEXT: li r5, 295275; CHECK-PREP10-NEXT: rldic r5, r5, 35, 245276; CHECK-PREP10-NEXT: oris r5, r5, 544375277; CHECK-PREP10-NEXT: ori r5, r5, 40975278; CHECK-PREP10-NEXT: or r3, r3, r55279; CHECK-PREP10-NEXT: sth r4, 0(r3)5280; CHECK-PREP10-NEXT: blr5281entry:5282 %or = or i64 %ptr, 10000000000015283 %0 = inttoptr i64 %or to ptr5284 store i16 %str, ptr %0, align 25285 ret void5286}5287 5288; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5289define dso_local void @st_disjoint_align64_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) {5290; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint16_t:5291; CHECK-P10: # %bb.0: # %entry5292; CHECK-P10-NEXT: pli r5, 2441406255293; CHECK-P10-NEXT: rldicr r3, r3, 0, 235294; CHECK-P10-NEXT: rldic r5, r5, 12, 245295; CHECK-P10-NEXT: sthx r4, r3, r55296; CHECK-P10-NEXT: blr5297;5298; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint16_t:5299; CHECK-PREP10: # %bb.0: # %entry5300; CHECK-PREP10-NEXT: lis r5, 37255301; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 235302; CHECK-PREP10-NEXT: ori r5, r5, 190255303; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245304; CHECK-PREP10-NEXT: sthx r4, r3, r55305; CHECK-PREP10-NEXT: blr5306entry:5307 %and = and i64 %ptr, -10995116277765308 %or = or i64 %and, 10000000000005309 %0 = inttoptr i64 %or to ptr5310 store i16 %str, ptr %0, align 40965311 ret void5312}5313 5314; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5315define dso_local void @st_cst_align16_uint16_t_uint16_t(i16 zeroext %str) {5316; CHECK-LABEL: st_cst_align16_uint16_t_uint16_t:5317; CHECK: # %bb.0: # %entry5318; CHECK-NEXT: sth r3, 4080(0)5319; CHECK-NEXT: blr5320entry:5321 store i16 %str, ptr inttoptr (i64 4080 to ptr), align 165322 ret void5323}5324 5325; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5326define dso_local void @st_cst_align32_uint16_t_uint16_t(i16 zeroext %str) {5327; CHECK-LABEL: st_cst_align32_uint16_t_uint16_t:5328; CHECK: # %bb.0: # %entry5329; CHECK-NEXT: lis r4, 1535330; CHECK-NEXT: sth r3, -27108(r4)5331; CHECK-NEXT: blr5332entry:5333 store i16 %str, ptr inttoptr (i64 9999900 to ptr), align 45334 ret void5335}5336 5337; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5338define dso_local void @st_cst_align64_uint16_t_uint16_t(i16 zeroext %str) {5339; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint16_t:5340; CHECK-P10: # %bb.0: # %entry5341; CHECK-P10-NEXT: pli r4, 2441406255342; CHECK-P10-NEXT: rldic r4, r4, 12, 245343; CHECK-P10-NEXT: sth r3, 0(r4)5344; CHECK-P10-NEXT: blr5345;5346; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint16_t:5347; CHECK-PREP10: # %bb.0: # %entry5348; CHECK-PREP10-NEXT: lis r4, 37255349; CHECK-PREP10-NEXT: ori r4, r4, 190255350; CHECK-PREP10-NEXT: rldic r4, r4, 12, 245351; CHECK-PREP10-NEXT: sth r3, 0(r4)5352; CHECK-PREP10-NEXT: blr5353entry:5354 store i16 %str, ptr inttoptr (i64 1000000000000 to ptr), align 40965355 ret void5356}5357 5358; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5359define dso_local void @st_0_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {5360; CHECK-LABEL: st_0_uint16_t_uint32_t:5361; CHECK: # %bb.0: # %entry5362; CHECK-NEXT: stw r4, 0(r3)5363; CHECK-NEXT: blr5364entry:5365 %conv = zext i16 %str to i325366 %0 = inttoptr i64 %ptr to ptr5367 store i32 %conv, ptr %0, align 45368 ret void5369}5370 5371; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5372define dso_local void @st_align16_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) {5373; CHECK-LABEL: st_align16_uint16_t_uint32_t:5374; CHECK: # %bb.0: # %entry5375; CHECK-NEXT: stw r4, 8(r3)5376; CHECK-NEXT: blr5377entry:5378 %conv = zext i16 %str to i325379 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 85380 store i32 %conv, ptr %add.ptr, align 45381 ret void5382}5383 5384; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5385define dso_local void @st_align32_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) {5386; CHECK-P10-LABEL: st_align32_uint16_t_uint32_t:5387; CHECK-P10: # %bb.0: # %entry5388; CHECK-P10-NEXT: pstw r4, 99999000(r3), 05389; CHECK-P10-NEXT: blr5390;5391; CHECK-PREP10-LABEL: st_align32_uint16_t_uint32_t:5392; CHECK-PREP10: # %bb.0: # %entry5393; CHECK-PREP10-NEXT: lis r5, 15255394; CHECK-PREP10-NEXT: ori r5, r5, 566005395; CHECK-PREP10-NEXT: stwx r4, r3, r55396; CHECK-PREP10-NEXT: blr5397entry:5398 %conv = zext i16 %str to i325399 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990005400 store i32 %conv, ptr %add.ptr, align 45401 ret void5402}5403 5404; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5405define dso_local void @st_align64_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) {5406; CHECK-P10-LABEL: st_align64_uint16_t_uint32_t:5407; CHECK-P10: # %bb.0: # %entry5408; CHECK-P10-NEXT: pli r5, 2441406255409; CHECK-P10-NEXT: rldic r5, r5, 12, 245410; CHECK-P10-NEXT: stwx r4, r3, r55411; CHECK-P10-NEXT: blr5412;5413; CHECK-PREP10-LABEL: st_align64_uint16_t_uint32_t:5414; CHECK-PREP10: # %bb.0: # %entry5415; CHECK-PREP10-NEXT: lis r5, 37255416; CHECK-PREP10-NEXT: ori r5, r5, 190255417; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245418; CHECK-PREP10-NEXT: stwx r4, r3, r55419; CHECK-PREP10-NEXT: blr5420entry:5421 %conv = zext i16 %str to i325422 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000005423 store i32 %conv, ptr %add.ptr, align 45424 ret void5425}5426 5427; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5428define dso_local void @st_reg_uint16_t_uint32_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {5429; CHECK-LABEL: st_reg_uint16_t_uint32_t:5430; CHECK: # %bb.0: # %entry5431; CHECK-NEXT: stwx r5, r3, r45432; CHECK-NEXT: blr5433entry:5434 %conv = zext i16 %str to i325435 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off5436 store i32 %conv, ptr %add.ptr, align 45437 ret void5438}5439 5440; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5441define dso_local void @st_or1_uint16_t_uint32_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {5442; CHECK-LABEL: st_or1_uint16_t_uint32_t:5443; CHECK: # %bb.0: # %entry5444; CHECK-NEXT: or r3, r4, r35445; CHECK-NEXT: stw r5, 0(r3)5446; CHECK-NEXT: blr5447entry:5448 %conv = zext i16 %str to i325449 %conv1 = zext i8 %off to i645450 %or = or i64 %conv1, %ptr5451 %0 = inttoptr i64 %or to ptr5452 store i32 %conv, ptr %0, align 45453 ret void5454}5455 5456; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5457define dso_local void @st_not_disjoint16_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {5458; CHECK-LABEL: st_not_disjoint16_uint16_t_uint32_t:5459; CHECK: # %bb.0: # %entry5460; CHECK-NEXT: ori r3, r3, 65461; CHECK-NEXT: stw r4, 0(r3)5462; CHECK-NEXT: blr5463entry:5464 %conv = zext i16 %str to i325465 %or = or i64 %ptr, 65466 %0 = inttoptr i64 %or to ptr5467 store i32 %conv, ptr %0, align 45468 ret void5469}5470 5471; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5472define dso_local void @st_disjoint_align16_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {5473; CHECK-LABEL: st_disjoint_align16_uint16_t_uint32_t:5474; CHECK: # %bb.0: # %entry5475; CHECK-NEXT: rldicr r3, r3, 0, 515476; CHECK-NEXT: stw r4, 24(r3)5477; CHECK-NEXT: blr5478entry:5479 %and = and i64 %ptr, -40965480 %conv = zext i16 %str to i325481 %or = or i64 %and, 245482 %0 = inttoptr i64 %or to ptr5483 store i32 %conv, ptr %0, align 85484 ret void5485}5486 5487; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5488define dso_local void @st_not_disjoint32_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {5489; CHECK-LABEL: st_not_disjoint32_uint16_t_uint32_t:5490; CHECK: # %bb.0: # %entry5491; CHECK-NEXT: ori r3, r3, 344635492; CHECK-NEXT: oris r3, r3, 15493; CHECK-NEXT: stw r4, 0(r3)5494; CHECK-NEXT: blr5495entry:5496 %conv = zext i16 %str to i325497 %or = or i64 %ptr, 999995498 %0 = inttoptr i64 %or to ptr5499 store i32 %conv, ptr %0, align 45500 ret void5501}5502 5503; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5504define dso_local void @st_disjoint_align32_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {5505; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint32_t:5506; CHECK-P10: # %bb.0: # %entry5507; CHECK-P10-NEXT: lis r5, -152645508; CHECK-P10-NEXT: and r3, r3, r55509; CHECK-P10-NEXT: pstw r4, 999990000(r3), 05510; CHECK-P10-NEXT: blr5511;5512; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint32_t:5513; CHECK-PREP10: # %bb.0: # %entry5514; CHECK-PREP10-NEXT: lis r5, -152645515; CHECK-PREP10-NEXT: and r3, r3, r55516; CHECK-PREP10-NEXT: lis r5, 152585517; CHECK-PREP10-NEXT: ori r5, r5, 417125518; CHECK-PREP10-NEXT: stwx r4, r3, r55519; CHECK-PREP10-NEXT: blr5520entry:5521 %and = and i64 %ptr, -10003415045522 %conv = zext i16 %str to i325523 %or = or i64 %and, 9999900005524 %0 = inttoptr i64 %or to ptr5525 store i32 %conv, ptr %0, align 165526 ret void5527}5528 5529; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5530define dso_local void @st_not_disjoint64_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {5531; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint32_t:5532; CHECK-P10: # %bb.0: # %entry5533; CHECK-P10-NEXT: pli r5, 2325534; CHECK-P10-NEXT: pli r6, 35675873295535; CHECK-P10-NEXT: rldimi r6, r5, 32, 05536; CHECK-P10-NEXT: or r3, r3, r65537; CHECK-P10-NEXT: stw r4, 0(r3)5538; CHECK-P10-NEXT: blr5539;5540; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint32_t:5541; CHECK-PREP10: # %bb.0: # %entry5542; CHECK-PREP10-NEXT: li r5, 295543; CHECK-PREP10-NEXT: rldic r5, r5, 35, 245544; CHECK-PREP10-NEXT: oris r5, r5, 544375545; CHECK-PREP10-NEXT: ori r5, r5, 40975546; CHECK-PREP10-NEXT: or r3, r3, r55547; CHECK-PREP10-NEXT: stw r4, 0(r3)5548; CHECK-PREP10-NEXT: blr5549entry:5550 %conv = zext i16 %str to i325551 %or = or i64 %ptr, 10000000000015552 %0 = inttoptr i64 %or to ptr5553 store i32 %conv, ptr %0, align 45554 ret void5555}5556 5557; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5558define dso_local void @st_disjoint_align64_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) {5559; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint32_t:5560; CHECK-P10: # %bb.0: # %entry5561; CHECK-P10-NEXT: pli r5, 2441406255562; CHECK-P10-NEXT: rldicr r3, r3, 0, 235563; CHECK-P10-NEXT: rldic r5, r5, 12, 245564; CHECK-P10-NEXT: stwx r4, r3, r55565; CHECK-P10-NEXT: blr5566;5567; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint32_t:5568; CHECK-PREP10: # %bb.0: # %entry5569; CHECK-PREP10-NEXT: lis r5, 37255570; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 235571; CHECK-PREP10-NEXT: ori r5, r5, 190255572; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245573; CHECK-PREP10-NEXT: stwx r4, r3, r55574; CHECK-PREP10-NEXT: blr5575entry:5576 %and = and i64 %ptr, -10995116277765577 %conv = zext i16 %str to i325578 %or = or i64 %and, 10000000000005579 %0 = inttoptr i64 %or to ptr5580 store i32 %conv, ptr %0, align 40965581 ret void5582}5583 5584; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5585define dso_local void @st_cst_align16_uint16_t_uint32_t(i16 zeroext %str) {5586; CHECK-LABEL: st_cst_align16_uint16_t_uint32_t:5587; CHECK: # %bb.0: # %entry5588; CHECK-NEXT: stw r3, 4080(0)5589; CHECK-NEXT: blr5590entry:5591 %conv = zext i16 %str to i325592 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 165593 ret void5594}5595 5596; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5597define dso_local void @st_cst_align32_uint16_t_uint32_t(i16 zeroext %str) {5598; CHECK-LABEL: st_cst_align32_uint16_t_uint32_t:5599; CHECK: # %bb.0: # %entry5600; CHECK-NEXT: lis r4, 1535601; CHECK-NEXT: stw r3, -27108(r4)5602; CHECK-NEXT: blr5603entry:5604 %conv = zext i16 %str to i325605 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 45606 ret void5607}5608 5609; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5610define dso_local void @st_cst_align64_uint16_t_uint32_t(i16 zeroext %str) {5611; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint32_t:5612; CHECK-P10: # %bb.0: # %entry5613; CHECK-P10-NEXT: pli r4, 2441406255614; CHECK-P10-NEXT: rldic r4, r4, 12, 245615; CHECK-P10-NEXT: stw r3, 0(r4)5616; CHECK-P10-NEXT: blr5617;5618; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint32_t:5619; CHECK-PREP10: # %bb.0: # %entry5620; CHECK-PREP10-NEXT: lis r4, 37255621; CHECK-PREP10-NEXT: ori r4, r4, 190255622; CHECK-PREP10-NEXT: rldic r4, r4, 12, 245623; CHECK-PREP10-NEXT: stw r3, 0(r4)5624; CHECK-PREP10-NEXT: blr5625entry:5626 %conv = zext i16 %str to i325627 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40965628 ret void5629}5630 5631; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5632define dso_local void @st_0_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {5633; CHECK-LABEL: st_0_uint16_t_uint64_t:5634; CHECK: # %bb.0: # %entry5635; CHECK-NEXT: std r4, 0(r3)5636; CHECK-NEXT: blr5637entry:5638 %conv = zext i16 %str to i645639 %0 = inttoptr i64 %ptr to ptr5640 store i64 %conv, ptr %0, align 85641 ret void5642}5643 5644; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5645define dso_local void @st_align16_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) {5646; CHECK-LABEL: st_align16_uint16_t_uint64_t:5647; CHECK: # %bb.0: # %entry5648; CHECK-NEXT: std r4, 8(r3)5649; CHECK-NEXT: blr5650entry:5651 %conv = zext i16 %str to i645652 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 85653 store i64 %conv, ptr %add.ptr, align 85654 ret void5655}5656 5657; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5658define dso_local void @st_align32_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) {5659; CHECK-P10-LABEL: st_align32_uint16_t_uint64_t:5660; CHECK-P10: # %bb.0: # %entry5661; CHECK-P10-NEXT: pstd r4, 99999000(r3), 05662; CHECK-P10-NEXT: blr5663;5664; CHECK-PREP10-LABEL: st_align32_uint16_t_uint64_t:5665; CHECK-PREP10: # %bb.0: # %entry5666; CHECK-PREP10-NEXT: lis r5, 15255667; CHECK-PREP10-NEXT: ori r5, r5, 566005668; CHECK-PREP10-NEXT: stdx r4, r3, r55669; CHECK-PREP10-NEXT: blr5670entry:5671 %conv = zext i16 %str to i645672 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990005673 store i64 %conv, ptr %add.ptr, align 85674 ret void5675}5676 5677; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5678define dso_local void @st_align64_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) {5679; CHECK-P10-LABEL: st_align64_uint16_t_uint64_t:5680; CHECK-P10: # %bb.0: # %entry5681; CHECK-P10-NEXT: pli r5, 2441406255682; CHECK-P10-NEXT: rldic r5, r5, 12, 245683; CHECK-P10-NEXT: stdx r4, r3, r55684; CHECK-P10-NEXT: blr5685;5686; CHECK-PREP10-LABEL: st_align64_uint16_t_uint64_t:5687; CHECK-PREP10: # %bb.0: # %entry5688; CHECK-PREP10-NEXT: lis r5, 37255689; CHECK-PREP10-NEXT: ori r5, r5, 190255690; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245691; CHECK-PREP10-NEXT: stdx r4, r3, r55692; CHECK-PREP10-NEXT: blr5693entry:5694 %conv = zext i16 %str to i645695 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000005696 store i64 %conv, ptr %add.ptr, align 85697 ret void5698}5699 5700; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5701define dso_local void @st_reg_uint16_t_uint64_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {5702; CHECK-LABEL: st_reg_uint16_t_uint64_t:5703; CHECK: # %bb.0: # %entry5704; CHECK-NEXT: stdx r5, r3, r45705; CHECK-NEXT: blr5706entry:5707 %conv = zext i16 %str to i645708 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off5709 store i64 %conv, ptr %add.ptr, align 85710 ret void5711}5712 5713; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5714define dso_local void @st_or1_uint16_t_uint64_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {5715; CHECK-LABEL: st_or1_uint16_t_uint64_t:5716; CHECK: # %bb.0: # %entry5717; CHECK-NEXT: or r3, r4, r35718; CHECK-NEXT: std r5, 0(r3)5719; CHECK-NEXT: blr5720entry:5721 %conv = zext i16 %str to i645722 %conv1 = zext i8 %off to i645723 %or = or i64 %conv1, %ptr5724 %0 = inttoptr i64 %or to ptr5725 store i64 %conv, ptr %0, align 85726 ret void5727}5728 5729; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5730define dso_local void @st_not_disjoint16_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {5731; CHECK-LABEL: st_not_disjoint16_uint16_t_uint64_t:5732; CHECK: # %bb.0: # %entry5733; CHECK-NEXT: ori r3, r3, 65734; CHECK-NEXT: std r4, 0(r3)5735; CHECK-NEXT: blr5736entry:5737 %conv = zext i16 %str to i645738 %or = or i64 %ptr, 65739 %0 = inttoptr i64 %or to ptr5740 store i64 %conv, ptr %0, align 85741 ret void5742}5743 5744; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5745define dso_local void @st_disjoint_align16_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {5746; CHECK-LABEL: st_disjoint_align16_uint16_t_uint64_t:5747; CHECK: # %bb.0: # %entry5748; CHECK-NEXT: rldicr r3, r3, 0, 515749; CHECK-NEXT: std r4, 24(r3)5750; CHECK-NEXT: blr5751entry:5752 %and = and i64 %ptr, -40965753 %conv = zext i16 %str to i645754 %or = or i64 %and, 245755 %0 = inttoptr i64 %or to ptr5756 store i64 %conv, ptr %0, align 85757 ret void5758}5759 5760; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5761define dso_local void @st_not_disjoint32_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {5762; CHECK-LABEL: st_not_disjoint32_uint16_t_uint64_t:5763; CHECK: # %bb.0: # %entry5764; CHECK-NEXT: ori r3, r3, 344635765; CHECK-NEXT: oris r3, r3, 15766; CHECK-NEXT: std r4, 0(r3)5767; CHECK-NEXT: blr5768entry:5769 %conv = zext i16 %str to i645770 %or = or i64 %ptr, 999995771 %0 = inttoptr i64 %or to ptr5772 store i64 %conv, ptr %0, align 85773 ret void5774}5775 5776; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5777define dso_local void @st_disjoint_align32_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {5778; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint64_t:5779; CHECK-P10: # %bb.0: # %entry5780; CHECK-P10-NEXT: lis r5, -152645781; CHECK-P10-NEXT: and r3, r3, r55782; CHECK-P10-NEXT: pstd r4, 999990000(r3), 05783; CHECK-P10-NEXT: blr5784;5785; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint64_t:5786; CHECK-PREP10: # %bb.0: # %entry5787; CHECK-PREP10-NEXT: lis r5, -152645788; CHECK-PREP10-NEXT: and r3, r3, r55789; CHECK-PREP10-NEXT: lis r5, 152585790; CHECK-PREP10-NEXT: ori r5, r5, 417125791; CHECK-PREP10-NEXT: stdx r4, r3, r55792; CHECK-PREP10-NEXT: blr5793entry:5794 %and = and i64 %ptr, -10003415045795 %conv = zext i16 %str to i645796 %or = or i64 %and, 9999900005797 %0 = inttoptr i64 %or to ptr5798 store i64 %conv, ptr %0, align 165799 ret void5800}5801 5802; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5803define dso_local void @st_not_disjoint64_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {5804; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint64_t:5805; CHECK-P10: # %bb.0: # %entry5806; CHECK-P10-NEXT: pli r5, 2325807; CHECK-P10-NEXT: pli r6, 35675873295808; CHECK-P10-NEXT: rldimi r6, r5, 32, 05809; CHECK-P10-NEXT: or r3, r3, r65810; CHECK-P10-NEXT: std r4, 0(r3)5811; CHECK-P10-NEXT: blr5812;5813; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint64_t:5814; CHECK-PREP10: # %bb.0: # %entry5815; CHECK-PREP10-NEXT: li r5, 295816; CHECK-PREP10-NEXT: rldic r5, r5, 35, 245817; CHECK-PREP10-NEXT: oris r5, r5, 544375818; CHECK-PREP10-NEXT: ori r5, r5, 40975819; CHECK-PREP10-NEXT: or r3, r3, r55820; CHECK-PREP10-NEXT: std r4, 0(r3)5821; CHECK-PREP10-NEXT: blr5822entry:5823 %conv = zext i16 %str to i645824 %or = or i64 %ptr, 10000000000015825 %0 = inttoptr i64 %or to ptr5826 store i64 %conv, ptr %0, align 85827 ret void5828}5829 5830; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5831define dso_local void @st_disjoint_align64_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) {5832; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint64_t:5833; CHECK-P10: # %bb.0: # %entry5834; CHECK-P10-NEXT: pli r5, 2441406255835; CHECK-P10-NEXT: rldicr r3, r3, 0, 235836; CHECK-P10-NEXT: rldic r5, r5, 12, 245837; CHECK-P10-NEXT: stdx r4, r3, r55838; CHECK-P10-NEXT: blr5839;5840; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint64_t:5841; CHECK-PREP10: # %bb.0: # %entry5842; CHECK-PREP10-NEXT: lis r5, 37255843; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 235844; CHECK-PREP10-NEXT: ori r5, r5, 190255845; CHECK-PREP10-NEXT: rldic r5, r5, 12, 245846; CHECK-PREP10-NEXT: stdx r4, r3, r55847; CHECK-PREP10-NEXT: blr5848entry:5849 %and = and i64 %ptr, -10995116277765850 %conv = zext i16 %str to i645851 %or = or i64 %and, 10000000000005852 %0 = inttoptr i64 %or to ptr5853 store i64 %conv, ptr %0, align 40965854 ret void5855}5856 5857; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5858define dso_local void @st_cst_align16_uint16_t_uint64_t(i16 zeroext %str) {5859; CHECK-LABEL: st_cst_align16_uint16_t_uint64_t:5860; CHECK: # %bb.0: # %entry5861; CHECK-NEXT: std r3, 4080(0)5862; CHECK-NEXT: blr5863entry:5864 %conv = zext i16 %str to i645865 store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 165866 ret void5867}5868 5869; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5870define dso_local void @st_cst_align32_uint16_t_uint64_t(i16 zeroext %str) {5871; CHECK-LABEL: st_cst_align32_uint16_t_uint64_t:5872; CHECK: # %bb.0: # %entry5873; CHECK-NEXT: lis r4, 1535874; CHECK-NEXT: std r3, -27108(r4)5875; CHECK-NEXT: blr5876entry:5877 %conv = zext i16 %str to i645878 store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 85879 ret void5880}5881 5882; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5883define dso_local void @st_cst_align64_uint16_t_uint64_t(i16 zeroext %str) {5884; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint64_t:5885; CHECK-P10: # %bb.0: # %entry5886; CHECK-P10-NEXT: pli r4, 2441406255887; CHECK-P10-NEXT: rldic r4, r4, 12, 245888; CHECK-P10-NEXT: std r3, 0(r4)5889; CHECK-P10-NEXT: blr5890;5891; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint64_t:5892; CHECK-PREP10: # %bb.0: # %entry5893; CHECK-PREP10-NEXT: lis r4, 37255894; CHECK-PREP10-NEXT: ori r4, r4, 190255895; CHECK-PREP10-NEXT: rldic r4, r4, 12, 245896; CHECK-PREP10-NEXT: std r3, 0(r4)5897; CHECK-PREP10-NEXT: blr5898entry:5899 %conv = zext i16 %str to i645900 store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40965901 ret void5902}5903 5904; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5905define dso_local void @st_0_uint16_t_float(i64 %ptr, i16 zeroext %str) {5906; CHECK-LABEL: st_0_uint16_t_float:5907; CHECK: # %bb.0: # %entry5908; CHECK-NEXT: mtfprwz f0, r45909; CHECK-NEXT: xscvuxdsp f0, f05910; CHECK-NEXT: stfs f0, 0(r3)5911; CHECK-NEXT: blr5912entry:5913 %conv = uitofp i16 %str to float5914 %0 = inttoptr i64 %ptr to ptr5915 store float %conv, ptr %0, align 45916 ret void5917}5918 5919; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5920define dso_local void @st_align16_uint16_t_float(ptr nocapture %ptr, i16 zeroext %str) {5921; CHECK-LABEL: st_align16_uint16_t_float:5922; CHECK: # %bb.0: # %entry5923; CHECK-NEXT: mtfprwz f0, r45924; CHECK-NEXT: xscvuxdsp f0, f05925; CHECK-NEXT: stfs f0, 8(r3)5926; CHECK-NEXT: blr5927entry:5928 %conv = uitofp i16 %str to float5929 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 85930 store float %conv, ptr %add.ptr, align 45931 ret void5932}5933 5934; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5935define dso_local void @st_align32_uint16_t_float(ptr nocapture %ptr, i16 zeroext %str) {5936; CHECK-P10-LABEL: st_align32_uint16_t_float:5937; CHECK-P10: # %bb.0: # %entry5938; CHECK-P10-NEXT: mtfprwz f0, r45939; CHECK-P10-NEXT: xscvuxdsp f0, f05940; CHECK-P10-NEXT: pstfs f0, 99999000(r3), 05941; CHECK-P10-NEXT: blr5942;5943; CHECK-P9-LABEL: st_align32_uint16_t_float:5944; CHECK-P9: # %bb.0: # %entry5945; CHECK-P9-NEXT: mtfprwz f0, r45946; CHECK-P9-NEXT: lis r4, 15255947; CHECK-P9-NEXT: xscvuxdsp f0, f05948; CHECK-P9-NEXT: ori r4, r4, 566005949; CHECK-P9-NEXT: stfsx f0, r3, r45950; CHECK-P9-NEXT: blr5951;5952; CHECK-P8-LABEL: st_align32_uint16_t_float:5953; CHECK-P8: # %bb.0: # %entry5954; CHECK-P8-NEXT: mtfprwz f0, r45955; CHECK-P8-NEXT: lis r4, 15255956; CHECK-P8-NEXT: ori r4, r4, 566005957; CHECK-P8-NEXT: xscvuxdsp f0, f05958; CHECK-P8-NEXT: stfsx f0, r3, r45959; CHECK-P8-NEXT: blr5960entry:5961 %conv = uitofp i16 %str to float5962 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990005963 store float %conv, ptr %add.ptr, align 45964 ret void5965}5966 5967; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly5968define dso_local void @st_align64_uint16_t_float(ptr nocapture %ptr, i16 zeroext %str) {5969; CHECK-P10-LABEL: st_align64_uint16_t_float:5970; CHECK-P10: # %bb.0: # %entry5971; CHECK-P10-NEXT: mtfprwz f0, r45972; CHECK-P10-NEXT: pli r4, 2441406255973; CHECK-P10-NEXT: rldic r4, r4, 12, 245974; CHECK-P10-NEXT: xscvuxdsp f0, f05975; CHECK-P10-NEXT: stfsx f0, r3, r45976; CHECK-P10-NEXT: blr5977;5978; CHECK-P9-LABEL: st_align64_uint16_t_float:5979; CHECK-P9: # %bb.0: # %entry5980; CHECK-P9-NEXT: mtfprwz f0, r45981; CHECK-P9-NEXT: lis r4, 37255982; CHECK-P9-NEXT: xscvuxdsp f0, f05983; CHECK-P9-NEXT: ori r4, r4, 190255984; CHECK-P9-NEXT: rldic r4, r4, 12, 245985; CHECK-P9-NEXT: stfsx f0, r3, r45986; CHECK-P9-NEXT: blr5987;5988; CHECK-P8-LABEL: st_align64_uint16_t_float:5989; CHECK-P8: # %bb.0: # %entry5990; CHECK-P8-NEXT: mtfprwz f0, r45991; CHECK-P8-NEXT: lis r4, 37255992; CHECK-P8-NEXT: ori r4, r4, 190255993; CHECK-P8-NEXT: rldic r4, r4, 12, 245994; CHECK-P8-NEXT: xscvuxdsp f0, f05995; CHECK-P8-NEXT: stfsx f0, r3, r45996; CHECK-P8-NEXT: blr5997entry:5998 %conv = uitofp i16 %str to float5999 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000006000 store float %conv, ptr %add.ptr, align 46001 ret void6002}6003 6004; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6005define dso_local void @st_reg_uint16_t_float(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {6006; CHECK-LABEL: st_reg_uint16_t_float:6007; CHECK: # %bb.0: # %entry6008; CHECK-NEXT: mtfprwz f0, r56009; CHECK-NEXT: xscvuxdsp f0, f06010; CHECK-NEXT: stfsx f0, r3, r46011; CHECK-NEXT: blr6012entry:6013 %conv = uitofp i16 %str to float6014 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off6015 store float %conv, ptr %add.ptr, align 46016 ret void6017}6018 6019; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6020define dso_local void @st_or1_uint16_t_float(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {6021; CHECK-LABEL: st_or1_uint16_t_float:6022; CHECK: # %bb.0: # %entry6023; CHECK-NEXT: mtfprwz f0, r56024; CHECK-NEXT: or r3, r4, r36025; CHECK-NEXT: xscvuxdsp f0, f06026; CHECK-NEXT: stfs f0, 0(r3)6027; CHECK-NEXT: blr6028entry:6029 %conv = uitofp i16 %str to float6030 %conv1 = zext i8 %off to i646031 %or = or i64 %conv1, %ptr6032 %0 = inttoptr i64 %or to ptr6033 store float %conv, ptr %0, align 46034 ret void6035}6036 6037; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6038define dso_local void @st_not_disjoint16_uint16_t_float(i64 %ptr, i16 zeroext %str) {6039; CHECK-LABEL: st_not_disjoint16_uint16_t_float:6040; CHECK: # %bb.0: # %entry6041; CHECK-NEXT: mtfprwz f0, r46042; CHECK-NEXT: ori r3, r3, 66043; CHECK-NEXT: xscvuxdsp f0, f06044; CHECK-NEXT: stfs f0, 0(r3)6045; CHECK-NEXT: blr6046entry:6047 %conv = uitofp i16 %str to float6048 %or = or i64 %ptr, 66049 %0 = inttoptr i64 %or to ptr6050 store float %conv, ptr %0, align 46051 ret void6052}6053 6054; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6055define dso_local void @st_disjoint_align16_uint16_t_float(i64 %ptr, i16 zeroext %str) {6056; CHECK-LABEL: st_disjoint_align16_uint16_t_float:6057; CHECK: # %bb.0: # %entry6058; CHECK-NEXT: mtfprwz f0, r46059; CHECK-NEXT: rldicr r3, r3, 0, 516060; CHECK-NEXT: xscvuxdsp f0, f06061; CHECK-NEXT: stfs f0, 24(r3)6062; CHECK-NEXT: blr6063entry:6064 %and = and i64 %ptr, -40966065 %conv = uitofp i16 %str to float6066 %or = or i64 %and, 246067 %0 = inttoptr i64 %or to ptr6068 store float %conv, ptr %0, align 86069 ret void6070}6071 6072; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6073define dso_local void @st_not_disjoint32_uint16_t_float(i64 %ptr, i16 zeroext %str) {6074; CHECK-P10-LABEL: st_not_disjoint32_uint16_t_float:6075; CHECK-P10: # %bb.0: # %entry6076; CHECK-P10-NEXT: mtfprwz f0, r46077; CHECK-P10-NEXT: ori r3, r3, 344636078; CHECK-P10-NEXT: oris r3, r3, 16079; CHECK-P10-NEXT: xscvuxdsp f0, f06080; CHECK-P10-NEXT: stfs f0, 0(r3)6081; CHECK-P10-NEXT: blr6082;6083; CHECK-P9-LABEL: st_not_disjoint32_uint16_t_float:6084; CHECK-P9: # %bb.0: # %entry6085; CHECK-P9-NEXT: mtfprwz f0, r46086; CHECK-P9-NEXT: ori r3, r3, 344636087; CHECK-P9-NEXT: xscvuxdsp f0, f06088; CHECK-P9-NEXT: oris r3, r3, 16089; CHECK-P9-NEXT: stfs f0, 0(r3)6090; CHECK-P9-NEXT: blr6091;6092; CHECK-P8-LABEL: st_not_disjoint32_uint16_t_float:6093; CHECK-P8: # %bb.0: # %entry6094; CHECK-P8-NEXT: mtfprwz f0, r46095; CHECK-P8-NEXT: ori r3, r3, 344636096; CHECK-P8-NEXT: oris r3, r3, 16097; CHECK-P8-NEXT: xscvuxdsp f0, f06098; CHECK-P8-NEXT: stfs f0, 0(r3)6099; CHECK-P8-NEXT: blr6100entry:6101 %conv = uitofp i16 %str to float6102 %or = or i64 %ptr, 999996103 %0 = inttoptr i64 %or to ptr6104 store float %conv, ptr %0, align 46105 ret void6106}6107 6108; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6109define dso_local void @st_disjoint_align32_uint16_t_float(i64 %ptr, i16 zeroext %str) {6110; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_float:6111; CHECK-P10: # %bb.0: # %entry6112; CHECK-P10-NEXT: mtfprwz f0, r46113; CHECK-P10-NEXT: lis r5, -152646114; CHECK-P10-NEXT: and r3, r3, r56115; CHECK-P10-NEXT: xscvuxdsp f0, f06116; CHECK-P10-NEXT: pstfs f0, 999990000(r3), 06117; CHECK-P10-NEXT: blr6118;6119; CHECK-P9-LABEL: st_disjoint_align32_uint16_t_float:6120; CHECK-P9: # %bb.0: # %entry6121; CHECK-P9-NEXT: mtfprwz f0, r46122; CHECK-P9-NEXT: lis r5, -152646123; CHECK-P9-NEXT: lis r4, 152586124; CHECK-P9-NEXT: xscvuxdsp f0, f06125; CHECK-P9-NEXT: and r3, r3, r56126; CHECK-P9-NEXT: ori r4, r4, 417126127; CHECK-P9-NEXT: stfsx f0, r3, r46128; CHECK-P9-NEXT: blr6129;6130; CHECK-P8-LABEL: st_disjoint_align32_uint16_t_float:6131; CHECK-P8: # %bb.0: # %entry6132; CHECK-P8-NEXT: mtfprwz f0, r46133; CHECK-P8-NEXT: lis r5, -152646134; CHECK-P8-NEXT: lis r4, 152586135; CHECK-P8-NEXT: and r3, r3, r56136; CHECK-P8-NEXT: ori r4, r4, 417126137; CHECK-P8-NEXT: xscvuxdsp f0, f06138; CHECK-P8-NEXT: stfsx f0, r3, r46139; CHECK-P8-NEXT: blr6140entry:6141 %and = and i64 %ptr, -10003415046142 %conv = uitofp i16 %str to float6143 %or = or i64 %and, 9999900006144 %0 = inttoptr i64 %or to ptr6145 store float %conv, ptr %0, align 166146 ret void6147}6148 6149; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6150define dso_local void @st_not_disjoint64_uint16_t_float(i64 %ptr, i16 zeroext %str) {6151; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_float:6152; CHECK-P10: # %bb.0: # %entry6153; CHECK-P10-NEXT: mtfprwz f0, r46154; CHECK-P10-NEXT: pli r4, 2326155; CHECK-P10-NEXT: pli r5, 35675873296156; CHECK-P10-NEXT: rldimi r5, r4, 32, 06157; CHECK-P10-NEXT: xscvuxdsp f0, f06158; CHECK-P10-NEXT: or r3, r3, r56159; CHECK-P10-NEXT: stfs f0, 0(r3)6160; CHECK-P10-NEXT: blr6161;6162; CHECK-P9-LABEL: st_not_disjoint64_uint16_t_float:6163; CHECK-P9: # %bb.0: # %entry6164; CHECK-P9-NEXT: mtfprwz f0, r46165; CHECK-P9-NEXT: li r4, 296166; CHECK-P9-NEXT: rldic r4, r4, 35, 246167; CHECK-P9-NEXT: xscvuxdsp f0, f06168; CHECK-P9-NEXT: oris r4, r4, 544376169; CHECK-P9-NEXT: ori r4, r4, 40976170; CHECK-P9-NEXT: or r3, r3, r46171; CHECK-P9-NEXT: stfs f0, 0(r3)6172; CHECK-P9-NEXT: blr6173;6174; CHECK-P8-LABEL: st_not_disjoint64_uint16_t_float:6175; CHECK-P8: # %bb.0: # %entry6176; CHECK-P8-NEXT: mtfprwz f0, r46177; CHECK-P8-NEXT: li r4, 296178; CHECK-P8-NEXT: rldic r4, r4, 35, 246179; CHECK-P8-NEXT: oris r4, r4, 544376180; CHECK-P8-NEXT: xscvuxdsp f0, f06181; CHECK-P8-NEXT: ori r4, r4, 40976182; CHECK-P8-NEXT: or r3, r3, r46183; CHECK-P8-NEXT: stfs f0, 0(r3)6184; CHECK-P8-NEXT: blr6185entry:6186 %conv = uitofp i16 %str to float6187 %or = or i64 %ptr, 10000000000016188 %0 = inttoptr i64 %or to ptr6189 store float %conv, ptr %0, align 46190 ret void6191}6192 6193; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6194define dso_local void @st_disjoint_align64_uint16_t_float(i64 %ptr, i16 zeroext %str) {6195; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_float:6196; CHECK-P10: # %bb.0: # %entry6197; CHECK-P10-NEXT: mtfprwz f0, r46198; CHECK-P10-NEXT: pli r4, 2441406256199; CHECK-P10-NEXT: rldicr r3, r3, 0, 236200; CHECK-P10-NEXT: rldic r4, r4, 12, 246201; CHECK-P10-NEXT: xscvuxdsp f0, f06202; CHECK-P10-NEXT: stfsx f0, r3, r46203; CHECK-P10-NEXT: blr6204;6205; CHECK-P9-LABEL: st_disjoint_align64_uint16_t_float:6206; CHECK-P9: # %bb.0: # %entry6207; CHECK-P9-NEXT: mtfprwz f0, r46208; CHECK-P9-NEXT: lis r4, 37256209; CHECK-P9-NEXT: rldicr r3, r3, 0, 236210; CHECK-P9-NEXT: xscvuxdsp f0, f06211; CHECK-P9-NEXT: ori r4, r4, 190256212; CHECK-P9-NEXT: rldic r4, r4, 12, 246213; CHECK-P9-NEXT: stfsx f0, r3, r46214; CHECK-P9-NEXT: blr6215;6216; CHECK-P8-LABEL: st_disjoint_align64_uint16_t_float:6217; CHECK-P8: # %bb.0: # %entry6218; CHECK-P8-NEXT: mtfprwz f0, r46219; CHECK-P8-NEXT: lis r4, 37256220; CHECK-P8-NEXT: rldicr r3, r3, 0, 236221; CHECK-P8-NEXT: ori r4, r4, 190256222; CHECK-P8-NEXT: rldic r4, r4, 12, 246223; CHECK-P8-NEXT: xscvuxdsp f0, f06224; CHECK-P8-NEXT: stfsx f0, r3, r46225; CHECK-P8-NEXT: blr6226entry:6227 %and = and i64 %ptr, -10995116277766228 %conv = uitofp i16 %str to float6229 %or = or i64 %and, 10000000000006230 %0 = inttoptr i64 %or to ptr6231 store float %conv, ptr %0, align 40966232 ret void6233}6234 6235; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6236define dso_local void @st_cst_align16_uint16_t_float(i16 zeroext %str) {6237; CHECK-LABEL: st_cst_align16_uint16_t_float:6238; CHECK: # %bb.0: # %entry6239; CHECK-NEXT: mtfprwz f0, r36240; CHECK-NEXT: xscvuxdsp f0, f06241; CHECK-NEXT: stfs f0, 4080(0)6242; CHECK-NEXT: blr6243entry:6244 %conv = uitofp i16 %str to float6245 store float %conv, ptr inttoptr (i64 4080 to ptr), align 166246 ret void6247}6248 6249; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6250define dso_local void @st_cst_align32_uint16_t_float(i16 zeroext %str) {6251; CHECK-LABEL: st_cst_align32_uint16_t_float:6252; CHECK: # %bb.0: # %entry6253; CHECK-NEXT: mtfprwz f0, r36254; CHECK-NEXT: lis r3, 1536255; CHECK-NEXT: xscvuxdsp f0, f06256; CHECK-NEXT: stfs f0, -27108(r3)6257; CHECK-NEXT: blr6258entry:6259 %conv = uitofp i16 %str to float6260 store float %conv, ptr inttoptr (i64 9999900 to ptr), align 46261 ret void6262}6263 6264; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6265define dso_local void @st_cst_align64_uint16_t_float(i16 zeroext %str) {6266; CHECK-P10-LABEL: st_cst_align64_uint16_t_float:6267; CHECK-P10: # %bb.0: # %entry6268; CHECK-P10-NEXT: mtfprwz f0, r36269; CHECK-P10-NEXT: pli r3, 2441406256270; CHECK-P10-NEXT: rldic r3, r3, 12, 246271; CHECK-P10-NEXT: xscvuxdsp f0, f06272; CHECK-P10-NEXT: stfs f0, 0(r3)6273; CHECK-P10-NEXT: blr6274;6275; CHECK-P9-LABEL: st_cst_align64_uint16_t_float:6276; CHECK-P9: # %bb.0: # %entry6277; CHECK-P9-NEXT: mtfprwz f0, r36278; CHECK-P9-NEXT: lis r3, 37256279; CHECK-P9-NEXT: xscvuxdsp f0, f06280; CHECK-P9-NEXT: ori r3, r3, 190256281; CHECK-P9-NEXT: rldic r3, r3, 12, 246282; CHECK-P9-NEXT: stfs f0, 0(r3)6283; CHECK-P9-NEXT: blr6284;6285; CHECK-P8-LABEL: st_cst_align64_uint16_t_float:6286; CHECK-P8: # %bb.0: # %entry6287; CHECK-P8-NEXT: mtfprwz f0, r36288; CHECK-P8-NEXT: lis r3, 37256289; CHECK-P8-NEXT: ori r3, r3, 190256290; CHECK-P8-NEXT: rldic r3, r3, 12, 246291; CHECK-P8-NEXT: xscvuxdsp f0, f06292; CHECK-P8-NEXT: stfs f0, 0(r3)6293; CHECK-P8-NEXT: blr6294entry:6295 %conv = uitofp i16 %str to float6296 store float %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40966297 ret void6298}6299 6300; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6301define dso_local void @st_0_uint16_t_double(i64 %ptr, i16 zeroext %str) {6302; CHECK-LABEL: st_0_uint16_t_double:6303; CHECK: # %bb.0: # %entry6304; CHECK-NEXT: mtfprwz f0, r46305; CHECK-NEXT: xscvuxddp f0, f06306; CHECK-NEXT: stfd f0, 0(r3)6307; CHECK-NEXT: blr6308entry:6309 %conv = uitofp i16 %str to double6310 %0 = inttoptr i64 %ptr to ptr6311 store double %conv, ptr %0, align 86312 ret void6313}6314 6315; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6316define dso_local void @st_align16_uint16_t_double(ptr nocapture %ptr, i16 zeroext %str) {6317; CHECK-LABEL: st_align16_uint16_t_double:6318; CHECK: # %bb.0: # %entry6319; CHECK-NEXT: mtfprwz f0, r46320; CHECK-NEXT: xscvuxddp f0, f06321; CHECK-NEXT: stfd f0, 8(r3)6322; CHECK-NEXT: blr6323entry:6324 %conv = uitofp i16 %str to double6325 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 86326 store double %conv, ptr %add.ptr, align 86327 ret void6328}6329 6330; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6331define dso_local void @st_align32_uint16_t_double(ptr nocapture %ptr, i16 zeroext %str) {6332; CHECK-P10-LABEL: st_align32_uint16_t_double:6333; CHECK-P10: # %bb.0: # %entry6334; CHECK-P10-NEXT: mtfprwz f0, r46335; CHECK-P10-NEXT: xscvuxddp f0, f06336; CHECK-P10-NEXT: pstfd f0, 99999000(r3), 06337; CHECK-P10-NEXT: blr6338;6339; CHECK-P9-LABEL: st_align32_uint16_t_double:6340; CHECK-P9: # %bb.0: # %entry6341; CHECK-P9-NEXT: mtfprwz f0, r46342; CHECK-P9-NEXT: lis r4, 15256343; CHECK-P9-NEXT: xscvuxddp f0, f06344; CHECK-P9-NEXT: ori r4, r4, 566006345; CHECK-P9-NEXT: stfdx f0, r3, r46346; CHECK-P9-NEXT: blr6347;6348; CHECK-P8-LABEL: st_align32_uint16_t_double:6349; CHECK-P8: # %bb.0: # %entry6350; CHECK-P8-NEXT: mtfprwz f0, r46351; CHECK-P8-NEXT: lis r4, 15256352; CHECK-P8-NEXT: ori r4, r4, 566006353; CHECK-P8-NEXT: xscvuxddp f0, f06354; CHECK-P8-NEXT: stfdx f0, r3, r46355; CHECK-P8-NEXT: blr6356entry:6357 %conv = uitofp i16 %str to double6358 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990006359 store double %conv, ptr %add.ptr, align 86360 ret void6361}6362 6363; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6364define dso_local void @st_align64_uint16_t_double(ptr nocapture %ptr, i16 zeroext %str) {6365; CHECK-P10-LABEL: st_align64_uint16_t_double:6366; CHECK-P10: # %bb.0: # %entry6367; CHECK-P10-NEXT: mtfprwz f0, r46368; CHECK-P10-NEXT: pli r4, 2441406256369; CHECK-P10-NEXT: rldic r4, r4, 12, 246370; CHECK-P10-NEXT: xscvuxddp f0, f06371; CHECK-P10-NEXT: stfdx f0, r3, r46372; CHECK-P10-NEXT: blr6373;6374; CHECK-P9-LABEL: st_align64_uint16_t_double:6375; CHECK-P9: # %bb.0: # %entry6376; CHECK-P9-NEXT: mtfprwz f0, r46377; CHECK-P9-NEXT: lis r4, 37256378; CHECK-P9-NEXT: xscvuxddp f0, f06379; CHECK-P9-NEXT: ori r4, r4, 190256380; CHECK-P9-NEXT: rldic r4, r4, 12, 246381; CHECK-P9-NEXT: stfdx f0, r3, r46382; CHECK-P9-NEXT: blr6383;6384; CHECK-P8-LABEL: st_align64_uint16_t_double:6385; CHECK-P8: # %bb.0: # %entry6386; CHECK-P8-NEXT: mtfprwz f0, r46387; CHECK-P8-NEXT: lis r4, 37256388; CHECK-P8-NEXT: ori r4, r4, 190256389; CHECK-P8-NEXT: rldic r4, r4, 12, 246390; CHECK-P8-NEXT: xscvuxddp f0, f06391; CHECK-P8-NEXT: stfdx f0, r3, r46392; CHECK-P8-NEXT: blr6393entry:6394 %conv = uitofp i16 %str to double6395 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000006396 store double %conv, ptr %add.ptr, align 86397 ret void6398}6399 6400; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6401define dso_local void @st_reg_uint16_t_double(ptr nocapture %ptr, i64 %off, i16 zeroext %str) {6402; CHECK-LABEL: st_reg_uint16_t_double:6403; CHECK: # %bb.0: # %entry6404; CHECK-NEXT: mtfprwz f0, r56405; CHECK-NEXT: xscvuxddp f0, f06406; CHECK-NEXT: stfdx f0, r3, r46407; CHECK-NEXT: blr6408entry:6409 %conv = uitofp i16 %str to double6410 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off6411 store double %conv, ptr %add.ptr, align 86412 ret void6413}6414 6415; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6416define dso_local void @st_or1_uint16_t_double(i64 %ptr, i8 zeroext %off, i16 zeroext %str) {6417; CHECK-LABEL: st_or1_uint16_t_double:6418; CHECK: # %bb.0: # %entry6419; CHECK-NEXT: mtfprwz f0, r56420; CHECK-NEXT: or r3, r4, r36421; CHECK-NEXT: xscvuxddp f0, f06422; CHECK-NEXT: stfd f0, 0(r3)6423; CHECK-NEXT: blr6424entry:6425 %conv = uitofp i16 %str to double6426 %conv1 = zext i8 %off to i646427 %or = or i64 %conv1, %ptr6428 %0 = inttoptr i64 %or to ptr6429 store double %conv, ptr %0, align 86430 ret void6431}6432 6433; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6434define dso_local void @st_not_disjoint16_uint16_t_double(i64 %ptr, i16 zeroext %str) {6435; CHECK-LABEL: st_not_disjoint16_uint16_t_double:6436; CHECK: # %bb.0: # %entry6437; CHECK-NEXT: mtfprwz f0, r46438; CHECK-NEXT: ori r3, r3, 66439; CHECK-NEXT: xscvuxddp f0, f06440; CHECK-NEXT: stfd f0, 0(r3)6441; CHECK-NEXT: blr6442entry:6443 %conv = uitofp i16 %str to double6444 %or = or i64 %ptr, 66445 %0 = inttoptr i64 %or to ptr6446 store double %conv, ptr %0, align 86447 ret void6448}6449 6450; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6451define dso_local void @st_disjoint_align16_uint16_t_double(i64 %ptr, i16 zeroext %str) {6452; CHECK-LABEL: st_disjoint_align16_uint16_t_double:6453; CHECK: # %bb.0: # %entry6454; CHECK-NEXT: mtfprwz f0, r46455; CHECK-NEXT: rldicr r3, r3, 0, 516456; CHECK-NEXT: xscvuxddp f0, f06457; CHECK-NEXT: stfd f0, 24(r3)6458; CHECK-NEXT: blr6459entry:6460 %and = and i64 %ptr, -40966461 %conv = uitofp i16 %str to double6462 %or = or i64 %and, 246463 %0 = inttoptr i64 %or to ptr6464 store double %conv, ptr %0, align 86465 ret void6466}6467 6468; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6469define dso_local void @st_not_disjoint32_uint16_t_double(i64 %ptr, i16 zeroext %str) {6470; CHECK-P10-LABEL: st_not_disjoint32_uint16_t_double:6471; CHECK-P10: # %bb.0: # %entry6472; CHECK-P10-NEXT: mtfprwz f0, r46473; CHECK-P10-NEXT: ori r3, r3, 344636474; CHECK-P10-NEXT: oris r3, r3, 16475; CHECK-P10-NEXT: xscvuxddp f0, f06476; CHECK-P10-NEXT: stfd f0, 0(r3)6477; CHECK-P10-NEXT: blr6478;6479; CHECK-P9-LABEL: st_not_disjoint32_uint16_t_double:6480; CHECK-P9: # %bb.0: # %entry6481; CHECK-P9-NEXT: mtfprwz f0, r46482; CHECK-P9-NEXT: ori r3, r3, 344636483; CHECK-P9-NEXT: xscvuxddp f0, f06484; CHECK-P9-NEXT: oris r3, r3, 16485; CHECK-P9-NEXT: stfd f0, 0(r3)6486; CHECK-P9-NEXT: blr6487;6488; CHECK-P8-LABEL: st_not_disjoint32_uint16_t_double:6489; CHECK-P8: # %bb.0: # %entry6490; CHECK-P8-NEXT: mtfprwz f0, r46491; CHECK-P8-NEXT: ori r3, r3, 344636492; CHECK-P8-NEXT: oris r3, r3, 16493; CHECK-P8-NEXT: xscvuxddp f0, f06494; CHECK-P8-NEXT: stfd f0, 0(r3)6495; CHECK-P8-NEXT: blr6496entry:6497 %conv = uitofp i16 %str to double6498 %or = or i64 %ptr, 999996499 %0 = inttoptr i64 %or to ptr6500 store double %conv, ptr %0, align 86501 ret void6502}6503 6504; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6505define dso_local void @st_disjoint_align32_uint16_t_double(i64 %ptr, i16 zeroext %str) {6506; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_double:6507; CHECK-P10: # %bb.0: # %entry6508; CHECK-P10-NEXT: mtfprwz f0, r46509; CHECK-P10-NEXT: lis r5, -152646510; CHECK-P10-NEXT: and r3, r3, r56511; CHECK-P10-NEXT: xscvuxddp f0, f06512; CHECK-P10-NEXT: pstfd f0, 999990000(r3), 06513; CHECK-P10-NEXT: blr6514;6515; CHECK-P9-LABEL: st_disjoint_align32_uint16_t_double:6516; CHECK-P9: # %bb.0: # %entry6517; CHECK-P9-NEXT: mtfprwz f0, r46518; CHECK-P9-NEXT: lis r5, -152646519; CHECK-P9-NEXT: lis r4, 152586520; CHECK-P9-NEXT: xscvuxddp f0, f06521; CHECK-P9-NEXT: and r3, r3, r56522; CHECK-P9-NEXT: ori r4, r4, 417126523; CHECK-P9-NEXT: stfdx f0, r3, r46524; CHECK-P9-NEXT: blr6525;6526; CHECK-P8-LABEL: st_disjoint_align32_uint16_t_double:6527; CHECK-P8: # %bb.0: # %entry6528; CHECK-P8-NEXT: mtfprwz f0, r46529; CHECK-P8-NEXT: lis r5, -152646530; CHECK-P8-NEXT: lis r4, 152586531; CHECK-P8-NEXT: and r3, r3, r56532; CHECK-P8-NEXT: ori r4, r4, 417126533; CHECK-P8-NEXT: xscvuxddp f0, f06534; CHECK-P8-NEXT: stfdx f0, r3, r46535; CHECK-P8-NEXT: blr6536entry:6537 %and = and i64 %ptr, -10003415046538 %conv = uitofp i16 %str to double6539 %or = or i64 %and, 9999900006540 %0 = inttoptr i64 %or to ptr6541 store double %conv, ptr %0, align 166542 ret void6543}6544 6545; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6546define dso_local void @st_not_disjoint64_uint16_t_double(i64 %ptr, i16 zeroext %str) {6547; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_double:6548; CHECK-P10: # %bb.0: # %entry6549; CHECK-P10-NEXT: mtfprwz f0, r46550; CHECK-P10-NEXT: pli r4, 2326551; CHECK-P10-NEXT: pli r5, 35675873296552; CHECK-P10-NEXT: rldimi r5, r4, 32, 06553; CHECK-P10-NEXT: xscvuxddp f0, f06554; CHECK-P10-NEXT: or r3, r3, r56555; CHECK-P10-NEXT: stfd f0, 0(r3)6556; CHECK-P10-NEXT: blr6557;6558; CHECK-P9-LABEL: st_not_disjoint64_uint16_t_double:6559; CHECK-P9: # %bb.0: # %entry6560; CHECK-P9-NEXT: mtfprwz f0, r46561; CHECK-P9-NEXT: li r4, 296562; CHECK-P9-NEXT: rldic r4, r4, 35, 246563; CHECK-P9-NEXT: xscvuxddp f0, f06564; CHECK-P9-NEXT: oris r4, r4, 544376565; CHECK-P9-NEXT: ori r4, r4, 40976566; CHECK-P9-NEXT: or r3, r3, r46567; CHECK-P9-NEXT: stfd f0, 0(r3)6568; CHECK-P9-NEXT: blr6569;6570; CHECK-P8-LABEL: st_not_disjoint64_uint16_t_double:6571; CHECK-P8: # %bb.0: # %entry6572; CHECK-P8-NEXT: mtfprwz f0, r46573; CHECK-P8-NEXT: li r4, 296574; CHECK-P8-NEXT: rldic r4, r4, 35, 246575; CHECK-P8-NEXT: oris r4, r4, 544376576; CHECK-P8-NEXT: xscvuxddp f0, f06577; CHECK-P8-NEXT: ori r4, r4, 40976578; CHECK-P8-NEXT: or r3, r3, r46579; CHECK-P8-NEXT: stfd f0, 0(r3)6580; CHECK-P8-NEXT: blr6581entry:6582 %conv = uitofp i16 %str to double6583 %or = or i64 %ptr, 10000000000016584 %0 = inttoptr i64 %or to ptr6585 store double %conv, ptr %0, align 86586 ret void6587}6588 6589; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6590define dso_local void @st_disjoint_align64_uint16_t_double(i64 %ptr, i16 zeroext %str) {6591; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_double:6592; CHECK-P10: # %bb.0: # %entry6593; CHECK-P10-NEXT: mtfprwz f0, r46594; CHECK-P10-NEXT: pli r4, 2441406256595; CHECK-P10-NEXT: rldicr r3, r3, 0, 236596; CHECK-P10-NEXT: rldic r4, r4, 12, 246597; CHECK-P10-NEXT: xscvuxddp f0, f06598; CHECK-P10-NEXT: stfdx f0, r3, r46599; CHECK-P10-NEXT: blr6600;6601; CHECK-P9-LABEL: st_disjoint_align64_uint16_t_double:6602; CHECK-P9: # %bb.0: # %entry6603; CHECK-P9-NEXT: mtfprwz f0, r46604; CHECK-P9-NEXT: lis r4, 37256605; CHECK-P9-NEXT: rldicr r3, r3, 0, 236606; CHECK-P9-NEXT: xscvuxddp f0, f06607; CHECK-P9-NEXT: ori r4, r4, 190256608; CHECK-P9-NEXT: rldic r4, r4, 12, 246609; CHECK-P9-NEXT: stfdx f0, r3, r46610; CHECK-P9-NEXT: blr6611;6612; CHECK-P8-LABEL: st_disjoint_align64_uint16_t_double:6613; CHECK-P8: # %bb.0: # %entry6614; CHECK-P8-NEXT: mtfprwz f0, r46615; CHECK-P8-NEXT: lis r4, 37256616; CHECK-P8-NEXT: rldicr r3, r3, 0, 236617; CHECK-P8-NEXT: ori r4, r4, 190256618; CHECK-P8-NEXT: rldic r4, r4, 12, 246619; CHECK-P8-NEXT: xscvuxddp f0, f06620; CHECK-P8-NEXT: stfdx f0, r3, r46621; CHECK-P8-NEXT: blr6622entry:6623 %and = and i64 %ptr, -10995116277766624 %conv = uitofp i16 %str to double6625 %or = or i64 %and, 10000000000006626 %0 = inttoptr i64 %or to ptr6627 store double %conv, ptr %0, align 40966628 ret void6629}6630 6631; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6632define dso_local void @st_cst_align16_uint16_t_double(i16 zeroext %str) {6633; CHECK-LABEL: st_cst_align16_uint16_t_double:6634; CHECK: # %bb.0: # %entry6635; CHECK-NEXT: mtfprwz f0, r36636; CHECK-NEXT: xscvuxddp f0, f06637; CHECK-NEXT: stfd f0, 4080(0)6638; CHECK-NEXT: blr6639entry:6640 %conv = uitofp i16 %str to double6641 store double %conv, ptr inttoptr (i64 4080 to ptr), align 166642 ret void6643}6644 6645; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6646define dso_local void @st_cst_align32_uint16_t_double(i16 zeroext %str) {6647; CHECK-LABEL: st_cst_align32_uint16_t_double:6648; CHECK: # %bb.0: # %entry6649; CHECK-NEXT: mtfprwz f0, r36650; CHECK-NEXT: lis r3, 1536651; CHECK-NEXT: xscvuxddp f0, f06652; CHECK-NEXT: stfd f0, -27108(r3)6653; CHECK-NEXT: blr6654entry:6655 %conv = uitofp i16 %str to double6656 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 86657 ret void6658}6659 6660; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6661define dso_local void @st_cst_align64_uint16_t_double(i16 zeroext %str) {6662; CHECK-P10-LABEL: st_cst_align64_uint16_t_double:6663; CHECK-P10: # %bb.0: # %entry6664; CHECK-P10-NEXT: mtfprwz f0, r36665; CHECK-P10-NEXT: pli r3, 2441406256666; CHECK-P10-NEXT: rldic r3, r3, 12, 246667; CHECK-P10-NEXT: xscvuxddp f0, f06668; CHECK-P10-NEXT: stfd f0, 0(r3)6669; CHECK-P10-NEXT: blr6670;6671; CHECK-P9-LABEL: st_cst_align64_uint16_t_double:6672; CHECK-P9: # %bb.0: # %entry6673; CHECK-P9-NEXT: mtfprwz f0, r36674; CHECK-P9-NEXT: lis r3, 37256675; CHECK-P9-NEXT: xscvuxddp f0, f06676; CHECK-P9-NEXT: ori r3, r3, 190256677; CHECK-P9-NEXT: rldic r3, r3, 12, 246678; CHECK-P9-NEXT: stfd f0, 0(r3)6679; CHECK-P9-NEXT: blr6680;6681; CHECK-P8-LABEL: st_cst_align64_uint16_t_double:6682; CHECK-P8: # %bb.0: # %entry6683; CHECK-P8-NEXT: mtfprwz f0, r36684; CHECK-P8-NEXT: lis r3, 37256685; CHECK-P8-NEXT: ori r3, r3, 190256686; CHECK-P8-NEXT: rldic r3, r3, 12, 246687; CHECK-P8-NEXT: xscvuxddp f0, f06688; CHECK-P8-NEXT: stfd f0, 0(r3)6689; CHECK-P8-NEXT: blr6690entry:6691 %conv = uitofp i16 %str to double6692 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40966693 ret void6694}6695 6696; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6697define dso_local void @st_0_int16_t_uint32_t(i64 %ptr, i16 signext %str) {6698; CHECK-LABEL: st_0_int16_t_uint32_t:6699; CHECK: # %bb.0: # %entry6700; CHECK-NEXT: stw r4, 0(r3)6701; CHECK-NEXT: blr6702entry:6703 %conv = sext i16 %str to i326704 %0 = inttoptr i64 %ptr to ptr6705 store i32 %conv, ptr %0, align 46706 ret void6707}6708 6709; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6710define dso_local void @st_align16_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) {6711; CHECK-LABEL: st_align16_int16_t_uint32_t:6712; CHECK: # %bb.0: # %entry6713; CHECK-NEXT: stw r4, 8(r3)6714; CHECK-NEXT: blr6715entry:6716 %conv = sext i16 %str to i326717 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 86718 store i32 %conv, ptr %add.ptr, align 46719 ret void6720}6721 6722; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6723define dso_local void @st_align32_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) {6724; CHECK-P10-LABEL: st_align32_int16_t_uint32_t:6725; CHECK-P10: # %bb.0: # %entry6726; CHECK-P10-NEXT: pstw r4, 99999000(r3), 06727; CHECK-P10-NEXT: blr6728;6729; CHECK-PREP10-LABEL: st_align32_int16_t_uint32_t:6730; CHECK-PREP10: # %bb.0: # %entry6731; CHECK-PREP10-NEXT: lis r5, 15256732; CHECK-PREP10-NEXT: ori r5, r5, 566006733; CHECK-PREP10-NEXT: stwx r4, r3, r56734; CHECK-PREP10-NEXT: blr6735entry:6736 %conv = sext i16 %str to i326737 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990006738 store i32 %conv, ptr %add.ptr, align 46739 ret void6740}6741 6742; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6743define dso_local void @st_align64_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) {6744; CHECK-P10-LABEL: st_align64_int16_t_uint32_t:6745; CHECK-P10: # %bb.0: # %entry6746; CHECK-P10-NEXT: pli r5, 2441406256747; CHECK-P10-NEXT: rldic r5, r5, 12, 246748; CHECK-P10-NEXT: stwx r4, r3, r56749; CHECK-P10-NEXT: blr6750;6751; CHECK-PREP10-LABEL: st_align64_int16_t_uint32_t:6752; CHECK-PREP10: # %bb.0: # %entry6753; CHECK-PREP10-NEXT: lis r5, 37256754; CHECK-PREP10-NEXT: ori r5, r5, 190256755; CHECK-PREP10-NEXT: rldic r5, r5, 12, 246756; CHECK-PREP10-NEXT: stwx r4, r3, r56757; CHECK-PREP10-NEXT: blr6758entry:6759 %conv = sext i16 %str to i326760 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000006761 store i32 %conv, ptr %add.ptr, align 46762 ret void6763}6764 6765; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6766define dso_local void @st_reg_int16_t_uint32_t(ptr nocapture %ptr, i64 %off, i16 signext %str) {6767; CHECK-LABEL: st_reg_int16_t_uint32_t:6768; CHECK: # %bb.0: # %entry6769; CHECK-NEXT: stwx r5, r3, r46770; CHECK-NEXT: blr6771entry:6772 %conv = sext i16 %str to i326773 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off6774 store i32 %conv, ptr %add.ptr, align 46775 ret void6776}6777 6778; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6779define dso_local void @st_or1_int16_t_uint32_t(i64 %ptr, i8 zeroext %off, i16 signext %str) {6780; CHECK-LABEL: st_or1_int16_t_uint32_t:6781; CHECK: # %bb.0: # %entry6782; CHECK-NEXT: or r3, r4, r36783; CHECK-NEXT: stw r5, 0(r3)6784; CHECK-NEXT: blr6785entry:6786 %conv = sext i16 %str to i326787 %conv1 = zext i8 %off to i646788 %or = or i64 %conv1, %ptr6789 %0 = inttoptr i64 %or to ptr6790 store i32 %conv, ptr %0, align 46791 ret void6792}6793 6794; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6795define dso_local void @st_not_disjoint16_int16_t_uint32_t(i64 %ptr, i16 signext %str) {6796; CHECK-LABEL: st_not_disjoint16_int16_t_uint32_t:6797; CHECK: # %bb.0: # %entry6798; CHECK-NEXT: ori r3, r3, 66799; CHECK-NEXT: stw r4, 0(r3)6800; CHECK-NEXT: blr6801entry:6802 %conv = sext i16 %str to i326803 %or = or i64 %ptr, 66804 %0 = inttoptr i64 %or to ptr6805 store i32 %conv, ptr %0, align 46806 ret void6807}6808 6809; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6810define dso_local void @st_disjoint_align16_int16_t_uint32_t(i64 %ptr, i16 signext %str) {6811; CHECK-LABEL: st_disjoint_align16_int16_t_uint32_t:6812; CHECK: # %bb.0: # %entry6813; CHECK-NEXT: rldicr r3, r3, 0, 516814; CHECK-NEXT: stw r4, 24(r3)6815; CHECK-NEXT: blr6816entry:6817 %and = and i64 %ptr, -40966818 %conv = sext i16 %str to i326819 %or = or i64 %and, 246820 %0 = inttoptr i64 %or to ptr6821 store i32 %conv, ptr %0, align 86822 ret void6823}6824 6825; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6826define dso_local void @st_not_disjoint32_int16_t_uint32_t(i64 %ptr, i16 signext %str) {6827; CHECK-LABEL: st_not_disjoint32_int16_t_uint32_t:6828; CHECK: # %bb.0: # %entry6829; CHECK-NEXT: ori r3, r3, 344636830; CHECK-NEXT: oris r3, r3, 16831; CHECK-NEXT: stw r4, 0(r3)6832; CHECK-NEXT: blr6833entry:6834 %conv = sext i16 %str to i326835 %or = or i64 %ptr, 999996836 %0 = inttoptr i64 %or to ptr6837 store i32 %conv, ptr %0, align 46838 ret void6839}6840 6841; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6842define dso_local void @st_disjoint_align32_int16_t_uint32_t(i64 %ptr, i16 signext %str) {6843; CHECK-P10-LABEL: st_disjoint_align32_int16_t_uint32_t:6844; CHECK-P10: # %bb.0: # %entry6845; CHECK-P10-NEXT: lis r5, -152646846; CHECK-P10-NEXT: and r3, r3, r56847; CHECK-P10-NEXT: pstw r4, 999990000(r3), 06848; CHECK-P10-NEXT: blr6849;6850; CHECK-PREP10-LABEL: st_disjoint_align32_int16_t_uint32_t:6851; CHECK-PREP10: # %bb.0: # %entry6852; CHECK-PREP10-NEXT: lis r5, -152646853; CHECK-PREP10-NEXT: and r3, r3, r56854; CHECK-PREP10-NEXT: lis r5, 152586855; CHECK-PREP10-NEXT: ori r5, r5, 417126856; CHECK-PREP10-NEXT: stwx r4, r3, r56857; CHECK-PREP10-NEXT: blr6858entry:6859 %and = and i64 %ptr, -10003415046860 %conv = sext i16 %str to i326861 %or = or i64 %and, 9999900006862 %0 = inttoptr i64 %or to ptr6863 store i32 %conv, ptr %0, align 166864 ret void6865}6866 6867; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6868define dso_local void @st_not_disjoint64_int16_t_uint32_t(i64 %ptr, i16 signext %str) {6869; CHECK-P10-LABEL: st_not_disjoint64_int16_t_uint32_t:6870; CHECK-P10: # %bb.0: # %entry6871; CHECK-P10-NEXT: pli r5, 2326872; CHECK-P10-NEXT: pli r6, 35675873296873; CHECK-P10-NEXT: rldimi r6, r5, 32, 06874; CHECK-P10-NEXT: or r3, r3, r66875; CHECK-P10-NEXT: stw r4, 0(r3)6876; CHECK-P10-NEXT: blr6877;6878; CHECK-PREP10-LABEL: st_not_disjoint64_int16_t_uint32_t:6879; CHECK-PREP10: # %bb.0: # %entry6880; CHECK-PREP10-NEXT: li r5, 296881; CHECK-PREP10-NEXT: rldic r5, r5, 35, 246882; CHECK-PREP10-NEXT: oris r5, r5, 544376883; CHECK-PREP10-NEXT: ori r5, r5, 40976884; CHECK-PREP10-NEXT: or r3, r3, r56885; CHECK-PREP10-NEXT: stw r4, 0(r3)6886; CHECK-PREP10-NEXT: blr6887entry:6888 %conv = sext i16 %str to i326889 %or = or i64 %ptr, 10000000000016890 %0 = inttoptr i64 %or to ptr6891 store i32 %conv, ptr %0, align 46892 ret void6893}6894 6895; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6896define dso_local void @st_disjoint_align64_int16_t_uint32_t(i64 %ptr, i16 signext %str) {6897; CHECK-P10-LABEL: st_disjoint_align64_int16_t_uint32_t:6898; CHECK-P10: # %bb.0: # %entry6899; CHECK-P10-NEXT: pli r5, 2441406256900; CHECK-P10-NEXT: rldicr r3, r3, 0, 236901; CHECK-P10-NEXT: rldic r5, r5, 12, 246902; CHECK-P10-NEXT: stwx r4, r3, r56903; CHECK-P10-NEXT: blr6904;6905; CHECK-PREP10-LABEL: st_disjoint_align64_int16_t_uint32_t:6906; CHECK-PREP10: # %bb.0: # %entry6907; CHECK-PREP10-NEXT: lis r5, 37256908; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 236909; CHECK-PREP10-NEXT: ori r5, r5, 190256910; CHECK-PREP10-NEXT: rldic r5, r5, 12, 246911; CHECK-PREP10-NEXT: stwx r4, r3, r56912; CHECK-PREP10-NEXT: blr6913entry:6914 %and = and i64 %ptr, -10995116277766915 %conv = sext i16 %str to i326916 %or = or i64 %and, 10000000000006917 %0 = inttoptr i64 %or to ptr6918 store i32 %conv, ptr %0, align 40966919 ret void6920}6921 6922; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6923define dso_local void @st_cst_align16_int16_t_uint32_t(i16 signext %str) {6924; CHECK-LABEL: st_cst_align16_int16_t_uint32_t:6925; CHECK: # %bb.0: # %entry6926; CHECK-NEXT: stw r3, 4080(0)6927; CHECK-NEXT: blr6928entry:6929 %conv = sext i16 %str to i326930 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 166931 ret void6932}6933 6934; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6935define dso_local void @st_cst_align32_int16_t_uint32_t(i16 signext %str) {6936; CHECK-LABEL: st_cst_align32_int16_t_uint32_t:6937; CHECK: # %bb.0: # %entry6938; CHECK-NEXT: lis r4, 1536939; CHECK-NEXT: stw r3, -27108(r4)6940; CHECK-NEXT: blr6941entry:6942 %conv = sext i16 %str to i326943 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 46944 ret void6945}6946 6947; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6948define dso_local void @st_cst_align64_int16_t_uint32_t(i16 signext %str) {6949; CHECK-P10-LABEL: st_cst_align64_int16_t_uint32_t:6950; CHECK-P10: # %bb.0: # %entry6951; CHECK-P10-NEXT: pli r4, 2441406256952; CHECK-P10-NEXT: rldic r4, r4, 12, 246953; CHECK-P10-NEXT: stw r3, 0(r4)6954; CHECK-P10-NEXT: blr6955;6956; CHECK-PREP10-LABEL: st_cst_align64_int16_t_uint32_t:6957; CHECK-PREP10: # %bb.0: # %entry6958; CHECK-PREP10-NEXT: lis r4, 37256959; CHECK-PREP10-NEXT: ori r4, r4, 190256960; CHECK-PREP10-NEXT: rldic r4, r4, 12, 246961; CHECK-PREP10-NEXT: stw r3, 0(r4)6962; CHECK-PREP10-NEXT: blr6963entry:6964 %conv = sext i16 %str to i326965 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40966966 ret void6967}6968 6969; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6970define dso_local void @st_0_int16_t_uint64_t(i64 %ptr, i16 signext %str) {6971; CHECK-LABEL: st_0_int16_t_uint64_t:6972; CHECK: # %bb.0: # %entry6973; CHECK-NEXT: std r4, 0(r3)6974; CHECK-NEXT: blr6975entry:6976 %conv = sext i16 %str to i646977 %0 = inttoptr i64 %ptr to ptr6978 store i64 %conv, ptr %0, align 86979 ret void6980}6981 6982; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6983define dso_local void @st_align16_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) {6984; CHECK-LABEL: st_align16_int16_t_uint64_t:6985; CHECK: # %bb.0: # %entry6986; CHECK-NEXT: std r4, 8(r3)6987; CHECK-NEXT: blr6988entry:6989 %conv = sext i16 %str to i646990 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 86991 store i64 %conv, ptr %add.ptr, align 86992 ret void6993}6994 6995; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly6996define dso_local void @st_align32_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) {6997; CHECK-P10-LABEL: st_align32_int16_t_uint64_t:6998; CHECK-P10: # %bb.0: # %entry6999; CHECK-P10-NEXT: pstd r4, 99999000(r3), 07000; CHECK-P10-NEXT: blr7001;7002; CHECK-PREP10-LABEL: st_align32_int16_t_uint64_t:7003; CHECK-PREP10: # %bb.0: # %entry7004; CHECK-PREP10-NEXT: lis r5, 15257005; CHECK-PREP10-NEXT: ori r5, r5, 566007006; CHECK-PREP10-NEXT: stdx r4, r3, r57007; CHECK-PREP10-NEXT: blr7008entry:7009 %conv = sext i16 %str to i647010 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990007011 store i64 %conv, ptr %add.ptr, align 87012 ret void7013}7014 7015; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7016define dso_local void @st_align64_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) {7017; CHECK-P10-LABEL: st_align64_int16_t_uint64_t:7018; CHECK-P10: # %bb.0: # %entry7019; CHECK-P10-NEXT: pli r5, 2441406257020; CHECK-P10-NEXT: rldic r5, r5, 12, 247021; CHECK-P10-NEXT: stdx r4, r3, r57022; CHECK-P10-NEXT: blr7023;7024; CHECK-PREP10-LABEL: st_align64_int16_t_uint64_t:7025; CHECK-PREP10: # %bb.0: # %entry7026; CHECK-PREP10-NEXT: lis r5, 37257027; CHECK-PREP10-NEXT: ori r5, r5, 190257028; CHECK-PREP10-NEXT: rldic r5, r5, 12, 247029; CHECK-PREP10-NEXT: stdx r4, r3, r57030; CHECK-PREP10-NEXT: blr7031entry:7032 %conv = sext i16 %str to i647033 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000007034 store i64 %conv, ptr %add.ptr, align 87035 ret void7036}7037 7038; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7039define dso_local void @st_reg_int16_t_uint64_t(ptr nocapture %ptr, i64 %off, i16 signext %str) {7040; CHECK-LABEL: st_reg_int16_t_uint64_t:7041; CHECK: # %bb.0: # %entry7042; CHECK-NEXT: stdx r5, r3, r47043; CHECK-NEXT: blr7044entry:7045 %conv = sext i16 %str to i647046 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off7047 store i64 %conv, ptr %add.ptr, align 87048 ret void7049}7050 7051; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7052define dso_local void @st_or1_int16_t_uint64_t(i64 %ptr, i8 zeroext %off, i16 signext %str) {7053; CHECK-LABEL: st_or1_int16_t_uint64_t:7054; CHECK: # %bb.0: # %entry7055; CHECK-NEXT: or r3, r4, r37056; CHECK-NEXT: std r5, 0(r3)7057; CHECK-NEXT: blr7058entry:7059 %conv = sext i16 %str to i647060 %conv1 = zext i8 %off to i647061 %or = or i64 %conv1, %ptr7062 %0 = inttoptr i64 %or to ptr7063 store i64 %conv, ptr %0, align 87064 ret void7065}7066 7067; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7068define dso_local void @st_not_disjoint16_int16_t_uint64_t(i64 %ptr, i16 signext %str) {7069; CHECK-LABEL: st_not_disjoint16_int16_t_uint64_t:7070; CHECK: # %bb.0: # %entry7071; CHECK-NEXT: ori r3, r3, 67072; CHECK-NEXT: std r4, 0(r3)7073; CHECK-NEXT: blr7074entry:7075 %conv = sext i16 %str to i647076 %or = or i64 %ptr, 67077 %0 = inttoptr i64 %or to ptr7078 store i64 %conv, ptr %0, align 87079 ret void7080}7081 7082; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7083define dso_local void @st_disjoint_align16_int16_t_uint64_t(i64 %ptr, i16 signext %str) {7084; CHECK-LABEL: st_disjoint_align16_int16_t_uint64_t:7085; CHECK: # %bb.0: # %entry7086; CHECK-NEXT: rldicr r3, r3, 0, 517087; CHECK-NEXT: std r4, 24(r3)7088; CHECK-NEXT: blr7089entry:7090 %and = and i64 %ptr, -40967091 %conv = sext i16 %str to i647092 %or = or i64 %and, 247093 %0 = inttoptr i64 %or to ptr7094 store i64 %conv, ptr %0, align 87095 ret void7096}7097 7098; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7099define dso_local void @st_not_disjoint32_int16_t_uint64_t(i64 %ptr, i16 signext %str) {7100; CHECK-LABEL: st_not_disjoint32_int16_t_uint64_t:7101; CHECK: # %bb.0: # %entry7102; CHECK-NEXT: ori r3, r3, 344637103; CHECK-NEXT: oris r3, r3, 17104; CHECK-NEXT: std r4, 0(r3)7105; CHECK-NEXT: blr7106entry:7107 %conv = sext i16 %str to i647108 %or = or i64 %ptr, 999997109 %0 = inttoptr i64 %or to ptr7110 store i64 %conv, ptr %0, align 87111 ret void7112}7113 7114; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7115define dso_local void @st_disjoint_align32_int16_t_uint64_t(i64 %ptr, i16 signext %str) {7116; CHECK-P10-LABEL: st_disjoint_align32_int16_t_uint64_t:7117; CHECK-P10: # %bb.0: # %entry7118; CHECK-P10-NEXT: lis r5, -152647119; CHECK-P10-NEXT: and r3, r3, r57120; CHECK-P10-NEXT: pstd r4, 999990000(r3), 07121; CHECK-P10-NEXT: blr7122;7123; CHECK-PREP10-LABEL: st_disjoint_align32_int16_t_uint64_t:7124; CHECK-PREP10: # %bb.0: # %entry7125; CHECK-PREP10-NEXT: lis r5, -152647126; CHECK-PREP10-NEXT: and r3, r3, r57127; CHECK-PREP10-NEXT: lis r5, 152587128; CHECK-PREP10-NEXT: ori r5, r5, 417127129; CHECK-PREP10-NEXT: stdx r4, r3, r57130; CHECK-PREP10-NEXT: blr7131entry:7132 %and = and i64 %ptr, -10003415047133 %conv = sext i16 %str to i647134 %or = or i64 %and, 9999900007135 %0 = inttoptr i64 %or to ptr7136 store i64 %conv, ptr %0, align 167137 ret void7138}7139 7140; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7141define dso_local void @st_not_disjoint64_int16_t_uint64_t(i64 %ptr, i16 signext %str) {7142; CHECK-P10-LABEL: st_not_disjoint64_int16_t_uint64_t:7143; CHECK-P10: # %bb.0: # %entry7144; CHECK-P10-NEXT: pli r5, 2327145; CHECK-P10-NEXT: pli r6, 35675873297146; CHECK-P10-NEXT: rldimi r6, r5, 32, 07147; CHECK-P10-NEXT: or r3, r3, r67148; CHECK-P10-NEXT: std r4, 0(r3)7149; CHECK-P10-NEXT: blr7150;7151; CHECK-PREP10-LABEL: st_not_disjoint64_int16_t_uint64_t:7152; CHECK-PREP10: # %bb.0: # %entry7153; CHECK-PREP10-NEXT: li r5, 297154; CHECK-PREP10-NEXT: rldic r5, r5, 35, 247155; CHECK-PREP10-NEXT: oris r5, r5, 544377156; CHECK-PREP10-NEXT: ori r5, r5, 40977157; CHECK-PREP10-NEXT: or r3, r3, r57158; CHECK-PREP10-NEXT: std r4, 0(r3)7159; CHECK-PREP10-NEXT: blr7160entry:7161 %conv = sext i16 %str to i647162 %or = or i64 %ptr, 10000000000017163 %0 = inttoptr i64 %or to ptr7164 store i64 %conv, ptr %0, align 87165 ret void7166}7167 7168; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7169define dso_local void @st_disjoint_align64_int16_t_uint64_t(i64 %ptr, i16 signext %str) {7170; CHECK-P10-LABEL: st_disjoint_align64_int16_t_uint64_t:7171; CHECK-P10: # %bb.0: # %entry7172; CHECK-P10-NEXT: pli r5, 2441406257173; CHECK-P10-NEXT: rldicr r3, r3, 0, 237174; CHECK-P10-NEXT: rldic r5, r5, 12, 247175; CHECK-P10-NEXT: stdx r4, r3, r57176; CHECK-P10-NEXT: blr7177;7178; CHECK-PREP10-LABEL: st_disjoint_align64_int16_t_uint64_t:7179; CHECK-PREP10: # %bb.0: # %entry7180; CHECK-PREP10-NEXT: lis r5, 37257181; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 237182; CHECK-PREP10-NEXT: ori r5, r5, 190257183; CHECK-PREP10-NEXT: rldic r5, r5, 12, 247184; CHECK-PREP10-NEXT: stdx r4, r3, r57185; CHECK-PREP10-NEXT: blr7186entry:7187 %and = and i64 %ptr, -10995116277767188 %conv = sext i16 %str to i647189 %or = or i64 %and, 10000000000007190 %0 = inttoptr i64 %or to ptr7191 store i64 %conv, ptr %0, align 40967192 ret void7193}7194 7195; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7196define dso_local void @st_cst_align16_int16_t_uint64_t(i16 signext %str) {7197; CHECK-LABEL: st_cst_align16_int16_t_uint64_t:7198; CHECK: # %bb.0: # %entry7199; CHECK-NEXT: std r3, 4080(0)7200; CHECK-NEXT: blr7201entry:7202 %conv = sext i16 %str to i647203 store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 167204 ret void7205}7206 7207; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7208define dso_local void @st_cst_align32_int16_t_uint64_t(i16 signext %str) {7209; CHECK-LABEL: st_cst_align32_int16_t_uint64_t:7210; CHECK: # %bb.0: # %entry7211; CHECK-NEXT: lis r4, 1537212; CHECK-NEXT: std r3, -27108(r4)7213; CHECK-NEXT: blr7214entry:7215 %conv = sext i16 %str to i647216 store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 87217 ret void7218}7219 7220; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7221define dso_local void @st_cst_align64_int16_t_uint64_t(i16 signext %str) {7222; CHECK-P10-LABEL: st_cst_align64_int16_t_uint64_t:7223; CHECK-P10: # %bb.0: # %entry7224; CHECK-P10-NEXT: pli r4, 2441406257225; CHECK-P10-NEXT: rldic r4, r4, 12, 247226; CHECK-P10-NEXT: std r3, 0(r4)7227; CHECK-P10-NEXT: blr7228;7229; CHECK-PREP10-LABEL: st_cst_align64_int16_t_uint64_t:7230; CHECK-PREP10: # %bb.0: # %entry7231; CHECK-PREP10-NEXT: lis r4, 37257232; CHECK-PREP10-NEXT: ori r4, r4, 190257233; CHECK-PREP10-NEXT: rldic r4, r4, 12, 247234; CHECK-PREP10-NEXT: std r3, 0(r4)7235; CHECK-PREP10-NEXT: blr7236entry:7237 %conv = sext i16 %str to i647238 store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40967239 ret void7240}7241 7242; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7243define dso_local void @st_0_int16_t_float(i64 %ptr, i16 signext %str) {7244; CHECK-LABEL: st_0_int16_t_float:7245; CHECK: # %bb.0: # %entry7246; CHECK-NEXT: mtfprwa f0, r47247; CHECK-NEXT: xscvsxdsp f0, f07248; CHECK-NEXT: stfs f0, 0(r3)7249; CHECK-NEXT: blr7250entry:7251 %conv = sitofp i16 %str to float7252 %0 = inttoptr i64 %ptr to ptr7253 store float %conv, ptr %0, align 47254 ret void7255}7256 7257; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7258define dso_local void @st_align16_int16_t_float(ptr nocapture %ptr, i16 signext %str) {7259; CHECK-LABEL: st_align16_int16_t_float:7260; CHECK: # %bb.0: # %entry7261; CHECK-NEXT: mtfprwa f0, r47262; CHECK-NEXT: xscvsxdsp f0, f07263; CHECK-NEXT: stfs f0, 8(r3)7264; CHECK-NEXT: blr7265entry:7266 %conv = sitofp i16 %str to float7267 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 87268 store float %conv, ptr %add.ptr, align 47269 ret void7270}7271 7272; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7273define dso_local void @st_align32_int16_t_float(ptr nocapture %ptr, i16 signext %str) {7274; CHECK-P10-LABEL: st_align32_int16_t_float:7275; CHECK-P10: # %bb.0: # %entry7276; CHECK-P10-NEXT: mtfprwa f0, r47277; CHECK-P10-NEXT: xscvsxdsp f0, f07278; CHECK-P10-NEXT: pstfs f0, 99999000(r3), 07279; CHECK-P10-NEXT: blr7280;7281; CHECK-P9-LABEL: st_align32_int16_t_float:7282; CHECK-P9: # %bb.0: # %entry7283; CHECK-P9-NEXT: mtfprwa f0, r47284; CHECK-P9-NEXT: lis r4, 15257285; CHECK-P9-NEXT: xscvsxdsp f0, f07286; CHECK-P9-NEXT: ori r4, r4, 566007287; CHECK-P9-NEXT: stfsx f0, r3, r47288; CHECK-P9-NEXT: blr7289;7290; CHECK-P8-LABEL: st_align32_int16_t_float:7291; CHECK-P8: # %bb.0: # %entry7292; CHECK-P8-NEXT: mtfprwa f0, r47293; CHECK-P8-NEXT: lis r4, 15257294; CHECK-P8-NEXT: ori r4, r4, 566007295; CHECK-P8-NEXT: xscvsxdsp f0, f07296; CHECK-P8-NEXT: stfsx f0, r3, r47297; CHECK-P8-NEXT: blr7298entry:7299 %conv = sitofp i16 %str to float7300 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990007301 store float %conv, ptr %add.ptr, align 47302 ret void7303}7304 7305; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7306define dso_local void @st_align64_int16_t_float(ptr nocapture %ptr, i16 signext %str) {7307; CHECK-P10-LABEL: st_align64_int16_t_float:7308; CHECK-P10: # %bb.0: # %entry7309; CHECK-P10-NEXT: mtfprwa f0, r47310; CHECK-P10-NEXT: pli r4, 2441406257311; CHECK-P10-NEXT: rldic r4, r4, 12, 247312; CHECK-P10-NEXT: xscvsxdsp f0, f07313; CHECK-P10-NEXT: stfsx f0, r3, r47314; CHECK-P10-NEXT: blr7315;7316; CHECK-P9-LABEL: st_align64_int16_t_float:7317; CHECK-P9: # %bb.0: # %entry7318; CHECK-P9-NEXT: mtfprwa f0, r47319; CHECK-P9-NEXT: lis r4, 37257320; CHECK-P9-NEXT: xscvsxdsp f0, f07321; CHECK-P9-NEXT: ori r4, r4, 190257322; CHECK-P9-NEXT: rldic r4, r4, 12, 247323; CHECK-P9-NEXT: stfsx f0, r3, r47324; CHECK-P9-NEXT: blr7325;7326; CHECK-P8-LABEL: st_align64_int16_t_float:7327; CHECK-P8: # %bb.0: # %entry7328; CHECK-P8-NEXT: mtfprwa f0, r47329; CHECK-P8-NEXT: lis r4, 37257330; CHECK-P8-NEXT: ori r4, r4, 190257331; CHECK-P8-NEXT: rldic r4, r4, 12, 247332; CHECK-P8-NEXT: xscvsxdsp f0, f07333; CHECK-P8-NEXT: stfsx f0, r3, r47334; CHECK-P8-NEXT: blr7335entry:7336 %conv = sitofp i16 %str to float7337 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000007338 store float %conv, ptr %add.ptr, align 47339 ret void7340}7341 7342; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7343define dso_local void @st_reg_int16_t_float(ptr nocapture %ptr, i64 %off, i16 signext %str) {7344; CHECK-LABEL: st_reg_int16_t_float:7345; CHECK: # %bb.0: # %entry7346; CHECK-NEXT: mtfprwa f0, r57347; CHECK-NEXT: xscvsxdsp f0, f07348; CHECK-NEXT: stfsx f0, r3, r47349; CHECK-NEXT: blr7350entry:7351 %conv = sitofp i16 %str to float7352 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off7353 store float %conv, ptr %add.ptr, align 47354 ret void7355}7356 7357; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7358define dso_local void @st_or1_int16_t_float(i64 %ptr, i8 zeroext %off, i16 signext %str) {7359; CHECK-LABEL: st_or1_int16_t_float:7360; CHECK: # %bb.0: # %entry7361; CHECK-NEXT: mtfprwa f0, r57362; CHECK-NEXT: or r3, r4, r37363; CHECK-NEXT: xscvsxdsp f0, f07364; CHECK-NEXT: stfs f0, 0(r3)7365; CHECK-NEXT: blr7366entry:7367 %conv = sitofp i16 %str to float7368 %conv1 = zext i8 %off to i647369 %or = or i64 %conv1, %ptr7370 %0 = inttoptr i64 %or to ptr7371 store float %conv, ptr %0, align 47372 ret void7373}7374 7375; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7376define dso_local void @st_not_disjoint16_int16_t_float(i64 %ptr, i16 signext %str) {7377; CHECK-LABEL: st_not_disjoint16_int16_t_float:7378; CHECK: # %bb.0: # %entry7379; CHECK-NEXT: mtfprwa f0, r47380; CHECK-NEXT: ori r3, r3, 67381; CHECK-NEXT: xscvsxdsp f0, f07382; CHECK-NEXT: stfs f0, 0(r3)7383; CHECK-NEXT: blr7384entry:7385 %conv = sitofp i16 %str to float7386 %or = or i64 %ptr, 67387 %0 = inttoptr i64 %or to ptr7388 store float %conv, ptr %0, align 47389 ret void7390}7391 7392; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7393define dso_local void @st_disjoint_align16_int16_t_float(i64 %ptr, i16 signext %str) {7394; CHECK-LABEL: st_disjoint_align16_int16_t_float:7395; CHECK: # %bb.0: # %entry7396; CHECK-NEXT: mtfprwa f0, r47397; CHECK-NEXT: rldicr r3, r3, 0, 517398; CHECK-NEXT: xscvsxdsp f0, f07399; CHECK-NEXT: stfs f0, 24(r3)7400; CHECK-NEXT: blr7401entry:7402 %and = and i64 %ptr, -40967403 %conv = sitofp i16 %str to float7404 %or = or i64 %and, 247405 %0 = inttoptr i64 %or to ptr7406 store float %conv, ptr %0, align 87407 ret void7408}7409 7410; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7411define dso_local void @st_not_disjoint32_int16_t_float(i64 %ptr, i16 signext %str) {7412; CHECK-P10-LABEL: st_not_disjoint32_int16_t_float:7413; CHECK-P10: # %bb.0: # %entry7414; CHECK-P10-NEXT: mtfprwa f0, r47415; CHECK-P10-NEXT: ori r3, r3, 344637416; CHECK-P10-NEXT: oris r3, r3, 17417; CHECK-P10-NEXT: xscvsxdsp f0, f07418; CHECK-P10-NEXT: stfs f0, 0(r3)7419; CHECK-P10-NEXT: blr7420;7421; CHECK-P9-LABEL: st_not_disjoint32_int16_t_float:7422; CHECK-P9: # %bb.0: # %entry7423; CHECK-P9-NEXT: mtfprwa f0, r47424; CHECK-P9-NEXT: ori r3, r3, 344637425; CHECK-P9-NEXT: xscvsxdsp f0, f07426; CHECK-P9-NEXT: oris r3, r3, 17427; CHECK-P9-NEXT: stfs f0, 0(r3)7428; CHECK-P9-NEXT: blr7429;7430; CHECK-P8-LABEL: st_not_disjoint32_int16_t_float:7431; CHECK-P8: # %bb.0: # %entry7432; CHECK-P8-NEXT: mtfprwa f0, r47433; CHECK-P8-NEXT: ori r3, r3, 344637434; CHECK-P8-NEXT: oris r3, r3, 17435; CHECK-P8-NEXT: xscvsxdsp f0, f07436; CHECK-P8-NEXT: stfs f0, 0(r3)7437; CHECK-P8-NEXT: blr7438entry:7439 %conv = sitofp i16 %str to float7440 %or = or i64 %ptr, 999997441 %0 = inttoptr i64 %or to ptr7442 store float %conv, ptr %0, align 47443 ret void7444}7445 7446; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7447define dso_local void @st_disjoint_align32_int16_t_float(i64 %ptr, i16 signext %str) {7448; CHECK-P10-LABEL: st_disjoint_align32_int16_t_float:7449; CHECK-P10: # %bb.0: # %entry7450; CHECK-P10-NEXT: mtfprwa f0, r47451; CHECK-P10-NEXT: lis r5, -152647452; CHECK-P10-NEXT: and r3, r3, r57453; CHECK-P10-NEXT: xscvsxdsp f0, f07454; CHECK-P10-NEXT: pstfs f0, 999990000(r3), 07455; CHECK-P10-NEXT: blr7456;7457; CHECK-P9-LABEL: st_disjoint_align32_int16_t_float:7458; CHECK-P9: # %bb.0: # %entry7459; CHECK-P9-NEXT: mtfprwa f0, r47460; CHECK-P9-NEXT: lis r5, -152647461; CHECK-P9-NEXT: lis r4, 152587462; CHECK-P9-NEXT: xscvsxdsp f0, f07463; CHECK-P9-NEXT: and r3, r3, r57464; CHECK-P9-NEXT: ori r4, r4, 417127465; CHECK-P9-NEXT: stfsx f0, r3, r47466; CHECK-P9-NEXT: blr7467;7468; CHECK-P8-LABEL: st_disjoint_align32_int16_t_float:7469; CHECK-P8: # %bb.0: # %entry7470; CHECK-P8-NEXT: mtfprwa f0, r47471; CHECK-P8-NEXT: lis r5, -152647472; CHECK-P8-NEXT: lis r4, 152587473; CHECK-P8-NEXT: and r3, r3, r57474; CHECK-P8-NEXT: ori r4, r4, 417127475; CHECK-P8-NEXT: xscvsxdsp f0, f07476; CHECK-P8-NEXT: stfsx f0, r3, r47477; CHECK-P8-NEXT: blr7478entry:7479 %and = and i64 %ptr, -10003415047480 %conv = sitofp i16 %str to float7481 %or = or i64 %and, 9999900007482 %0 = inttoptr i64 %or to ptr7483 store float %conv, ptr %0, align 167484 ret void7485}7486 7487; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7488define dso_local void @st_not_disjoint64_int16_t_float(i64 %ptr, i16 signext %str) {7489; CHECK-P10-LABEL: st_not_disjoint64_int16_t_float:7490; CHECK-P10: # %bb.0: # %entry7491; CHECK-P10-NEXT: mtfprwa f0, r47492; CHECK-P10-NEXT: pli r4, 2327493; CHECK-P10-NEXT: pli r5, 35675873297494; CHECK-P10-NEXT: rldimi r5, r4, 32, 07495; CHECK-P10-NEXT: xscvsxdsp f0, f07496; CHECK-P10-NEXT: or r3, r3, r57497; CHECK-P10-NEXT: stfs f0, 0(r3)7498; CHECK-P10-NEXT: blr7499;7500; CHECK-P9-LABEL: st_not_disjoint64_int16_t_float:7501; CHECK-P9: # %bb.0: # %entry7502; CHECK-P9-NEXT: mtfprwa f0, r47503; CHECK-P9-NEXT: li r4, 297504; CHECK-P9-NEXT: rldic r4, r4, 35, 247505; CHECK-P9-NEXT: xscvsxdsp f0, f07506; CHECK-P9-NEXT: oris r4, r4, 544377507; CHECK-P9-NEXT: ori r4, r4, 40977508; CHECK-P9-NEXT: or r3, r3, r47509; CHECK-P9-NEXT: stfs f0, 0(r3)7510; CHECK-P9-NEXT: blr7511;7512; CHECK-P8-LABEL: st_not_disjoint64_int16_t_float:7513; CHECK-P8: # %bb.0: # %entry7514; CHECK-P8-NEXT: mtfprwa f0, r47515; CHECK-P8-NEXT: li r4, 297516; CHECK-P8-NEXT: rldic r4, r4, 35, 247517; CHECK-P8-NEXT: oris r4, r4, 544377518; CHECK-P8-NEXT: xscvsxdsp f0, f07519; CHECK-P8-NEXT: ori r4, r4, 40977520; CHECK-P8-NEXT: or r3, r3, r47521; CHECK-P8-NEXT: stfs f0, 0(r3)7522; CHECK-P8-NEXT: blr7523entry:7524 %conv = sitofp i16 %str to float7525 %or = or i64 %ptr, 10000000000017526 %0 = inttoptr i64 %or to ptr7527 store float %conv, ptr %0, align 47528 ret void7529}7530 7531 7532; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7533define dso_local void @st_disjoint_align64_int16_t_float(i64 %ptr, i16 signext %str) {7534; CHECK-P10-LABEL: st_disjoint_align64_int16_t_float:7535; CHECK-P10: # %bb.0: # %entry7536; CHECK-P10-NEXT: mtfprwa f0, r47537; CHECK-P10-NEXT: pli r4, 2441406257538; CHECK-P10-NEXT: rldicr r3, r3, 0, 237539; CHECK-P10-NEXT: rldic r4, r4, 12, 247540; CHECK-P10-NEXT: xscvsxdsp f0, f07541; CHECK-P10-NEXT: stfsx f0, r3, r47542; CHECK-P10-NEXT: blr7543;7544; CHECK-P9-LABEL: st_disjoint_align64_int16_t_float:7545; CHECK-P9: # %bb.0: # %entry7546; CHECK-P9-NEXT: mtfprwa f0, r47547; CHECK-P9-NEXT: lis r4, 37257548; CHECK-P9-NEXT: rldicr r3, r3, 0, 237549; CHECK-P9-NEXT: xscvsxdsp f0, f07550; CHECK-P9-NEXT: ori r4, r4, 190257551; CHECK-P9-NEXT: rldic r4, r4, 12, 247552; CHECK-P9-NEXT: stfsx f0, r3, r47553; CHECK-P9-NEXT: blr7554;7555; CHECK-P8-LABEL: st_disjoint_align64_int16_t_float:7556; CHECK-P8: # %bb.0: # %entry7557; CHECK-P8-NEXT: mtfprwa f0, r47558; CHECK-P8-NEXT: lis r4, 37257559; CHECK-P8-NEXT: rldicr r3, r3, 0, 237560; CHECK-P8-NEXT: ori r4, r4, 190257561; CHECK-P8-NEXT: rldic r4, r4, 12, 247562; CHECK-P8-NEXT: xscvsxdsp f0, f07563; CHECK-P8-NEXT: stfsx f0, r3, r47564; CHECK-P8-NEXT: blr7565entry:7566 %and = and i64 %ptr, -10995116277767567 %conv = sitofp i16 %str to float7568 %or = or i64 %and, 10000000000007569 %0 = inttoptr i64 %or to ptr7570 store float %conv, ptr %0, align 40967571 ret void7572}7573 7574; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7575define dso_local void @st_cst_align16_int16_t_float(i16 signext %str) {7576; CHECK-LABEL: st_cst_align16_int16_t_float:7577; CHECK: # %bb.0: # %entry7578; CHECK-NEXT: mtfprwa f0, r37579; CHECK-NEXT: xscvsxdsp f0, f07580; CHECK-NEXT: stfs f0, 4080(0)7581; CHECK-NEXT: blr7582entry:7583 %conv = sitofp i16 %str to float7584 store float %conv, ptr inttoptr (i64 4080 to ptr), align 167585 ret void7586}7587 7588; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7589define dso_local void @st_cst_align32_int16_t_float(i16 signext %str) {7590; CHECK-LABEL: st_cst_align32_int16_t_float:7591; CHECK: # %bb.0: # %entry7592; CHECK-NEXT: mtfprwa f0, r37593; CHECK-NEXT: lis r3, 1537594; CHECK-NEXT: xscvsxdsp f0, f07595; CHECK-NEXT: stfs f0, -27108(r3)7596; CHECK-NEXT: blr7597entry:7598 %conv = sitofp i16 %str to float7599 store float %conv, ptr inttoptr (i64 9999900 to ptr), align 47600 ret void7601}7602 7603; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7604define dso_local void @st_cst_align64_int16_t_float(i16 signext %str) {7605; CHECK-P10-LABEL: st_cst_align64_int16_t_float:7606; CHECK-P10: # %bb.0: # %entry7607; CHECK-P10-NEXT: mtfprwa f0, r37608; CHECK-P10-NEXT: pli r3, 2441406257609; CHECK-P10-NEXT: rldic r3, r3, 12, 247610; CHECK-P10-NEXT: xscvsxdsp f0, f07611; CHECK-P10-NEXT: stfs f0, 0(r3)7612; CHECK-P10-NEXT: blr7613;7614; CHECK-P9-LABEL: st_cst_align64_int16_t_float:7615; CHECK-P9: # %bb.0: # %entry7616; CHECK-P9-NEXT: mtfprwa f0, r37617; CHECK-P9-NEXT: lis r3, 37257618; CHECK-P9-NEXT: xscvsxdsp f0, f07619; CHECK-P9-NEXT: ori r3, r3, 190257620; CHECK-P9-NEXT: rldic r3, r3, 12, 247621; CHECK-P9-NEXT: stfs f0, 0(r3)7622; CHECK-P9-NEXT: blr7623;7624; CHECK-P8-LABEL: st_cst_align64_int16_t_float:7625; CHECK-P8: # %bb.0: # %entry7626; CHECK-P8-NEXT: mtfprwa f0, r37627; CHECK-P8-NEXT: lis r3, 37257628; CHECK-P8-NEXT: ori r3, r3, 190257629; CHECK-P8-NEXT: rldic r3, r3, 12, 247630; CHECK-P8-NEXT: xscvsxdsp f0, f07631; CHECK-P8-NEXT: stfs f0, 0(r3)7632; CHECK-P8-NEXT: blr7633entry:7634 %conv = sitofp i16 %str to float7635 store float %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40967636 ret void7637}7638 7639; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7640define dso_local void @st_0_int16_t_double(i64 %ptr, i16 signext %str) {7641; CHECK-LABEL: st_0_int16_t_double:7642; CHECK: # %bb.0: # %entry7643; CHECK-NEXT: mtfprwa f0, r47644; CHECK-NEXT: xscvsxddp f0, f07645; CHECK-NEXT: stfd f0, 0(r3)7646; CHECK-NEXT: blr7647entry:7648 %conv = sitofp i16 %str to double7649 %0 = inttoptr i64 %ptr to ptr7650 store double %conv, ptr %0, align 87651 ret void7652}7653 7654; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7655define dso_local void @st_align16_int16_t_double(ptr nocapture %ptr, i16 signext %str) {7656; CHECK-LABEL: st_align16_int16_t_double:7657; CHECK: # %bb.0: # %entry7658; CHECK-NEXT: mtfprwa f0, r47659; CHECK-NEXT: xscvsxddp f0, f07660; CHECK-NEXT: stfd f0, 8(r3)7661; CHECK-NEXT: blr7662entry:7663 %conv = sitofp i16 %str to double7664 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 87665 store double %conv, ptr %add.ptr, align 87666 ret void7667}7668 7669; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7670define dso_local void @st_align32_int16_t_double(ptr nocapture %ptr, i16 signext %str) {7671; CHECK-P10-LABEL: st_align32_int16_t_double:7672; CHECK-P10: # %bb.0: # %entry7673; CHECK-P10-NEXT: mtfprwa f0, r47674; CHECK-P10-NEXT: xscvsxddp f0, f07675; CHECK-P10-NEXT: pstfd f0, 99999000(r3), 07676; CHECK-P10-NEXT: blr7677;7678; CHECK-P9-LABEL: st_align32_int16_t_double:7679; CHECK-P9: # %bb.0: # %entry7680; CHECK-P9-NEXT: mtfprwa f0, r47681; CHECK-P9-NEXT: lis r4, 15257682; CHECK-P9-NEXT: xscvsxddp f0, f07683; CHECK-P9-NEXT: ori r4, r4, 566007684; CHECK-P9-NEXT: stfdx f0, r3, r47685; CHECK-P9-NEXT: blr7686;7687; CHECK-P8-LABEL: st_align32_int16_t_double:7688; CHECK-P8: # %bb.0: # %entry7689; CHECK-P8-NEXT: mtfprwa f0, r47690; CHECK-P8-NEXT: lis r4, 15257691; CHECK-P8-NEXT: ori r4, r4, 566007692; CHECK-P8-NEXT: xscvsxddp f0, f07693; CHECK-P8-NEXT: stfdx f0, r3, r47694; CHECK-P8-NEXT: blr7695entry:7696 %conv = sitofp i16 %str to double7697 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 999990007698 store double %conv, ptr %add.ptr, align 87699 ret void7700}7701 7702; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7703define dso_local void @st_align64_int16_t_double(ptr nocapture %ptr, i16 signext %str) {7704; CHECK-P10-LABEL: st_align64_int16_t_double:7705; CHECK-P10: # %bb.0: # %entry7706; CHECK-P10-NEXT: mtfprwa f0, r47707; CHECK-P10-NEXT: pli r4, 2441406257708; CHECK-P10-NEXT: rldic r4, r4, 12, 247709; CHECK-P10-NEXT: xscvsxddp f0, f07710; CHECK-P10-NEXT: stfdx f0, r3, r47711; CHECK-P10-NEXT: blr7712;7713; CHECK-P9-LABEL: st_align64_int16_t_double:7714; CHECK-P9: # %bb.0: # %entry7715; CHECK-P9-NEXT: mtfprwa f0, r47716; CHECK-P9-NEXT: lis r4, 37257717; CHECK-P9-NEXT: xscvsxddp f0, f07718; CHECK-P9-NEXT: ori r4, r4, 190257719; CHECK-P9-NEXT: rldic r4, r4, 12, 247720; CHECK-P9-NEXT: stfdx f0, r3, r47721; CHECK-P9-NEXT: blr7722;7723; CHECK-P8-LABEL: st_align64_int16_t_double:7724; CHECK-P8: # %bb.0: # %entry7725; CHECK-P8-NEXT: mtfprwa f0, r47726; CHECK-P8-NEXT: lis r4, 37257727; CHECK-P8-NEXT: ori r4, r4, 190257728; CHECK-P8-NEXT: rldic r4, r4, 12, 247729; CHECK-P8-NEXT: xscvsxddp f0, f07730; CHECK-P8-NEXT: stfdx f0, r3, r47731; CHECK-P8-NEXT: blr7732entry:7733 %conv = sitofp i16 %str to double7734 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 10000000000007735 store double %conv, ptr %add.ptr, align 87736 ret void7737}7738 7739; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7740define dso_local void @st_reg_int16_t_double(ptr nocapture %ptr, i64 %off, i16 signext %str) {7741; CHECK-LABEL: st_reg_int16_t_double:7742; CHECK: # %bb.0: # %entry7743; CHECK-NEXT: mtfprwa f0, r57744; CHECK-NEXT: xscvsxddp f0, f07745; CHECK-NEXT: stfdx f0, r3, r47746; CHECK-NEXT: blr7747entry:7748 %conv = sitofp i16 %str to double7749 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off7750 store double %conv, ptr %add.ptr, align 87751 ret void7752}7753 7754; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7755define dso_local void @st_or1_int16_t_double(i64 %ptr, i8 zeroext %off, i16 signext %str) {7756; CHECK-LABEL: st_or1_int16_t_double:7757; CHECK: # %bb.0: # %entry7758; CHECK-NEXT: mtfprwa f0, r57759; CHECK-NEXT: or r3, r4, r37760; CHECK-NEXT: xscvsxddp f0, f07761; CHECK-NEXT: stfd f0, 0(r3)7762; CHECK-NEXT: blr7763entry:7764 %conv = sitofp i16 %str to double7765 %conv1 = zext i8 %off to i647766 %or = or i64 %conv1, %ptr7767 %0 = inttoptr i64 %or to ptr7768 store double %conv, ptr %0, align 87769 ret void7770}7771 7772; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7773define dso_local void @st_not_disjoint16_int16_t_double(i64 %ptr, i16 signext %str) {7774; CHECK-LABEL: st_not_disjoint16_int16_t_double:7775; CHECK: # %bb.0: # %entry7776; CHECK-NEXT: mtfprwa f0, r47777; CHECK-NEXT: ori r3, r3, 67778; CHECK-NEXT: xscvsxddp f0, f07779; CHECK-NEXT: stfd f0, 0(r3)7780; CHECK-NEXT: blr7781entry:7782 %conv = sitofp i16 %str to double7783 %or = or i64 %ptr, 67784 %0 = inttoptr i64 %or to ptr7785 store double %conv, ptr %0, align 87786 ret void7787}7788 7789; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7790define dso_local void @st_disjoint_align16_int16_t_double(i64 %ptr, i16 signext %str) {7791; CHECK-LABEL: st_disjoint_align16_int16_t_double:7792; CHECK: # %bb.0: # %entry7793; CHECK-NEXT: mtfprwa f0, r47794; CHECK-NEXT: rldicr r3, r3, 0, 517795; CHECK-NEXT: xscvsxddp f0, f07796; CHECK-NEXT: stfd f0, 24(r3)7797; CHECK-NEXT: blr7798entry:7799 %and = and i64 %ptr, -40967800 %conv = sitofp i16 %str to double7801 %or = or i64 %and, 247802 %0 = inttoptr i64 %or to ptr7803 store double %conv, ptr %0, align 87804 ret void7805}7806 7807; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7808define dso_local void @st_not_disjoint32_int16_t_double(i64 %ptr, i16 signext %str) {7809; CHECK-P10-LABEL: st_not_disjoint32_int16_t_double:7810; CHECK-P10: # %bb.0: # %entry7811; CHECK-P10-NEXT: mtfprwa f0, r47812; CHECK-P10-NEXT: ori r3, r3, 344637813; CHECK-P10-NEXT: oris r3, r3, 17814; CHECK-P10-NEXT: xscvsxddp f0, f07815; CHECK-P10-NEXT: stfd f0, 0(r3)7816; CHECK-P10-NEXT: blr7817;7818; CHECK-P9-LABEL: st_not_disjoint32_int16_t_double:7819; CHECK-P9: # %bb.0: # %entry7820; CHECK-P9-NEXT: mtfprwa f0, r47821; CHECK-P9-NEXT: ori r3, r3, 344637822; CHECK-P9-NEXT: xscvsxddp f0, f07823; CHECK-P9-NEXT: oris r3, r3, 17824; CHECK-P9-NEXT: stfd f0, 0(r3)7825; CHECK-P9-NEXT: blr7826;7827; CHECK-P8-LABEL: st_not_disjoint32_int16_t_double:7828; CHECK-P8: # %bb.0: # %entry7829; CHECK-P8-NEXT: mtfprwa f0, r47830; CHECK-P8-NEXT: ori r3, r3, 344637831; CHECK-P8-NEXT: oris r3, r3, 17832; CHECK-P8-NEXT: xscvsxddp f0, f07833; CHECK-P8-NEXT: stfd f0, 0(r3)7834; CHECK-P8-NEXT: blr7835entry:7836 %conv = sitofp i16 %str to double7837 %or = or i64 %ptr, 999997838 %0 = inttoptr i64 %or to ptr7839 store double %conv, ptr %0, align 87840 ret void7841}7842 7843; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7844define dso_local void @st_disjoint_align32_int16_t_double(i64 %ptr, i16 signext %str) {7845; CHECK-P10-LABEL: st_disjoint_align32_int16_t_double:7846; CHECK-P10: # %bb.0: # %entry7847; CHECK-P10-NEXT: mtfprwa f0, r47848; CHECK-P10-NEXT: lis r5, -152647849; CHECK-P10-NEXT: and r3, r3, r57850; CHECK-P10-NEXT: xscvsxddp f0, f07851; CHECK-P10-NEXT: pstfd f0, 999990000(r3), 07852; CHECK-P10-NEXT: blr7853;7854; CHECK-P9-LABEL: st_disjoint_align32_int16_t_double:7855; CHECK-P9: # %bb.0: # %entry7856; CHECK-P9-NEXT: mtfprwa f0, r47857; CHECK-P9-NEXT: lis r5, -152647858; CHECK-P9-NEXT: lis r4, 152587859; CHECK-P9-NEXT: xscvsxddp f0, f07860; CHECK-P9-NEXT: and r3, r3, r57861; CHECK-P9-NEXT: ori r4, r4, 417127862; CHECK-P9-NEXT: stfdx f0, r3, r47863; CHECK-P9-NEXT: blr7864;7865; CHECK-P8-LABEL: st_disjoint_align32_int16_t_double:7866; CHECK-P8: # %bb.0: # %entry7867; CHECK-P8-NEXT: mtfprwa f0, r47868; CHECK-P8-NEXT: lis r5, -152647869; CHECK-P8-NEXT: lis r4, 152587870; CHECK-P8-NEXT: and r3, r3, r57871; CHECK-P8-NEXT: ori r4, r4, 417127872; CHECK-P8-NEXT: xscvsxddp f0, f07873; CHECK-P8-NEXT: stfdx f0, r3, r47874; CHECK-P8-NEXT: blr7875entry:7876 %and = and i64 %ptr, -10003415047877 %conv = sitofp i16 %str to double7878 %or = or i64 %and, 9999900007879 %0 = inttoptr i64 %or to ptr7880 store double %conv, ptr %0, align 167881 ret void7882}7883 7884; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7885define dso_local void @st_not_disjoint64_int16_t_double(i64 %ptr, i16 signext %str) {7886; CHECK-P10-LABEL: st_not_disjoint64_int16_t_double:7887; CHECK-P10: # %bb.0: # %entry7888; CHECK-P10-NEXT: mtfprwa f0, r47889; CHECK-P10-NEXT: pli r4, 2327890; CHECK-P10-NEXT: pli r5, 35675873297891; CHECK-P10-NEXT: rldimi r5, r4, 32, 07892; CHECK-P10-NEXT: xscvsxddp f0, f07893; CHECK-P10-NEXT: or r3, r3, r57894; CHECK-P10-NEXT: stfd f0, 0(r3)7895; CHECK-P10-NEXT: blr7896;7897; CHECK-P9-LABEL: st_not_disjoint64_int16_t_double:7898; CHECK-P9: # %bb.0: # %entry7899; CHECK-P9-NEXT: mtfprwa f0, r47900; CHECK-P9-NEXT: li r4, 297901; CHECK-P9-NEXT: rldic r4, r4, 35, 247902; CHECK-P9-NEXT: xscvsxddp f0, f07903; CHECK-P9-NEXT: oris r4, r4, 544377904; CHECK-P9-NEXT: ori r4, r4, 40977905; CHECK-P9-NEXT: or r3, r3, r47906; CHECK-P9-NEXT: stfd f0, 0(r3)7907; CHECK-P9-NEXT: blr7908;7909; CHECK-P8-LABEL: st_not_disjoint64_int16_t_double:7910; CHECK-P8: # %bb.0: # %entry7911; CHECK-P8-NEXT: mtfprwa f0, r47912; CHECK-P8-NEXT: li r4, 297913; CHECK-P8-NEXT: rldic r4, r4, 35, 247914; CHECK-P8-NEXT: oris r4, r4, 544377915; CHECK-P8-NEXT: xscvsxddp f0, f07916; CHECK-P8-NEXT: ori r4, r4, 40977917; CHECK-P8-NEXT: or r3, r3, r47918; CHECK-P8-NEXT: stfd f0, 0(r3)7919; CHECK-P8-NEXT: blr7920entry:7921 %conv = sitofp i16 %str to double7922 %or = or i64 %ptr, 10000000000017923 %0 = inttoptr i64 %or to ptr7924 store double %conv, ptr %0, align 87925 ret void7926}7927 7928; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7929define dso_local void @st_disjoint_align64_int16_t_double(i64 %ptr, i16 signext %str) {7930; CHECK-P10-LABEL: st_disjoint_align64_int16_t_double:7931; CHECK-P10: # %bb.0: # %entry7932; CHECK-P10-NEXT: mtfprwa f0, r47933; CHECK-P10-NEXT: pli r4, 2441406257934; CHECK-P10-NEXT: rldicr r3, r3, 0, 237935; CHECK-P10-NEXT: rldic r4, r4, 12, 247936; CHECK-P10-NEXT: xscvsxddp f0, f07937; CHECK-P10-NEXT: stfdx f0, r3, r47938; CHECK-P10-NEXT: blr7939;7940; CHECK-P9-LABEL: st_disjoint_align64_int16_t_double:7941; CHECK-P9: # %bb.0: # %entry7942; CHECK-P9-NEXT: mtfprwa f0, r47943; CHECK-P9-NEXT: lis r4, 37257944; CHECK-P9-NEXT: rldicr r3, r3, 0, 237945; CHECK-P9-NEXT: xscvsxddp f0, f07946; CHECK-P9-NEXT: ori r4, r4, 190257947; CHECK-P9-NEXT: rldic r4, r4, 12, 247948; CHECK-P9-NEXT: stfdx f0, r3, r47949; CHECK-P9-NEXT: blr7950;7951; CHECK-P8-LABEL: st_disjoint_align64_int16_t_double:7952; CHECK-P8: # %bb.0: # %entry7953; CHECK-P8-NEXT: mtfprwa f0, r47954; CHECK-P8-NEXT: lis r4, 37257955; CHECK-P8-NEXT: rldicr r3, r3, 0, 237956; CHECK-P8-NEXT: ori r4, r4, 190257957; CHECK-P8-NEXT: rldic r4, r4, 12, 247958; CHECK-P8-NEXT: xscvsxddp f0, f07959; CHECK-P8-NEXT: stfdx f0, r3, r47960; CHECK-P8-NEXT: blr7961entry:7962 %and = and i64 %ptr, -10995116277767963 %conv = sitofp i16 %str to double7964 %or = or i64 %and, 10000000000007965 %0 = inttoptr i64 %or to ptr7966 store double %conv, ptr %0, align 40967967 ret void7968}7969 7970; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7971define dso_local void @st_cst_align16_int16_t_double(i16 signext %str) {7972; CHECK-LABEL: st_cst_align16_int16_t_double:7973; CHECK: # %bb.0: # %entry7974; CHECK-NEXT: mtfprwa f0, r37975; CHECK-NEXT: xscvsxddp f0, f07976; CHECK-NEXT: stfd f0, 4080(0)7977; CHECK-NEXT: blr7978entry:7979 %conv = sitofp i16 %str to double7980 store double %conv, ptr inttoptr (i64 4080 to ptr), align 167981 ret void7982}7983 7984; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly7985define dso_local void @st_cst_align32_int16_t_double(i16 signext %str) {7986; CHECK-LABEL: st_cst_align32_int16_t_double:7987; CHECK: # %bb.0: # %entry7988; CHECK-NEXT: mtfprwa f0, r37989; CHECK-NEXT: lis r3, 1537990; CHECK-NEXT: xscvsxddp f0, f07991; CHECK-NEXT: stfd f0, -27108(r3)7992; CHECK-NEXT: blr7993entry:7994 %conv = sitofp i16 %str to double7995 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 87996 ret void7997}7998 7999; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly8000define dso_local void @st_cst_align64_int16_t_double(i16 signext %str) {8001; CHECK-P10-LABEL: st_cst_align64_int16_t_double:8002; CHECK-P10: # %bb.0: # %entry8003; CHECK-P10-NEXT: mtfprwa f0, r38004; CHECK-P10-NEXT: pli r3, 2441406258005; CHECK-P10-NEXT: rldic r3, r3, 12, 248006; CHECK-P10-NEXT: xscvsxddp f0, f08007; CHECK-P10-NEXT: stfd f0, 0(r3)8008; CHECK-P10-NEXT: blr8009;8010; CHECK-P9-LABEL: st_cst_align64_int16_t_double:8011; CHECK-P9: # %bb.0: # %entry8012; CHECK-P9-NEXT: mtfprwa f0, r38013; CHECK-P9-NEXT: lis r3, 37258014; CHECK-P9-NEXT: xscvsxddp f0, f08015; CHECK-P9-NEXT: ori r3, r3, 190258016; CHECK-P9-NEXT: rldic r3, r3, 12, 248017; CHECK-P9-NEXT: stfd f0, 0(r3)8018; CHECK-P9-NEXT: blr8019;8020; CHECK-P8-LABEL: st_cst_align64_int16_t_double:8021; CHECK-P8: # %bb.0: # %entry8022; CHECK-P8-NEXT: mtfprwa f0, r38023; CHECK-P8-NEXT: lis r3, 37258024; CHECK-P8-NEXT: ori r3, r3, 190258025; CHECK-P8-NEXT: rldic r3, r3, 12, 248026; CHECK-P8-NEXT: xscvsxddp f0, f08027; CHECK-P8-NEXT: stfd f0, 0(r3)8028; CHECK-P8-NEXT: blr8029entry:8030 %conv = sitofp i16 %str to double8031 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 40968032 ret void8033}8034