1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; 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-LE 5; 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-BE 8; 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-LE 11; 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-BE 14; 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-LE 17; 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-BE 20 21; Function Attrs: norecurse nounwind readonly uwtable willreturn 22define dso_local signext i8 @ld_0_int8_t_uint8_t(i64 %ptr) { 23; CHECK-LABEL: ld_0_int8_t_uint8_t: 24; CHECK: # %bb.0: # %entry 25; CHECK-NEXT: lbz r3, 0(r3) 26; CHECK-NEXT: extsb r3, r3 27; CHECK-NEXT: blr 28entry: 29 %0 = inttoptr i64 %ptr to ptr 30 %1 = load i8, ptr %0, align 1 31 ret i8 %1 32} 33 34; Function Attrs: norecurse nounwind readonly uwtable willreturn 35define dso_local signext i8 @ld_align16_int8_t_uint8_t(ptr nocapture readonly %ptr) { 36; CHECK-LABEL: ld_align16_int8_t_uint8_t: 37; CHECK: # %bb.0: # %entry 38; CHECK-NEXT: lbz r3, 8(r3) 39; CHECK-NEXT: extsb r3, r3 40; CHECK-NEXT: blr 41entry: 42 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 43 %0 = load i8, ptr %add.ptr, align 1 44 ret i8 %0 45} 46 47; Function Attrs: norecurse nounwind readonly uwtable willreturn 48define dso_local signext i8 @ld_align32_int8_t_uint8_t(ptr nocapture readonly %ptr) { 49; CHECK-P10-LABEL: ld_align32_int8_t_uint8_t: 50; CHECK-P10: # %bb.0: # %entry 51; CHECK-P10-NEXT: plbz r3, 99999000(r3), 0 52; CHECK-P10-NEXT: extsb r3, r3 53; CHECK-P10-NEXT: blr 54; 55; CHECK-PREP10-LABEL: ld_align32_int8_t_uint8_t: 56; CHECK-PREP10: # %bb.0: # %entry 57; CHECK-PREP10-NEXT: lis r4, 1525 58; CHECK-PREP10-NEXT: ori r4, r4, 56600 59; CHECK-PREP10-NEXT: lbzx r3, r3, r4 60; CHECK-PREP10-NEXT: extsb r3, r3 61; CHECK-PREP10-NEXT: blr 62entry: 63 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 64 %0 = load i8, ptr %add.ptr, align 1 65 ret i8 %0 66} 67 68; Function Attrs: norecurse nounwind readonly uwtable willreturn 69define dso_local signext i8 @ld_align64_int8_t_uint8_t(ptr nocapture readonly %ptr) { 70; CHECK-P10-LABEL: ld_align64_int8_t_uint8_t: 71; CHECK-P10: # %bb.0: # %entry 72; CHECK-P10-NEXT: pli r4, 244140625 73; CHECK-P10-NEXT: rldic r4, r4, 12, 24 74; CHECK-P10-NEXT: lbzx r3, r3, r4 75; CHECK-P10-NEXT: extsb r3, r3 76; CHECK-P10-NEXT: blr 77; 78; CHECK-PREP10-LABEL: ld_align64_int8_t_uint8_t: 79; CHECK-PREP10: # %bb.0: # %entry 80; CHECK-PREP10-NEXT: lis r4, 3725 81; CHECK-PREP10-NEXT: ori r4, r4, 19025 82; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 83; CHECK-PREP10-NEXT: lbzx r3, r3, r4 84; CHECK-PREP10-NEXT: extsb r3, r3 85; CHECK-PREP10-NEXT: blr 86entry: 87 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 88 %0 = load i8, ptr %add.ptr, align 1 89 ret i8 %0 90} 91 92; Function Attrs: norecurse nounwind readonly uwtable willreturn 93define dso_local signext i8 @ld_reg_int8_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) { 94; CHECK-LABEL: ld_reg_int8_t_uint8_t: 95; CHECK: # %bb.0: # %entry 96; CHECK-NEXT: lbzx r3, r3, r4 97; CHECK-NEXT: extsb r3, r3 98; CHECK-NEXT: blr 99entry: 100 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 101 %0 = load i8, ptr %add.ptr, align 1 102 ret i8 %0 103} 104 105; Function Attrs: norecurse nounwind readonly uwtable willreturn 106define dso_local signext i8 @ld_or_int8_t_uint8_t(i64 %ptr, i8 zeroext %off) { 107; CHECK-LABEL: ld_or_int8_t_uint8_t: 108; CHECK: # %bb.0: # %entry 109; CHECK-NEXT: or r3, r4, r3 110; CHECK-NEXT: lbz r3, 0(r3) 111; CHECK-NEXT: extsb r3, r3 112; CHECK-NEXT: blr 113entry: 114 %conv = zext i8 %off to i64 115 %or = or i64 %conv, %ptr 116 %0 = inttoptr i64 %or to ptr 117 %1 = load i8, ptr %0, align 1 118 ret i8 %1 119} 120 121; Function Attrs: norecurse nounwind readonly uwtable willreturn 122define dso_local signext i8 @ld_not_disjoint16_int8_t_uint8_t(i64 %ptr) { 123; CHECK-LABEL: ld_not_disjoint16_int8_t_uint8_t: 124; CHECK: # %bb.0: # %entry 125; CHECK-NEXT: ori r3, r3, 6 126; CHECK-NEXT: lbz r3, 0(r3) 127; CHECK-NEXT: extsb r3, r3 128; CHECK-NEXT: blr 129entry: 130 %or = or i64 %ptr, 6 131 %0 = inttoptr i64 %or to ptr 132 %1 = load i8, ptr %0, align 1 133 ret i8 %1 134} 135 136; Function Attrs: norecurse nounwind readonly uwtable willreturn 137define dso_local signext i8 @ld_disjoint_align16_int8_t_uint8_t(i64 %ptr) { 138; CHECK-LABEL: ld_disjoint_align16_int8_t_uint8_t: 139; CHECK: # %bb.0: # %entry 140; CHECK-NEXT: rldicr r3, r3, 0, 51 141; CHECK-NEXT: lbz r3, 24(r3) 142; CHECK-NEXT: extsb r3, r3 143; CHECK-NEXT: blr 144entry: 145 %and = and i64 %ptr, -4096 146 %or = or i64 %and, 24 147 %0 = inttoptr i64 %or to ptr 148 %1 = load i8, ptr %0, align 8 149 ret i8 %1 150} 151 152; Function Attrs: norecurse nounwind readonly uwtable willreturn 153define dso_local signext i8 @ld_not_disjoint32_int8_t_uint8_t(i64 %ptr) { 154; CHECK-LABEL: ld_not_disjoint32_int8_t_uint8_t: 155; CHECK: # %bb.0: # %entry 156; CHECK-NEXT: ori r3, r3, 34463 157; CHECK-NEXT: oris r3, r3, 1 158; CHECK-NEXT: lbz r3, 0(r3) 159; CHECK-NEXT: extsb r3, r3 160; CHECK-NEXT: blr 161entry: 162 %or = or i64 %ptr, 99999 163 %0 = inttoptr i64 %or to ptr 164 %1 = load i8, ptr %0, align 1 165 ret i8 %1 166} 167 168; Function Attrs: norecurse nounwind readonly uwtable willreturn 169define dso_local signext i8 @ld_disjoint_align32_int8_t_uint8_t(i64 %ptr) { 170; CHECK-P10-LABEL: ld_disjoint_align32_int8_t_uint8_t: 171; CHECK-P10: # %bb.0: # %entry 172; CHECK-P10-NEXT: lis r4, -15264 173; CHECK-P10-NEXT: and r3, r3, r4 174; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0 175; CHECK-P10-NEXT: extsb r3, r3 176; CHECK-P10-NEXT: blr 177; 178; CHECK-PREP10-LABEL: ld_disjoint_align32_int8_t_uint8_t: 179; CHECK-PREP10: # %bb.0: # %entry 180; CHECK-PREP10-NEXT: lis r4, -15264 181; CHECK-PREP10-NEXT: and r3, r3, r4 182; CHECK-PREP10-NEXT: lis r4, 15258 183; CHECK-PREP10-NEXT: ori r4, r4, 41712 184; CHECK-PREP10-NEXT: lbzx r3, r3, r4 185; CHECK-PREP10-NEXT: extsb r3, r3 186; CHECK-PREP10-NEXT: blr 187entry: 188 %and = and i64 %ptr, -1000341504 189 %or = or i64 %and, 999990000 190 %0 = inttoptr i64 %or to ptr 191 %1 = load i8, ptr %0, align 16 192 ret i8 %1 193} 194 195; Function Attrs: norecurse nounwind readonly uwtable willreturn 196define dso_local signext i8 @ld_not_disjoint64_int8_t_uint8_t(i64 %ptr) { 197; CHECK-P10-LABEL: ld_not_disjoint64_int8_t_uint8_t: 198; CHECK-P10: # %bb.0: # %entry 199; CHECK-P10-NEXT: pli r4, 232 200; CHECK-P10-NEXT: pli r5, 3567587329 201; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 202; CHECK-P10-NEXT: or r3, r3, r5 203; CHECK-P10-NEXT: lbz r3, 0(r3) 204; CHECK-P10-NEXT: extsb r3, r3 205; CHECK-P10-NEXT: blr 206; 207; CHECK-PREP10-LABEL: ld_not_disjoint64_int8_t_uint8_t: 208; CHECK-PREP10: # %bb.0: # %entry 209; CHECK-PREP10-NEXT: li r4, 29 210; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 211; CHECK-PREP10-NEXT: oris r4, r4, 54437 212; CHECK-PREP10-NEXT: ori r4, r4, 4097 213; CHECK-PREP10-NEXT: or r3, r3, r4 214; CHECK-PREP10-NEXT: lbz r3, 0(r3) 215; CHECK-PREP10-NEXT: extsb r3, r3 216; CHECK-PREP10-NEXT: blr 217entry: 218 %or = or i64 %ptr, 1000000000001 219 %0 = inttoptr i64 %or to ptr 220 %1 = load i8, ptr %0, align 1 221 ret i8 %1 222} 223 224; Function Attrs: norecurse nounwind readonly uwtable willreturn 225define dso_local signext i8 @ld_disjoint_align64_int8_t_uint8_t(i64 %ptr) { 226; CHECK-P10-LABEL: ld_disjoint_align64_int8_t_uint8_t: 227; CHECK-P10: # %bb.0: # %entry 228; CHECK-P10-NEXT: pli r4, 244140625 229; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 230; CHECK-P10-NEXT: rldic r4, r4, 12, 24 231; CHECK-P10-NEXT: lbzx r3, r3, r4 232; CHECK-P10-NEXT: extsb r3, r3 233; CHECK-P10-NEXT: blr 234; 235; CHECK-PREP10-LABEL: ld_disjoint_align64_int8_t_uint8_t: 236; CHECK-PREP10: # %bb.0: # %entry 237; CHECK-PREP10-NEXT: lis r4, 3725 238; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 239; CHECK-PREP10-NEXT: ori r4, r4, 19025 240; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 241; CHECK-PREP10-NEXT: lbzx r3, r3, r4 242; CHECK-PREP10-NEXT: extsb r3, r3 243; CHECK-PREP10-NEXT: blr 244entry: 245 %and = and i64 %ptr, -1099511627776 246 %or = or i64 %and, 1000000000000 247 %0 = inttoptr i64 %or to ptr 248 %1 = load i8, ptr %0, align 4096 249 ret i8 %1 250} 251 252; Function Attrs: norecurse nounwind readonly uwtable willreturn 253define dso_local signext i8 @ld_cst_align16_int8_t_uint8_t() { 254; CHECK-LABEL: ld_cst_align16_int8_t_uint8_t: 255; CHECK: # %bb.0: # %entry 256; CHECK-NEXT: lbz r3, 4080(0) 257; CHECK-NEXT: extsb r3, r3 258; CHECK-NEXT: blr 259entry: 260 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16 261 ret i8 %0 262} 263 264; Function Attrs: norecurse nounwind readonly uwtable willreturn 265define dso_local signext i8 @ld_cst_align32_int8_t_uint8_t() { 266; CHECK-LABEL: ld_cst_align32_int8_t_uint8_t: 267; CHECK: # %bb.0: # %entry 268; CHECK-NEXT: lis r3, 153 269; CHECK-NEXT: lbz r3, -27108(r3) 270; CHECK-NEXT: extsb r3, r3 271; CHECK-NEXT: blr 272entry: 273 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4 274 ret i8 %0 275} 276 277; Function Attrs: norecurse nounwind readonly uwtable willreturn 278define dso_local signext i8 @ld_cst_align64_int8_t_uint8_t() { 279; CHECK-P10-LABEL: ld_cst_align64_int8_t_uint8_t: 280; CHECK-P10: # %bb.0: # %entry 281; CHECK-P10-NEXT: pli r3, 244140625 282; CHECK-P10-NEXT: rldic r3, r3, 12, 24 283; CHECK-P10-NEXT: lbz r3, 0(r3) 284; CHECK-P10-NEXT: extsb r3, r3 285; CHECK-P10-NEXT: blr 286; 287; CHECK-PREP10-LABEL: ld_cst_align64_int8_t_uint8_t: 288; CHECK-PREP10: # %bb.0: # %entry 289; CHECK-PREP10-NEXT: lis r3, 3725 290; CHECK-PREP10-NEXT: ori r3, r3, 19025 291; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 292; CHECK-PREP10-NEXT: lbz r3, 0(r3) 293; CHECK-PREP10-NEXT: extsb r3, r3 294; CHECK-PREP10-NEXT: blr 295entry: 296 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096 297 ret i8 %0 298} 299 300; Function Attrs: norecurse nounwind readonly uwtable willreturn 301define dso_local signext i8 @ld_0_int8_t_uint16_t(i64 %ptr) { 302; CHECK-LE-LABEL: ld_0_int8_t_uint16_t: 303; CHECK-LE: # %bb.0: # %entry 304; CHECK-LE-NEXT: lbz r3, 0(r3) 305; CHECK-LE-NEXT: extsb r3, r3 306; CHECK-LE-NEXT: blr 307; 308; CHECK-BE-LABEL: ld_0_int8_t_uint16_t: 309; CHECK-BE: # %bb.0: # %entry 310; CHECK-BE-NEXT: lbz r3, 1(r3) 311; CHECK-BE-NEXT: extsb r3, r3 312; CHECK-BE-NEXT: blr 313entry: 314 %0 = inttoptr i64 %ptr to ptr 315 %1 = load i16, ptr %0, align 2 316 %conv = trunc i16 %1 to i8 317 ret i8 %conv 318} 319 320; Function Attrs: norecurse nounwind readonly uwtable willreturn 321define dso_local signext i8 @ld_align16_int8_t_uint16_t(ptr nocapture readonly %ptr) { 322; CHECK-LE-LABEL: ld_align16_int8_t_uint16_t: 323; CHECK-LE: # %bb.0: # %entry 324; CHECK-LE-NEXT: lbz r3, 8(r3) 325; CHECK-LE-NEXT: extsb r3, r3 326; CHECK-LE-NEXT: blr 327; 328; CHECK-BE-LABEL: ld_align16_int8_t_uint16_t: 329; CHECK-BE: # %bb.0: # %entry 330; CHECK-BE-NEXT: lbz r3, 9(r3) 331; CHECK-BE-NEXT: extsb r3, r3 332; CHECK-BE-NEXT: blr 333entry: 334 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 335 %0 = load i16, ptr %add.ptr, align 2 336 %conv = trunc i16 %0 to i8 337 ret i8 %conv 338} 339 340; Function Attrs: norecurse nounwind readonly uwtable willreturn 341define dso_local signext i8 @ld_align32_int8_t_uint16_t(ptr nocapture readonly %ptr) { 342; CHECK-P10-LE-LABEL: ld_align32_int8_t_uint16_t: 343; CHECK-P10-LE: # %bb.0: # %entry 344; CHECK-P10-LE-NEXT: plbz r3, 99999000(r3), 0 345; CHECK-P10-LE-NEXT: extsb r3, r3 346; CHECK-P10-LE-NEXT: blr 347; 348; CHECK-P10-BE-LABEL: ld_align32_int8_t_uint16_t: 349; CHECK-P10-BE: # %bb.0: # %entry 350; CHECK-P10-BE-NEXT: plbz r3, 99999001(r3), 0 351; CHECK-P10-BE-NEXT: extsb r3, r3 352; CHECK-P10-BE-NEXT: blr 353; 354; CHECK-P9-LE-LABEL: ld_align32_int8_t_uint16_t: 355; CHECK-P9-LE: # %bb.0: # %entry 356; CHECK-P9-LE-NEXT: lis r4, 1525 357; CHECK-P9-LE-NEXT: ori r4, r4, 56600 358; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 359; CHECK-P9-LE-NEXT: extsb r3, r3 360; CHECK-P9-LE-NEXT: blr 361; 362; CHECK-P9-BE-LABEL: ld_align32_int8_t_uint16_t: 363; CHECK-P9-BE: # %bb.0: # %entry 364; CHECK-P9-BE-NEXT: lis r4, 1525 365; CHECK-P9-BE-NEXT: ori r4, r4, 56601 366; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 367; CHECK-P9-BE-NEXT: extsb r3, r3 368; CHECK-P9-BE-NEXT: blr 369; 370; CHECK-P8-LE-LABEL: ld_align32_int8_t_uint16_t: 371; CHECK-P8-LE: # %bb.0: # %entry 372; CHECK-P8-LE-NEXT: lis r4, 1525 373; CHECK-P8-LE-NEXT: ori r4, r4, 56600 374; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 375; CHECK-P8-LE-NEXT: extsb r3, r3 376; CHECK-P8-LE-NEXT: blr 377; 378; CHECK-P8-BE-LABEL: ld_align32_int8_t_uint16_t: 379; CHECK-P8-BE: # %bb.0: # %entry 380; CHECK-P8-BE-NEXT: lis r4, 1525 381; CHECK-P8-BE-NEXT: ori r4, r4, 56601 382; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 383; CHECK-P8-BE-NEXT: extsb r3, r3 384; CHECK-P8-BE-NEXT: blr 385entry: 386 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 387 %0 = load i16, ptr %add.ptr, align 2 388 %conv = trunc i16 %0 to i8 389 ret i8 %conv 390} 391 392; Function Attrs: norecurse nounwind readonly uwtable willreturn 393define dso_local signext i8 @ld_align64_int8_t_uint16_t(ptr nocapture readonly %ptr) { 394; CHECK-P10-LE-LABEL: ld_align64_int8_t_uint16_t: 395; CHECK-P10-LE: # %bb.0: # %entry 396; CHECK-P10-LE-NEXT: pli r4, 244140625 397; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 398; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 399; CHECK-P10-LE-NEXT: extsb r3, r3 400; CHECK-P10-LE-NEXT: blr 401; 402; CHECK-P10-BE-LABEL: ld_align64_int8_t_uint16_t: 403; CHECK-P10-BE: # %bb.0: # %entry 404; CHECK-P10-BE-NEXT: pli r4, 232 405; CHECK-P10-BE-NEXT: pli r5, 3567587329 406; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 407; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 408; CHECK-P10-BE-NEXT: extsb r3, r3 409; CHECK-P10-BE-NEXT: blr 410; 411; CHECK-P9-LE-LABEL: ld_align64_int8_t_uint16_t: 412; CHECK-P9-LE: # %bb.0: # %entry 413; CHECK-P9-LE-NEXT: lis r4, 3725 414; CHECK-P9-LE-NEXT: ori r4, r4, 19025 415; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 416; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 417; CHECK-P9-LE-NEXT: extsb r3, r3 418; CHECK-P9-LE-NEXT: blr 419; 420; CHECK-P9-BE-LABEL: ld_align64_int8_t_uint16_t: 421; CHECK-P9-BE: # %bb.0: # %entry 422; CHECK-P9-BE-NEXT: li r4, 29 423; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 424; CHECK-P9-BE-NEXT: oris r4, r4, 54437 425; CHECK-P9-BE-NEXT: ori r4, r4, 4097 426; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 427; CHECK-P9-BE-NEXT: extsb r3, r3 428; CHECK-P9-BE-NEXT: blr 429; 430; CHECK-P8-LE-LABEL: ld_align64_int8_t_uint16_t: 431; CHECK-P8-LE: # %bb.0: # %entry 432; CHECK-P8-LE-NEXT: lis r4, 3725 433; CHECK-P8-LE-NEXT: ori r4, r4, 19025 434; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 435; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 436; CHECK-P8-LE-NEXT: extsb r3, r3 437; CHECK-P8-LE-NEXT: blr 438; 439; CHECK-P8-BE-LABEL: ld_align64_int8_t_uint16_t: 440; CHECK-P8-BE: # %bb.0: # %entry 441; CHECK-P8-BE-NEXT: li r4, 29 442; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 443; CHECK-P8-BE-NEXT: oris r4, r4, 54437 444; CHECK-P8-BE-NEXT: ori r4, r4, 4097 445; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 446; CHECK-P8-BE-NEXT: extsb r3, r3 447; CHECK-P8-BE-NEXT: blr 448entry: 449 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 450 %0 = load i16, ptr %add.ptr, align 2 451 %conv = trunc i16 %0 to i8 452 ret i8 %conv 453} 454 455; Function Attrs: norecurse nounwind readonly uwtable willreturn 456define dso_local signext i8 @ld_reg_int8_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) { 457; CHECK-LE-LABEL: ld_reg_int8_t_uint16_t: 458; CHECK-LE: # %bb.0: # %entry 459; CHECK-LE-NEXT: lbzx r3, r3, r4 460; CHECK-LE-NEXT: extsb r3, r3 461; CHECK-LE-NEXT: blr 462; 463; CHECK-BE-LABEL: ld_reg_int8_t_uint16_t: 464; CHECK-BE: # %bb.0: # %entry 465; CHECK-BE-NEXT: add r3, r3, r4 466; CHECK-BE-NEXT: lbz r3, 1(r3) 467; CHECK-BE-NEXT: extsb r3, r3 468; CHECK-BE-NEXT: blr 469entry: 470 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 471 %0 = load i16, ptr %add.ptr, align 2 472 %conv = trunc i16 %0 to i8 473 ret i8 %conv 474} 475 476; Function Attrs: norecurse nounwind readonly uwtable willreturn 477define dso_local signext i8 @ld_or_int8_t_uint16_t(i64 %ptr, i8 zeroext %off) { 478; CHECK-LE-LABEL: ld_or_int8_t_uint16_t: 479; CHECK-LE: # %bb.0: # %entry 480; CHECK-LE-NEXT: or r3, r4, r3 481; CHECK-LE-NEXT: lbz r3, 0(r3) 482; CHECK-LE-NEXT: extsb r3, r3 483; CHECK-LE-NEXT: blr 484; 485; CHECK-BE-LABEL: ld_or_int8_t_uint16_t: 486; CHECK-BE: # %bb.0: # %entry 487; CHECK-BE-NEXT: or r3, r4, r3 488; CHECK-BE-NEXT: lbz r3, 1(r3) 489; CHECK-BE-NEXT: extsb r3, r3 490; CHECK-BE-NEXT: blr 491entry: 492 %conv = zext i8 %off to i64 493 %or = or i64 %conv, %ptr 494 %0 = inttoptr i64 %or to ptr 495 %1 = load i16, ptr %0, align 2 496 %conv1 = trunc i16 %1 to i8 497 ret i8 %conv1 498} 499 500; Function Attrs: norecurse nounwind readonly uwtable willreturn 501define dso_local signext i8 @ld_not_disjoint16_int8_t_uint16_t(i64 %ptr) { 502; CHECK-LE-LABEL: ld_not_disjoint16_int8_t_uint16_t: 503; CHECK-LE: # %bb.0: # %entry 504; CHECK-LE-NEXT: ori r3, r3, 6 505; CHECK-LE-NEXT: lbz r3, 0(r3) 506; CHECK-LE-NEXT: extsb r3, r3 507; CHECK-LE-NEXT: blr 508; 509; CHECK-BE-LABEL: ld_not_disjoint16_int8_t_uint16_t: 510; CHECK-BE: # %bb.0: # %entry 511; CHECK-BE-NEXT: ori r3, r3, 6 512; CHECK-BE-NEXT: lbz r3, 1(r3) 513; CHECK-BE-NEXT: extsb r3, r3 514; CHECK-BE-NEXT: blr 515entry: 516 %or = or i64 %ptr, 6 517 %0 = inttoptr i64 %or to ptr 518 %1 = load i16, ptr %0, align 2 519 %conv = trunc i16 %1 to i8 520 ret i8 %conv 521} 522 523; Function Attrs: norecurse nounwind readonly uwtable willreturn 524define dso_local signext i8 @ld_disjoint_align16_int8_t_uint16_t(i64 %ptr) { 525; CHECK-LE-LABEL: ld_disjoint_align16_int8_t_uint16_t: 526; CHECK-LE: # %bb.0: # %entry 527; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 528; CHECK-LE-NEXT: lbz r3, 24(r3) 529; CHECK-LE-NEXT: extsb r3, r3 530; CHECK-LE-NEXT: blr 531; 532; CHECK-BE-LABEL: ld_disjoint_align16_int8_t_uint16_t: 533; CHECK-BE: # %bb.0: # %entry 534; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 535; CHECK-BE-NEXT: lbz r3, 25(r3) 536; CHECK-BE-NEXT: extsb r3, r3 537; CHECK-BE-NEXT: blr 538entry: 539 %and = and i64 %ptr, -4096 540 %or = or i64 %and, 24 541 %0 = inttoptr i64 %or to ptr 542 %1 = load i16, ptr %0, align 8 543 %conv = trunc i16 %1 to i8 544 ret i8 %conv 545} 546 547; Function Attrs: norecurse nounwind readonly uwtable willreturn 548define dso_local signext i8 @ld_not_disjoint32_int8_t_uint16_t(i64 %ptr) { 549; CHECK-LE-LABEL: ld_not_disjoint32_int8_t_uint16_t: 550; CHECK-LE: # %bb.0: # %entry 551; CHECK-LE-NEXT: ori r3, r3, 34463 552; CHECK-LE-NEXT: oris r3, r3, 1 553; CHECK-LE-NEXT: lbz r3, 0(r3) 554; CHECK-LE-NEXT: extsb r3, r3 555; CHECK-LE-NEXT: blr 556; 557; CHECK-BE-LABEL: ld_not_disjoint32_int8_t_uint16_t: 558; CHECK-BE: # %bb.0: # %entry 559; CHECK-BE-NEXT: ori r3, r3, 34463 560; CHECK-BE-NEXT: oris r3, r3, 1 561; CHECK-BE-NEXT: lbz r3, 1(r3) 562; CHECK-BE-NEXT: extsb r3, r3 563; CHECK-BE-NEXT: blr 564entry: 565 %or = or i64 %ptr, 99999 566 %0 = inttoptr i64 %or to ptr 567 %1 = load i16, ptr %0, align 2 568 %conv = trunc i16 %1 to i8 569 ret i8 %conv 570} 571 572; Function Attrs: norecurse nounwind readonly uwtable willreturn 573define dso_local signext i8 @ld_disjoint_align32_int8_t_uint16_t(i64 %ptr) { 574; CHECK-P10-LE-LABEL: ld_disjoint_align32_int8_t_uint16_t: 575; CHECK-P10-LE: # %bb.0: # %entry 576; CHECK-P10-LE-NEXT: lis r4, -15264 577; CHECK-P10-LE-NEXT: and r3, r3, r4 578; CHECK-P10-LE-NEXT: plbz r3, 999990000(r3), 0 579; CHECK-P10-LE-NEXT: extsb r3, r3 580; CHECK-P10-LE-NEXT: blr 581; 582; CHECK-P10-BE-LABEL: ld_disjoint_align32_int8_t_uint16_t: 583; CHECK-P10-BE: # %bb.0: # %entry 584; CHECK-P10-BE-NEXT: lis r4, -15264 585; CHECK-P10-BE-NEXT: and r3, r3, r4 586; CHECK-P10-BE-NEXT: plbz r3, 999990001(r3), 0 587; CHECK-P10-BE-NEXT: extsb r3, r3 588; CHECK-P10-BE-NEXT: blr 589; 590; CHECK-P9-LE-LABEL: ld_disjoint_align32_int8_t_uint16_t: 591; CHECK-P9-LE: # %bb.0: # %entry 592; CHECK-P9-LE-NEXT: lis r4, -15264 593; CHECK-P9-LE-NEXT: and r3, r3, r4 594; CHECK-P9-LE-NEXT: lis r4, 15258 595; CHECK-P9-LE-NEXT: ori r4, r4, 41712 596; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 597; CHECK-P9-LE-NEXT: extsb r3, r3 598; CHECK-P9-LE-NEXT: blr 599; 600; CHECK-P9-BE-LABEL: ld_disjoint_align32_int8_t_uint16_t: 601; CHECK-P9-BE: # %bb.0: # %entry 602; CHECK-P9-BE-NEXT: lis r4, -15264 603; CHECK-P9-BE-NEXT: and r3, r3, r4 604; CHECK-P9-BE-NEXT: lis r4, 15258 605; CHECK-P9-BE-NEXT: ori r4, r4, 41713 606; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 607; CHECK-P9-BE-NEXT: extsb r3, r3 608; CHECK-P9-BE-NEXT: blr 609; 610; CHECK-P8-LE-LABEL: ld_disjoint_align32_int8_t_uint16_t: 611; CHECK-P8-LE: # %bb.0: # %entry 612; CHECK-P8-LE-NEXT: lis r4, -15264 613; CHECK-P8-LE-NEXT: and r3, r3, r4 614; CHECK-P8-LE-NEXT: lis r4, 15258 615; CHECK-P8-LE-NEXT: ori r4, r4, 41712 616; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 617; CHECK-P8-LE-NEXT: extsb r3, r3 618; CHECK-P8-LE-NEXT: blr 619; 620; CHECK-P8-BE-LABEL: ld_disjoint_align32_int8_t_uint16_t: 621; CHECK-P8-BE: # %bb.0: # %entry 622; CHECK-P8-BE-NEXT: lis r4, -15264 623; CHECK-P8-BE-NEXT: and r3, r3, r4 624; CHECK-P8-BE-NEXT: lis r4, 15258 625; CHECK-P8-BE-NEXT: ori r4, r4, 41713 626; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 627; CHECK-P8-BE-NEXT: extsb r3, r3 628; CHECK-P8-BE-NEXT: blr 629entry: 630 %and = and i64 %ptr, -1000341504 631 %or = or i64 %and, 999990000 632 %0 = inttoptr i64 %or to ptr 633 %1 = load i16, ptr %0, align 16 634 %conv = trunc i16 %1 to i8 635 ret i8 %conv 636} 637 638; Function Attrs: norecurse nounwind readonly uwtable willreturn 639define dso_local signext i8 @ld_not_disjoint64_int8_t_uint16_t(i64 %ptr) { 640; CHECK-P10-LE-LABEL: ld_not_disjoint64_int8_t_uint16_t: 641; CHECK-P10-LE: # %bb.0: # %entry 642; CHECK-P10-LE-NEXT: pli r4, 232 643; CHECK-P10-LE-NEXT: pli r5, 3567587329 644; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 645; CHECK-P10-LE-NEXT: or r3, r3, r5 646; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 647; CHECK-P10-LE-NEXT: extsb r3, r3 648; CHECK-P10-LE-NEXT: blr 649; 650; CHECK-P10-BE-LABEL: ld_not_disjoint64_int8_t_uint16_t: 651; CHECK-P10-BE: # %bb.0: # %entry 652; CHECK-P10-BE-NEXT: pli r4, 232 653; CHECK-P10-BE-NEXT: pli r5, 3567587329 654; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 655; CHECK-P10-BE-NEXT: or r3, r3, r5 656; CHECK-P10-BE-NEXT: lbz r3, 1(r3) 657; CHECK-P10-BE-NEXT: extsb r3, r3 658; CHECK-P10-BE-NEXT: blr 659; 660; CHECK-P9-LE-LABEL: ld_not_disjoint64_int8_t_uint16_t: 661; CHECK-P9-LE: # %bb.0: # %entry 662; CHECK-P9-LE-NEXT: li r4, 29 663; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 664; CHECK-P9-LE-NEXT: oris r4, r4, 54437 665; CHECK-P9-LE-NEXT: ori r4, r4, 4097 666; CHECK-P9-LE-NEXT: or r3, r3, r4 667; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 668; CHECK-P9-LE-NEXT: extsb r3, r3 669; CHECK-P9-LE-NEXT: blr 670; 671; CHECK-P9-BE-LABEL: ld_not_disjoint64_int8_t_uint16_t: 672; CHECK-P9-BE: # %bb.0: # %entry 673; CHECK-P9-BE-NEXT: li r4, 29 674; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 675; CHECK-P9-BE-NEXT: oris r4, r4, 54437 676; CHECK-P9-BE-NEXT: ori r4, r4, 4097 677; CHECK-P9-BE-NEXT: or r3, r3, r4 678; CHECK-P9-BE-NEXT: lbz r3, 1(r3) 679; CHECK-P9-BE-NEXT: extsb r3, r3 680; CHECK-P9-BE-NEXT: blr 681; 682; CHECK-P8-LE-LABEL: ld_not_disjoint64_int8_t_uint16_t: 683; CHECK-P8-LE: # %bb.0: # %entry 684; CHECK-P8-LE-NEXT: li r4, 29 685; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 686; CHECK-P8-LE-NEXT: oris r4, r4, 54437 687; CHECK-P8-LE-NEXT: ori r4, r4, 4097 688; CHECK-P8-LE-NEXT: or r3, r3, r4 689; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 690; CHECK-P8-LE-NEXT: extsb r3, r3 691; CHECK-P8-LE-NEXT: blr 692; 693; CHECK-P8-BE-LABEL: ld_not_disjoint64_int8_t_uint16_t: 694; CHECK-P8-BE: # %bb.0: # %entry 695; CHECK-P8-BE-NEXT: li r4, 29 696; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 697; CHECK-P8-BE-NEXT: oris r4, r4, 54437 698; CHECK-P8-BE-NEXT: ori r4, r4, 4097 699; CHECK-P8-BE-NEXT: or r3, r3, r4 700; CHECK-P8-BE-NEXT: lbz r3, 1(r3) 701; CHECK-P8-BE-NEXT: extsb r3, r3 702; CHECK-P8-BE-NEXT: blr 703entry: 704 %or = or i64 %ptr, 1000000000001 705 %0 = inttoptr i64 %or to ptr 706 %1 = load i16, ptr %0, align 2 707 %conv = trunc i16 %1 to i8 708 ret i8 %conv 709} 710 711; Function Attrs: norecurse nounwind readonly uwtable willreturn 712define dso_local signext i8 @ld_disjoint_align64_int8_t_uint16_t(i64 %ptr) { 713; CHECK-P10-LE-LABEL: ld_disjoint_align64_int8_t_uint16_t: 714; CHECK-P10-LE: # %bb.0: # %entry 715; CHECK-P10-LE-NEXT: pli r4, 244140625 716; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 717; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 718; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 719; CHECK-P10-LE-NEXT: extsb r3, r3 720; CHECK-P10-LE-NEXT: blr 721; 722; CHECK-P10-BE-LABEL: ld_disjoint_align64_int8_t_uint16_t: 723; CHECK-P10-BE: # %bb.0: # %entry 724; CHECK-P10-BE-NEXT: pli r4, 232 725; CHECK-P10-BE-NEXT: pli r5, 3567587329 726; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 727; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 728; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 729; CHECK-P10-BE-NEXT: extsb r3, r3 730; CHECK-P10-BE-NEXT: blr 731; 732; CHECK-P9-LE-LABEL: ld_disjoint_align64_int8_t_uint16_t: 733; CHECK-P9-LE: # %bb.0: # %entry 734; CHECK-P9-LE-NEXT: lis r4, 3725 735; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 736; CHECK-P9-LE-NEXT: ori r4, r4, 19025 737; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 738; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 739; CHECK-P9-LE-NEXT: extsb r3, r3 740; CHECK-P9-LE-NEXT: blr 741; 742; CHECK-P9-BE-LABEL: ld_disjoint_align64_int8_t_uint16_t: 743; CHECK-P9-BE: # %bb.0: # %entry 744; CHECK-P9-BE-NEXT: li r4, 29 745; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 746; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 747; CHECK-P9-BE-NEXT: oris r4, r4, 54437 748; CHECK-P9-BE-NEXT: ori r4, r4, 4097 749; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 750; CHECK-P9-BE-NEXT: extsb r3, r3 751; CHECK-P9-BE-NEXT: blr 752; 753; CHECK-P8-LE-LABEL: ld_disjoint_align64_int8_t_uint16_t: 754; CHECK-P8-LE: # %bb.0: # %entry 755; CHECK-P8-LE-NEXT: lis r4, 3725 756; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 757; CHECK-P8-LE-NEXT: ori r4, r4, 19025 758; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 759; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 760; CHECK-P8-LE-NEXT: extsb r3, r3 761; CHECK-P8-LE-NEXT: blr 762; 763; CHECK-P8-BE-LABEL: ld_disjoint_align64_int8_t_uint16_t: 764; CHECK-P8-BE: # %bb.0: # %entry 765; CHECK-P8-BE-NEXT: li r4, 29 766; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 767; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 768; CHECK-P8-BE-NEXT: oris r4, r4, 54437 769; CHECK-P8-BE-NEXT: ori r4, r4, 4097 770; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 771; CHECK-P8-BE-NEXT: extsb r3, r3 772; CHECK-P8-BE-NEXT: blr 773entry: 774 %and = and i64 %ptr, -1099511627776 775 %or = or i64 %and, 1000000000000 776 %0 = inttoptr i64 %or to ptr 777 %1 = load i16, ptr %0, align 4096 778 %conv = trunc i16 %1 to i8 779 ret i8 %conv 780} 781 782; Function Attrs: norecurse nounwind readonly uwtable willreturn 783define dso_local signext i8 @ld_cst_align16_int8_t_uint16_t() { 784; CHECK-LE-LABEL: ld_cst_align16_int8_t_uint16_t: 785; CHECK-LE: # %bb.0: # %entry 786; CHECK-LE-NEXT: lbz r3, 4080(0) 787; CHECK-LE-NEXT: extsb r3, r3 788; CHECK-LE-NEXT: blr 789; 790; CHECK-BE-LABEL: ld_cst_align16_int8_t_uint16_t: 791; CHECK-BE: # %bb.0: # %entry 792; CHECK-BE-NEXT: lbz r3, 4081(0) 793; CHECK-BE-NEXT: extsb r3, r3 794; CHECK-BE-NEXT: blr 795entry: 796 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16 797 %conv = trunc i16 %0 to i8 798 ret i8 %conv 799} 800 801; Function Attrs: norecurse nounwind readonly uwtable willreturn 802define dso_local signext i8 @ld_cst_align32_int8_t_uint16_t() { 803; CHECK-LE-LABEL: ld_cst_align32_int8_t_uint16_t: 804; CHECK-LE: # %bb.0: # %entry 805; CHECK-LE-NEXT: lis r3, 153 806; CHECK-LE-NEXT: lbz r3, -27108(r3) 807; CHECK-LE-NEXT: extsb r3, r3 808; CHECK-LE-NEXT: blr 809; 810; CHECK-BE-LABEL: ld_cst_align32_int8_t_uint16_t: 811; CHECK-BE: # %bb.0: # %entry 812; CHECK-BE-NEXT: lis r3, 153 813; CHECK-BE-NEXT: lbz r3, -27107(r3) 814; CHECK-BE-NEXT: extsb r3, r3 815; CHECK-BE-NEXT: blr 816entry: 817 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4 818 %conv = trunc i16 %0 to i8 819 ret i8 %conv 820} 821 822; Function Attrs: norecurse nounwind readonly uwtable willreturn 823define dso_local signext i8 @ld_cst_align64_int8_t_uint16_t() { 824; CHECK-P10-LE-LABEL: ld_cst_align64_int8_t_uint16_t: 825; CHECK-P10-LE: # %bb.0: # %entry 826; CHECK-P10-LE-NEXT: pli r3, 244140625 827; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 828; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 829; CHECK-P10-LE-NEXT: extsb r3, r3 830; CHECK-P10-LE-NEXT: blr 831; 832; CHECK-P10-BE-LABEL: ld_cst_align64_int8_t_uint16_t: 833; CHECK-P10-BE: # %bb.0: # %entry 834; CHECK-P10-BE-NEXT: pli r3, 232 835; CHECK-P10-BE-NEXT: pli r4, 3567587329 836; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 837; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 838; CHECK-P10-BE-NEXT: extsb r3, r3 839; CHECK-P10-BE-NEXT: blr 840; 841; CHECK-P9-LE-LABEL: ld_cst_align64_int8_t_uint16_t: 842; CHECK-P9-LE: # %bb.0: # %entry 843; CHECK-P9-LE-NEXT: lis r3, 3725 844; CHECK-P9-LE-NEXT: ori r3, r3, 19025 845; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 846; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 847; CHECK-P9-LE-NEXT: extsb r3, r3 848; CHECK-P9-LE-NEXT: blr 849; 850; CHECK-P9-BE-LABEL: ld_cst_align64_int8_t_uint16_t: 851; CHECK-P9-BE: # %bb.0: # %entry 852; CHECK-P9-BE-NEXT: li r3, 29 853; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 854; CHECK-P9-BE-NEXT: oris r3, r3, 54437 855; CHECK-P9-BE-NEXT: ori r3, r3, 4097 856; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 857; CHECK-P9-BE-NEXT: extsb r3, r3 858; CHECK-P9-BE-NEXT: blr 859; 860; CHECK-P8-LE-LABEL: ld_cst_align64_int8_t_uint16_t: 861; CHECK-P8-LE: # %bb.0: # %entry 862; CHECK-P8-LE-NEXT: lis r3, 3725 863; CHECK-P8-LE-NEXT: ori r3, r3, 19025 864; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 865; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 866; CHECK-P8-LE-NEXT: extsb r3, r3 867; CHECK-P8-LE-NEXT: blr 868; 869; CHECK-P8-BE-LABEL: ld_cst_align64_int8_t_uint16_t: 870; CHECK-P8-BE: # %bb.0: # %entry 871; CHECK-P8-BE-NEXT: li r3, 29 872; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 873; CHECK-P8-BE-NEXT: oris r3, r3, 54437 874; CHECK-P8-BE-NEXT: ori r3, r3, 4097 875; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 876; CHECK-P8-BE-NEXT: extsb r3, r3 877; CHECK-P8-BE-NEXT: blr 878entry: 879 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096 880 %conv = trunc i16 %0 to i8 881 ret i8 %conv 882} 883 884; Function Attrs: norecurse nounwind readonly uwtable willreturn 885define dso_local signext i8 @ld_0_int8_t_uint32_t(i64 %ptr) { 886; CHECK-LE-LABEL: ld_0_int8_t_uint32_t: 887; CHECK-LE: # %bb.0: # %entry 888; CHECK-LE-NEXT: lbz r3, 0(r3) 889; CHECK-LE-NEXT: extsb r3, r3 890; CHECK-LE-NEXT: blr 891; 892; CHECK-BE-LABEL: ld_0_int8_t_uint32_t: 893; CHECK-BE: # %bb.0: # %entry 894; CHECK-BE-NEXT: lbz r3, 3(r3) 895; CHECK-BE-NEXT: extsb r3, r3 896; CHECK-BE-NEXT: blr 897entry: 898 %0 = inttoptr i64 %ptr to ptr 899 %1 = load i32, ptr %0, align 4 900 %conv = trunc i32 %1 to i8 901 ret i8 %conv 902} 903 904; Function Attrs: norecurse nounwind readonly uwtable willreturn 905define dso_local signext i8 @ld_align16_int8_t_uint32_t(ptr nocapture readonly %ptr) { 906; CHECK-LE-LABEL: ld_align16_int8_t_uint32_t: 907; CHECK-LE: # %bb.0: # %entry 908; CHECK-LE-NEXT: lbz r3, 8(r3) 909; CHECK-LE-NEXT: extsb r3, r3 910; CHECK-LE-NEXT: blr 911; 912; CHECK-BE-LABEL: ld_align16_int8_t_uint32_t: 913; CHECK-BE: # %bb.0: # %entry 914; CHECK-BE-NEXT: lbz r3, 11(r3) 915; CHECK-BE-NEXT: extsb r3, r3 916; CHECK-BE-NEXT: blr 917entry: 918 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 919 %0 = load i32, ptr %add.ptr, align 4 920 %conv = trunc i32 %0 to i8 921 ret i8 %conv 922} 923 924; Function Attrs: norecurse nounwind readonly uwtable willreturn 925define dso_local signext i8 @ld_align32_int8_t_uint32_t(ptr nocapture readonly %ptr) { 926; CHECK-P10-LE-LABEL: ld_align32_int8_t_uint32_t: 927; CHECK-P10-LE: # %bb.0: # %entry 928; CHECK-P10-LE-NEXT: plbz r3, 99999000(r3), 0 929; CHECK-P10-LE-NEXT: extsb r3, r3 930; CHECK-P10-LE-NEXT: blr 931; 932; CHECK-P10-BE-LABEL: ld_align32_int8_t_uint32_t: 933; CHECK-P10-BE: # %bb.0: # %entry 934; CHECK-P10-BE-NEXT: plbz r3, 99999003(r3), 0 935; CHECK-P10-BE-NEXT: extsb r3, r3 936; CHECK-P10-BE-NEXT: blr 937; 938; CHECK-P9-LE-LABEL: ld_align32_int8_t_uint32_t: 939; CHECK-P9-LE: # %bb.0: # %entry 940; CHECK-P9-LE-NEXT: lis r4, 1525 941; CHECK-P9-LE-NEXT: ori r4, r4, 56600 942; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 943; CHECK-P9-LE-NEXT: extsb r3, r3 944; CHECK-P9-LE-NEXT: blr 945; 946; CHECK-P9-BE-LABEL: ld_align32_int8_t_uint32_t: 947; CHECK-P9-BE: # %bb.0: # %entry 948; CHECK-P9-BE-NEXT: lis r4, 1525 949; CHECK-P9-BE-NEXT: ori r4, r4, 56603 950; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 951; CHECK-P9-BE-NEXT: extsb r3, r3 952; CHECK-P9-BE-NEXT: blr 953; 954; CHECK-P8-LE-LABEL: ld_align32_int8_t_uint32_t: 955; CHECK-P8-LE: # %bb.0: # %entry 956; CHECK-P8-LE-NEXT: lis r4, 1525 957; CHECK-P8-LE-NEXT: ori r4, r4, 56600 958; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 959; CHECK-P8-LE-NEXT: extsb r3, r3 960; CHECK-P8-LE-NEXT: blr 961; 962; CHECK-P8-BE-LABEL: ld_align32_int8_t_uint32_t: 963; CHECK-P8-BE: # %bb.0: # %entry 964; CHECK-P8-BE-NEXT: lis r4, 1525 965; CHECK-P8-BE-NEXT: ori r4, r4, 56603 966; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 967; CHECK-P8-BE-NEXT: extsb r3, r3 968; CHECK-P8-BE-NEXT: blr 969entry: 970 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 971 %0 = load i32, ptr %add.ptr, align 4 972 %conv = trunc i32 %0 to i8 973 ret i8 %conv 974} 975 976; Function Attrs: norecurse nounwind readonly uwtable willreturn 977define dso_local signext i8 @ld_align64_int8_t_uint32_t(ptr nocapture readonly %ptr) { 978; CHECK-P10-LE-LABEL: ld_align64_int8_t_uint32_t: 979; CHECK-P10-LE: # %bb.0: # %entry 980; CHECK-P10-LE-NEXT: pli r4, 244140625 981; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 982; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 983; CHECK-P10-LE-NEXT: extsb r3, r3 984; CHECK-P10-LE-NEXT: blr 985; 986; CHECK-P10-BE-LABEL: ld_align64_int8_t_uint32_t: 987; CHECK-P10-BE: # %bb.0: # %entry 988; CHECK-P10-BE-NEXT: pli r4, 232 989; CHECK-P10-BE-NEXT: pli r5, 3567587331 990; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 991; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 992; CHECK-P10-BE-NEXT: extsb r3, r3 993; CHECK-P10-BE-NEXT: blr 994; 995; CHECK-P9-LE-LABEL: ld_align64_int8_t_uint32_t: 996; CHECK-P9-LE: # %bb.0: # %entry 997; CHECK-P9-LE-NEXT: lis r4, 3725 998; CHECK-P9-LE-NEXT: ori r4, r4, 19025 999; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 1000; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 1001; CHECK-P9-LE-NEXT: extsb r3, r3 1002; CHECK-P9-LE-NEXT: blr 1003; 1004; CHECK-P9-BE-LABEL: ld_align64_int8_t_uint32_t: 1005; CHECK-P9-BE: # %bb.0: # %entry 1006; CHECK-P9-BE-NEXT: li r4, 29 1007; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1008; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1009; CHECK-P9-BE-NEXT: ori r4, r4, 4099 1010; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 1011; CHECK-P9-BE-NEXT: extsb r3, r3 1012; CHECK-P9-BE-NEXT: blr 1013; 1014; CHECK-P8-LE-LABEL: ld_align64_int8_t_uint32_t: 1015; CHECK-P8-LE: # %bb.0: # %entry 1016; CHECK-P8-LE-NEXT: lis r4, 3725 1017; CHECK-P8-LE-NEXT: ori r4, r4, 19025 1018; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 1019; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 1020; CHECK-P8-LE-NEXT: extsb r3, r3 1021; CHECK-P8-LE-NEXT: blr 1022; 1023; CHECK-P8-BE-LABEL: ld_align64_int8_t_uint32_t: 1024; CHECK-P8-BE: # %bb.0: # %entry 1025; CHECK-P8-BE-NEXT: li r4, 29 1026; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1027; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1028; CHECK-P8-BE-NEXT: ori r4, r4, 4099 1029; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 1030; CHECK-P8-BE-NEXT: extsb r3, r3 1031; CHECK-P8-BE-NEXT: blr 1032entry: 1033 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 1034 %0 = load i32, ptr %add.ptr, align 4 1035 %conv = trunc i32 %0 to i8 1036 ret i8 %conv 1037} 1038 1039; Function Attrs: norecurse nounwind readonly uwtable willreturn 1040define dso_local signext i8 @ld_reg_int8_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) { 1041; CHECK-LE-LABEL: ld_reg_int8_t_uint32_t: 1042; CHECK-LE: # %bb.0: # %entry 1043; CHECK-LE-NEXT: lbzx r3, r3, r4 1044; CHECK-LE-NEXT: extsb r3, r3 1045; CHECK-LE-NEXT: blr 1046; 1047; CHECK-BE-LABEL: ld_reg_int8_t_uint32_t: 1048; CHECK-BE: # %bb.0: # %entry 1049; CHECK-BE-NEXT: add r3, r3, r4 1050; CHECK-BE-NEXT: lbz r3, 3(r3) 1051; CHECK-BE-NEXT: extsb r3, r3 1052; CHECK-BE-NEXT: blr 1053entry: 1054 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 1055 %0 = load i32, ptr %add.ptr, align 4 1056 %conv = trunc i32 %0 to i8 1057 ret i8 %conv 1058} 1059 1060; Function Attrs: norecurse nounwind readonly uwtable willreturn 1061define dso_local signext i8 @ld_or_int8_t_uint32_t(i64 %ptr, i8 zeroext %off) { 1062; CHECK-LE-LABEL: ld_or_int8_t_uint32_t: 1063; CHECK-LE: # %bb.0: # %entry 1064; CHECK-LE-NEXT: or r3, r4, r3 1065; CHECK-LE-NEXT: lbz r3, 0(r3) 1066; CHECK-LE-NEXT: extsb r3, r3 1067; CHECK-LE-NEXT: blr 1068; 1069; CHECK-BE-LABEL: ld_or_int8_t_uint32_t: 1070; CHECK-BE: # %bb.0: # %entry 1071; CHECK-BE-NEXT: or r3, r4, r3 1072; CHECK-BE-NEXT: lbz r3, 3(r3) 1073; CHECK-BE-NEXT: extsb r3, r3 1074; CHECK-BE-NEXT: blr 1075entry: 1076 %conv = zext i8 %off to i64 1077 %or = or i64 %conv, %ptr 1078 %0 = inttoptr i64 %or to ptr 1079 %1 = load i32, ptr %0, align 4 1080 %conv1 = trunc i32 %1 to i8 1081 ret i8 %conv1 1082} 1083 1084; Function Attrs: norecurse nounwind readonly uwtable willreturn 1085define dso_local signext i8 @ld_not_disjoint16_int8_t_uint32_t(i64 %ptr) { 1086; CHECK-LE-LABEL: ld_not_disjoint16_int8_t_uint32_t: 1087; CHECK-LE: # %bb.0: # %entry 1088; CHECK-LE-NEXT: ori r3, r3, 6 1089; CHECK-LE-NEXT: lbz r3, 0(r3) 1090; CHECK-LE-NEXT: extsb r3, r3 1091; CHECK-LE-NEXT: blr 1092; 1093; CHECK-BE-LABEL: ld_not_disjoint16_int8_t_uint32_t: 1094; CHECK-BE: # %bb.0: # %entry 1095; CHECK-BE-NEXT: ori r3, r3, 6 1096; CHECK-BE-NEXT: lbz r3, 3(r3) 1097; CHECK-BE-NEXT: extsb r3, r3 1098; CHECK-BE-NEXT: blr 1099entry: 1100 %or = or i64 %ptr, 6 1101 %0 = inttoptr i64 %or to ptr 1102 %1 = load i32, ptr %0, align 4 1103 %conv = trunc i32 %1 to i8 1104 ret i8 %conv 1105} 1106 1107; Function Attrs: norecurse nounwind readonly uwtable willreturn 1108define dso_local signext i8 @ld_disjoint_align16_int8_t_uint32_t(i64 %ptr) { 1109; CHECK-LE-LABEL: ld_disjoint_align16_int8_t_uint32_t: 1110; CHECK-LE: # %bb.0: # %entry 1111; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 1112; CHECK-LE-NEXT: lbz r3, 24(r3) 1113; CHECK-LE-NEXT: extsb r3, r3 1114; CHECK-LE-NEXT: blr 1115; 1116; CHECK-BE-LABEL: ld_disjoint_align16_int8_t_uint32_t: 1117; CHECK-BE: # %bb.0: # %entry 1118; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 1119; CHECK-BE-NEXT: lbz r3, 27(r3) 1120; CHECK-BE-NEXT: extsb r3, r3 1121; CHECK-BE-NEXT: blr 1122entry: 1123 %and = and i64 %ptr, -4096 1124 %or = or i64 %and, 24 1125 %0 = inttoptr i64 %or to ptr 1126 %1 = load i32, ptr %0, align 8 1127 %conv = trunc i32 %1 to i8 1128 ret i8 %conv 1129} 1130 1131; Function Attrs: norecurse nounwind readonly uwtable willreturn 1132define dso_local signext i8 @ld_not_disjoint32_int8_t_uint32_t(i64 %ptr) { 1133; CHECK-LE-LABEL: ld_not_disjoint32_int8_t_uint32_t: 1134; CHECK-LE: # %bb.0: # %entry 1135; CHECK-LE-NEXT: ori r3, r3, 34463 1136; CHECK-LE-NEXT: oris r3, r3, 1 1137; CHECK-LE-NEXT: lbz r3, 0(r3) 1138; CHECK-LE-NEXT: extsb r3, r3 1139; CHECK-LE-NEXT: blr 1140; 1141; CHECK-BE-LABEL: ld_not_disjoint32_int8_t_uint32_t: 1142; CHECK-BE: # %bb.0: # %entry 1143; CHECK-BE-NEXT: ori r3, r3, 34463 1144; CHECK-BE-NEXT: oris r3, r3, 1 1145; CHECK-BE-NEXT: lbz r3, 3(r3) 1146; CHECK-BE-NEXT: extsb r3, r3 1147; CHECK-BE-NEXT: blr 1148entry: 1149 %or = or i64 %ptr, 99999 1150 %0 = inttoptr i64 %or to ptr 1151 %1 = load i32, ptr %0, align 4 1152 %conv = trunc i32 %1 to i8 1153 ret i8 %conv 1154} 1155 1156; Function Attrs: norecurse nounwind readonly uwtable willreturn 1157define dso_local signext i8 @ld_disjoint_align32_int8_t_uint32_t(i64 %ptr) { 1158; CHECK-P10-LE-LABEL: ld_disjoint_align32_int8_t_uint32_t: 1159; CHECK-P10-LE: # %bb.0: # %entry 1160; CHECK-P10-LE-NEXT: lis r4, -15264 1161; CHECK-P10-LE-NEXT: and r3, r3, r4 1162; CHECK-P10-LE-NEXT: plbz r3, 999990000(r3), 0 1163; CHECK-P10-LE-NEXT: extsb r3, r3 1164; CHECK-P10-LE-NEXT: blr 1165; 1166; CHECK-P10-BE-LABEL: ld_disjoint_align32_int8_t_uint32_t: 1167; CHECK-P10-BE: # %bb.0: # %entry 1168; CHECK-P10-BE-NEXT: lis r4, -15264 1169; CHECK-P10-BE-NEXT: and r3, r3, r4 1170; CHECK-P10-BE-NEXT: plbz r3, 999990003(r3), 0 1171; CHECK-P10-BE-NEXT: extsb r3, r3 1172; CHECK-P10-BE-NEXT: blr 1173; 1174; CHECK-P9-LE-LABEL: ld_disjoint_align32_int8_t_uint32_t: 1175; CHECK-P9-LE: # %bb.0: # %entry 1176; CHECK-P9-LE-NEXT: lis r4, -15264 1177; CHECK-P9-LE-NEXT: and r3, r3, r4 1178; CHECK-P9-LE-NEXT: lis r4, 15258 1179; CHECK-P9-LE-NEXT: ori r4, r4, 41712 1180; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 1181; CHECK-P9-LE-NEXT: extsb r3, r3 1182; CHECK-P9-LE-NEXT: blr 1183; 1184; CHECK-P9-BE-LABEL: ld_disjoint_align32_int8_t_uint32_t: 1185; CHECK-P9-BE: # %bb.0: # %entry 1186; CHECK-P9-BE-NEXT: lis r4, -15264 1187; CHECK-P9-BE-NEXT: and r3, r3, r4 1188; CHECK-P9-BE-NEXT: lis r4, 15258 1189; CHECK-P9-BE-NEXT: ori r4, r4, 41715 1190; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 1191; CHECK-P9-BE-NEXT: extsb r3, r3 1192; CHECK-P9-BE-NEXT: blr 1193; 1194; CHECK-P8-LE-LABEL: ld_disjoint_align32_int8_t_uint32_t: 1195; CHECK-P8-LE: # %bb.0: # %entry 1196; CHECK-P8-LE-NEXT: lis r4, -15264 1197; CHECK-P8-LE-NEXT: and r3, r3, r4 1198; CHECK-P8-LE-NEXT: lis r4, 15258 1199; CHECK-P8-LE-NEXT: ori r4, r4, 41712 1200; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 1201; CHECK-P8-LE-NEXT: extsb r3, r3 1202; CHECK-P8-LE-NEXT: blr 1203; 1204; CHECK-P8-BE-LABEL: ld_disjoint_align32_int8_t_uint32_t: 1205; CHECK-P8-BE: # %bb.0: # %entry 1206; CHECK-P8-BE-NEXT: lis r4, -15264 1207; CHECK-P8-BE-NEXT: and r3, r3, r4 1208; CHECK-P8-BE-NEXT: lis r4, 15258 1209; CHECK-P8-BE-NEXT: ori r4, r4, 41715 1210; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 1211; CHECK-P8-BE-NEXT: extsb r3, r3 1212; CHECK-P8-BE-NEXT: blr 1213entry: 1214 %and = and i64 %ptr, -1000341504 1215 %or = or i64 %and, 999990000 1216 %0 = inttoptr i64 %or to ptr 1217 %1 = load i32, ptr %0, align 16 1218 %conv = trunc i32 %1 to i8 1219 ret i8 %conv 1220} 1221 1222; Function Attrs: norecurse nounwind readonly uwtable willreturn 1223define dso_local signext i8 @ld_not_disjoint64_int8_t_uint32_t(i64 %ptr) { 1224; CHECK-P10-LE-LABEL: ld_not_disjoint64_int8_t_uint32_t: 1225; CHECK-P10-LE: # %bb.0: # %entry 1226; CHECK-P10-LE-NEXT: pli r4, 232 1227; CHECK-P10-LE-NEXT: pli r5, 3567587329 1228; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 1229; CHECK-P10-LE-NEXT: or r3, r3, r5 1230; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 1231; CHECK-P10-LE-NEXT: extsb r3, r3 1232; CHECK-P10-LE-NEXT: blr 1233; 1234; CHECK-P10-BE-LABEL: ld_not_disjoint64_int8_t_uint32_t: 1235; CHECK-P10-BE: # %bb.0: # %entry 1236; CHECK-P10-BE-NEXT: pli r4, 232 1237; CHECK-P10-BE-NEXT: pli r5, 3567587329 1238; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 1239; CHECK-P10-BE-NEXT: or r3, r3, r5 1240; CHECK-P10-BE-NEXT: lbz r3, 3(r3) 1241; CHECK-P10-BE-NEXT: extsb r3, r3 1242; CHECK-P10-BE-NEXT: blr 1243; 1244; CHECK-P9-LE-LABEL: ld_not_disjoint64_int8_t_uint32_t: 1245; CHECK-P9-LE: # %bb.0: # %entry 1246; CHECK-P9-LE-NEXT: li r4, 29 1247; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 1248; CHECK-P9-LE-NEXT: oris r4, r4, 54437 1249; CHECK-P9-LE-NEXT: ori r4, r4, 4097 1250; CHECK-P9-LE-NEXT: or r3, r3, r4 1251; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 1252; CHECK-P9-LE-NEXT: extsb r3, r3 1253; CHECK-P9-LE-NEXT: blr 1254; 1255; CHECK-P9-BE-LABEL: ld_not_disjoint64_int8_t_uint32_t: 1256; CHECK-P9-BE: # %bb.0: # %entry 1257; CHECK-P9-BE-NEXT: li r4, 29 1258; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1259; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1260; CHECK-P9-BE-NEXT: ori r4, r4, 4097 1261; CHECK-P9-BE-NEXT: or r3, r3, r4 1262; CHECK-P9-BE-NEXT: lbz r3, 3(r3) 1263; CHECK-P9-BE-NEXT: extsb r3, r3 1264; CHECK-P9-BE-NEXT: blr 1265; 1266; CHECK-P8-LE-LABEL: ld_not_disjoint64_int8_t_uint32_t: 1267; CHECK-P8-LE: # %bb.0: # %entry 1268; CHECK-P8-LE-NEXT: li r4, 29 1269; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 1270; CHECK-P8-LE-NEXT: oris r4, r4, 54437 1271; CHECK-P8-LE-NEXT: ori r4, r4, 4097 1272; CHECK-P8-LE-NEXT: or r3, r3, r4 1273; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 1274; CHECK-P8-LE-NEXT: extsb r3, r3 1275; CHECK-P8-LE-NEXT: blr 1276; 1277; CHECK-P8-BE-LABEL: ld_not_disjoint64_int8_t_uint32_t: 1278; CHECK-P8-BE: # %bb.0: # %entry 1279; CHECK-P8-BE-NEXT: li r4, 29 1280; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1281; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1282; CHECK-P8-BE-NEXT: ori r4, r4, 4097 1283; CHECK-P8-BE-NEXT: or r3, r3, r4 1284; CHECK-P8-BE-NEXT: lbz r3, 3(r3) 1285; CHECK-P8-BE-NEXT: extsb r3, r3 1286; CHECK-P8-BE-NEXT: blr 1287entry: 1288 %or = or i64 %ptr, 1000000000001 1289 %0 = inttoptr i64 %or to ptr 1290 %1 = load i32, ptr %0, align 4 1291 %conv = trunc i32 %1 to i8 1292 ret i8 %conv 1293} 1294 1295; Function Attrs: norecurse nounwind readonly uwtable willreturn 1296define dso_local signext i8 @ld_disjoint_align64_int8_t_uint32_t(i64 %ptr) { 1297; CHECK-P10-LE-LABEL: ld_disjoint_align64_int8_t_uint32_t: 1298; CHECK-P10-LE: # %bb.0: # %entry 1299; CHECK-P10-LE-NEXT: pli r4, 244140625 1300; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 1301; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 1302; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 1303; CHECK-P10-LE-NEXT: extsb r3, r3 1304; CHECK-P10-LE-NEXT: blr 1305; 1306; CHECK-P10-BE-LABEL: ld_disjoint_align64_int8_t_uint32_t: 1307; CHECK-P10-BE: # %bb.0: # %entry 1308; CHECK-P10-BE-NEXT: pli r4, 232 1309; CHECK-P10-BE-NEXT: pli r5, 3567587331 1310; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 1311; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 1312; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 1313; CHECK-P10-BE-NEXT: extsb r3, r3 1314; CHECK-P10-BE-NEXT: blr 1315; 1316; CHECK-P9-LE-LABEL: ld_disjoint_align64_int8_t_uint32_t: 1317; CHECK-P9-LE: # %bb.0: # %entry 1318; CHECK-P9-LE-NEXT: lis r4, 3725 1319; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 1320; CHECK-P9-LE-NEXT: ori r4, r4, 19025 1321; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 1322; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 1323; CHECK-P9-LE-NEXT: extsb r3, r3 1324; CHECK-P9-LE-NEXT: blr 1325; 1326; CHECK-P9-BE-LABEL: ld_disjoint_align64_int8_t_uint32_t: 1327; CHECK-P9-BE: # %bb.0: # %entry 1328; CHECK-P9-BE-NEXT: li r4, 29 1329; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 1330; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1331; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1332; CHECK-P9-BE-NEXT: ori r4, r4, 4099 1333; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 1334; CHECK-P9-BE-NEXT: extsb r3, r3 1335; CHECK-P9-BE-NEXT: blr 1336; 1337; CHECK-P8-LE-LABEL: ld_disjoint_align64_int8_t_uint32_t: 1338; CHECK-P8-LE: # %bb.0: # %entry 1339; CHECK-P8-LE-NEXT: lis r4, 3725 1340; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 1341; CHECK-P8-LE-NEXT: ori r4, r4, 19025 1342; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 1343; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 1344; CHECK-P8-LE-NEXT: extsb r3, r3 1345; CHECK-P8-LE-NEXT: blr 1346; 1347; CHECK-P8-BE-LABEL: ld_disjoint_align64_int8_t_uint32_t: 1348; CHECK-P8-BE: # %bb.0: # %entry 1349; CHECK-P8-BE-NEXT: li r4, 29 1350; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 1351; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1352; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1353; CHECK-P8-BE-NEXT: ori r4, r4, 4099 1354; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 1355; CHECK-P8-BE-NEXT: extsb r3, r3 1356; CHECK-P8-BE-NEXT: blr 1357entry: 1358 %and = and i64 %ptr, -1099511627776 1359 %or = or i64 %and, 1000000000000 1360 %0 = inttoptr i64 %or to ptr 1361 %1 = load i32, ptr %0, align 4096 1362 %conv = trunc i32 %1 to i8 1363 ret i8 %conv 1364} 1365 1366; Function Attrs: norecurse nounwind readonly uwtable willreturn 1367define dso_local signext i8 @ld_cst_align16_int8_t_uint32_t() { 1368; CHECK-LE-LABEL: ld_cst_align16_int8_t_uint32_t: 1369; CHECK-LE: # %bb.0: # %entry 1370; CHECK-LE-NEXT: lbz r3, 4080(0) 1371; CHECK-LE-NEXT: extsb r3, r3 1372; CHECK-LE-NEXT: blr 1373; 1374; CHECK-BE-LABEL: ld_cst_align16_int8_t_uint32_t: 1375; CHECK-BE: # %bb.0: # %entry 1376; CHECK-BE-NEXT: lbz r3, 4083(0) 1377; CHECK-BE-NEXT: extsb r3, r3 1378; CHECK-BE-NEXT: blr 1379entry: 1380 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 16 1381 %conv = trunc i32 %0 to i8 1382 ret i8 %conv 1383} 1384 1385; Function Attrs: norecurse nounwind readonly uwtable willreturn 1386define dso_local signext i8 @ld_cst_align32_int8_t_uint32_t() { 1387; CHECK-LE-LABEL: ld_cst_align32_int8_t_uint32_t: 1388; CHECK-LE: # %bb.0: # %entry 1389; CHECK-LE-NEXT: lis r3, 153 1390; CHECK-LE-NEXT: lbz r3, -27108(r3) 1391; CHECK-LE-NEXT: extsb r3, r3 1392; CHECK-LE-NEXT: blr 1393; 1394; CHECK-BE-LABEL: ld_cst_align32_int8_t_uint32_t: 1395; CHECK-BE: # %bb.0: # %entry 1396; CHECK-BE-NEXT: lis r3, 153 1397; CHECK-BE-NEXT: lbz r3, -27105(r3) 1398; CHECK-BE-NEXT: extsb r3, r3 1399; CHECK-BE-NEXT: blr 1400entry: 1401 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 4 1402 %conv = trunc i32 %0 to i8 1403 ret i8 %conv 1404} 1405 1406; Function Attrs: norecurse nounwind readonly uwtable willreturn 1407define dso_local signext i8 @ld_cst_align64_int8_t_uint32_t() { 1408; CHECK-P10-LE-LABEL: ld_cst_align64_int8_t_uint32_t: 1409; CHECK-P10-LE: # %bb.0: # %entry 1410; CHECK-P10-LE-NEXT: pli r3, 244140625 1411; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 1412; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 1413; CHECK-P10-LE-NEXT: extsb r3, r3 1414; CHECK-P10-LE-NEXT: blr 1415; 1416; CHECK-P10-BE-LABEL: ld_cst_align64_int8_t_uint32_t: 1417; CHECK-P10-BE: # %bb.0: # %entry 1418; CHECK-P10-BE-NEXT: pli r3, 232 1419; CHECK-P10-BE-NEXT: pli r4, 3567587331 1420; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 1421; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 1422; CHECK-P10-BE-NEXT: extsb r3, r3 1423; CHECK-P10-BE-NEXT: blr 1424; 1425; CHECK-P9-LE-LABEL: ld_cst_align64_int8_t_uint32_t: 1426; CHECK-P9-LE: # %bb.0: # %entry 1427; CHECK-P9-LE-NEXT: lis r3, 3725 1428; CHECK-P9-LE-NEXT: ori r3, r3, 19025 1429; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 1430; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 1431; CHECK-P9-LE-NEXT: extsb r3, r3 1432; CHECK-P9-LE-NEXT: blr 1433; 1434; CHECK-P9-BE-LABEL: ld_cst_align64_int8_t_uint32_t: 1435; CHECK-P9-BE: # %bb.0: # %entry 1436; CHECK-P9-BE-NEXT: li r3, 29 1437; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 1438; CHECK-P9-BE-NEXT: oris r3, r3, 54437 1439; CHECK-P9-BE-NEXT: ori r3, r3, 4099 1440; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 1441; CHECK-P9-BE-NEXT: extsb r3, r3 1442; CHECK-P9-BE-NEXT: blr 1443; 1444; CHECK-P8-LE-LABEL: ld_cst_align64_int8_t_uint32_t: 1445; CHECK-P8-LE: # %bb.0: # %entry 1446; CHECK-P8-LE-NEXT: lis r3, 3725 1447; CHECK-P8-LE-NEXT: ori r3, r3, 19025 1448; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 1449; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 1450; CHECK-P8-LE-NEXT: extsb r3, r3 1451; CHECK-P8-LE-NEXT: blr 1452; 1453; CHECK-P8-BE-LABEL: ld_cst_align64_int8_t_uint32_t: 1454; CHECK-P8-BE: # %bb.0: # %entry 1455; CHECK-P8-BE-NEXT: li r3, 29 1456; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 1457; CHECK-P8-BE-NEXT: oris r3, r3, 54437 1458; CHECK-P8-BE-NEXT: ori r3, r3, 4099 1459; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 1460; CHECK-P8-BE-NEXT: extsb r3, r3 1461; CHECK-P8-BE-NEXT: blr 1462entry: 1463 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 4096 1464 %conv = trunc i32 %0 to i8 1465 ret i8 %conv 1466} 1467 1468; Function Attrs: norecurse nounwind readonly uwtable willreturn 1469define dso_local signext i8 @ld_0_int8_t_uint64_t(i64 %ptr) { 1470; CHECK-LE-LABEL: ld_0_int8_t_uint64_t: 1471; CHECK-LE: # %bb.0: # %entry 1472; CHECK-LE-NEXT: lbz r3, 0(r3) 1473; CHECK-LE-NEXT: extsb r3, r3 1474; CHECK-LE-NEXT: blr 1475; 1476; CHECK-BE-LABEL: ld_0_int8_t_uint64_t: 1477; CHECK-BE: # %bb.0: # %entry 1478; CHECK-BE-NEXT: lbz r3, 7(r3) 1479; CHECK-BE-NEXT: extsb r3, r3 1480; CHECK-BE-NEXT: blr 1481entry: 1482 %0 = inttoptr i64 %ptr to ptr 1483 %1 = load i64, ptr %0, align 8 1484 %conv = trunc i64 %1 to i8 1485 ret i8 %conv 1486} 1487 1488; Function Attrs: norecurse nounwind readonly uwtable willreturn 1489define dso_local signext i8 @ld_align16_int8_t_uint64_t(ptr nocapture readonly %ptr) { 1490; CHECK-LE-LABEL: ld_align16_int8_t_uint64_t: 1491; CHECK-LE: # %bb.0: # %entry 1492; CHECK-LE-NEXT: lbz r3, 8(r3) 1493; CHECK-LE-NEXT: extsb r3, r3 1494; CHECK-LE-NEXT: blr 1495; 1496; CHECK-BE-LABEL: ld_align16_int8_t_uint64_t: 1497; CHECK-BE: # %bb.0: # %entry 1498; CHECK-BE-NEXT: lbz r3, 15(r3) 1499; CHECK-BE-NEXT: extsb r3, r3 1500; CHECK-BE-NEXT: blr 1501entry: 1502 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 1503 %0 = load i64, ptr %add.ptr, align 8 1504 %conv = trunc i64 %0 to i8 1505 ret i8 %conv 1506} 1507 1508; Function Attrs: norecurse nounwind readonly uwtable willreturn 1509define dso_local signext i8 @ld_align32_int8_t_uint64_t(ptr nocapture readonly %ptr) { 1510; CHECK-P10-LE-LABEL: ld_align32_int8_t_uint64_t: 1511; CHECK-P10-LE: # %bb.0: # %entry 1512; CHECK-P10-LE-NEXT: plbz r3, 99999000(r3), 0 1513; CHECK-P10-LE-NEXT: extsb r3, r3 1514; CHECK-P10-LE-NEXT: blr 1515; 1516; CHECK-P10-BE-LABEL: ld_align32_int8_t_uint64_t: 1517; CHECK-P10-BE: # %bb.0: # %entry 1518; CHECK-P10-BE-NEXT: plbz r3, 99999007(r3), 0 1519; CHECK-P10-BE-NEXT: extsb r3, r3 1520; CHECK-P10-BE-NEXT: blr 1521; 1522; CHECK-P9-LE-LABEL: ld_align32_int8_t_uint64_t: 1523; CHECK-P9-LE: # %bb.0: # %entry 1524; CHECK-P9-LE-NEXT: lis r4, 1525 1525; CHECK-P9-LE-NEXT: ori r4, r4, 56600 1526; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 1527; CHECK-P9-LE-NEXT: extsb r3, r3 1528; CHECK-P9-LE-NEXT: blr 1529; 1530; CHECK-P9-BE-LABEL: ld_align32_int8_t_uint64_t: 1531; CHECK-P9-BE: # %bb.0: # %entry 1532; CHECK-P9-BE-NEXT: lis r4, 1525 1533; CHECK-P9-BE-NEXT: ori r4, r4, 56607 1534; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 1535; CHECK-P9-BE-NEXT: extsb r3, r3 1536; CHECK-P9-BE-NEXT: blr 1537; 1538; CHECK-P8-LE-LABEL: ld_align32_int8_t_uint64_t: 1539; CHECK-P8-LE: # %bb.0: # %entry 1540; CHECK-P8-LE-NEXT: lis r4, 1525 1541; CHECK-P8-LE-NEXT: ori r4, r4, 56600 1542; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 1543; CHECK-P8-LE-NEXT: extsb r3, r3 1544; CHECK-P8-LE-NEXT: blr 1545; 1546; CHECK-P8-BE-LABEL: ld_align32_int8_t_uint64_t: 1547; CHECK-P8-BE: # %bb.0: # %entry 1548; CHECK-P8-BE-NEXT: lis r4, 1525 1549; CHECK-P8-BE-NEXT: ori r4, r4, 56607 1550; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 1551; CHECK-P8-BE-NEXT: extsb r3, r3 1552; CHECK-P8-BE-NEXT: blr 1553entry: 1554 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 1555 %0 = load i64, ptr %add.ptr, align 8 1556 %conv = trunc i64 %0 to i8 1557 ret i8 %conv 1558} 1559 1560; Function Attrs: norecurse nounwind readonly uwtable willreturn 1561define dso_local signext i8 @ld_align64_int8_t_uint64_t(ptr nocapture readonly %ptr) { 1562; CHECK-P10-LE-LABEL: ld_align64_int8_t_uint64_t: 1563; CHECK-P10-LE: # %bb.0: # %entry 1564; CHECK-P10-LE-NEXT: pli r4, 244140625 1565; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 1566; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 1567; CHECK-P10-LE-NEXT: extsb r3, r3 1568; CHECK-P10-LE-NEXT: blr 1569; 1570; CHECK-P10-BE-LABEL: ld_align64_int8_t_uint64_t: 1571; CHECK-P10-BE: # %bb.0: # %entry 1572; CHECK-P10-BE-NEXT: pli r4, 232 1573; CHECK-P10-BE-NEXT: pli r5, 3567587335 1574; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 1575; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 1576; CHECK-P10-BE-NEXT: extsb r3, r3 1577; CHECK-P10-BE-NEXT: blr 1578; 1579; CHECK-P9-LE-LABEL: ld_align64_int8_t_uint64_t: 1580; CHECK-P9-LE: # %bb.0: # %entry 1581; CHECK-P9-LE-NEXT: lis r4, 3725 1582; CHECK-P9-LE-NEXT: ori r4, r4, 19025 1583; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 1584; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 1585; CHECK-P9-LE-NEXT: extsb r3, r3 1586; CHECK-P9-LE-NEXT: blr 1587; 1588; CHECK-P9-BE-LABEL: ld_align64_int8_t_uint64_t: 1589; CHECK-P9-BE: # %bb.0: # %entry 1590; CHECK-P9-BE-NEXT: li r4, 29 1591; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1592; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1593; CHECK-P9-BE-NEXT: ori r4, r4, 4103 1594; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 1595; CHECK-P9-BE-NEXT: extsb r3, r3 1596; CHECK-P9-BE-NEXT: blr 1597; 1598; CHECK-P8-LE-LABEL: ld_align64_int8_t_uint64_t: 1599; CHECK-P8-LE: # %bb.0: # %entry 1600; CHECK-P8-LE-NEXT: lis r4, 3725 1601; CHECK-P8-LE-NEXT: ori r4, r4, 19025 1602; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 1603; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 1604; CHECK-P8-LE-NEXT: extsb r3, r3 1605; CHECK-P8-LE-NEXT: blr 1606; 1607; CHECK-P8-BE-LABEL: ld_align64_int8_t_uint64_t: 1608; CHECK-P8-BE: # %bb.0: # %entry 1609; CHECK-P8-BE-NEXT: li r4, 29 1610; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1611; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1612; CHECK-P8-BE-NEXT: ori r4, r4, 4103 1613; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 1614; CHECK-P8-BE-NEXT: extsb r3, r3 1615; CHECK-P8-BE-NEXT: blr 1616entry: 1617 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 1618 %0 = load i64, ptr %add.ptr, align 8 1619 %conv = trunc i64 %0 to i8 1620 ret i8 %conv 1621} 1622 1623; Function Attrs: norecurse nounwind readonly uwtable willreturn 1624define dso_local signext i8 @ld_reg_int8_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) { 1625; CHECK-LE-LABEL: ld_reg_int8_t_uint64_t: 1626; CHECK-LE: # %bb.0: # %entry 1627; CHECK-LE-NEXT: lbzx r3, r3, r4 1628; CHECK-LE-NEXT: extsb r3, r3 1629; CHECK-LE-NEXT: blr 1630; 1631; CHECK-BE-LABEL: ld_reg_int8_t_uint64_t: 1632; CHECK-BE: # %bb.0: # %entry 1633; CHECK-BE-NEXT: add r3, r3, r4 1634; CHECK-BE-NEXT: lbz r3, 7(r3) 1635; CHECK-BE-NEXT: extsb r3, r3 1636; CHECK-BE-NEXT: blr 1637entry: 1638 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 1639 %0 = load i64, ptr %add.ptr, align 8 1640 %conv = trunc i64 %0 to i8 1641 ret i8 %conv 1642} 1643 1644; Function Attrs: norecurse nounwind readonly uwtable willreturn 1645define dso_local signext i8 @ld_or_int8_t_uint64_t(i64 %ptr, i8 zeroext %off) { 1646; CHECK-LE-LABEL: ld_or_int8_t_uint64_t: 1647; CHECK-LE: # %bb.0: # %entry 1648; CHECK-LE-NEXT: or r3, r4, r3 1649; CHECK-LE-NEXT: lbz r3, 0(r3) 1650; CHECK-LE-NEXT: extsb r3, r3 1651; CHECK-LE-NEXT: blr 1652; 1653; CHECK-BE-LABEL: ld_or_int8_t_uint64_t: 1654; CHECK-BE: # %bb.0: # %entry 1655; CHECK-BE-NEXT: or r3, r4, r3 1656; CHECK-BE-NEXT: lbz r3, 7(r3) 1657; CHECK-BE-NEXT: extsb r3, r3 1658; CHECK-BE-NEXT: blr 1659entry: 1660 %conv = zext i8 %off to i64 1661 %or = or i64 %conv, %ptr 1662 %0 = inttoptr i64 %or to ptr 1663 %1 = load i64, ptr %0, align 8 1664 %conv1 = trunc i64 %1 to i8 1665 ret i8 %conv1 1666} 1667 1668; Function Attrs: norecurse nounwind readonly uwtable willreturn 1669define dso_local signext i8 @ld_not_disjoint16_int8_t_uint64_t(i64 %ptr) { 1670; CHECK-LE-LABEL: ld_not_disjoint16_int8_t_uint64_t: 1671; CHECK-LE: # %bb.0: # %entry 1672; CHECK-LE-NEXT: ori r3, r3, 6 1673; CHECK-LE-NEXT: lbz r3, 0(r3) 1674; CHECK-LE-NEXT: extsb r3, r3 1675; CHECK-LE-NEXT: blr 1676; 1677; CHECK-BE-LABEL: ld_not_disjoint16_int8_t_uint64_t: 1678; CHECK-BE: # %bb.0: # %entry 1679; CHECK-BE-NEXT: ori r3, r3, 6 1680; CHECK-BE-NEXT: lbz r3, 7(r3) 1681; CHECK-BE-NEXT: extsb r3, r3 1682; CHECK-BE-NEXT: blr 1683entry: 1684 %or = or i64 %ptr, 6 1685 %0 = inttoptr i64 %or to ptr 1686 %1 = load i64, ptr %0, align 8 1687 %conv = trunc i64 %1 to i8 1688 ret i8 %conv 1689} 1690 1691; Function Attrs: norecurse nounwind readonly uwtable willreturn 1692define dso_local signext i8 @ld_disjoint_align16_int8_t_uint64_t(i64 %ptr) { 1693; CHECK-LE-LABEL: ld_disjoint_align16_int8_t_uint64_t: 1694; CHECK-LE: # %bb.0: # %entry 1695; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 1696; CHECK-LE-NEXT: lbz r3, 24(r3) 1697; CHECK-LE-NEXT: extsb r3, r3 1698; CHECK-LE-NEXT: blr 1699; 1700; CHECK-BE-LABEL: ld_disjoint_align16_int8_t_uint64_t: 1701; CHECK-BE: # %bb.0: # %entry 1702; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 1703; CHECK-BE-NEXT: lbz r3, 31(r3) 1704; CHECK-BE-NEXT: extsb r3, r3 1705; CHECK-BE-NEXT: blr 1706entry: 1707 %and = and i64 %ptr, -4096 1708 %or = or i64 %and, 24 1709 %0 = inttoptr i64 %or to ptr 1710 %1 = load i64, ptr %0, align 8 1711 %conv = trunc i64 %1 to i8 1712 ret i8 %conv 1713} 1714 1715; Function Attrs: norecurse nounwind readonly uwtable willreturn 1716define dso_local signext i8 @ld_not_disjoint32_int8_t_uint64_t(i64 %ptr) { 1717; CHECK-LE-LABEL: ld_not_disjoint32_int8_t_uint64_t: 1718; CHECK-LE: # %bb.0: # %entry 1719; CHECK-LE-NEXT: ori r3, r3, 34463 1720; CHECK-LE-NEXT: oris r3, r3, 1 1721; CHECK-LE-NEXT: lbz r3, 0(r3) 1722; CHECK-LE-NEXT: extsb r3, r3 1723; CHECK-LE-NEXT: blr 1724; 1725; CHECK-BE-LABEL: ld_not_disjoint32_int8_t_uint64_t: 1726; CHECK-BE: # %bb.0: # %entry 1727; CHECK-BE-NEXT: ori r3, r3, 34463 1728; CHECK-BE-NEXT: oris r3, r3, 1 1729; CHECK-BE-NEXT: lbz r3, 7(r3) 1730; CHECK-BE-NEXT: extsb r3, r3 1731; CHECK-BE-NEXT: blr 1732entry: 1733 %or = or i64 %ptr, 99999 1734 %0 = inttoptr i64 %or to ptr 1735 %1 = load i64, ptr %0, align 8 1736 %conv = trunc i64 %1 to i8 1737 ret i8 %conv 1738} 1739 1740; Function Attrs: norecurse nounwind readonly uwtable willreturn 1741define dso_local signext i8 @ld_disjoint_align32_int8_t_uint64_t(i64 %ptr) { 1742; CHECK-P10-LE-LABEL: ld_disjoint_align32_int8_t_uint64_t: 1743; CHECK-P10-LE: # %bb.0: # %entry 1744; CHECK-P10-LE-NEXT: lis r4, -15264 1745; CHECK-P10-LE-NEXT: and r3, r3, r4 1746; CHECK-P10-LE-NEXT: plbz r3, 999990000(r3), 0 1747; CHECK-P10-LE-NEXT: extsb r3, r3 1748; CHECK-P10-LE-NEXT: blr 1749; 1750; CHECK-P10-BE-LABEL: ld_disjoint_align32_int8_t_uint64_t: 1751; CHECK-P10-BE: # %bb.0: # %entry 1752; CHECK-P10-BE-NEXT: lis r4, -15264 1753; CHECK-P10-BE-NEXT: and r3, r3, r4 1754; CHECK-P10-BE-NEXT: plbz r3, 999990007(r3), 0 1755; CHECK-P10-BE-NEXT: extsb r3, r3 1756; CHECK-P10-BE-NEXT: blr 1757; 1758; CHECK-P9-LE-LABEL: ld_disjoint_align32_int8_t_uint64_t: 1759; CHECK-P9-LE: # %bb.0: # %entry 1760; CHECK-P9-LE-NEXT: lis r4, -15264 1761; CHECK-P9-LE-NEXT: and r3, r3, r4 1762; CHECK-P9-LE-NEXT: lis r4, 15258 1763; CHECK-P9-LE-NEXT: ori r4, r4, 41712 1764; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 1765; CHECK-P9-LE-NEXT: extsb r3, r3 1766; CHECK-P9-LE-NEXT: blr 1767; 1768; CHECK-P9-BE-LABEL: ld_disjoint_align32_int8_t_uint64_t: 1769; CHECK-P9-BE: # %bb.0: # %entry 1770; CHECK-P9-BE-NEXT: lis r4, -15264 1771; CHECK-P9-BE-NEXT: and r3, r3, r4 1772; CHECK-P9-BE-NEXT: lis r4, 15258 1773; CHECK-P9-BE-NEXT: ori r4, r4, 41719 1774; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 1775; CHECK-P9-BE-NEXT: extsb r3, r3 1776; CHECK-P9-BE-NEXT: blr 1777; 1778; CHECK-P8-LE-LABEL: ld_disjoint_align32_int8_t_uint64_t: 1779; CHECK-P8-LE: # %bb.0: # %entry 1780; CHECK-P8-LE-NEXT: lis r4, -15264 1781; CHECK-P8-LE-NEXT: and r3, r3, r4 1782; CHECK-P8-LE-NEXT: lis r4, 15258 1783; CHECK-P8-LE-NEXT: ori r4, r4, 41712 1784; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 1785; CHECK-P8-LE-NEXT: extsb r3, r3 1786; CHECK-P8-LE-NEXT: blr 1787; 1788; CHECK-P8-BE-LABEL: ld_disjoint_align32_int8_t_uint64_t: 1789; CHECK-P8-BE: # %bb.0: # %entry 1790; CHECK-P8-BE-NEXT: lis r4, -15264 1791; CHECK-P8-BE-NEXT: and r3, r3, r4 1792; CHECK-P8-BE-NEXT: lis r4, 15258 1793; CHECK-P8-BE-NEXT: ori r4, r4, 41719 1794; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 1795; CHECK-P8-BE-NEXT: extsb r3, r3 1796; CHECK-P8-BE-NEXT: blr 1797entry: 1798 %and = and i64 %ptr, -1000341504 1799 %or = or i64 %and, 999990000 1800 %0 = inttoptr i64 %or to ptr 1801 %1 = load i64, ptr %0, align 16 1802 %conv = trunc i64 %1 to i8 1803 ret i8 %conv 1804} 1805 1806; Function Attrs: norecurse nounwind readonly uwtable willreturn 1807define dso_local signext i8 @ld_not_disjoint64_int8_t_uint64_t(i64 %ptr) { 1808; CHECK-P10-LE-LABEL: ld_not_disjoint64_int8_t_uint64_t: 1809; CHECK-P10-LE: # %bb.0: # %entry 1810; CHECK-P10-LE-NEXT: pli r4, 232 1811; CHECK-P10-LE-NEXT: pli r5, 3567587329 1812; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 1813; CHECK-P10-LE-NEXT: or r3, r3, r5 1814; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 1815; CHECK-P10-LE-NEXT: extsb r3, r3 1816; CHECK-P10-LE-NEXT: blr 1817; 1818; CHECK-P10-BE-LABEL: ld_not_disjoint64_int8_t_uint64_t: 1819; CHECK-P10-BE: # %bb.0: # %entry 1820; CHECK-P10-BE-NEXT: pli r4, 232 1821; CHECK-P10-BE-NEXT: pli r5, 3567587329 1822; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 1823; CHECK-P10-BE-NEXT: or r3, r3, r5 1824; CHECK-P10-BE-NEXT: lbz r3, 7(r3) 1825; CHECK-P10-BE-NEXT: extsb r3, r3 1826; CHECK-P10-BE-NEXT: blr 1827; 1828; CHECK-P9-LE-LABEL: ld_not_disjoint64_int8_t_uint64_t: 1829; CHECK-P9-LE: # %bb.0: # %entry 1830; CHECK-P9-LE-NEXT: li r4, 29 1831; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 1832; CHECK-P9-LE-NEXT: oris r4, r4, 54437 1833; CHECK-P9-LE-NEXT: ori r4, r4, 4097 1834; CHECK-P9-LE-NEXT: or r3, r3, r4 1835; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 1836; CHECK-P9-LE-NEXT: extsb r3, r3 1837; CHECK-P9-LE-NEXT: blr 1838; 1839; CHECK-P9-BE-LABEL: ld_not_disjoint64_int8_t_uint64_t: 1840; CHECK-P9-BE: # %bb.0: # %entry 1841; CHECK-P9-BE-NEXT: li r4, 29 1842; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1843; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1844; CHECK-P9-BE-NEXT: ori r4, r4, 4097 1845; CHECK-P9-BE-NEXT: or r3, r3, r4 1846; CHECK-P9-BE-NEXT: lbz r3, 7(r3) 1847; CHECK-P9-BE-NEXT: extsb r3, r3 1848; CHECK-P9-BE-NEXT: blr 1849; 1850; CHECK-P8-LE-LABEL: ld_not_disjoint64_int8_t_uint64_t: 1851; CHECK-P8-LE: # %bb.0: # %entry 1852; CHECK-P8-LE-NEXT: li r4, 29 1853; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 1854; CHECK-P8-LE-NEXT: oris r4, r4, 54437 1855; CHECK-P8-LE-NEXT: ori r4, r4, 4097 1856; CHECK-P8-LE-NEXT: or r3, r3, r4 1857; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 1858; CHECK-P8-LE-NEXT: extsb r3, r3 1859; CHECK-P8-LE-NEXT: blr 1860; 1861; CHECK-P8-BE-LABEL: ld_not_disjoint64_int8_t_uint64_t: 1862; CHECK-P8-BE: # %bb.0: # %entry 1863; CHECK-P8-BE-NEXT: li r4, 29 1864; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1865; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1866; CHECK-P8-BE-NEXT: ori r4, r4, 4097 1867; CHECK-P8-BE-NEXT: or r3, r3, r4 1868; CHECK-P8-BE-NEXT: lbz r3, 7(r3) 1869; CHECK-P8-BE-NEXT: extsb r3, r3 1870; CHECK-P8-BE-NEXT: blr 1871entry: 1872 %or = or i64 %ptr, 1000000000001 1873 %0 = inttoptr i64 %or to ptr 1874 %1 = load i64, ptr %0, align 8 1875 %conv = trunc i64 %1 to i8 1876 ret i8 %conv 1877} 1878 1879; Function Attrs: norecurse nounwind readonly uwtable willreturn 1880define dso_local signext i8 @ld_disjoint_align64_int8_t_uint64_t(i64 %ptr) { 1881; CHECK-P10-LE-LABEL: ld_disjoint_align64_int8_t_uint64_t: 1882; CHECK-P10-LE: # %bb.0: # %entry 1883; CHECK-P10-LE-NEXT: pli r4, 244140625 1884; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 1885; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 1886; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 1887; CHECK-P10-LE-NEXT: extsb r3, r3 1888; CHECK-P10-LE-NEXT: blr 1889; 1890; CHECK-P10-BE-LABEL: ld_disjoint_align64_int8_t_uint64_t: 1891; CHECK-P10-BE: # %bb.0: # %entry 1892; CHECK-P10-BE-NEXT: pli r4, 232 1893; CHECK-P10-BE-NEXT: pli r5, 3567587335 1894; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 1895; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 1896; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 1897; CHECK-P10-BE-NEXT: extsb r3, r3 1898; CHECK-P10-BE-NEXT: blr 1899; 1900; CHECK-P9-LE-LABEL: ld_disjoint_align64_int8_t_uint64_t: 1901; CHECK-P9-LE: # %bb.0: # %entry 1902; CHECK-P9-LE-NEXT: lis r4, 3725 1903; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 1904; CHECK-P9-LE-NEXT: ori r4, r4, 19025 1905; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 1906; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 1907; CHECK-P9-LE-NEXT: extsb r3, r3 1908; CHECK-P9-LE-NEXT: blr 1909; 1910; CHECK-P9-BE-LABEL: ld_disjoint_align64_int8_t_uint64_t: 1911; CHECK-P9-BE: # %bb.0: # %entry 1912; CHECK-P9-BE-NEXT: li r4, 29 1913; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 1914; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1915; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1916; CHECK-P9-BE-NEXT: ori r4, r4, 4103 1917; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 1918; CHECK-P9-BE-NEXT: extsb r3, r3 1919; CHECK-P9-BE-NEXT: blr 1920; 1921; CHECK-P8-LE-LABEL: ld_disjoint_align64_int8_t_uint64_t: 1922; CHECK-P8-LE: # %bb.0: # %entry 1923; CHECK-P8-LE-NEXT: lis r4, 3725 1924; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 1925; CHECK-P8-LE-NEXT: ori r4, r4, 19025 1926; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 1927; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 1928; CHECK-P8-LE-NEXT: extsb r3, r3 1929; CHECK-P8-LE-NEXT: blr 1930; 1931; CHECK-P8-BE-LABEL: ld_disjoint_align64_int8_t_uint64_t: 1932; CHECK-P8-BE: # %bb.0: # %entry 1933; CHECK-P8-BE-NEXT: li r4, 29 1934; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 1935; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1936; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1937; CHECK-P8-BE-NEXT: ori r4, r4, 4103 1938; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 1939; CHECK-P8-BE-NEXT: extsb r3, r3 1940; CHECK-P8-BE-NEXT: blr 1941entry: 1942 %and = and i64 %ptr, -1099511627776 1943 %or = or i64 %and, 1000000000000 1944 %0 = inttoptr i64 %or to ptr 1945 %1 = load i64, ptr %0, align 4096 1946 %conv = trunc i64 %1 to i8 1947 ret i8 %conv 1948} 1949 1950; Function Attrs: norecurse nounwind readonly uwtable willreturn 1951define dso_local signext i8 @ld_cst_align16_int8_t_uint64_t() { 1952; CHECK-LE-LABEL: ld_cst_align16_int8_t_uint64_t: 1953; CHECK-LE: # %bb.0: # %entry 1954; CHECK-LE-NEXT: lbz r3, 4080(0) 1955; CHECK-LE-NEXT: extsb r3, r3 1956; CHECK-LE-NEXT: blr 1957; 1958; CHECK-BE-LABEL: ld_cst_align16_int8_t_uint64_t: 1959; CHECK-BE: # %bb.0: # %entry 1960; CHECK-BE-NEXT: lbz r3, 4087(0) 1961; CHECK-BE-NEXT: extsb r3, r3 1962; CHECK-BE-NEXT: blr 1963entry: 1964 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 16 1965 %conv = trunc i64 %0 to i8 1966 ret i8 %conv 1967} 1968 1969; Function Attrs: norecurse nounwind readonly uwtable willreturn 1970define dso_local signext i8 @ld_cst_align32_int8_t_uint64_t() { 1971; CHECK-LE-LABEL: ld_cst_align32_int8_t_uint64_t: 1972; CHECK-LE: # %bb.0: # %entry 1973; CHECK-LE-NEXT: lis r3, 153 1974; CHECK-LE-NEXT: lbz r3, -27108(r3) 1975; CHECK-LE-NEXT: extsb r3, r3 1976; CHECK-LE-NEXT: blr 1977; 1978; CHECK-BE-LABEL: ld_cst_align32_int8_t_uint64_t: 1979; CHECK-BE: # %bb.0: # %entry 1980; CHECK-BE-NEXT: lis r3, 153 1981; CHECK-BE-NEXT: lbz r3, -27101(r3) 1982; CHECK-BE-NEXT: extsb r3, r3 1983; CHECK-BE-NEXT: blr 1984entry: 1985 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 8 1986 %conv = trunc i64 %0 to i8 1987 ret i8 %conv 1988} 1989 1990; Function Attrs: norecurse nounwind readonly uwtable willreturn 1991define dso_local signext i8 @ld_cst_align64_int8_t_uint64_t() { 1992; CHECK-P10-LE-LABEL: ld_cst_align64_int8_t_uint64_t: 1993; CHECK-P10-LE: # %bb.0: # %entry 1994; CHECK-P10-LE-NEXT: pli r3, 244140625 1995; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 1996; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 1997; CHECK-P10-LE-NEXT: extsb r3, r3 1998; CHECK-P10-LE-NEXT: blr 1999; 2000; CHECK-P10-BE-LABEL: ld_cst_align64_int8_t_uint64_t: 2001; CHECK-P10-BE: # %bb.0: # %entry 2002; CHECK-P10-BE-NEXT: pli r3, 232 2003; CHECK-P10-BE-NEXT: pli r4, 3567587335 2004; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 2005; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 2006; CHECK-P10-BE-NEXT: extsb r3, r3 2007; CHECK-P10-BE-NEXT: blr 2008; 2009; CHECK-P9-LE-LABEL: ld_cst_align64_int8_t_uint64_t: 2010; CHECK-P9-LE: # %bb.0: # %entry 2011; CHECK-P9-LE-NEXT: lis r3, 3725 2012; CHECK-P9-LE-NEXT: ori r3, r3, 19025 2013; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 2014; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 2015; CHECK-P9-LE-NEXT: extsb r3, r3 2016; CHECK-P9-LE-NEXT: blr 2017; 2018; CHECK-P9-BE-LABEL: ld_cst_align64_int8_t_uint64_t: 2019; CHECK-P9-BE: # %bb.0: # %entry 2020; CHECK-P9-BE-NEXT: li r3, 29 2021; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 2022; CHECK-P9-BE-NEXT: oris r3, r3, 54437 2023; CHECK-P9-BE-NEXT: ori r3, r3, 4103 2024; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 2025; CHECK-P9-BE-NEXT: extsb r3, r3 2026; CHECK-P9-BE-NEXT: blr 2027; 2028; CHECK-P8-LE-LABEL: ld_cst_align64_int8_t_uint64_t: 2029; CHECK-P8-LE: # %bb.0: # %entry 2030; CHECK-P8-LE-NEXT: lis r3, 3725 2031; CHECK-P8-LE-NEXT: ori r3, r3, 19025 2032; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 2033; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 2034; CHECK-P8-LE-NEXT: extsb r3, r3 2035; CHECK-P8-LE-NEXT: blr 2036; 2037; CHECK-P8-BE-LABEL: ld_cst_align64_int8_t_uint64_t: 2038; CHECK-P8-BE: # %bb.0: # %entry 2039; CHECK-P8-BE-NEXT: li r3, 29 2040; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 2041; CHECK-P8-BE-NEXT: oris r3, r3, 54437 2042; CHECK-P8-BE-NEXT: ori r3, r3, 4103 2043; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 2044; CHECK-P8-BE-NEXT: extsb r3, r3 2045; CHECK-P8-BE-NEXT: blr 2046entry: 2047 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 4096 2048 %conv = trunc i64 %0 to i8 2049 ret i8 %conv 2050} 2051 2052; Function Attrs: norecurse nounwind readonly uwtable willreturn 2053define dso_local signext i8 @ld_0_int8_t_float(i64 %ptr) { 2054; CHECK-LABEL: ld_0_int8_t_float: 2055; CHECK: # %bb.0: # %entry 2056; CHECK-NEXT: lfs f0, 0(r3) 2057; CHECK-NEXT: xscvdpsxws f0, f0 2058; CHECK-NEXT: mffprwz r3, f0 2059; CHECK-NEXT: extsw r3, r3 2060; CHECK-NEXT: blr 2061entry: 2062 %0 = inttoptr i64 %ptr to ptr 2063 %1 = load float, ptr %0, align 4 2064 %conv = fptosi float %1 to i8 2065 ret i8 %conv 2066} 2067 2068; Function Attrs: norecurse nounwind readonly uwtable willreturn 2069define dso_local signext i8 @ld_align16_int8_t_float(ptr nocapture readonly %ptr) { 2070; CHECK-LABEL: ld_align16_int8_t_float: 2071; CHECK: # %bb.0: # %entry 2072; CHECK-NEXT: lfs f0, 8(r3) 2073; CHECK-NEXT: xscvdpsxws f0, f0 2074; CHECK-NEXT: mffprwz r3, f0 2075; CHECK-NEXT: extsw r3, r3 2076; CHECK-NEXT: blr 2077entry: 2078 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2079 %0 = load float, ptr %add.ptr, align 4 2080 %conv = fptosi float %0 to i8 2081 ret i8 %conv 2082} 2083 2084; Function Attrs: norecurse nounwind readonly uwtable willreturn 2085define dso_local signext i8 @ld_align32_int8_t_float(ptr nocapture readonly %ptr) { 2086; CHECK-P10-LABEL: ld_align32_int8_t_float: 2087; CHECK-P10: # %bb.0: # %entry 2088; CHECK-P10-NEXT: plfs f0, 99999000(r3), 0 2089; CHECK-P10-NEXT: xscvdpsxws f0, f0 2090; CHECK-P10-NEXT: mffprwz r3, f0 2091; CHECK-P10-NEXT: extsw r3, r3 2092; CHECK-P10-NEXT: blr 2093; 2094; CHECK-PREP10-LABEL: ld_align32_int8_t_float: 2095; CHECK-PREP10: # %bb.0: # %entry 2096; CHECK-PREP10-NEXT: lis r4, 1525 2097; CHECK-PREP10-NEXT: ori r4, r4, 56600 2098; CHECK-PREP10-NEXT: lfsx f0, r3, r4 2099; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2100; CHECK-PREP10-NEXT: mffprwz r3, f0 2101; CHECK-PREP10-NEXT: extsw r3, r3 2102; CHECK-PREP10-NEXT: blr 2103entry: 2104 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2105 %0 = load float, ptr %add.ptr, align 4 2106 %conv = fptosi float %0 to i8 2107 ret i8 %conv 2108} 2109 2110; Function Attrs: norecurse nounwind readonly uwtable willreturn 2111define dso_local signext i8 @ld_align64_int8_t_float(ptr nocapture readonly %ptr) { 2112; CHECK-P10-LABEL: ld_align64_int8_t_float: 2113; CHECK-P10: # %bb.0: # %entry 2114; CHECK-P10-NEXT: pli r4, 244140625 2115; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2116; CHECK-P10-NEXT: lfsx f0, r3, r4 2117; CHECK-P10-NEXT: xscvdpsxws f0, f0 2118; CHECK-P10-NEXT: mffprwz r3, f0 2119; CHECK-P10-NEXT: extsw r3, r3 2120; CHECK-P10-NEXT: blr 2121; 2122; CHECK-PREP10-LABEL: ld_align64_int8_t_float: 2123; CHECK-PREP10: # %bb.0: # %entry 2124; CHECK-PREP10-NEXT: lis r4, 3725 2125; CHECK-PREP10-NEXT: ori r4, r4, 19025 2126; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2127; CHECK-PREP10-NEXT: lfsx f0, r3, r4 2128; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2129; CHECK-PREP10-NEXT: mffprwz r3, f0 2130; CHECK-PREP10-NEXT: extsw r3, r3 2131; CHECK-PREP10-NEXT: blr 2132entry: 2133 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2134 %0 = load float, ptr %add.ptr, align 4 2135 %conv = fptosi float %0 to i8 2136 ret i8 %conv 2137} 2138 2139; Function Attrs: norecurse nounwind readonly uwtable willreturn 2140define dso_local signext i8 @ld_reg_int8_t_float(ptr nocapture readonly %ptr, i64 %off) { 2141; CHECK-LABEL: ld_reg_int8_t_float: 2142; CHECK: # %bb.0: # %entry 2143; CHECK-NEXT: lfsx f0, r3, r4 2144; CHECK-NEXT: xscvdpsxws f0, f0 2145; CHECK-NEXT: mffprwz r3, f0 2146; CHECK-NEXT: extsw r3, r3 2147; CHECK-NEXT: blr 2148entry: 2149 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2150 %0 = load float, ptr %add.ptr, align 4 2151 %conv = fptosi float %0 to i8 2152 ret i8 %conv 2153} 2154 2155; Function Attrs: norecurse nounwind readonly uwtable willreturn 2156define dso_local signext i8 @ld_or_int8_t_float(i64 %ptr, i8 zeroext %off) { 2157; CHECK-LABEL: ld_or_int8_t_float: 2158; CHECK: # %bb.0: # %entry 2159; CHECK-NEXT: or r3, r4, r3 2160; CHECK-NEXT: lfs f0, 0(r3) 2161; CHECK-NEXT: xscvdpsxws f0, f0 2162; CHECK-NEXT: mffprwz r3, f0 2163; CHECK-NEXT: extsw r3, r3 2164; CHECK-NEXT: blr 2165entry: 2166 %conv = zext i8 %off to i64 2167 %or = or i64 %conv, %ptr 2168 %0 = inttoptr i64 %or to ptr 2169 %1 = load float, ptr %0, align 4 2170 %conv1 = fptosi float %1 to i8 2171 ret i8 %conv1 2172} 2173 2174; Function Attrs: norecurse nounwind readonly uwtable willreturn 2175define dso_local signext i8 @ld_not_disjoint16_int8_t_float(i64 %ptr) { 2176; CHECK-LABEL: ld_not_disjoint16_int8_t_float: 2177; CHECK: # %bb.0: # %entry 2178; CHECK-NEXT: ori r3, r3, 6 2179; CHECK-NEXT: lfs f0, 0(r3) 2180; CHECK-NEXT: xscvdpsxws f0, f0 2181; CHECK-NEXT: mffprwz r3, f0 2182; CHECK-NEXT: extsw r3, r3 2183; CHECK-NEXT: blr 2184entry: 2185 %or = or i64 %ptr, 6 2186 %0 = inttoptr i64 %or to ptr 2187 %1 = load float, ptr %0, align 4 2188 %conv = fptosi float %1 to i8 2189 ret i8 %conv 2190} 2191 2192; Function Attrs: norecurse nounwind readonly uwtable willreturn 2193define dso_local signext i8 @ld_disjoint_align16_int8_t_float(i64 %ptr) { 2194; CHECK-LABEL: ld_disjoint_align16_int8_t_float: 2195; CHECK: # %bb.0: # %entry 2196; CHECK-NEXT: rldicr r3, r3, 0, 51 2197; CHECK-NEXT: lfs f0, 24(r3) 2198; CHECK-NEXT: xscvdpsxws f0, f0 2199; CHECK-NEXT: mffprwz r3, f0 2200; CHECK-NEXT: extsw r3, r3 2201; CHECK-NEXT: blr 2202entry: 2203 %and = and i64 %ptr, -4096 2204 %or = or i64 %and, 24 2205 %0 = inttoptr i64 %or to ptr 2206 %1 = load float, ptr %0, align 8 2207 %conv = fptosi float %1 to i8 2208 ret i8 %conv 2209} 2210 2211; Function Attrs: norecurse nounwind readonly uwtable willreturn 2212define dso_local signext i8 @ld_not_disjoint32_int8_t_float(i64 %ptr) { 2213; CHECK-LABEL: ld_not_disjoint32_int8_t_float: 2214; CHECK: # %bb.0: # %entry 2215; CHECK-NEXT: ori r3, r3, 34463 2216; CHECK-NEXT: oris r3, r3, 1 2217; CHECK-NEXT: lfs f0, 0(r3) 2218; CHECK-NEXT: xscvdpsxws f0, f0 2219; CHECK-NEXT: mffprwz r3, f0 2220; CHECK-NEXT: extsw r3, r3 2221; CHECK-NEXT: blr 2222entry: 2223 %or = or i64 %ptr, 99999 2224 %0 = inttoptr i64 %or to ptr 2225 %1 = load float, ptr %0, align 4 2226 %conv = fptosi float %1 to i8 2227 ret i8 %conv 2228} 2229 2230; Function Attrs: norecurse nounwind readonly uwtable willreturn 2231define dso_local signext i8 @ld_disjoint_align32_int8_t_float(i64 %ptr) { 2232; CHECK-P10-LABEL: ld_disjoint_align32_int8_t_float: 2233; CHECK-P10: # %bb.0: # %entry 2234; CHECK-P10-NEXT: lis r4, -15264 2235; CHECK-P10-NEXT: and r3, r3, r4 2236; CHECK-P10-NEXT: plfs f0, 999990000(r3), 0 2237; CHECK-P10-NEXT: xscvdpsxws f0, f0 2238; CHECK-P10-NEXT: mffprwz r3, f0 2239; CHECK-P10-NEXT: extsw r3, r3 2240; CHECK-P10-NEXT: blr 2241; 2242; CHECK-PREP10-LABEL: ld_disjoint_align32_int8_t_float: 2243; CHECK-PREP10: # %bb.0: # %entry 2244; CHECK-PREP10-NEXT: lis r4, -15264 2245; CHECK-PREP10-NEXT: and r3, r3, r4 2246; CHECK-PREP10-NEXT: lis r4, 15258 2247; CHECK-PREP10-NEXT: ori r4, r4, 41712 2248; CHECK-PREP10-NEXT: lfsx f0, r3, r4 2249; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2250; CHECK-PREP10-NEXT: mffprwz r3, f0 2251; CHECK-PREP10-NEXT: extsw r3, r3 2252; CHECK-PREP10-NEXT: blr 2253entry: 2254 %and = and i64 %ptr, -1000341504 2255 %or = or i64 %and, 999990000 2256 %0 = inttoptr i64 %or to ptr 2257 %1 = load float, ptr %0, align 16 2258 %conv = fptosi float %1 to i8 2259 ret i8 %conv 2260} 2261 2262; Function Attrs: norecurse nounwind readonly uwtable willreturn 2263define dso_local signext i8 @ld_not_disjoint64_int8_t_float(i64 %ptr) { 2264; CHECK-P10-LABEL: ld_not_disjoint64_int8_t_float: 2265; CHECK-P10: # %bb.0: # %entry 2266; CHECK-P10-NEXT: pli r4, 232 2267; CHECK-P10-NEXT: pli r5, 3567587329 2268; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2269; CHECK-P10-NEXT: or r3, r3, r5 2270; CHECK-P10-NEXT: lfs f0, 0(r3) 2271; CHECK-P10-NEXT: xscvdpsxws f0, f0 2272; CHECK-P10-NEXT: mffprwz r3, f0 2273; CHECK-P10-NEXT: extsw r3, r3 2274; CHECK-P10-NEXT: blr 2275; 2276; CHECK-PREP10-LABEL: ld_not_disjoint64_int8_t_float: 2277; CHECK-PREP10: # %bb.0: # %entry 2278; CHECK-PREP10-NEXT: li r4, 29 2279; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2280; CHECK-PREP10-NEXT: oris r4, r4, 54437 2281; CHECK-PREP10-NEXT: ori r4, r4, 4097 2282; CHECK-PREP10-NEXT: or r3, r3, r4 2283; CHECK-PREP10-NEXT: lfs f0, 0(r3) 2284; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2285; CHECK-PREP10-NEXT: mffprwz r3, f0 2286; CHECK-PREP10-NEXT: extsw r3, r3 2287; CHECK-PREP10-NEXT: blr 2288entry: 2289 %or = or i64 %ptr, 1000000000001 2290 %0 = inttoptr i64 %or to ptr 2291 %1 = load float, ptr %0, align 4 2292 %conv = fptosi float %1 to i8 2293 ret i8 %conv 2294} 2295 2296; Function Attrs: norecurse nounwind readonly uwtable willreturn 2297define dso_local signext i8 @ld_disjoint_align64_int8_t_float(i64 %ptr) { 2298; CHECK-P10-LABEL: ld_disjoint_align64_int8_t_float: 2299; CHECK-P10: # %bb.0: # %entry 2300; CHECK-P10-NEXT: pli r4, 244140625 2301; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2302; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2303; CHECK-P10-NEXT: lfsx f0, r3, r4 2304; CHECK-P10-NEXT: xscvdpsxws f0, f0 2305; CHECK-P10-NEXT: mffprwz r3, f0 2306; CHECK-P10-NEXT: extsw r3, r3 2307; CHECK-P10-NEXT: blr 2308; 2309; CHECK-PREP10-LABEL: ld_disjoint_align64_int8_t_float: 2310; CHECK-PREP10: # %bb.0: # %entry 2311; CHECK-PREP10-NEXT: lis r4, 3725 2312; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2313; CHECK-PREP10-NEXT: ori r4, r4, 19025 2314; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2315; CHECK-PREP10-NEXT: lfsx f0, r3, r4 2316; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2317; CHECK-PREP10-NEXT: mffprwz r3, f0 2318; CHECK-PREP10-NEXT: extsw r3, r3 2319; CHECK-PREP10-NEXT: blr 2320entry: 2321 %and = and i64 %ptr, -1099511627776 2322 %or = or i64 %and, 1000000000000 2323 %0 = inttoptr i64 %or to ptr 2324 %1 = load float, ptr %0, align 4096 2325 %conv = fptosi float %1 to i8 2326 ret i8 %conv 2327} 2328 2329; Function Attrs: norecurse nounwind readonly uwtable willreturn 2330define dso_local signext i8 @ld_cst_align16_int8_t_float() { 2331; CHECK-LABEL: ld_cst_align16_int8_t_float: 2332; CHECK: # %bb.0: # %entry 2333; CHECK-NEXT: lfs f0, 4080(0) 2334; CHECK-NEXT: xscvdpsxws f0, f0 2335; CHECK-NEXT: mffprwz r3, f0 2336; CHECK-NEXT: extsw r3, r3 2337; CHECK-NEXT: blr 2338entry: 2339 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 16 2340 %conv = fptosi float %0 to i8 2341 ret i8 %conv 2342} 2343 2344; Function Attrs: norecurse nounwind readonly uwtable willreturn 2345define dso_local signext i8 @ld_cst_align32_int8_t_float() { 2346; CHECK-LABEL: ld_cst_align32_int8_t_float: 2347; CHECK: # %bb.0: # %entry 2348; CHECK-NEXT: lis r3, 153 2349; CHECK-NEXT: lfs f0, -27108(r3) 2350; CHECK-NEXT: xscvdpsxws f0, f0 2351; CHECK-NEXT: mffprwz r3, f0 2352; CHECK-NEXT: extsw r3, r3 2353; CHECK-NEXT: blr 2354entry: 2355 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 4 2356 %conv = fptosi float %0 to i8 2357 ret i8 %conv 2358} 2359 2360; Function Attrs: norecurse nounwind readonly uwtable willreturn 2361define dso_local signext i8 @ld_cst_align64_int8_t_float() { 2362; CHECK-P10-LABEL: ld_cst_align64_int8_t_float: 2363; CHECK-P10: # %bb.0: # %entry 2364; CHECK-P10-NEXT: pli r3, 244140625 2365; CHECK-P10-NEXT: rldic r3, r3, 12, 24 2366; CHECK-P10-NEXT: lfs f0, 0(r3) 2367; CHECK-P10-NEXT: xscvdpsxws f0, f0 2368; CHECK-P10-NEXT: mffprwz r3, f0 2369; CHECK-P10-NEXT: extsw r3, r3 2370; CHECK-P10-NEXT: blr 2371; 2372; CHECK-PREP10-LABEL: ld_cst_align64_int8_t_float: 2373; CHECK-PREP10: # %bb.0: # %entry 2374; CHECK-PREP10-NEXT: lis r3, 3725 2375; CHECK-PREP10-NEXT: ori r3, r3, 19025 2376; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 2377; CHECK-PREP10-NEXT: lfs f0, 0(r3) 2378; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2379; CHECK-PREP10-NEXT: mffprwz r3, f0 2380; CHECK-PREP10-NEXT: extsw r3, r3 2381; CHECK-PREP10-NEXT: blr 2382entry: 2383 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 4096 2384 %conv = fptosi float %0 to i8 2385 ret i8 %conv 2386} 2387 2388; Function Attrs: norecurse nounwind readonly uwtable willreturn 2389define dso_local signext i8 @ld_0_int8_t_double(i64 %ptr) { 2390; CHECK-LABEL: ld_0_int8_t_double: 2391; CHECK: # %bb.0: # %entry 2392; CHECK-NEXT: lfd f0, 0(r3) 2393; CHECK-NEXT: xscvdpsxws f0, f0 2394; CHECK-NEXT: mffprwz r3, f0 2395; CHECK-NEXT: extsw r3, r3 2396; CHECK-NEXT: blr 2397entry: 2398 %0 = inttoptr i64 %ptr to ptr 2399 %1 = load double, ptr %0, align 8 2400 %conv = fptosi double %1 to i8 2401 ret i8 %conv 2402} 2403 2404; Function Attrs: norecurse nounwind readonly uwtable willreturn 2405define dso_local signext i8 @ld_align16_int8_t_double(ptr nocapture readonly %ptr) { 2406; CHECK-LABEL: ld_align16_int8_t_double: 2407; CHECK: # %bb.0: # %entry 2408; CHECK-NEXT: lfd f0, 8(r3) 2409; CHECK-NEXT: xscvdpsxws f0, f0 2410; CHECK-NEXT: mffprwz r3, f0 2411; CHECK-NEXT: extsw r3, r3 2412; CHECK-NEXT: blr 2413entry: 2414 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2415 %0 = load double, ptr %add.ptr, align 8 2416 %conv = fptosi double %0 to i8 2417 ret i8 %conv 2418} 2419 2420; Function Attrs: norecurse nounwind readonly uwtable willreturn 2421define dso_local signext i8 @ld_align32_int8_t_double(ptr nocapture readonly %ptr) { 2422; CHECK-P10-LABEL: ld_align32_int8_t_double: 2423; CHECK-P10: # %bb.0: # %entry 2424; CHECK-P10-NEXT: plfd f0, 99999000(r3), 0 2425; CHECK-P10-NEXT: xscvdpsxws f0, f0 2426; CHECK-P10-NEXT: mffprwz r3, f0 2427; CHECK-P10-NEXT: extsw r3, r3 2428; CHECK-P10-NEXT: blr 2429; 2430; CHECK-PREP10-LABEL: ld_align32_int8_t_double: 2431; CHECK-PREP10: # %bb.0: # %entry 2432; CHECK-PREP10-NEXT: lis r4, 1525 2433; CHECK-PREP10-NEXT: ori r4, r4, 56600 2434; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2435; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2436; CHECK-PREP10-NEXT: mffprwz r3, f0 2437; CHECK-PREP10-NEXT: extsw r3, r3 2438; CHECK-PREP10-NEXT: blr 2439entry: 2440 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2441 %0 = load double, ptr %add.ptr, align 8 2442 %conv = fptosi double %0 to i8 2443 ret i8 %conv 2444} 2445 2446; Function Attrs: norecurse nounwind readonly uwtable willreturn 2447define dso_local signext i8 @ld_align64_int8_t_double(ptr nocapture readonly %ptr) { 2448; CHECK-P10-LABEL: ld_align64_int8_t_double: 2449; CHECK-P10: # %bb.0: # %entry 2450; CHECK-P10-NEXT: pli r4, 244140625 2451; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2452; CHECK-P10-NEXT: lfdx f0, r3, r4 2453; CHECK-P10-NEXT: xscvdpsxws f0, f0 2454; CHECK-P10-NEXT: mffprwz r3, f0 2455; CHECK-P10-NEXT: extsw r3, r3 2456; CHECK-P10-NEXT: blr 2457; 2458; CHECK-PREP10-LABEL: ld_align64_int8_t_double: 2459; CHECK-PREP10: # %bb.0: # %entry 2460; CHECK-PREP10-NEXT: lis r4, 3725 2461; CHECK-PREP10-NEXT: ori r4, r4, 19025 2462; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2463; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2464; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2465; CHECK-PREP10-NEXT: mffprwz r3, f0 2466; CHECK-PREP10-NEXT: extsw r3, r3 2467; CHECK-PREP10-NEXT: blr 2468entry: 2469 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2470 %0 = load double, ptr %add.ptr, align 8 2471 %conv = fptosi double %0 to i8 2472 ret i8 %conv 2473} 2474 2475; Function Attrs: norecurse nounwind readonly uwtable willreturn 2476define dso_local signext i8 @ld_reg_int8_t_double(ptr nocapture readonly %ptr, i64 %off) { 2477; CHECK-LABEL: ld_reg_int8_t_double: 2478; CHECK: # %bb.0: # %entry 2479; CHECK-NEXT: lfdx f0, r3, r4 2480; CHECK-NEXT: xscvdpsxws f0, f0 2481; CHECK-NEXT: mffprwz r3, f0 2482; CHECK-NEXT: extsw r3, r3 2483; CHECK-NEXT: blr 2484entry: 2485 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2486 %0 = load double, ptr %add.ptr, align 8 2487 %conv = fptosi double %0 to i8 2488 ret i8 %conv 2489} 2490 2491; Function Attrs: norecurse nounwind readonly uwtable willreturn 2492define dso_local signext i8 @ld_or_int8_t_double(i64 %ptr, i8 zeroext %off) { 2493; CHECK-LABEL: ld_or_int8_t_double: 2494; CHECK: # %bb.0: # %entry 2495; CHECK-NEXT: or r3, r4, r3 2496; CHECK-NEXT: lfd f0, 0(r3) 2497; CHECK-NEXT: xscvdpsxws f0, f0 2498; CHECK-NEXT: mffprwz r3, f0 2499; CHECK-NEXT: extsw r3, r3 2500; CHECK-NEXT: blr 2501entry: 2502 %conv = zext i8 %off to i64 2503 %or = or i64 %conv, %ptr 2504 %0 = inttoptr i64 %or to ptr 2505 %1 = load double, ptr %0, align 8 2506 %conv1 = fptosi double %1 to i8 2507 ret i8 %conv1 2508} 2509 2510; Function Attrs: norecurse nounwind readonly uwtable willreturn 2511define dso_local signext i8 @ld_not_disjoint16_int8_t_double(i64 %ptr) { 2512; CHECK-LABEL: ld_not_disjoint16_int8_t_double: 2513; CHECK: # %bb.0: # %entry 2514; CHECK-NEXT: ori r3, r3, 6 2515; CHECK-NEXT: lfd f0, 0(r3) 2516; CHECK-NEXT: xscvdpsxws f0, f0 2517; CHECK-NEXT: mffprwz r3, f0 2518; CHECK-NEXT: extsw r3, r3 2519; CHECK-NEXT: blr 2520entry: 2521 %or = or i64 %ptr, 6 2522 %0 = inttoptr i64 %or to ptr 2523 %1 = load double, ptr %0, align 8 2524 %conv = fptosi double %1 to i8 2525 ret i8 %conv 2526} 2527 2528; Function Attrs: norecurse nounwind readonly uwtable willreturn 2529define dso_local signext i8 @ld_disjoint_align16_int8_t_double(i64 %ptr) { 2530; CHECK-LABEL: ld_disjoint_align16_int8_t_double: 2531; CHECK: # %bb.0: # %entry 2532; CHECK-NEXT: rldicr r3, r3, 0, 51 2533; CHECK-NEXT: lfd f0, 24(r3) 2534; CHECK-NEXT: xscvdpsxws f0, f0 2535; CHECK-NEXT: mffprwz r3, f0 2536; CHECK-NEXT: extsw r3, r3 2537; CHECK-NEXT: blr 2538entry: 2539 %and = and i64 %ptr, -4096 2540 %or = or i64 %and, 24 2541 %0 = inttoptr i64 %or to ptr 2542 %1 = load double, ptr %0, align 8 2543 %conv = fptosi double %1 to i8 2544 ret i8 %conv 2545} 2546 2547; Function Attrs: norecurse nounwind readonly uwtable willreturn 2548define dso_local signext i8 @ld_not_disjoint32_int8_t_double(i64 %ptr) { 2549; CHECK-LABEL: ld_not_disjoint32_int8_t_double: 2550; CHECK: # %bb.0: # %entry 2551; CHECK-NEXT: ori r3, r3, 34463 2552; CHECK-NEXT: oris r3, r3, 1 2553; CHECK-NEXT: lfd f0, 0(r3) 2554; CHECK-NEXT: xscvdpsxws f0, f0 2555; CHECK-NEXT: mffprwz r3, f0 2556; CHECK-NEXT: extsw r3, r3 2557; CHECK-NEXT: blr 2558entry: 2559 %or = or i64 %ptr, 99999 2560 %0 = inttoptr i64 %or to ptr 2561 %1 = load double, ptr %0, align 8 2562 %conv = fptosi double %1 to i8 2563 ret i8 %conv 2564} 2565 2566; Function Attrs: norecurse nounwind readonly uwtable willreturn 2567define dso_local signext i8 @ld_disjoint_align32_int8_t_double(i64 %ptr) { 2568; CHECK-P10-LABEL: ld_disjoint_align32_int8_t_double: 2569; CHECK-P10: # %bb.0: # %entry 2570; CHECK-P10-NEXT: lis r4, -15264 2571; CHECK-P10-NEXT: and r3, r3, r4 2572; CHECK-P10-NEXT: plfd f0, 999990000(r3), 0 2573; CHECK-P10-NEXT: xscvdpsxws f0, f0 2574; CHECK-P10-NEXT: mffprwz r3, f0 2575; CHECK-P10-NEXT: extsw r3, r3 2576; CHECK-P10-NEXT: blr 2577; 2578; CHECK-PREP10-LABEL: ld_disjoint_align32_int8_t_double: 2579; CHECK-PREP10: # %bb.0: # %entry 2580; CHECK-PREP10-NEXT: lis r4, -15264 2581; CHECK-PREP10-NEXT: and r3, r3, r4 2582; CHECK-PREP10-NEXT: lis r4, 15258 2583; CHECK-PREP10-NEXT: ori r4, r4, 41712 2584; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2585; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2586; CHECK-PREP10-NEXT: mffprwz r3, f0 2587; CHECK-PREP10-NEXT: extsw r3, r3 2588; CHECK-PREP10-NEXT: blr 2589entry: 2590 %and = and i64 %ptr, -1000341504 2591 %or = or i64 %and, 999990000 2592 %0 = inttoptr i64 %or to ptr 2593 %1 = load double, ptr %0, align 16 2594 %conv = fptosi double %1 to i8 2595 ret i8 %conv 2596} 2597 2598; Function Attrs: norecurse nounwind readonly uwtable willreturn 2599define dso_local signext i8 @ld_not_disjoint64_int8_t_double(i64 %ptr) { 2600; CHECK-P10-LABEL: ld_not_disjoint64_int8_t_double: 2601; CHECK-P10: # %bb.0: # %entry 2602; CHECK-P10-NEXT: pli r4, 232 2603; CHECK-P10-NEXT: pli r5, 3567587329 2604; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2605; CHECK-P10-NEXT: or r3, r3, r5 2606; CHECK-P10-NEXT: lfd f0, 0(r3) 2607; CHECK-P10-NEXT: xscvdpsxws f0, f0 2608; CHECK-P10-NEXT: mffprwz r3, f0 2609; CHECK-P10-NEXT: extsw r3, r3 2610; CHECK-P10-NEXT: blr 2611; 2612; CHECK-PREP10-LABEL: ld_not_disjoint64_int8_t_double: 2613; CHECK-PREP10: # %bb.0: # %entry 2614; CHECK-PREP10-NEXT: li r4, 29 2615; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2616; CHECK-PREP10-NEXT: oris r4, r4, 54437 2617; CHECK-PREP10-NEXT: ori r4, r4, 4097 2618; CHECK-PREP10-NEXT: or r3, r3, r4 2619; CHECK-PREP10-NEXT: lfd f0, 0(r3) 2620; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2621; CHECK-PREP10-NEXT: mffprwz r3, f0 2622; CHECK-PREP10-NEXT: extsw r3, r3 2623; CHECK-PREP10-NEXT: blr 2624entry: 2625 %or = or i64 %ptr, 1000000000001 2626 %0 = inttoptr i64 %or to ptr 2627 %1 = load double, ptr %0, align 8 2628 %conv = fptosi double %1 to i8 2629 ret i8 %conv 2630} 2631 2632; Function Attrs: norecurse nounwind readonly uwtable willreturn 2633define dso_local signext i8 @ld_disjoint_align64_int8_t_double(i64 %ptr) { 2634; CHECK-P10-LABEL: ld_disjoint_align64_int8_t_double: 2635; CHECK-P10: # %bb.0: # %entry 2636; CHECK-P10-NEXT: pli r4, 244140625 2637; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2638; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2639; CHECK-P10-NEXT: lfdx f0, r3, r4 2640; CHECK-P10-NEXT: xscvdpsxws f0, f0 2641; CHECK-P10-NEXT: mffprwz r3, f0 2642; CHECK-P10-NEXT: extsw r3, r3 2643; CHECK-P10-NEXT: blr 2644; 2645; CHECK-PREP10-LABEL: ld_disjoint_align64_int8_t_double: 2646; CHECK-PREP10: # %bb.0: # %entry 2647; CHECK-PREP10-NEXT: lis r4, 3725 2648; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2649; CHECK-PREP10-NEXT: ori r4, r4, 19025 2650; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2651; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2652; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2653; CHECK-PREP10-NEXT: mffprwz r3, f0 2654; CHECK-PREP10-NEXT: extsw r3, r3 2655; CHECK-PREP10-NEXT: blr 2656entry: 2657 %and = and i64 %ptr, -1099511627776 2658 %or = or i64 %and, 1000000000000 2659 %0 = inttoptr i64 %or to ptr 2660 %1 = load double, ptr %0, align 4096 2661 %conv = fptosi double %1 to i8 2662 ret i8 %conv 2663} 2664 2665; Function Attrs: norecurse nounwind readonly uwtable willreturn 2666define dso_local signext i8 @ld_cst_align16_int8_t_double() { 2667; CHECK-LABEL: ld_cst_align16_int8_t_double: 2668; CHECK: # %bb.0: # %entry 2669; CHECK-NEXT: lfd f0, 4080(0) 2670; CHECK-NEXT: xscvdpsxws f0, f0 2671; CHECK-NEXT: mffprwz r3, f0 2672; CHECK-NEXT: extsw r3, r3 2673; CHECK-NEXT: blr 2674entry: 2675 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 16 2676 %conv = fptosi double %0 to i8 2677 ret i8 %conv 2678} 2679 2680; Function Attrs: norecurse nounwind readonly uwtable willreturn 2681define dso_local signext i8 @ld_cst_align32_int8_t_double() { 2682; CHECK-LABEL: ld_cst_align32_int8_t_double: 2683; CHECK: # %bb.0: # %entry 2684; CHECK-NEXT: lis r3, 153 2685; CHECK-NEXT: lfd f0, -27108(r3) 2686; CHECK-NEXT: xscvdpsxws f0, f0 2687; CHECK-NEXT: mffprwz r3, f0 2688; CHECK-NEXT: extsw r3, r3 2689; CHECK-NEXT: blr 2690entry: 2691 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 8 2692 %conv = fptosi double %0 to i8 2693 ret i8 %conv 2694} 2695 2696; Function Attrs: norecurse nounwind readonly uwtable willreturn 2697define dso_local signext i8 @ld_cst_align64_int8_t_double() { 2698; CHECK-P10-LABEL: ld_cst_align64_int8_t_double: 2699; CHECK-P10: # %bb.0: # %entry 2700; CHECK-P10-NEXT: pli r3, 244140625 2701; CHECK-P10-NEXT: rldic r3, r3, 12, 24 2702; CHECK-P10-NEXT: lfd f0, 0(r3) 2703; CHECK-P10-NEXT: xscvdpsxws f0, f0 2704; CHECK-P10-NEXT: mffprwz r3, f0 2705; CHECK-P10-NEXT: extsw r3, r3 2706; CHECK-P10-NEXT: blr 2707; 2708; CHECK-PREP10-LABEL: ld_cst_align64_int8_t_double: 2709; CHECK-PREP10: # %bb.0: # %entry 2710; CHECK-PREP10-NEXT: lis r3, 3725 2711; CHECK-PREP10-NEXT: ori r3, r3, 19025 2712; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 2713; CHECK-PREP10-NEXT: lfd f0, 0(r3) 2714; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2715; CHECK-PREP10-NEXT: mffprwz r3, f0 2716; CHECK-PREP10-NEXT: extsw r3, r3 2717; CHECK-PREP10-NEXT: blr 2718entry: 2719 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 4096 2720 %conv = fptosi double %0 to i8 2721 ret i8 %conv 2722} 2723 2724; Function Attrs: norecurse nounwind readonly uwtable willreturn 2725define dso_local zeroext i8 @ld_0_uint8_t_uint8_t(i64 %ptr) { 2726; CHECK-LABEL: ld_0_uint8_t_uint8_t: 2727; CHECK: # %bb.0: # %entry 2728; CHECK-NEXT: lbz r3, 0(r3) 2729; CHECK-NEXT: blr 2730entry: 2731 %0 = inttoptr i64 %ptr to ptr 2732 %1 = load i8, ptr %0, align 1 2733 ret i8 %1 2734} 2735 2736; Function Attrs: norecurse nounwind readonly uwtable willreturn 2737define dso_local zeroext i8 @ld_align16_uint8_t_uint8_t(ptr nocapture readonly %ptr) { 2738; CHECK-LABEL: ld_align16_uint8_t_uint8_t: 2739; CHECK: # %bb.0: # %entry 2740; CHECK-NEXT: lbz r3, 8(r3) 2741; CHECK-NEXT: blr 2742entry: 2743 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2744 %0 = load i8, ptr %add.ptr, align 1 2745 ret i8 %0 2746} 2747 2748; Function Attrs: norecurse nounwind readonly uwtable willreturn 2749define dso_local zeroext i8 @ld_align32_uint8_t_uint8_t(ptr nocapture readonly %ptr) { 2750; CHECK-P10-LABEL: ld_align32_uint8_t_uint8_t: 2751; CHECK-P10: # %bb.0: # %entry 2752; CHECK-P10-NEXT: plbz r3, 99999000(r3), 0 2753; CHECK-P10-NEXT: blr 2754; 2755; CHECK-PREP10-LABEL: ld_align32_uint8_t_uint8_t: 2756; CHECK-PREP10: # %bb.0: # %entry 2757; CHECK-PREP10-NEXT: lis r4, 1525 2758; CHECK-PREP10-NEXT: ori r4, r4, 56600 2759; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2760; CHECK-PREP10-NEXT: blr 2761entry: 2762 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2763 %0 = load i8, ptr %add.ptr, align 1 2764 ret i8 %0 2765} 2766 2767; Function Attrs: norecurse nounwind readonly uwtable willreturn 2768define dso_local zeroext i8 @ld_unalign64_uint8_t_uint8_t(ptr nocapture readonly %ptr) { 2769; CHECK-P10-LABEL: ld_unalign64_uint8_t_uint8_t: 2770; CHECK-P10: # %bb.0: # %entry 2771; CHECK-P10-NEXT: pli r4, 232 2772; CHECK-P10-NEXT: pli r5, 3567587329 2773; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2774; CHECK-P10-NEXT: lbzx r3, r3, r5 2775; CHECK-P10-NEXT: blr 2776; 2777; CHECK-PREP10-LABEL: ld_unalign64_uint8_t_uint8_t: 2778; CHECK-PREP10: # %bb.0: # %entry 2779; CHECK-PREP10-NEXT: li r4, 29 2780; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2781; CHECK-PREP10-NEXT: oris r4, r4, 54437 2782; CHECK-PREP10-NEXT: ori r4, r4, 4097 2783; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2784; CHECK-PREP10-NEXT: blr 2785entry: 2786 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001 2787 %0 = load i8, ptr %add.ptr, align 1 2788 ret i8 %0 2789} 2790 2791; Function Attrs: norecurse nounwind readonly uwtable willreturn 2792define dso_local zeroext i8 @ld_align64_uint8_t_uint8_t(ptr nocapture readonly %ptr) { 2793; CHECK-P10-LABEL: ld_align64_uint8_t_uint8_t: 2794; CHECK-P10: # %bb.0: # %entry 2795; CHECK-P10-NEXT: pli r4, 244140625 2796; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2797; CHECK-P10-NEXT: lbzx r3, r3, r4 2798; CHECK-P10-NEXT: blr 2799; 2800; CHECK-PREP10-LABEL: ld_align64_uint8_t_uint8_t: 2801; CHECK-PREP10: # %bb.0: # %entry 2802; CHECK-PREP10-NEXT: lis r4, 3725 2803; CHECK-PREP10-NEXT: ori r4, r4, 19025 2804; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2805; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2806; CHECK-PREP10-NEXT: blr 2807entry: 2808 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2809 %0 = load i8, ptr %add.ptr, align 1 2810 ret i8 %0 2811} 2812 2813; Function Attrs: norecurse nounwind readonly uwtable willreturn 2814define dso_local zeroext i8 @ld_reg_uint8_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) { 2815; CHECK-LABEL: ld_reg_uint8_t_uint8_t: 2816; CHECK: # %bb.0: # %entry 2817; CHECK-NEXT: lbzx r3, r3, r4 2818; CHECK-NEXT: blr 2819entry: 2820 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2821 %0 = load i8, ptr %add.ptr, align 1 2822 ret i8 %0 2823} 2824 2825; Function Attrs: norecurse nounwind readonly uwtable willreturn 2826define dso_local zeroext i8 @ld_or_uint8_t_uint8_t(i64 %ptr, i8 zeroext %off) { 2827; CHECK-LABEL: ld_or_uint8_t_uint8_t: 2828; CHECK: # %bb.0: # %entry 2829; CHECK-NEXT: or r3, r4, r3 2830; CHECK-NEXT: lbz r3, 0(r3) 2831; CHECK-NEXT: blr 2832entry: 2833 %conv = zext i8 %off to i64 2834 %or = or i64 %conv, %ptr 2835 %0 = inttoptr i64 %or to ptr 2836 %1 = load i8, ptr %0, align 1 2837 ret i8 %1 2838} 2839 2840; Function Attrs: norecurse nounwind readonly uwtable willreturn 2841define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_uint8_t(i64 %ptr) { 2842; CHECK-LABEL: ld_not_disjoint16_uint8_t_uint8_t: 2843; CHECK: # %bb.0: # %entry 2844; CHECK-NEXT: ori r3, r3, 6 2845; CHECK-NEXT: lbz r3, 0(r3) 2846; CHECK-NEXT: blr 2847entry: 2848 %or = or i64 %ptr, 6 2849 %0 = inttoptr i64 %or to ptr 2850 %1 = load i8, ptr %0, align 1 2851 ret i8 %1 2852} 2853 2854; Function Attrs: norecurse nounwind readonly uwtable willreturn 2855define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_uint8_t(i64 %ptr) { 2856; CHECK-LABEL: ld_disjoint_align16_uint8_t_uint8_t: 2857; CHECK: # %bb.0: # %entry 2858; CHECK-NEXT: rldicr r3, r3, 0, 51 2859; CHECK-NEXT: lbz r3, 24(r3) 2860; CHECK-NEXT: blr 2861entry: 2862 %and = and i64 %ptr, -4096 2863 %or = or i64 %and, 24 2864 %0 = inttoptr i64 %or to ptr 2865 %1 = load i8, ptr %0, align 8 2866 ret i8 %1 2867} 2868 2869; Function Attrs: norecurse nounwind readonly uwtable willreturn 2870define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_uint8_t(i64 %ptr) { 2871; CHECK-LABEL: ld_not_disjoint32_uint8_t_uint8_t: 2872; CHECK: # %bb.0: # %entry 2873; CHECK-NEXT: ori r3, r3, 34463 2874; CHECK-NEXT: oris r3, r3, 1 2875; CHECK-NEXT: lbz r3, 0(r3) 2876; CHECK-NEXT: blr 2877entry: 2878 %or = or i64 %ptr, 99999 2879 %0 = inttoptr i64 %or to ptr 2880 %1 = load i8, ptr %0, align 1 2881 ret i8 %1 2882} 2883 2884; Function Attrs: norecurse nounwind readonly uwtable willreturn 2885define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_uint8_t(i64 %ptr) { 2886; CHECK-P10-LABEL: ld_disjoint_align32_uint8_t_uint8_t: 2887; CHECK-P10: # %bb.0: # %entry 2888; CHECK-P10-NEXT: lis r4, -15264 2889; CHECK-P10-NEXT: and r3, r3, r4 2890; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0 2891; CHECK-P10-NEXT: blr 2892; 2893; CHECK-PREP10-LABEL: ld_disjoint_align32_uint8_t_uint8_t: 2894; CHECK-PREP10: # %bb.0: # %entry 2895; CHECK-PREP10-NEXT: lis r4, -15264 2896; CHECK-PREP10-NEXT: and r3, r3, r4 2897; CHECK-PREP10-NEXT: lis r4, 15258 2898; CHECK-PREP10-NEXT: ori r4, r4, 41712 2899; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2900; CHECK-PREP10-NEXT: blr 2901entry: 2902 %and = and i64 %ptr, -1000341504 2903 %or = or i64 %and, 999990000 2904 %0 = inttoptr i64 %or to ptr 2905 %1 = load i8, ptr %0, align 16 2906 ret i8 %1 2907} 2908 2909; Function Attrs: norecurse nounwind readonly uwtable willreturn 2910define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_uint8_t(i64 %ptr) { 2911; CHECK-P10-LABEL: ld_not_disjoint64_uint8_t_uint8_t: 2912; CHECK-P10: # %bb.0: # %entry 2913; CHECK-P10-NEXT: pli r4, 232 2914; CHECK-P10-NEXT: pli r5, 3567587329 2915; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2916; CHECK-P10-NEXT: or r3, r3, r5 2917; CHECK-P10-NEXT: lbz r3, 0(r3) 2918; CHECK-P10-NEXT: blr 2919; 2920; CHECK-PREP10-LABEL: ld_not_disjoint64_uint8_t_uint8_t: 2921; CHECK-PREP10: # %bb.0: # %entry 2922; CHECK-PREP10-NEXT: li r4, 29 2923; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2924; CHECK-PREP10-NEXT: oris r4, r4, 54437 2925; CHECK-PREP10-NEXT: ori r4, r4, 4097 2926; CHECK-PREP10-NEXT: or r3, r3, r4 2927; CHECK-PREP10-NEXT: lbz r3, 0(r3) 2928; CHECK-PREP10-NEXT: blr 2929entry: 2930 %or = or i64 %ptr, 1000000000001 2931 %0 = inttoptr i64 %or to ptr 2932 %1 = load i8, ptr %0, align 1 2933 ret i8 %1 2934} 2935 2936; Function Attrs: norecurse nounwind readonly uwtable willreturn 2937define dso_local zeroext i8 @ld_disjoint_unalign64_uint8_t_uint8_t(i64 %ptr) { 2938; CHECK-P10-LABEL: ld_disjoint_unalign64_uint8_t_uint8_t: 2939; CHECK-P10: # %bb.0: # %entry 2940; CHECK-P10-NEXT: pli r4, 232 2941; CHECK-P10-NEXT: pli r5, 3567587329 2942; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2943; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2944; CHECK-P10-NEXT: lbzx r3, r3, r5 2945; CHECK-P10-NEXT: blr 2946; 2947; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint8_t_uint8_t: 2948; CHECK-PREP10: # %bb.0: # %entry 2949; CHECK-PREP10-NEXT: li r4, 29 2950; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2951; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2952; CHECK-PREP10-NEXT: oris r4, r4, 54437 2953; CHECK-PREP10-NEXT: ori r4, r4, 4097 2954; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2955; CHECK-PREP10-NEXT: blr 2956entry: 2957 %and = and i64 %ptr, -1099511627776 2958 %or = or i64 %and, 1000000000001 2959 %0 = inttoptr i64 %or to ptr 2960 %1 = load i8, ptr %0, align 1 2961 ret i8 %1 2962} 2963 2964; Function Attrs: norecurse nounwind readonly uwtable willreturn 2965define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_uint8_t(i64 %ptr) { 2966; CHECK-P10-LABEL: ld_disjoint_align64_uint8_t_uint8_t: 2967; CHECK-P10: # %bb.0: # %entry 2968; CHECK-P10-NEXT: pli r4, 244140625 2969; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2970; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2971; CHECK-P10-NEXT: lbzx r3, r3, r4 2972; CHECK-P10-NEXT: blr 2973; 2974; CHECK-PREP10-LABEL: ld_disjoint_align64_uint8_t_uint8_t: 2975; CHECK-PREP10: # %bb.0: # %entry 2976; CHECK-PREP10-NEXT: lis r4, 3725 2977; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2978; CHECK-PREP10-NEXT: ori r4, r4, 19025 2979; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2980; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2981; CHECK-PREP10-NEXT: blr 2982entry: 2983 %and = and i64 %ptr, -1099511627776 2984 %or = or i64 %and, 1000000000000 2985 %0 = inttoptr i64 %or to ptr 2986 %1 = load i8, ptr %0, align 4096 2987 ret i8 %1 2988} 2989 2990; Function Attrs: norecurse nounwind readonly uwtable willreturn 2991define dso_local zeroext i8 @ld_cst_align16_uint8_t_uint8_t() { 2992; CHECK-LABEL: ld_cst_align16_uint8_t_uint8_t: 2993; CHECK: # %bb.0: # %entry 2994; CHECK-NEXT: lbz r3, 4080(0) 2995; CHECK-NEXT: blr 2996entry: 2997 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16 2998 ret i8 %0 2999} 3000 3001; Function Attrs: norecurse nounwind readonly uwtable willreturn 3002define dso_local zeroext i8 @ld_cst_align32_uint8_t_uint8_t() { 3003; CHECK-LABEL: ld_cst_align32_uint8_t_uint8_t: 3004; CHECK: # %bb.0: # %entry 3005; CHECK-NEXT: lis r3, 153 3006; CHECK-NEXT: lbz r3, -27108(r3) 3007; CHECK-NEXT: blr 3008entry: 3009 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4 3010 ret i8 %0 3011} 3012 3013; Function Attrs: norecurse nounwind readonly uwtable willreturn 3014define dso_local zeroext i8 @ld_cst_unalign64_uint8_t_uint8_t() { 3015; CHECK-P10-LABEL: ld_cst_unalign64_uint8_t_uint8_t: 3016; CHECK-P10: # %bb.0: # %entry 3017; CHECK-P10-NEXT: pli r3, 232 3018; CHECK-P10-NEXT: pli r4, 3567587329 3019; CHECK-P10-NEXT: rldimi r4, r3, 32, 0 3020; CHECK-P10-NEXT: lbz r3, 0(r4) 3021; CHECK-P10-NEXT: blr 3022; 3023; CHECK-PREP10-LABEL: ld_cst_unalign64_uint8_t_uint8_t: 3024; CHECK-PREP10: # %bb.0: # %entry 3025; CHECK-PREP10-NEXT: li r3, 29 3026; CHECK-PREP10-NEXT: rldic r3, r3, 35, 24 3027; CHECK-PREP10-NEXT: oris r3, r3, 54437 3028; CHECK-PREP10-NEXT: ori r3, r3, 4097 3029; CHECK-PREP10-NEXT: lbz r3, 0(r3) 3030; CHECK-PREP10-NEXT: blr 3031entry: 3032 %0 = load i8, ptr inttoptr (i64 1000000000001 to ptr), align 1 3033 ret i8 %0 3034} 3035 3036; Function Attrs: norecurse nounwind readonly uwtable willreturn 3037define dso_local zeroext i8 @ld_cst_align64_uint8_t_uint8_t() { 3038; CHECK-P10-LABEL: ld_cst_align64_uint8_t_uint8_t: 3039; CHECK-P10: # %bb.0: # %entry 3040; CHECK-P10-NEXT: pli r3, 244140625 3041; CHECK-P10-NEXT: rldic r3, r3, 12, 24 3042; CHECK-P10-NEXT: lbz r3, 0(r3) 3043; CHECK-P10-NEXT: blr 3044; 3045; CHECK-PREP10-LABEL: ld_cst_align64_uint8_t_uint8_t: 3046; CHECK-PREP10: # %bb.0: # %entry 3047; CHECK-PREP10-NEXT: lis r3, 3725 3048; CHECK-PREP10-NEXT: ori r3, r3, 19025 3049; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 3050; CHECK-PREP10-NEXT: lbz r3, 0(r3) 3051; CHECK-PREP10-NEXT: blr 3052entry: 3053 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096 3054 ret i8 %0 3055} 3056 3057; Function Attrs: norecurse nounwind readonly uwtable willreturn 3058define dso_local zeroext i8 @ld_0_uint8_t_uint16_t(i64 %ptr) { 3059; CHECK-LE-LABEL: ld_0_uint8_t_uint16_t: 3060; CHECK-LE: # %bb.0: # %entry 3061; CHECK-LE-NEXT: lbz r3, 0(r3) 3062; CHECK-LE-NEXT: blr 3063; 3064; CHECK-BE-LABEL: ld_0_uint8_t_uint16_t: 3065; CHECK-BE: # %bb.0: # %entry 3066; CHECK-BE-NEXT: lbz r3, 1(r3) 3067; CHECK-BE-NEXT: blr 3068entry: 3069 %0 = inttoptr i64 %ptr to ptr 3070 %1 = load i16, ptr %0, align 2 3071 %conv = trunc i16 %1 to i8 3072 ret i8 %conv 3073} 3074 3075; Function Attrs: norecurse nounwind readonly uwtable willreturn 3076define dso_local zeroext i8 @ld_align16_uint8_t_uint16_t(ptr nocapture readonly %ptr) { 3077; CHECK-LE-LABEL: ld_align16_uint8_t_uint16_t: 3078; CHECK-LE: # %bb.0: # %entry 3079; CHECK-LE-NEXT: lbz r3, 8(r3) 3080; CHECK-LE-NEXT: blr 3081; 3082; CHECK-BE-LABEL: ld_align16_uint8_t_uint16_t: 3083; CHECK-BE: # %bb.0: # %entry 3084; CHECK-BE-NEXT: lbz r3, 9(r3) 3085; CHECK-BE-NEXT: blr 3086entry: 3087 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 3088 %0 = load i16, ptr %add.ptr, align 2 3089 %conv = trunc i16 %0 to i8 3090 ret i8 %conv 3091} 3092 3093; Function Attrs: norecurse nounwind readonly uwtable willreturn 3094define dso_local zeroext i8 @ld_align32_uint8_t_uint16_t(ptr nocapture readonly %ptr) { 3095; CHECK-P10-LE-LABEL: ld_align32_uint8_t_uint16_t: 3096; CHECK-P10-LE: # %bb.0: # %entry 3097; CHECK-P10-LE-NEXT: plbz r3, 99999000(r3), 0 3098; CHECK-P10-LE-NEXT: blr 3099; 3100; CHECK-P10-BE-LABEL: ld_align32_uint8_t_uint16_t: 3101; CHECK-P10-BE: # %bb.0: # %entry 3102; CHECK-P10-BE-NEXT: plbz r3, 99999001(r3), 0 3103; CHECK-P10-BE-NEXT: blr 3104; 3105; CHECK-P9-LE-LABEL: ld_align32_uint8_t_uint16_t: 3106; CHECK-P9-LE: # %bb.0: # %entry 3107; CHECK-P9-LE-NEXT: lis r4, 1525 3108; CHECK-P9-LE-NEXT: ori r4, r4, 56600 3109; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3110; CHECK-P9-LE-NEXT: blr 3111; 3112; CHECK-P9-BE-LABEL: ld_align32_uint8_t_uint16_t: 3113; CHECK-P9-BE: # %bb.0: # %entry 3114; CHECK-P9-BE-NEXT: lis r4, 1525 3115; CHECK-P9-BE-NEXT: ori r4, r4, 56601 3116; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3117; CHECK-P9-BE-NEXT: blr 3118; 3119; CHECK-P8-LE-LABEL: ld_align32_uint8_t_uint16_t: 3120; CHECK-P8-LE: # %bb.0: # %entry 3121; CHECK-P8-LE-NEXT: lis r4, 1525 3122; CHECK-P8-LE-NEXT: ori r4, r4, 56600 3123; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3124; CHECK-P8-LE-NEXT: blr 3125; 3126; CHECK-P8-BE-LABEL: ld_align32_uint8_t_uint16_t: 3127; CHECK-P8-BE: # %bb.0: # %entry 3128; CHECK-P8-BE-NEXT: lis r4, 1525 3129; CHECK-P8-BE-NEXT: ori r4, r4, 56601 3130; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3131; CHECK-P8-BE-NEXT: blr 3132entry: 3133 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 3134 %0 = load i16, ptr %add.ptr, align 2 3135 %conv = trunc i16 %0 to i8 3136 ret i8 %conv 3137} 3138 3139; Function Attrs: norecurse nounwind readonly uwtable willreturn 3140define dso_local zeroext i8 @ld_unalign64_uint8_t_uint16_t(ptr nocapture readonly %ptr) { 3141; CHECK-P10-LE-LABEL: ld_unalign64_uint8_t_uint16_t: 3142; CHECK-P10-LE: # %bb.0: # %entry 3143; CHECK-P10-LE-NEXT: pli r4, 232 3144; CHECK-P10-LE-NEXT: pli r5, 3567587329 3145; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 3146; CHECK-P10-LE-NEXT: lbzx r3, r3, r5 3147; CHECK-P10-LE-NEXT: blr 3148; 3149; CHECK-P10-BE-LABEL: ld_unalign64_uint8_t_uint16_t: 3150; CHECK-P10-BE: # %bb.0: # %entry 3151; CHECK-P10-BE-NEXT: pli r4, 232 3152; CHECK-P10-BE-NEXT: pli r5, 3567587330 3153; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3154; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 3155; CHECK-P10-BE-NEXT: blr 3156; 3157; CHECK-P9-LE-LABEL: ld_unalign64_uint8_t_uint16_t: 3158; CHECK-P9-LE: # %bb.0: # %entry 3159; CHECK-P9-LE-NEXT: li r4, 29 3160; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 3161; CHECK-P9-LE-NEXT: oris r4, r4, 54437 3162; CHECK-P9-LE-NEXT: ori r4, r4, 4097 3163; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3164; CHECK-P9-LE-NEXT: blr 3165; 3166; CHECK-P9-BE-LABEL: ld_unalign64_uint8_t_uint16_t: 3167; CHECK-P9-BE: # %bb.0: # %entry 3168; CHECK-P9-BE-NEXT: li r4, 29 3169; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3170; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3171; CHECK-P9-BE-NEXT: ori r4, r4, 4098 3172; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3173; CHECK-P9-BE-NEXT: blr 3174; 3175; CHECK-P8-LE-LABEL: ld_unalign64_uint8_t_uint16_t: 3176; CHECK-P8-LE: # %bb.0: # %entry 3177; CHECK-P8-LE-NEXT: li r4, 29 3178; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 3179; CHECK-P8-LE-NEXT: oris r4, r4, 54437 3180; CHECK-P8-LE-NEXT: ori r4, r4, 4097 3181; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3182; CHECK-P8-LE-NEXT: blr 3183; 3184; CHECK-P8-BE-LABEL: ld_unalign64_uint8_t_uint16_t: 3185; CHECK-P8-BE: # %bb.0: # %entry 3186; CHECK-P8-BE-NEXT: li r4, 29 3187; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3188; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3189; CHECK-P8-BE-NEXT: ori r4, r4, 4098 3190; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3191; CHECK-P8-BE-NEXT: blr 3192entry: 3193 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001 3194 %0 = load i16, ptr %add.ptr, align 2 3195 %conv = trunc i16 %0 to i8 3196 ret i8 %conv 3197} 3198 3199; Function Attrs: norecurse nounwind readonly uwtable willreturn 3200define dso_local zeroext i8 @ld_align64_uint8_t_uint16_t(ptr nocapture readonly %ptr) { 3201; CHECK-P10-LE-LABEL: ld_align64_uint8_t_uint16_t: 3202; CHECK-P10-LE: # %bb.0: # %entry 3203; CHECK-P10-LE-NEXT: pli r4, 244140625 3204; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 3205; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 3206; CHECK-P10-LE-NEXT: blr 3207; 3208; CHECK-P10-BE-LABEL: ld_align64_uint8_t_uint16_t: 3209; CHECK-P10-BE: # %bb.0: # %entry 3210; CHECK-P10-BE-NEXT: pli r4, 232 3211; CHECK-P10-BE-NEXT: pli r5, 3567587329 3212; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3213; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 3214; CHECK-P10-BE-NEXT: blr 3215; 3216; CHECK-P9-LE-LABEL: ld_align64_uint8_t_uint16_t: 3217; CHECK-P9-LE: # %bb.0: # %entry 3218; CHECK-P9-LE-NEXT: lis r4, 3725 3219; CHECK-P9-LE-NEXT: ori r4, r4, 19025 3220; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 3221; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3222; CHECK-P9-LE-NEXT: blr 3223; 3224; CHECK-P9-BE-LABEL: ld_align64_uint8_t_uint16_t: 3225; CHECK-P9-BE: # %bb.0: # %entry 3226; CHECK-P9-BE-NEXT: li r4, 29 3227; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3228; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3229; CHECK-P9-BE-NEXT: ori r4, r4, 4097 3230; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3231; CHECK-P9-BE-NEXT: blr 3232; 3233; CHECK-P8-LE-LABEL: ld_align64_uint8_t_uint16_t: 3234; CHECK-P8-LE: # %bb.0: # %entry 3235; CHECK-P8-LE-NEXT: lis r4, 3725 3236; CHECK-P8-LE-NEXT: ori r4, r4, 19025 3237; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 3238; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3239; CHECK-P8-LE-NEXT: blr 3240; 3241; CHECK-P8-BE-LABEL: ld_align64_uint8_t_uint16_t: 3242; CHECK-P8-BE: # %bb.0: # %entry 3243; CHECK-P8-BE-NEXT: li r4, 29 3244; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3245; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3246; CHECK-P8-BE-NEXT: ori r4, r4, 4097 3247; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3248; CHECK-P8-BE-NEXT: blr 3249entry: 3250 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 3251 %0 = load i16, ptr %add.ptr, align 2 3252 %conv = trunc i16 %0 to i8 3253 ret i8 %conv 3254} 3255 3256; Function Attrs: norecurse nounwind readonly uwtable willreturn 3257define dso_local zeroext i8 @ld_reg_uint8_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) { 3258; CHECK-LE-LABEL: ld_reg_uint8_t_uint16_t: 3259; CHECK-LE: # %bb.0: # %entry 3260; CHECK-LE-NEXT: lbzx r3, r3, r4 3261; CHECK-LE-NEXT: blr 3262; 3263; CHECK-BE-LABEL: ld_reg_uint8_t_uint16_t: 3264; CHECK-BE: # %bb.0: # %entry 3265; CHECK-BE-NEXT: add r3, r3, r4 3266; CHECK-BE-NEXT: lbz r3, 1(r3) 3267; CHECK-BE-NEXT: blr 3268entry: 3269 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 3270 %0 = load i16, ptr %add.ptr, align 2 3271 %conv = trunc i16 %0 to i8 3272 ret i8 %conv 3273} 3274 3275; Function Attrs: norecurse nounwind readonly uwtable willreturn 3276define dso_local zeroext i8 @ld_or_uint8_t_uint16_t(i64 %ptr, i8 zeroext %off) { 3277; CHECK-LE-LABEL: ld_or_uint8_t_uint16_t: 3278; CHECK-LE: # %bb.0: # %entry 3279; CHECK-LE-NEXT: or r3, r4, r3 3280; CHECK-LE-NEXT: lbz r3, 0(r3) 3281; CHECK-LE-NEXT: blr 3282; 3283; CHECK-BE-LABEL: ld_or_uint8_t_uint16_t: 3284; CHECK-BE: # %bb.0: # %entry 3285; CHECK-BE-NEXT: or r3, r4, r3 3286; CHECK-BE-NEXT: lbz r3, 1(r3) 3287; CHECK-BE-NEXT: blr 3288entry: 3289 %conv = zext i8 %off to i64 3290 %or = or i64 %conv, %ptr 3291 %0 = inttoptr i64 %or to ptr 3292 %1 = load i16, ptr %0, align 2 3293 %conv1 = trunc i16 %1 to i8 3294 ret i8 %conv1 3295} 3296 3297; Function Attrs: norecurse nounwind readonly uwtable willreturn 3298define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_uint16_t(i64 %ptr) { 3299; CHECK-LE-LABEL: ld_not_disjoint16_uint8_t_uint16_t: 3300; CHECK-LE: # %bb.0: # %entry 3301; CHECK-LE-NEXT: ori r3, r3, 6 3302; CHECK-LE-NEXT: lbz r3, 0(r3) 3303; CHECK-LE-NEXT: blr 3304; 3305; CHECK-BE-LABEL: ld_not_disjoint16_uint8_t_uint16_t: 3306; CHECK-BE: # %bb.0: # %entry 3307; CHECK-BE-NEXT: ori r3, r3, 6 3308; CHECK-BE-NEXT: lbz r3, 1(r3) 3309; CHECK-BE-NEXT: blr 3310entry: 3311 %or = or i64 %ptr, 6 3312 %0 = inttoptr i64 %or to ptr 3313 %1 = load i16, ptr %0, align 2 3314 %conv = trunc i16 %1 to i8 3315 ret i8 %conv 3316} 3317 3318; Function Attrs: norecurse nounwind readonly uwtable willreturn 3319define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_uint16_t(i64 %ptr) { 3320; CHECK-LE-LABEL: ld_disjoint_align16_uint8_t_uint16_t: 3321; CHECK-LE: # %bb.0: # %entry 3322; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 3323; CHECK-LE-NEXT: lbz r3, 24(r3) 3324; CHECK-LE-NEXT: blr 3325; 3326; CHECK-BE-LABEL: ld_disjoint_align16_uint8_t_uint16_t: 3327; CHECK-BE: # %bb.0: # %entry 3328; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 3329; CHECK-BE-NEXT: lbz r3, 25(r3) 3330; CHECK-BE-NEXT: blr 3331entry: 3332 %and = and i64 %ptr, -4096 3333 %or = or i64 %and, 24 3334 %0 = inttoptr i64 %or to ptr 3335 %1 = load i16, ptr %0, align 8 3336 %conv = trunc i16 %1 to i8 3337 ret i8 %conv 3338} 3339 3340; Function Attrs: norecurse nounwind readonly uwtable willreturn 3341define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_uint16_t(i64 %ptr) { 3342; CHECK-LE-LABEL: ld_not_disjoint32_uint8_t_uint16_t: 3343; CHECK-LE: # %bb.0: # %entry 3344; CHECK-LE-NEXT: ori r3, r3, 34463 3345; CHECK-LE-NEXT: oris r3, r3, 1 3346; CHECK-LE-NEXT: lbz r3, 0(r3) 3347; CHECK-LE-NEXT: blr 3348; 3349; CHECK-BE-LABEL: ld_not_disjoint32_uint8_t_uint16_t: 3350; CHECK-BE: # %bb.0: # %entry 3351; CHECK-BE-NEXT: ori r3, r3, 34463 3352; CHECK-BE-NEXT: oris r3, r3, 1 3353; CHECK-BE-NEXT: lbz r3, 1(r3) 3354; CHECK-BE-NEXT: blr 3355entry: 3356 %or = or i64 %ptr, 99999 3357 %0 = inttoptr i64 %or to ptr 3358 %1 = load i16, ptr %0, align 2 3359 %conv = trunc i16 %1 to i8 3360 ret i8 %conv 3361} 3362 3363; Function Attrs: norecurse nounwind readonly uwtable willreturn 3364define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_uint16_t(i64 %ptr) { 3365; CHECK-P10-LE-LABEL: ld_disjoint_align32_uint8_t_uint16_t: 3366; CHECK-P10-LE: # %bb.0: # %entry 3367; CHECK-P10-LE-NEXT: lis r4, -15264 3368; CHECK-P10-LE-NEXT: and r3, r3, r4 3369; CHECK-P10-LE-NEXT: plbz r3, 999990000(r3), 0 3370; CHECK-P10-LE-NEXT: blr 3371; 3372; CHECK-P10-BE-LABEL: ld_disjoint_align32_uint8_t_uint16_t: 3373; CHECK-P10-BE: # %bb.0: # %entry 3374; CHECK-P10-BE-NEXT: lis r4, -15264 3375; CHECK-P10-BE-NEXT: and r3, r3, r4 3376; CHECK-P10-BE-NEXT: plbz r3, 999990001(r3), 0 3377; CHECK-P10-BE-NEXT: blr 3378; 3379; CHECK-P9-LE-LABEL: ld_disjoint_align32_uint8_t_uint16_t: 3380; CHECK-P9-LE: # %bb.0: # %entry 3381; CHECK-P9-LE-NEXT: lis r4, -15264 3382; CHECK-P9-LE-NEXT: and r3, r3, r4 3383; CHECK-P9-LE-NEXT: lis r4, 15258 3384; CHECK-P9-LE-NEXT: ori r4, r4, 41712 3385; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3386; CHECK-P9-LE-NEXT: blr 3387; 3388; CHECK-P9-BE-LABEL: ld_disjoint_align32_uint8_t_uint16_t: 3389; CHECK-P9-BE: # %bb.0: # %entry 3390; CHECK-P9-BE-NEXT: lis r4, -15264 3391; CHECK-P9-BE-NEXT: and r3, r3, r4 3392; CHECK-P9-BE-NEXT: lis r4, 15258 3393; CHECK-P9-BE-NEXT: ori r4, r4, 41713 3394; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3395; CHECK-P9-BE-NEXT: blr 3396; 3397; CHECK-P8-LE-LABEL: ld_disjoint_align32_uint8_t_uint16_t: 3398; CHECK-P8-LE: # %bb.0: # %entry 3399; CHECK-P8-LE-NEXT: lis r4, -15264 3400; CHECK-P8-LE-NEXT: and r3, r3, r4 3401; CHECK-P8-LE-NEXT: lis r4, 15258 3402; CHECK-P8-LE-NEXT: ori r4, r4, 41712 3403; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3404; CHECK-P8-LE-NEXT: blr 3405; 3406; CHECK-P8-BE-LABEL: ld_disjoint_align32_uint8_t_uint16_t: 3407; CHECK-P8-BE: # %bb.0: # %entry 3408; CHECK-P8-BE-NEXT: lis r4, -15264 3409; CHECK-P8-BE-NEXT: and r3, r3, r4 3410; CHECK-P8-BE-NEXT: lis r4, 15258 3411; CHECK-P8-BE-NEXT: ori r4, r4, 41713 3412; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3413; CHECK-P8-BE-NEXT: blr 3414entry: 3415 %and = and i64 %ptr, -1000341504 3416 %or = or i64 %and, 999990000 3417 %0 = inttoptr i64 %or to ptr 3418 %1 = load i16, ptr %0, align 16 3419 %conv = trunc i16 %1 to i8 3420 ret i8 %conv 3421} 3422 3423; Function Attrs: norecurse nounwind readonly uwtable willreturn 3424define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_uint16_t(i64 %ptr) { 3425; CHECK-P10-LE-LABEL: ld_not_disjoint64_uint8_t_uint16_t: 3426; CHECK-P10-LE: # %bb.0: # %entry 3427; CHECK-P10-LE-NEXT: pli r4, 232 3428; CHECK-P10-LE-NEXT: pli r5, 3567587329 3429; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 3430; CHECK-P10-LE-NEXT: or r3, r3, r5 3431; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 3432; CHECK-P10-LE-NEXT: blr 3433; 3434; CHECK-P10-BE-LABEL: ld_not_disjoint64_uint8_t_uint16_t: 3435; CHECK-P10-BE: # %bb.0: # %entry 3436; CHECK-P10-BE-NEXT: pli r4, 232 3437; CHECK-P10-BE-NEXT: pli r5, 3567587329 3438; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3439; CHECK-P10-BE-NEXT: or r3, r3, r5 3440; CHECK-P10-BE-NEXT: lbz r3, 1(r3) 3441; CHECK-P10-BE-NEXT: blr 3442; 3443; CHECK-P9-LE-LABEL: ld_not_disjoint64_uint8_t_uint16_t: 3444; CHECK-P9-LE: # %bb.0: # %entry 3445; CHECK-P9-LE-NEXT: li r4, 29 3446; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 3447; CHECK-P9-LE-NEXT: oris r4, r4, 54437 3448; CHECK-P9-LE-NEXT: ori r4, r4, 4097 3449; CHECK-P9-LE-NEXT: or r3, r3, r4 3450; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 3451; CHECK-P9-LE-NEXT: blr 3452; 3453; CHECK-P9-BE-LABEL: ld_not_disjoint64_uint8_t_uint16_t: 3454; CHECK-P9-BE: # %bb.0: # %entry 3455; CHECK-P9-BE-NEXT: li r4, 29 3456; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3457; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3458; CHECK-P9-BE-NEXT: ori r4, r4, 4097 3459; CHECK-P9-BE-NEXT: or r3, r3, r4 3460; CHECK-P9-BE-NEXT: lbz r3, 1(r3) 3461; CHECK-P9-BE-NEXT: blr 3462; 3463; CHECK-P8-LE-LABEL: ld_not_disjoint64_uint8_t_uint16_t: 3464; CHECK-P8-LE: # %bb.0: # %entry 3465; CHECK-P8-LE-NEXT: li r4, 29 3466; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 3467; CHECK-P8-LE-NEXT: oris r4, r4, 54437 3468; CHECK-P8-LE-NEXT: ori r4, r4, 4097 3469; CHECK-P8-LE-NEXT: or r3, r3, r4 3470; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 3471; CHECK-P8-LE-NEXT: blr 3472; 3473; CHECK-P8-BE-LABEL: ld_not_disjoint64_uint8_t_uint16_t: 3474; CHECK-P8-BE: # %bb.0: # %entry 3475; CHECK-P8-BE-NEXT: li r4, 29 3476; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3477; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3478; CHECK-P8-BE-NEXT: ori r4, r4, 4097 3479; CHECK-P8-BE-NEXT: or r3, r3, r4 3480; CHECK-P8-BE-NEXT: lbz r3, 1(r3) 3481; CHECK-P8-BE-NEXT: blr 3482entry: 3483 %or = or i64 %ptr, 1000000000001 3484 %0 = inttoptr i64 %or to ptr 3485 %1 = load i16, ptr %0, align 2 3486 %conv = trunc i16 %1 to i8 3487 ret i8 %conv 3488} 3489 3490; Function Attrs: norecurse nounwind readonly uwtable willreturn 3491define dso_local zeroext i8 @ld_disjoint_unalign64_uint8_t_uint16_t(i64 %ptr) { 3492; CHECK-P10-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint16_t: 3493; CHECK-P10-LE: # %bb.0: # %entry 3494; CHECK-P10-LE-NEXT: pli r4, 232 3495; CHECK-P10-LE-NEXT: pli r5, 3567587329 3496; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 3497; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 3498; CHECK-P10-LE-NEXT: lbzx r3, r3, r5 3499; CHECK-P10-LE-NEXT: blr 3500; 3501; CHECK-P10-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint16_t: 3502; CHECK-P10-BE: # %bb.0: # %entry 3503; CHECK-P10-BE-NEXT: pli r4, 232 3504; CHECK-P10-BE-NEXT: pli r5, 3567587330 3505; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 3506; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3507; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 3508; CHECK-P10-BE-NEXT: blr 3509; 3510; CHECK-P9-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint16_t: 3511; CHECK-P9-LE: # %bb.0: # %entry 3512; CHECK-P9-LE-NEXT: li r4, 29 3513; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 3514; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 3515; CHECK-P9-LE-NEXT: oris r4, r4, 54437 3516; CHECK-P9-LE-NEXT: ori r4, r4, 4097 3517; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3518; CHECK-P9-LE-NEXT: blr 3519; 3520; CHECK-P9-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint16_t: 3521; CHECK-P9-BE: # %bb.0: # %entry 3522; CHECK-P9-BE-NEXT: li r4, 29 3523; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 3524; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3525; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3526; CHECK-P9-BE-NEXT: ori r4, r4, 4098 3527; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3528; CHECK-P9-BE-NEXT: blr 3529; 3530; CHECK-P8-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint16_t: 3531; CHECK-P8-LE: # %bb.0: # %entry 3532; CHECK-P8-LE-NEXT: li r4, 29 3533; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 3534; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 3535; CHECK-P8-LE-NEXT: oris r4, r4, 54437 3536; CHECK-P8-LE-NEXT: ori r4, r4, 4097 3537; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3538; CHECK-P8-LE-NEXT: blr 3539; 3540; CHECK-P8-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint16_t: 3541; CHECK-P8-BE: # %bb.0: # %entry 3542; CHECK-P8-BE-NEXT: li r4, 29 3543; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 3544; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3545; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3546; CHECK-P8-BE-NEXT: ori r4, r4, 4098 3547; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3548; CHECK-P8-BE-NEXT: blr 3549entry: 3550 %and = and i64 %ptr, -1099511627776 3551 %or = or i64 %and, 1000000000001 3552 %0 = inttoptr i64 %or to ptr 3553 %1 = load i16, ptr %0, align 2 3554 %conv = trunc i16 %1 to i8 3555 ret i8 %conv 3556} 3557 3558; Function Attrs: norecurse nounwind readonly uwtable willreturn 3559define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_uint16_t(i64 %ptr) { 3560; CHECK-P10-LE-LABEL: ld_disjoint_align64_uint8_t_uint16_t: 3561; CHECK-P10-LE: # %bb.0: # %entry 3562; CHECK-P10-LE-NEXT: pli r4, 244140625 3563; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 3564; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 3565; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 3566; CHECK-P10-LE-NEXT: blr 3567; 3568; CHECK-P10-BE-LABEL: ld_disjoint_align64_uint8_t_uint16_t: 3569; CHECK-P10-BE: # %bb.0: # %entry 3570; CHECK-P10-BE-NEXT: pli r4, 232 3571; CHECK-P10-BE-NEXT: pli r5, 3567587329 3572; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 3573; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3574; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 3575; CHECK-P10-BE-NEXT: blr 3576; 3577; CHECK-P9-LE-LABEL: ld_disjoint_align64_uint8_t_uint16_t: 3578; CHECK-P9-LE: # %bb.0: # %entry 3579; CHECK-P9-LE-NEXT: lis r4, 3725 3580; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 3581; CHECK-P9-LE-NEXT: ori r4, r4, 19025 3582; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 3583; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3584; CHECK-P9-LE-NEXT: blr 3585; 3586; CHECK-P9-BE-LABEL: ld_disjoint_align64_uint8_t_uint16_t: 3587; CHECK-P9-BE: # %bb.0: # %entry 3588; CHECK-P9-BE-NEXT: li r4, 29 3589; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 3590; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3591; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3592; CHECK-P9-BE-NEXT: ori r4, r4, 4097 3593; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3594; CHECK-P9-BE-NEXT: blr 3595; 3596; CHECK-P8-LE-LABEL: ld_disjoint_align64_uint8_t_uint16_t: 3597; CHECK-P8-LE: # %bb.0: # %entry 3598; CHECK-P8-LE-NEXT: lis r4, 3725 3599; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 3600; CHECK-P8-LE-NEXT: ori r4, r4, 19025 3601; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 3602; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3603; CHECK-P8-LE-NEXT: blr 3604; 3605; CHECK-P8-BE-LABEL: ld_disjoint_align64_uint8_t_uint16_t: 3606; CHECK-P8-BE: # %bb.0: # %entry 3607; CHECK-P8-BE-NEXT: li r4, 29 3608; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 3609; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3610; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3611; CHECK-P8-BE-NEXT: ori r4, r4, 4097 3612; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3613; CHECK-P8-BE-NEXT: blr 3614entry: 3615 %and = and i64 %ptr, -1099511627776 3616 %or = or i64 %and, 1000000000000 3617 %0 = inttoptr i64 %or to ptr 3618 %1 = load i16, ptr %0, align 4096 3619 %conv = trunc i16 %1 to i8 3620 ret i8 %conv 3621} 3622 3623; Function Attrs: norecurse nounwind readonly uwtable willreturn 3624define dso_local zeroext i8 @ld_cst_align16_uint8_t_uint16_t() { 3625; CHECK-LE-LABEL: ld_cst_align16_uint8_t_uint16_t: 3626; CHECK-LE: # %bb.0: # %entry 3627; CHECK-LE-NEXT: lbz r3, 4080(0) 3628; CHECK-LE-NEXT: blr 3629; 3630; CHECK-BE-LABEL: ld_cst_align16_uint8_t_uint16_t: 3631; CHECK-BE: # %bb.0: # %entry 3632; CHECK-BE-NEXT: lbz r3, 4081(0) 3633; CHECK-BE-NEXT: blr 3634entry: 3635 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16 3636 %conv = trunc i16 %0 to i8 3637 ret i8 %conv 3638} 3639 3640; Function Attrs: norecurse nounwind readonly uwtable willreturn 3641define dso_local zeroext i8 @ld_cst_align32_uint8_t_uint16_t() { 3642; CHECK-LE-LABEL: ld_cst_align32_uint8_t_uint16_t: 3643; CHECK-LE: # %bb.0: # %entry 3644; CHECK-LE-NEXT: lis r3, 153 3645; CHECK-LE-NEXT: lbz r3, -27108(r3) 3646; CHECK-LE-NEXT: blr 3647; 3648; CHECK-BE-LABEL: ld_cst_align32_uint8_t_uint16_t: 3649; CHECK-BE: # %bb.0: # %entry 3650; CHECK-BE-NEXT: lis r3, 153 3651; CHECK-BE-NEXT: lbz r3, -27107(r3) 3652; CHECK-BE-NEXT: blr 3653entry: 3654 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4 3655 %conv = trunc i16 %0 to i8 3656 ret i8 %conv 3657} 3658 3659; Function Attrs: norecurse nounwind readonly uwtable willreturn 3660define dso_local zeroext i8 @ld_cst_unalign64_uint8_t_uint16_t() { 3661; CHECK-P10-LE-LABEL: ld_cst_unalign64_uint8_t_uint16_t: 3662; CHECK-P10-LE: # %bb.0: # %entry 3663; CHECK-P10-LE-NEXT: pli r3, 232 3664; CHECK-P10-LE-NEXT: pli r4, 3567587329 3665; CHECK-P10-LE-NEXT: rldimi r4, r3, 32, 0 3666; CHECK-P10-LE-NEXT: lbz r3, 0(r4) 3667; CHECK-P10-LE-NEXT: blr 3668; 3669; CHECK-P10-BE-LABEL: ld_cst_unalign64_uint8_t_uint16_t: 3670; CHECK-P10-BE: # %bb.0: # %entry 3671; CHECK-P10-BE-NEXT: pli r3, 232 3672; CHECK-P10-BE-NEXT: pli r4, 3567587330 3673; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 3674; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 3675; CHECK-P10-BE-NEXT: blr 3676; 3677; CHECK-P9-LE-LABEL: ld_cst_unalign64_uint8_t_uint16_t: 3678; CHECK-P9-LE: # %bb.0: # %entry 3679; CHECK-P9-LE-NEXT: li r3, 29 3680; CHECK-P9-LE-NEXT: rldic r3, r3, 35, 24 3681; CHECK-P9-LE-NEXT: oris r3, r3, 54437 3682; CHECK-P9-LE-NEXT: ori r3, r3, 4097 3683; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 3684; CHECK-P9-LE-NEXT: blr 3685; 3686; CHECK-P9-BE-LABEL: ld_cst_unalign64_uint8_t_uint16_t: 3687; CHECK-P9-BE: # %bb.0: # %entry 3688; CHECK-P9-BE-NEXT: li r3, 29 3689; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 3690; CHECK-P9-BE-NEXT: oris r3, r3, 54437 3691; CHECK-P9-BE-NEXT: ori r3, r3, 4098 3692; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 3693; CHECK-P9-BE-NEXT: blr 3694; 3695; CHECK-P8-LE-LABEL: ld_cst_unalign64_uint8_t_uint16_t: 3696; CHECK-P8-LE: # %bb.0: # %entry 3697; CHECK-P8-LE-NEXT: li r3, 29 3698; CHECK-P8-LE-NEXT: rldic r3, r3, 35, 24 3699; CHECK-P8-LE-NEXT: oris r3, r3, 54437 3700; CHECK-P8-LE-NEXT: ori r3, r3, 4097 3701; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 3702; CHECK-P8-LE-NEXT: blr 3703; 3704; CHECK-P8-BE-LABEL: ld_cst_unalign64_uint8_t_uint16_t: 3705; CHECK-P8-BE: # %bb.0: # %entry 3706; CHECK-P8-BE-NEXT: li r3, 29 3707; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 3708; CHECK-P8-BE-NEXT: oris r3, r3, 54437 3709; CHECK-P8-BE-NEXT: ori r3, r3, 4098 3710; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 3711; CHECK-P8-BE-NEXT: blr 3712entry: 3713 %0 = load i16, ptr inttoptr (i64 1000000000001 to ptr), align 2 3714 %conv = trunc i16 %0 to i8 3715 ret i8 %conv 3716} 3717 3718; Function Attrs: norecurse nounwind readonly uwtable willreturn 3719define dso_local zeroext i8 @ld_cst_align64_uint8_t_uint16_t() { 3720; CHECK-P10-LE-LABEL: ld_cst_align64_uint8_t_uint16_t: 3721; CHECK-P10-LE: # %bb.0: # %entry 3722; CHECK-P10-LE-NEXT: pli r3, 244140625 3723; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 3724; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 3725; CHECK-P10-LE-NEXT: blr 3726; 3727; CHECK-P10-BE-LABEL: ld_cst_align64_uint8_t_uint16_t: 3728; CHECK-P10-BE: # %bb.0: # %entry 3729; CHECK-P10-BE-NEXT: pli r3, 232 3730; CHECK-P10-BE-NEXT: pli r4, 3567587329 3731; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 3732; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 3733; CHECK-P10-BE-NEXT: blr 3734; 3735; CHECK-P9-LE-LABEL: ld_cst_align64_uint8_t_uint16_t: 3736; CHECK-P9-LE: # %bb.0: # %entry 3737; CHECK-P9-LE-NEXT: lis r3, 3725 3738; CHECK-P9-LE-NEXT: ori r3, r3, 19025 3739; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 3740; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 3741; CHECK-P9-LE-NEXT: blr 3742; 3743; CHECK-P9-BE-LABEL: ld_cst_align64_uint8_t_uint16_t: 3744; CHECK-P9-BE: # %bb.0: # %entry 3745; CHECK-P9-BE-NEXT: li r3, 29 3746; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 3747; CHECK-P9-BE-NEXT: oris r3, r3, 54437 3748; CHECK-P9-BE-NEXT: ori r3, r3, 4097 3749; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 3750; CHECK-P9-BE-NEXT: blr 3751; 3752; CHECK-P8-LE-LABEL: ld_cst_align64_uint8_t_uint16_t: 3753; CHECK-P8-LE: # %bb.0: # %entry 3754; CHECK-P8-LE-NEXT: lis r3, 3725 3755; CHECK-P8-LE-NEXT: ori r3, r3, 19025 3756; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 3757; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 3758; CHECK-P8-LE-NEXT: blr 3759; 3760; CHECK-P8-BE-LABEL: ld_cst_align64_uint8_t_uint16_t: 3761; CHECK-P8-BE: # %bb.0: # %entry 3762; CHECK-P8-BE-NEXT: li r3, 29 3763; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 3764; CHECK-P8-BE-NEXT: oris r3, r3, 54437 3765; CHECK-P8-BE-NEXT: ori r3, r3, 4097 3766; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 3767; CHECK-P8-BE-NEXT: blr 3768entry: 3769 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096 3770 %conv = trunc i16 %0 to i8 3771 ret i8 %conv 3772} 3773 3774; Function Attrs: norecurse nounwind readonly uwtable willreturn 3775define dso_local zeroext i8 @ld_0_uint8_t_uint32_t(i64 %ptr) { 3776; CHECK-LE-LABEL: ld_0_uint8_t_uint32_t: 3777; CHECK-LE: # %bb.0: # %entry 3778; CHECK-LE-NEXT: lbz r3, 0(r3) 3779; CHECK-LE-NEXT: blr 3780; 3781; CHECK-BE-LABEL: ld_0_uint8_t_uint32_t: 3782; CHECK-BE: # %bb.0: # %entry 3783; CHECK-BE-NEXT: lbz r3, 3(r3) 3784; CHECK-BE-NEXT: blr 3785entry: 3786 %0 = inttoptr i64 %ptr to ptr 3787 %1 = load i32, ptr %0, align 4 3788 %conv = trunc i32 %1 to i8 3789 ret i8 %conv 3790} 3791 3792; Function Attrs: norecurse nounwind readonly uwtable willreturn 3793define dso_local zeroext i8 @ld_align16_uint8_t_uint32_t(ptr nocapture readonly %ptr) { 3794; CHECK-LE-LABEL: ld_align16_uint8_t_uint32_t: 3795; CHECK-LE: # %bb.0: # %entry 3796; CHECK-LE-NEXT: lbz r3, 8(r3) 3797; CHECK-LE-NEXT: blr 3798; 3799; CHECK-BE-LABEL: ld_align16_uint8_t_uint32_t: 3800; CHECK-BE: # %bb.0: # %entry 3801; CHECK-BE-NEXT: lbz r3, 11(r3) 3802; CHECK-BE-NEXT: blr 3803entry: 3804 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 3805 %0 = load i32, ptr %add.ptr, align 4 3806 %conv = trunc i32 %0 to i8 3807 ret i8 %conv 3808} 3809 3810; Function Attrs: norecurse nounwind readonly uwtable willreturn 3811define dso_local zeroext i8 @ld_align32_uint8_t_uint32_t(ptr nocapture readonly %ptr) { 3812; CHECK-P10-LE-LABEL: ld_align32_uint8_t_uint32_t: 3813; CHECK-P10-LE: # %bb.0: # %entry 3814; CHECK-P10-LE-NEXT: plbz r3, 99999000(r3), 0 3815; CHECK-P10-LE-NEXT: blr 3816; 3817; CHECK-P10-BE-LABEL: ld_align32_uint8_t_uint32_t: 3818; CHECK-P10-BE: # %bb.0: # %entry 3819; CHECK-P10-BE-NEXT: plbz r3, 99999003(r3), 0 3820; CHECK-P10-BE-NEXT: blr 3821; 3822; CHECK-P9-LE-LABEL: ld_align32_uint8_t_uint32_t: 3823; CHECK-P9-LE: # %bb.0: # %entry 3824; CHECK-P9-LE-NEXT: lis r4, 1525 3825; CHECK-P9-LE-NEXT: ori r4, r4, 56600 3826; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3827; CHECK-P9-LE-NEXT: blr 3828; 3829; CHECK-P9-BE-LABEL: ld_align32_uint8_t_uint32_t: 3830; CHECK-P9-BE: # %bb.0: # %entry 3831; CHECK-P9-BE-NEXT: lis r4, 1525 3832; CHECK-P9-BE-NEXT: ori r4, r4, 56603 3833; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3834; CHECK-P9-BE-NEXT: blr 3835; 3836; CHECK-P8-LE-LABEL: ld_align32_uint8_t_uint32_t: 3837; CHECK-P8-LE: # %bb.0: # %entry 3838; CHECK-P8-LE-NEXT: lis r4, 1525 3839; CHECK-P8-LE-NEXT: ori r4, r4, 56600 3840; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3841; CHECK-P8-LE-NEXT: blr 3842; 3843; CHECK-P8-BE-LABEL: ld_align32_uint8_t_uint32_t: 3844; CHECK-P8-BE: # %bb.0: # %entry 3845; CHECK-P8-BE-NEXT: lis r4, 1525 3846; CHECK-P8-BE-NEXT: ori r4, r4, 56603 3847; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3848; CHECK-P8-BE-NEXT: blr 3849entry: 3850 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 3851 %0 = load i32, ptr %add.ptr, align 4 3852 %conv = trunc i32 %0 to i8 3853 ret i8 %conv 3854} 3855 3856; Function Attrs: norecurse nounwind readonly uwtable willreturn 3857define dso_local zeroext i8 @ld_unalign64_uint8_t_uint32_t(ptr nocapture readonly %ptr) { 3858; CHECK-P10-LE-LABEL: ld_unalign64_uint8_t_uint32_t: 3859; CHECK-P10-LE: # %bb.0: # %entry 3860; CHECK-P10-LE-NEXT: pli r4, 232 3861; CHECK-P10-LE-NEXT: pli r5, 3567587329 3862; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 3863; CHECK-P10-LE-NEXT: lbzx r3, r3, r5 3864; CHECK-P10-LE-NEXT: blr 3865; 3866; CHECK-P10-BE-LABEL: ld_unalign64_uint8_t_uint32_t: 3867; CHECK-P10-BE: # %bb.0: # %entry 3868; CHECK-P10-BE-NEXT: pli r4, 232 3869; CHECK-P10-BE-NEXT: pli r5, 3567587332 3870; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3871; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 3872; CHECK-P10-BE-NEXT: blr 3873; 3874; CHECK-P9-LE-LABEL: ld_unalign64_uint8_t_uint32_t: 3875; CHECK-P9-LE: # %bb.0: # %entry 3876; CHECK-P9-LE-NEXT: li r4, 29 3877; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 3878; CHECK-P9-LE-NEXT: oris r4, r4, 54437 3879; CHECK-P9-LE-NEXT: ori r4, r4, 4097 3880; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3881; CHECK-P9-LE-NEXT: blr 3882; 3883; CHECK-P9-BE-LABEL: ld_unalign64_uint8_t_uint32_t: 3884; CHECK-P9-BE: # %bb.0: # %entry 3885; CHECK-P9-BE-NEXT: li r4, 29 3886; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3887; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3888; CHECK-P9-BE-NEXT: ori r4, r4, 4100 3889; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3890; CHECK-P9-BE-NEXT: blr 3891; 3892; CHECK-P8-LE-LABEL: ld_unalign64_uint8_t_uint32_t: 3893; CHECK-P8-LE: # %bb.0: # %entry 3894; CHECK-P8-LE-NEXT: li r4, 29 3895; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 3896; CHECK-P8-LE-NEXT: oris r4, r4, 54437 3897; CHECK-P8-LE-NEXT: ori r4, r4, 4097 3898; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3899; CHECK-P8-LE-NEXT: blr 3900; 3901; CHECK-P8-BE-LABEL: ld_unalign64_uint8_t_uint32_t: 3902; CHECK-P8-BE: # %bb.0: # %entry 3903; CHECK-P8-BE-NEXT: li r4, 29 3904; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3905; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3906; CHECK-P8-BE-NEXT: ori r4, r4, 4100 3907; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3908; CHECK-P8-BE-NEXT: blr 3909entry: 3910 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001 3911 %0 = load i32, ptr %add.ptr, align 4 3912 %conv = trunc i32 %0 to i8 3913 ret i8 %conv 3914} 3915 3916; Function Attrs: norecurse nounwind readonly uwtable willreturn 3917define dso_local zeroext i8 @ld_align64_uint8_t_uint32_t(ptr nocapture readonly %ptr) { 3918; CHECK-P10-LE-LABEL: ld_align64_uint8_t_uint32_t: 3919; CHECK-P10-LE: # %bb.0: # %entry 3920; CHECK-P10-LE-NEXT: pli r4, 244140625 3921; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 3922; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 3923; CHECK-P10-LE-NEXT: blr 3924; 3925; CHECK-P10-BE-LABEL: ld_align64_uint8_t_uint32_t: 3926; CHECK-P10-BE: # %bb.0: # %entry 3927; CHECK-P10-BE-NEXT: pli r4, 232 3928; CHECK-P10-BE-NEXT: pli r5, 3567587331 3929; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3930; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 3931; CHECK-P10-BE-NEXT: blr 3932; 3933; CHECK-P9-LE-LABEL: ld_align64_uint8_t_uint32_t: 3934; CHECK-P9-LE: # %bb.0: # %entry 3935; CHECK-P9-LE-NEXT: lis r4, 3725 3936; CHECK-P9-LE-NEXT: ori r4, r4, 19025 3937; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 3938; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 3939; CHECK-P9-LE-NEXT: blr 3940; 3941; CHECK-P9-BE-LABEL: ld_align64_uint8_t_uint32_t: 3942; CHECK-P9-BE: # %bb.0: # %entry 3943; CHECK-P9-BE-NEXT: li r4, 29 3944; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3945; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3946; CHECK-P9-BE-NEXT: ori r4, r4, 4099 3947; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 3948; CHECK-P9-BE-NEXT: blr 3949; 3950; CHECK-P8-LE-LABEL: ld_align64_uint8_t_uint32_t: 3951; CHECK-P8-LE: # %bb.0: # %entry 3952; CHECK-P8-LE-NEXT: lis r4, 3725 3953; CHECK-P8-LE-NEXT: ori r4, r4, 19025 3954; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 3955; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 3956; CHECK-P8-LE-NEXT: blr 3957; 3958; CHECK-P8-BE-LABEL: ld_align64_uint8_t_uint32_t: 3959; CHECK-P8-BE: # %bb.0: # %entry 3960; CHECK-P8-BE-NEXT: li r4, 29 3961; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3962; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3963; CHECK-P8-BE-NEXT: ori r4, r4, 4099 3964; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 3965; CHECK-P8-BE-NEXT: blr 3966entry: 3967 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 3968 %0 = load i32, ptr %add.ptr, align 4 3969 %conv = trunc i32 %0 to i8 3970 ret i8 %conv 3971} 3972 3973; Function Attrs: norecurse nounwind readonly uwtable willreturn 3974define dso_local zeroext i8 @ld_reg_uint8_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) { 3975; CHECK-LE-LABEL: ld_reg_uint8_t_uint32_t: 3976; CHECK-LE: # %bb.0: # %entry 3977; CHECK-LE-NEXT: lbzx r3, r3, r4 3978; CHECK-LE-NEXT: blr 3979; 3980; CHECK-BE-LABEL: ld_reg_uint8_t_uint32_t: 3981; CHECK-BE: # %bb.0: # %entry 3982; CHECK-BE-NEXT: add r3, r3, r4 3983; CHECK-BE-NEXT: lbz r3, 3(r3) 3984; CHECK-BE-NEXT: blr 3985entry: 3986 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 3987 %0 = load i32, ptr %add.ptr, align 4 3988 %conv = trunc i32 %0 to i8 3989 ret i8 %conv 3990} 3991 3992; Function Attrs: norecurse nounwind readonly uwtable willreturn 3993define dso_local zeroext i8 @ld_or_uint8_t_uint32_t(i64 %ptr, i8 zeroext %off) { 3994; CHECK-LE-LABEL: ld_or_uint8_t_uint32_t: 3995; CHECK-LE: # %bb.0: # %entry 3996; CHECK-LE-NEXT: or r3, r4, r3 3997; CHECK-LE-NEXT: lbz r3, 0(r3) 3998; CHECK-LE-NEXT: blr 3999; 4000; CHECK-BE-LABEL: ld_or_uint8_t_uint32_t: 4001; CHECK-BE: # %bb.0: # %entry 4002; CHECK-BE-NEXT: or r3, r4, r3 4003; CHECK-BE-NEXT: lbz r3, 3(r3) 4004; CHECK-BE-NEXT: blr 4005entry: 4006 %conv = zext i8 %off to i64 4007 %or = or i64 %conv, %ptr 4008 %0 = inttoptr i64 %or to ptr 4009 %1 = load i32, ptr %0, align 4 4010 %conv1 = trunc i32 %1 to i8 4011 ret i8 %conv1 4012} 4013 4014; Function Attrs: norecurse nounwind readonly uwtable willreturn 4015define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_uint32_t(i64 %ptr) { 4016; CHECK-LE-LABEL: ld_not_disjoint16_uint8_t_uint32_t: 4017; CHECK-LE: # %bb.0: # %entry 4018; CHECK-LE-NEXT: ori r3, r3, 6 4019; CHECK-LE-NEXT: lbz r3, 0(r3) 4020; CHECK-LE-NEXT: blr 4021; 4022; CHECK-BE-LABEL: ld_not_disjoint16_uint8_t_uint32_t: 4023; CHECK-BE: # %bb.0: # %entry 4024; CHECK-BE-NEXT: ori r3, r3, 6 4025; CHECK-BE-NEXT: lbz r3, 3(r3) 4026; CHECK-BE-NEXT: blr 4027entry: 4028 %or = or i64 %ptr, 6 4029 %0 = inttoptr i64 %or to ptr 4030 %1 = load i32, ptr %0, align 4 4031 %conv = trunc i32 %1 to i8 4032 ret i8 %conv 4033} 4034 4035; Function Attrs: norecurse nounwind readonly uwtable willreturn 4036define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_uint32_t(i64 %ptr) { 4037; CHECK-LE-LABEL: ld_disjoint_align16_uint8_t_uint32_t: 4038; CHECK-LE: # %bb.0: # %entry 4039; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 4040; CHECK-LE-NEXT: lbz r3, 24(r3) 4041; CHECK-LE-NEXT: blr 4042; 4043; CHECK-BE-LABEL: ld_disjoint_align16_uint8_t_uint32_t: 4044; CHECK-BE: # %bb.0: # %entry 4045; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 4046; CHECK-BE-NEXT: lbz r3, 27(r3) 4047; CHECK-BE-NEXT: blr 4048entry: 4049 %and = and i64 %ptr, -4096 4050 %or = or i64 %and, 24 4051 %0 = inttoptr i64 %or to ptr 4052 %1 = load i32, ptr %0, align 8 4053 %conv = trunc i32 %1 to i8 4054 ret i8 %conv 4055} 4056 4057; Function Attrs: norecurse nounwind readonly uwtable willreturn 4058define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_uint32_t(i64 %ptr) { 4059; CHECK-LE-LABEL: ld_not_disjoint32_uint8_t_uint32_t: 4060; CHECK-LE: # %bb.0: # %entry 4061; CHECK-LE-NEXT: ori r3, r3, 34463 4062; CHECK-LE-NEXT: oris r3, r3, 1 4063; CHECK-LE-NEXT: lbz r3, 0(r3) 4064; CHECK-LE-NEXT: blr 4065; 4066; CHECK-BE-LABEL: ld_not_disjoint32_uint8_t_uint32_t: 4067; CHECK-BE: # %bb.0: # %entry 4068; CHECK-BE-NEXT: ori r3, r3, 34463 4069; CHECK-BE-NEXT: oris r3, r3, 1 4070; CHECK-BE-NEXT: lbz r3, 3(r3) 4071; CHECK-BE-NEXT: blr 4072entry: 4073 %or = or i64 %ptr, 99999 4074 %0 = inttoptr i64 %or to ptr 4075 %1 = load i32, ptr %0, align 4 4076 %conv = trunc i32 %1 to i8 4077 ret i8 %conv 4078} 4079 4080; Function Attrs: norecurse nounwind readonly uwtable willreturn 4081define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_uint32_t(i64 %ptr) { 4082; CHECK-P10-LE-LABEL: ld_disjoint_align32_uint8_t_uint32_t: 4083; CHECK-P10-LE: # %bb.0: # %entry 4084; CHECK-P10-LE-NEXT: lis r4, -15264 4085; CHECK-P10-LE-NEXT: and r3, r3, r4 4086; CHECK-P10-LE-NEXT: plbz r3, 999990000(r3), 0 4087; CHECK-P10-LE-NEXT: blr 4088; 4089; CHECK-P10-BE-LABEL: ld_disjoint_align32_uint8_t_uint32_t: 4090; CHECK-P10-BE: # %bb.0: # %entry 4091; CHECK-P10-BE-NEXT: lis r4, -15264 4092; CHECK-P10-BE-NEXT: and r3, r3, r4 4093; CHECK-P10-BE-NEXT: plbz r3, 999990003(r3), 0 4094; CHECK-P10-BE-NEXT: blr 4095; 4096; CHECK-P9-LE-LABEL: ld_disjoint_align32_uint8_t_uint32_t: 4097; CHECK-P9-LE: # %bb.0: # %entry 4098; CHECK-P9-LE-NEXT: lis r4, -15264 4099; CHECK-P9-LE-NEXT: and r3, r3, r4 4100; CHECK-P9-LE-NEXT: lis r4, 15258 4101; CHECK-P9-LE-NEXT: ori r4, r4, 41712 4102; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 4103; CHECK-P9-LE-NEXT: blr 4104; 4105; CHECK-P9-BE-LABEL: ld_disjoint_align32_uint8_t_uint32_t: 4106; CHECK-P9-BE: # %bb.0: # %entry 4107; CHECK-P9-BE-NEXT: lis r4, -15264 4108; CHECK-P9-BE-NEXT: and r3, r3, r4 4109; CHECK-P9-BE-NEXT: lis r4, 15258 4110; CHECK-P9-BE-NEXT: ori r4, r4, 41715 4111; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 4112; CHECK-P9-BE-NEXT: blr 4113; 4114; CHECK-P8-LE-LABEL: ld_disjoint_align32_uint8_t_uint32_t: 4115; CHECK-P8-LE: # %bb.0: # %entry 4116; CHECK-P8-LE-NEXT: lis r4, -15264 4117; CHECK-P8-LE-NEXT: and r3, r3, r4 4118; CHECK-P8-LE-NEXT: lis r4, 15258 4119; CHECK-P8-LE-NEXT: ori r4, r4, 41712 4120; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 4121; CHECK-P8-LE-NEXT: blr 4122; 4123; CHECK-P8-BE-LABEL: ld_disjoint_align32_uint8_t_uint32_t: 4124; CHECK-P8-BE: # %bb.0: # %entry 4125; CHECK-P8-BE-NEXT: lis r4, -15264 4126; CHECK-P8-BE-NEXT: and r3, r3, r4 4127; CHECK-P8-BE-NEXT: lis r4, 15258 4128; CHECK-P8-BE-NEXT: ori r4, r4, 41715 4129; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 4130; CHECK-P8-BE-NEXT: blr 4131entry: 4132 %and = and i64 %ptr, -1000341504 4133 %or = or i64 %and, 999990000 4134 %0 = inttoptr i64 %or to ptr 4135 %1 = load i32, ptr %0, align 16 4136 %conv = trunc i32 %1 to i8 4137 ret i8 %conv 4138} 4139 4140; Function Attrs: norecurse nounwind readonly uwtable willreturn 4141define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_uint32_t(i64 %ptr) { 4142; CHECK-P10-LE-LABEL: ld_not_disjoint64_uint8_t_uint32_t: 4143; CHECK-P10-LE: # %bb.0: # %entry 4144; CHECK-P10-LE-NEXT: pli r4, 232 4145; CHECK-P10-LE-NEXT: pli r5, 3567587329 4146; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 4147; CHECK-P10-LE-NEXT: or r3, r3, r5 4148; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 4149; CHECK-P10-LE-NEXT: blr 4150; 4151; CHECK-P10-BE-LABEL: ld_not_disjoint64_uint8_t_uint32_t: 4152; CHECK-P10-BE: # %bb.0: # %entry 4153; CHECK-P10-BE-NEXT: pli r4, 232 4154; CHECK-P10-BE-NEXT: pli r5, 3567587329 4155; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4156; CHECK-P10-BE-NEXT: or r3, r3, r5 4157; CHECK-P10-BE-NEXT: lbz r3, 3(r3) 4158; CHECK-P10-BE-NEXT: blr 4159; 4160; CHECK-P9-LE-LABEL: ld_not_disjoint64_uint8_t_uint32_t: 4161; CHECK-P9-LE: # %bb.0: # %entry 4162; CHECK-P9-LE-NEXT: li r4, 29 4163; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 4164; CHECK-P9-LE-NEXT: oris r4, r4, 54437 4165; CHECK-P9-LE-NEXT: ori r4, r4, 4097 4166; CHECK-P9-LE-NEXT: or r3, r3, r4 4167; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 4168; CHECK-P9-LE-NEXT: blr 4169; 4170; CHECK-P9-BE-LABEL: ld_not_disjoint64_uint8_t_uint32_t: 4171; CHECK-P9-BE: # %bb.0: # %entry 4172; CHECK-P9-BE-NEXT: li r4, 29 4173; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4174; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4175; CHECK-P9-BE-NEXT: ori r4, r4, 4097 4176; CHECK-P9-BE-NEXT: or r3, r3, r4 4177; CHECK-P9-BE-NEXT: lbz r3, 3(r3) 4178; CHECK-P9-BE-NEXT: blr 4179; 4180; CHECK-P8-LE-LABEL: ld_not_disjoint64_uint8_t_uint32_t: 4181; CHECK-P8-LE: # %bb.0: # %entry 4182; CHECK-P8-LE-NEXT: li r4, 29 4183; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 4184; CHECK-P8-LE-NEXT: oris r4, r4, 54437 4185; CHECK-P8-LE-NEXT: ori r4, r4, 4097 4186; CHECK-P8-LE-NEXT: or r3, r3, r4 4187; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 4188; CHECK-P8-LE-NEXT: blr 4189; 4190; CHECK-P8-BE-LABEL: ld_not_disjoint64_uint8_t_uint32_t: 4191; CHECK-P8-BE: # %bb.0: # %entry 4192; CHECK-P8-BE-NEXT: li r4, 29 4193; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4194; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4195; CHECK-P8-BE-NEXT: ori r4, r4, 4097 4196; CHECK-P8-BE-NEXT: or r3, r3, r4 4197; CHECK-P8-BE-NEXT: lbz r3, 3(r3) 4198; CHECK-P8-BE-NEXT: blr 4199entry: 4200 %or = or i64 %ptr, 1000000000001 4201 %0 = inttoptr i64 %or to ptr 4202 %1 = load i32, ptr %0, align 4 4203 %conv = trunc i32 %1 to i8 4204 ret i8 %conv 4205} 4206 4207; Function Attrs: norecurse nounwind readonly uwtable willreturn 4208define dso_local zeroext i8 @ld_disjoint_unalign64_uint8_t_uint32_t(i64 %ptr) { 4209; CHECK-P10-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint32_t: 4210; CHECK-P10-LE: # %bb.0: # %entry 4211; CHECK-P10-LE-NEXT: pli r4, 232 4212; CHECK-P10-LE-NEXT: pli r5, 3567587329 4213; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 4214; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 4215; CHECK-P10-LE-NEXT: lbzx r3, r3, r5 4216; CHECK-P10-LE-NEXT: blr 4217; 4218; CHECK-P10-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint32_t: 4219; CHECK-P10-BE: # %bb.0: # %entry 4220; CHECK-P10-BE-NEXT: pli r4, 232 4221; CHECK-P10-BE-NEXT: pli r5, 3567587332 4222; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 4223; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4224; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 4225; CHECK-P10-BE-NEXT: blr 4226; 4227; CHECK-P9-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint32_t: 4228; CHECK-P9-LE: # %bb.0: # %entry 4229; CHECK-P9-LE-NEXT: li r4, 29 4230; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 4231; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 4232; CHECK-P9-LE-NEXT: oris r4, r4, 54437 4233; CHECK-P9-LE-NEXT: ori r4, r4, 4097 4234; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 4235; CHECK-P9-LE-NEXT: blr 4236; 4237; CHECK-P9-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint32_t: 4238; CHECK-P9-BE: # %bb.0: # %entry 4239; CHECK-P9-BE-NEXT: li r4, 29 4240; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 4241; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4242; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4243; CHECK-P9-BE-NEXT: ori r4, r4, 4100 4244; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 4245; CHECK-P9-BE-NEXT: blr 4246; 4247; CHECK-P8-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint32_t: 4248; CHECK-P8-LE: # %bb.0: # %entry 4249; CHECK-P8-LE-NEXT: li r4, 29 4250; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 4251; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 4252; CHECK-P8-LE-NEXT: oris r4, r4, 54437 4253; CHECK-P8-LE-NEXT: ori r4, r4, 4097 4254; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 4255; CHECK-P8-LE-NEXT: blr 4256; 4257; CHECK-P8-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint32_t: 4258; CHECK-P8-BE: # %bb.0: # %entry 4259; CHECK-P8-BE-NEXT: li r4, 29 4260; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 4261; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4262; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4263; CHECK-P8-BE-NEXT: ori r4, r4, 4100 4264; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 4265; CHECK-P8-BE-NEXT: blr 4266entry: 4267 %and = and i64 %ptr, -1099511627776 4268 %or = or i64 %and, 1000000000001 4269 %0 = inttoptr i64 %or to ptr 4270 %1 = load i32, ptr %0, align 4 4271 %conv = trunc i32 %1 to i8 4272 ret i8 %conv 4273} 4274 4275; Function Attrs: norecurse nounwind readonly uwtable willreturn 4276define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_uint32_t(i64 %ptr) { 4277; CHECK-P10-LE-LABEL: ld_disjoint_align64_uint8_t_uint32_t: 4278; CHECK-P10-LE: # %bb.0: # %entry 4279; CHECK-P10-LE-NEXT: pli r4, 244140625 4280; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 4281; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 4282; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 4283; CHECK-P10-LE-NEXT: blr 4284; 4285; CHECK-P10-BE-LABEL: ld_disjoint_align64_uint8_t_uint32_t: 4286; CHECK-P10-BE: # %bb.0: # %entry 4287; CHECK-P10-BE-NEXT: pli r4, 232 4288; CHECK-P10-BE-NEXT: pli r5, 3567587331 4289; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 4290; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4291; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 4292; CHECK-P10-BE-NEXT: blr 4293; 4294; CHECK-P9-LE-LABEL: ld_disjoint_align64_uint8_t_uint32_t: 4295; CHECK-P9-LE: # %bb.0: # %entry 4296; CHECK-P9-LE-NEXT: lis r4, 3725 4297; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 4298; CHECK-P9-LE-NEXT: ori r4, r4, 19025 4299; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 4300; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 4301; CHECK-P9-LE-NEXT: blr 4302; 4303; CHECK-P9-BE-LABEL: ld_disjoint_align64_uint8_t_uint32_t: 4304; CHECK-P9-BE: # %bb.0: # %entry 4305; CHECK-P9-BE-NEXT: li r4, 29 4306; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 4307; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4308; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4309; CHECK-P9-BE-NEXT: ori r4, r4, 4099 4310; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 4311; CHECK-P9-BE-NEXT: blr 4312; 4313; CHECK-P8-LE-LABEL: ld_disjoint_align64_uint8_t_uint32_t: 4314; CHECK-P8-LE: # %bb.0: # %entry 4315; CHECK-P8-LE-NEXT: lis r4, 3725 4316; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 4317; CHECK-P8-LE-NEXT: ori r4, r4, 19025 4318; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 4319; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 4320; CHECK-P8-LE-NEXT: blr 4321; 4322; CHECK-P8-BE-LABEL: ld_disjoint_align64_uint8_t_uint32_t: 4323; CHECK-P8-BE: # %bb.0: # %entry 4324; CHECK-P8-BE-NEXT: li r4, 29 4325; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 4326; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4327; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4328; CHECK-P8-BE-NEXT: ori r4, r4, 4099 4329; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 4330; CHECK-P8-BE-NEXT: blr 4331entry: 4332 %and = and i64 %ptr, -1099511627776 4333 %or = or i64 %and, 1000000000000 4334 %0 = inttoptr i64 %or to ptr 4335 %1 = load i32, ptr %0, align 4096 4336 %conv = trunc i32 %1 to i8 4337 ret i8 %conv 4338} 4339 4340; Function Attrs: norecurse nounwind readonly uwtable willreturn 4341define dso_local zeroext i8 @ld_cst_align16_uint8_t_uint32_t() { 4342; CHECK-LE-LABEL: ld_cst_align16_uint8_t_uint32_t: 4343; CHECK-LE: # %bb.0: # %entry 4344; CHECK-LE-NEXT: lbz r3, 4080(0) 4345; CHECK-LE-NEXT: blr 4346; 4347; CHECK-BE-LABEL: ld_cst_align16_uint8_t_uint32_t: 4348; CHECK-BE: # %bb.0: # %entry 4349; CHECK-BE-NEXT: lbz r3, 4083(0) 4350; CHECK-BE-NEXT: blr 4351entry: 4352 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 16 4353 %conv = trunc i32 %0 to i8 4354 ret i8 %conv 4355} 4356 4357; Function Attrs: norecurse nounwind readonly uwtable willreturn 4358define dso_local zeroext i8 @ld_cst_align32_uint8_t_uint32_t() { 4359; CHECK-LE-LABEL: ld_cst_align32_uint8_t_uint32_t: 4360; CHECK-LE: # %bb.0: # %entry 4361; CHECK-LE-NEXT: lis r3, 153 4362; CHECK-LE-NEXT: lbz r3, -27108(r3) 4363; CHECK-LE-NEXT: blr 4364; 4365; CHECK-BE-LABEL: ld_cst_align32_uint8_t_uint32_t: 4366; CHECK-BE: # %bb.0: # %entry 4367; CHECK-BE-NEXT: lis r3, 153 4368; CHECK-BE-NEXT: lbz r3, -27105(r3) 4369; CHECK-BE-NEXT: blr 4370entry: 4371 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 4 4372 %conv = trunc i32 %0 to i8 4373 ret i8 %conv 4374} 4375 4376; Function Attrs: norecurse nounwind readonly uwtable willreturn 4377define dso_local zeroext i8 @ld_cst_unalign64_uint8_t_uint32_t() { 4378; CHECK-P10-LE-LABEL: ld_cst_unalign64_uint8_t_uint32_t: 4379; CHECK-P10-LE: # %bb.0: # %entry 4380; CHECK-P10-LE-NEXT: pli r3, 232 4381; CHECK-P10-LE-NEXT: pli r4, 3567587329 4382; CHECK-P10-LE-NEXT: rldimi r4, r3, 32, 0 4383; CHECK-P10-LE-NEXT: lbz r3, 0(r4) 4384; CHECK-P10-LE-NEXT: blr 4385; 4386; CHECK-P10-BE-LABEL: ld_cst_unalign64_uint8_t_uint32_t: 4387; CHECK-P10-BE: # %bb.0: # %entry 4388; CHECK-P10-BE-NEXT: pli r3, 232 4389; CHECK-P10-BE-NEXT: pli r4, 3567587332 4390; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 4391; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 4392; CHECK-P10-BE-NEXT: blr 4393; 4394; CHECK-P9-LE-LABEL: ld_cst_unalign64_uint8_t_uint32_t: 4395; CHECK-P9-LE: # %bb.0: # %entry 4396; CHECK-P9-LE-NEXT: li r3, 29 4397; CHECK-P9-LE-NEXT: rldic r3, r3, 35, 24 4398; CHECK-P9-LE-NEXT: oris r3, r3, 54437 4399; CHECK-P9-LE-NEXT: ori r3, r3, 4097 4400; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 4401; CHECK-P9-LE-NEXT: blr 4402; 4403; CHECK-P9-BE-LABEL: ld_cst_unalign64_uint8_t_uint32_t: 4404; CHECK-P9-BE: # %bb.0: # %entry 4405; CHECK-P9-BE-NEXT: li r3, 29 4406; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 4407; CHECK-P9-BE-NEXT: oris r3, r3, 54437 4408; CHECK-P9-BE-NEXT: ori r3, r3, 4100 4409; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 4410; CHECK-P9-BE-NEXT: blr 4411; 4412; CHECK-P8-LE-LABEL: ld_cst_unalign64_uint8_t_uint32_t: 4413; CHECK-P8-LE: # %bb.0: # %entry 4414; CHECK-P8-LE-NEXT: li r3, 29 4415; CHECK-P8-LE-NEXT: rldic r3, r3, 35, 24 4416; CHECK-P8-LE-NEXT: oris r3, r3, 54437 4417; CHECK-P8-LE-NEXT: ori r3, r3, 4097 4418; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 4419; CHECK-P8-LE-NEXT: blr 4420; 4421; CHECK-P8-BE-LABEL: ld_cst_unalign64_uint8_t_uint32_t: 4422; CHECK-P8-BE: # %bb.0: # %entry 4423; CHECK-P8-BE-NEXT: li r3, 29 4424; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 4425; CHECK-P8-BE-NEXT: oris r3, r3, 54437 4426; CHECK-P8-BE-NEXT: ori r3, r3, 4100 4427; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 4428; CHECK-P8-BE-NEXT: blr 4429entry: 4430 %0 = load i32, ptr inttoptr (i64 1000000000001 to ptr), align 4 4431 %conv = trunc i32 %0 to i8 4432 ret i8 %conv 4433} 4434 4435; Function Attrs: norecurse nounwind readonly uwtable willreturn 4436define dso_local zeroext i8 @ld_cst_align64_uint8_t_uint32_t() { 4437; CHECK-P10-LE-LABEL: ld_cst_align64_uint8_t_uint32_t: 4438; CHECK-P10-LE: # %bb.0: # %entry 4439; CHECK-P10-LE-NEXT: pli r3, 244140625 4440; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 4441; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 4442; CHECK-P10-LE-NEXT: blr 4443; 4444; CHECK-P10-BE-LABEL: ld_cst_align64_uint8_t_uint32_t: 4445; CHECK-P10-BE: # %bb.0: # %entry 4446; CHECK-P10-BE-NEXT: pli r3, 232 4447; CHECK-P10-BE-NEXT: pli r4, 3567587331 4448; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 4449; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 4450; CHECK-P10-BE-NEXT: blr 4451; 4452; CHECK-P9-LE-LABEL: ld_cst_align64_uint8_t_uint32_t: 4453; CHECK-P9-LE: # %bb.0: # %entry 4454; CHECK-P9-LE-NEXT: lis r3, 3725 4455; CHECK-P9-LE-NEXT: ori r3, r3, 19025 4456; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 4457; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 4458; CHECK-P9-LE-NEXT: blr 4459; 4460; CHECK-P9-BE-LABEL: ld_cst_align64_uint8_t_uint32_t: 4461; CHECK-P9-BE: # %bb.0: # %entry 4462; CHECK-P9-BE-NEXT: li r3, 29 4463; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 4464; CHECK-P9-BE-NEXT: oris r3, r3, 54437 4465; CHECK-P9-BE-NEXT: ori r3, r3, 4099 4466; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 4467; CHECK-P9-BE-NEXT: blr 4468; 4469; CHECK-P8-LE-LABEL: ld_cst_align64_uint8_t_uint32_t: 4470; CHECK-P8-LE: # %bb.0: # %entry 4471; CHECK-P8-LE-NEXT: lis r3, 3725 4472; CHECK-P8-LE-NEXT: ori r3, r3, 19025 4473; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 4474; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 4475; CHECK-P8-LE-NEXT: blr 4476; 4477; CHECK-P8-BE-LABEL: ld_cst_align64_uint8_t_uint32_t: 4478; CHECK-P8-BE: # %bb.0: # %entry 4479; CHECK-P8-BE-NEXT: li r3, 29 4480; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 4481; CHECK-P8-BE-NEXT: oris r3, r3, 54437 4482; CHECK-P8-BE-NEXT: ori r3, r3, 4099 4483; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 4484; CHECK-P8-BE-NEXT: blr 4485entry: 4486 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 4096 4487 %conv = trunc i32 %0 to i8 4488 ret i8 %conv 4489} 4490 4491; Function Attrs: norecurse nounwind readonly uwtable willreturn 4492define dso_local zeroext i8 @ld_0_uint8_t_uint64_t(i64 %ptr) { 4493; CHECK-LE-LABEL: ld_0_uint8_t_uint64_t: 4494; CHECK-LE: # %bb.0: # %entry 4495; CHECK-LE-NEXT: lbz r3, 0(r3) 4496; CHECK-LE-NEXT: blr 4497; 4498; CHECK-BE-LABEL: ld_0_uint8_t_uint64_t: 4499; CHECK-BE: # %bb.0: # %entry 4500; CHECK-BE-NEXT: lbz r3, 7(r3) 4501; CHECK-BE-NEXT: blr 4502entry: 4503 %0 = inttoptr i64 %ptr to ptr 4504 %1 = load i64, ptr %0, align 8 4505 %conv = trunc i64 %1 to i8 4506 ret i8 %conv 4507} 4508 4509; Function Attrs: norecurse nounwind readonly uwtable willreturn 4510define dso_local zeroext i8 @ld_align16_uint8_t_uint64_t(ptr nocapture readonly %ptr) { 4511; CHECK-LE-LABEL: ld_align16_uint8_t_uint64_t: 4512; CHECK-LE: # %bb.0: # %entry 4513; CHECK-LE-NEXT: lbz r3, 8(r3) 4514; CHECK-LE-NEXT: blr 4515; 4516; CHECK-BE-LABEL: ld_align16_uint8_t_uint64_t: 4517; CHECK-BE: # %bb.0: # %entry 4518; CHECK-BE-NEXT: lbz r3, 15(r3) 4519; CHECK-BE-NEXT: blr 4520entry: 4521 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 4522 %0 = load i64, ptr %add.ptr, align 8 4523 %conv = trunc i64 %0 to i8 4524 ret i8 %conv 4525} 4526 4527; Function Attrs: norecurse nounwind readonly uwtable willreturn 4528define dso_local zeroext i8 @ld_align32_uint8_t_uint64_t(ptr nocapture readonly %ptr) { 4529; CHECK-P10-LE-LABEL: ld_align32_uint8_t_uint64_t: 4530; CHECK-P10-LE: # %bb.0: # %entry 4531; CHECK-P10-LE-NEXT: plbz r3, 99999000(r3), 0 4532; CHECK-P10-LE-NEXT: blr 4533; 4534; CHECK-P10-BE-LABEL: ld_align32_uint8_t_uint64_t: 4535; CHECK-P10-BE: # %bb.0: # %entry 4536; CHECK-P10-BE-NEXT: plbz r3, 99999007(r3), 0 4537; CHECK-P10-BE-NEXT: blr 4538; 4539; CHECK-P9-LE-LABEL: ld_align32_uint8_t_uint64_t: 4540; CHECK-P9-LE: # %bb.0: # %entry 4541; CHECK-P9-LE-NEXT: lis r4, 1525 4542; CHECK-P9-LE-NEXT: ori r4, r4, 56600 4543; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 4544; CHECK-P9-LE-NEXT: blr 4545; 4546; CHECK-P9-BE-LABEL: ld_align32_uint8_t_uint64_t: 4547; CHECK-P9-BE: # %bb.0: # %entry 4548; CHECK-P9-BE-NEXT: lis r4, 1525 4549; CHECK-P9-BE-NEXT: ori r4, r4, 56607 4550; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 4551; CHECK-P9-BE-NEXT: blr 4552; 4553; CHECK-P8-LE-LABEL: ld_align32_uint8_t_uint64_t: 4554; CHECK-P8-LE: # %bb.0: # %entry 4555; CHECK-P8-LE-NEXT: lis r4, 1525 4556; CHECK-P8-LE-NEXT: ori r4, r4, 56600 4557; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 4558; CHECK-P8-LE-NEXT: blr 4559; 4560; CHECK-P8-BE-LABEL: ld_align32_uint8_t_uint64_t: 4561; CHECK-P8-BE: # %bb.0: # %entry 4562; CHECK-P8-BE-NEXT: lis r4, 1525 4563; CHECK-P8-BE-NEXT: ori r4, r4, 56607 4564; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 4565; CHECK-P8-BE-NEXT: blr 4566entry: 4567 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 4568 %0 = load i64, ptr %add.ptr, align 8 4569 %conv = trunc i64 %0 to i8 4570 ret i8 %conv 4571} 4572 4573; Function Attrs: norecurse nounwind readonly uwtable willreturn 4574define dso_local zeroext i8 @ld_unalign64_uint8_t_uint64_t(ptr nocapture readonly %ptr) { 4575; CHECK-P10-LE-LABEL: ld_unalign64_uint8_t_uint64_t: 4576; CHECK-P10-LE: # %bb.0: # %entry 4577; CHECK-P10-LE-NEXT: pli r4, 232 4578; CHECK-P10-LE-NEXT: pli r5, 3567587329 4579; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 4580; CHECK-P10-LE-NEXT: lbzx r3, r3, r5 4581; CHECK-P10-LE-NEXT: blr 4582; 4583; CHECK-P10-BE-LABEL: ld_unalign64_uint8_t_uint64_t: 4584; CHECK-P10-BE: # %bb.0: # %entry 4585; CHECK-P10-BE-NEXT: pli r4, 232 4586; CHECK-P10-BE-NEXT: pli r5, 3567587336 4587; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4588; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 4589; CHECK-P10-BE-NEXT: blr 4590; 4591; CHECK-P9-LE-LABEL: ld_unalign64_uint8_t_uint64_t: 4592; CHECK-P9-LE: # %bb.0: # %entry 4593; CHECK-P9-LE-NEXT: li r4, 29 4594; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 4595; CHECK-P9-LE-NEXT: oris r4, r4, 54437 4596; CHECK-P9-LE-NEXT: ori r4, r4, 4097 4597; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 4598; CHECK-P9-LE-NEXT: blr 4599; 4600; CHECK-P9-BE-LABEL: ld_unalign64_uint8_t_uint64_t: 4601; CHECK-P9-BE: # %bb.0: # %entry 4602; CHECK-P9-BE-NEXT: li r4, 29 4603; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4604; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4605; CHECK-P9-BE-NEXT: ori r4, r4, 4104 4606; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 4607; CHECK-P9-BE-NEXT: blr 4608; 4609; CHECK-P8-LE-LABEL: ld_unalign64_uint8_t_uint64_t: 4610; CHECK-P8-LE: # %bb.0: # %entry 4611; CHECK-P8-LE-NEXT: li r4, 29 4612; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 4613; CHECK-P8-LE-NEXT: oris r4, r4, 54437 4614; CHECK-P8-LE-NEXT: ori r4, r4, 4097 4615; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 4616; CHECK-P8-LE-NEXT: blr 4617; 4618; CHECK-P8-BE-LABEL: ld_unalign64_uint8_t_uint64_t: 4619; CHECK-P8-BE: # %bb.0: # %entry 4620; CHECK-P8-BE-NEXT: li r4, 29 4621; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4622; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4623; CHECK-P8-BE-NEXT: ori r4, r4, 4104 4624; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 4625; CHECK-P8-BE-NEXT: blr 4626entry: 4627 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001 4628 %0 = load i64, ptr %add.ptr, align 8 4629 %conv = trunc i64 %0 to i8 4630 ret i8 %conv 4631} 4632 4633; Function Attrs: norecurse nounwind readonly uwtable willreturn 4634define dso_local zeroext i8 @ld_align64_uint8_t_uint64_t(ptr nocapture readonly %ptr) { 4635; CHECK-P10-LE-LABEL: ld_align64_uint8_t_uint64_t: 4636; CHECK-P10-LE: # %bb.0: # %entry 4637; CHECK-P10-LE-NEXT: pli r4, 244140625 4638; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 4639; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 4640; CHECK-P10-LE-NEXT: blr 4641; 4642; CHECK-P10-BE-LABEL: ld_align64_uint8_t_uint64_t: 4643; CHECK-P10-BE: # %bb.0: # %entry 4644; CHECK-P10-BE-NEXT: pli r4, 232 4645; CHECK-P10-BE-NEXT: pli r5, 3567587335 4646; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4647; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 4648; CHECK-P10-BE-NEXT: blr 4649; 4650; CHECK-P9-LE-LABEL: ld_align64_uint8_t_uint64_t: 4651; CHECK-P9-LE: # %bb.0: # %entry 4652; CHECK-P9-LE-NEXT: lis r4, 3725 4653; CHECK-P9-LE-NEXT: ori r4, r4, 19025 4654; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 4655; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 4656; CHECK-P9-LE-NEXT: blr 4657; 4658; CHECK-P9-BE-LABEL: ld_align64_uint8_t_uint64_t: 4659; CHECK-P9-BE: # %bb.0: # %entry 4660; CHECK-P9-BE-NEXT: li r4, 29 4661; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4662; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4663; CHECK-P9-BE-NEXT: ori r4, r4, 4103 4664; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 4665; CHECK-P9-BE-NEXT: blr 4666; 4667; CHECK-P8-LE-LABEL: ld_align64_uint8_t_uint64_t: 4668; CHECK-P8-LE: # %bb.0: # %entry 4669; CHECK-P8-LE-NEXT: lis r4, 3725 4670; CHECK-P8-LE-NEXT: ori r4, r4, 19025 4671; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 4672; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 4673; CHECK-P8-LE-NEXT: blr 4674; 4675; CHECK-P8-BE-LABEL: ld_align64_uint8_t_uint64_t: 4676; CHECK-P8-BE: # %bb.0: # %entry 4677; CHECK-P8-BE-NEXT: li r4, 29 4678; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4679; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4680; CHECK-P8-BE-NEXT: ori r4, r4, 4103 4681; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 4682; CHECK-P8-BE-NEXT: blr 4683entry: 4684 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 4685 %0 = load i64, ptr %add.ptr, align 8 4686 %conv = trunc i64 %0 to i8 4687 ret i8 %conv 4688} 4689 4690; Function Attrs: norecurse nounwind readonly uwtable willreturn 4691define dso_local zeroext i8 @ld_reg_uint8_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) { 4692; CHECK-LE-LABEL: ld_reg_uint8_t_uint64_t: 4693; CHECK-LE: # %bb.0: # %entry 4694; CHECK-LE-NEXT: lbzx r3, r3, r4 4695; CHECK-LE-NEXT: blr 4696; 4697; CHECK-BE-LABEL: ld_reg_uint8_t_uint64_t: 4698; CHECK-BE: # %bb.0: # %entry 4699; CHECK-BE-NEXT: add r3, r3, r4 4700; CHECK-BE-NEXT: lbz r3, 7(r3) 4701; CHECK-BE-NEXT: blr 4702entry: 4703 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 4704 %0 = load i64, ptr %add.ptr, align 8 4705 %conv = trunc i64 %0 to i8 4706 ret i8 %conv 4707} 4708 4709; Function Attrs: norecurse nounwind readonly uwtable willreturn 4710define dso_local zeroext i8 @ld_or_uint8_t_uint64_t(i64 %ptr, i8 zeroext %off) { 4711; CHECK-LE-LABEL: ld_or_uint8_t_uint64_t: 4712; CHECK-LE: # %bb.0: # %entry 4713; CHECK-LE-NEXT: or r3, r4, r3 4714; CHECK-LE-NEXT: lbz r3, 0(r3) 4715; CHECK-LE-NEXT: blr 4716; 4717; CHECK-BE-LABEL: ld_or_uint8_t_uint64_t: 4718; CHECK-BE: # %bb.0: # %entry 4719; CHECK-BE-NEXT: or r3, r4, r3 4720; CHECK-BE-NEXT: lbz r3, 7(r3) 4721; CHECK-BE-NEXT: blr 4722entry: 4723 %conv = zext i8 %off to i64 4724 %or = or i64 %conv, %ptr 4725 %0 = inttoptr i64 %or to ptr 4726 %1 = load i64, ptr %0, align 8 4727 %conv1 = trunc i64 %1 to i8 4728 ret i8 %conv1 4729} 4730 4731; Function Attrs: norecurse nounwind readonly uwtable willreturn 4732define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_uint64_t(i64 %ptr) { 4733; CHECK-LE-LABEL: ld_not_disjoint16_uint8_t_uint64_t: 4734; CHECK-LE: # %bb.0: # %entry 4735; CHECK-LE-NEXT: ori r3, r3, 6 4736; CHECK-LE-NEXT: lbz r3, 0(r3) 4737; CHECK-LE-NEXT: blr 4738; 4739; CHECK-BE-LABEL: ld_not_disjoint16_uint8_t_uint64_t: 4740; CHECK-BE: # %bb.0: # %entry 4741; CHECK-BE-NEXT: ori r3, r3, 6 4742; CHECK-BE-NEXT: lbz r3, 7(r3) 4743; CHECK-BE-NEXT: blr 4744entry: 4745 %or = or i64 %ptr, 6 4746 %0 = inttoptr i64 %or to ptr 4747 %1 = load i64, ptr %0, align 8 4748 %conv = trunc i64 %1 to i8 4749 ret i8 %conv 4750} 4751 4752; Function Attrs: norecurse nounwind readonly uwtable willreturn 4753define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_uint64_t(i64 %ptr) { 4754; CHECK-LE-LABEL: ld_disjoint_align16_uint8_t_uint64_t: 4755; CHECK-LE: # %bb.0: # %entry 4756; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 4757; CHECK-LE-NEXT: lbz r3, 24(r3) 4758; CHECK-LE-NEXT: blr 4759; 4760; CHECK-BE-LABEL: ld_disjoint_align16_uint8_t_uint64_t: 4761; CHECK-BE: # %bb.0: # %entry 4762; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 4763; CHECK-BE-NEXT: lbz r3, 31(r3) 4764; CHECK-BE-NEXT: blr 4765entry: 4766 %and = and i64 %ptr, -4096 4767 %or = or i64 %and, 24 4768 %0 = inttoptr i64 %or to ptr 4769 %1 = load i64, ptr %0, align 8 4770 %conv = trunc i64 %1 to i8 4771 ret i8 %conv 4772} 4773 4774; Function Attrs: norecurse nounwind readonly uwtable willreturn 4775define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_uint64_t(i64 %ptr) { 4776; CHECK-LE-LABEL: ld_not_disjoint32_uint8_t_uint64_t: 4777; CHECK-LE: # %bb.0: # %entry 4778; CHECK-LE-NEXT: ori r3, r3, 34463 4779; CHECK-LE-NEXT: oris r3, r3, 1 4780; CHECK-LE-NEXT: lbz r3, 0(r3) 4781; CHECK-LE-NEXT: blr 4782; 4783; CHECK-BE-LABEL: ld_not_disjoint32_uint8_t_uint64_t: 4784; CHECK-BE: # %bb.0: # %entry 4785; CHECK-BE-NEXT: ori r3, r3, 34463 4786; CHECK-BE-NEXT: oris r3, r3, 1 4787; CHECK-BE-NEXT: lbz r3, 7(r3) 4788; CHECK-BE-NEXT: blr 4789entry: 4790 %or = or i64 %ptr, 99999 4791 %0 = inttoptr i64 %or to ptr 4792 %1 = load i64, ptr %0, align 8 4793 %conv = trunc i64 %1 to i8 4794 ret i8 %conv 4795} 4796 4797; Function Attrs: norecurse nounwind readonly uwtable willreturn 4798define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_uint64_t(i64 %ptr) { 4799; CHECK-P10-LE-LABEL: ld_disjoint_align32_uint8_t_uint64_t: 4800; CHECK-P10-LE: # %bb.0: # %entry 4801; CHECK-P10-LE-NEXT: lis r4, -15264 4802; CHECK-P10-LE-NEXT: and r3, r3, r4 4803; CHECK-P10-LE-NEXT: plbz r3, 999990000(r3), 0 4804; CHECK-P10-LE-NEXT: blr 4805; 4806; CHECK-P10-BE-LABEL: ld_disjoint_align32_uint8_t_uint64_t: 4807; CHECK-P10-BE: # %bb.0: # %entry 4808; CHECK-P10-BE-NEXT: lis r4, -15264 4809; CHECK-P10-BE-NEXT: and r3, r3, r4 4810; CHECK-P10-BE-NEXT: plbz r3, 999990007(r3), 0 4811; CHECK-P10-BE-NEXT: blr 4812; 4813; CHECK-P9-LE-LABEL: ld_disjoint_align32_uint8_t_uint64_t: 4814; CHECK-P9-LE: # %bb.0: # %entry 4815; CHECK-P9-LE-NEXT: lis r4, -15264 4816; CHECK-P9-LE-NEXT: and r3, r3, r4 4817; CHECK-P9-LE-NEXT: lis r4, 15258 4818; CHECK-P9-LE-NEXT: ori r4, r4, 41712 4819; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 4820; CHECK-P9-LE-NEXT: blr 4821; 4822; CHECK-P9-BE-LABEL: ld_disjoint_align32_uint8_t_uint64_t: 4823; CHECK-P9-BE: # %bb.0: # %entry 4824; CHECK-P9-BE-NEXT: lis r4, -15264 4825; CHECK-P9-BE-NEXT: and r3, r3, r4 4826; CHECK-P9-BE-NEXT: lis r4, 15258 4827; CHECK-P9-BE-NEXT: ori r4, r4, 41719 4828; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 4829; CHECK-P9-BE-NEXT: blr 4830; 4831; CHECK-P8-LE-LABEL: ld_disjoint_align32_uint8_t_uint64_t: 4832; CHECK-P8-LE: # %bb.0: # %entry 4833; CHECK-P8-LE-NEXT: lis r4, -15264 4834; CHECK-P8-LE-NEXT: and r3, r3, r4 4835; CHECK-P8-LE-NEXT: lis r4, 15258 4836; CHECK-P8-LE-NEXT: ori r4, r4, 41712 4837; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 4838; CHECK-P8-LE-NEXT: blr 4839; 4840; CHECK-P8-BE-LABEL: ld_disjoint_align32_uint8_t_uint64_t: 4841; CHECK-P8-BE: # %bb.0: # %entry 4842; CHECK-P8-BE-NEXT: lis r4, -15264 4843; CHECK-P8-BE-NEXT: and r3, r3, r4 4844; CHECK-P8-BE-NEXT: lis r4, 15258 4845; CHECK-P8-BE-NEXT: ori r4, r4, 41719 4846; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 4847; CHECK-P8-BE-NEXT: blr 4848entry: 4849 %and = and i64 %ptr, -1000341504 4850 %or = or i64 %and, 999990000 4851 %0 = inttoptr i64 %or to ptr 4852 %1 = load i64, ptr %0, align 16 4853 %conv = trunc i64 %1 to i8 4854 ret i8 %conv 4855} 4856 4857; Function Attrs: norecurse nounwind readonly uwtable willreturn 4858define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_uint64_t(i64 %ptr) { 4859; CHECK-P10-LE-LABEL: ld_not_disjoint64_uint8_t_uint64_t: 4860; CHECK-P10-LE: # %bb.0: # %entry 4861; CHECK-P10-LE-NEXT: pli r4, 232 4862; CHECK-P10-LE-NEXT: pli r5, 3567587329 4863; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 4864; CHECK-P10-LE-NEXT: or r3, r3, r5 4865; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 4866; CHECK-P10-LE-NEXT: blr 4867; 4868; CHECK-P10-BE-LABEL: ld_not_disjoint64_uint8_t_uint64_t: 4869; CHECK-P10-BE: # %bb.0: # %entry 4870; CHECK-P10-BE-NEXT: pli r4, 232 4871; CHECK-P10-BE-NEXT: pli r5, 3567587329 4872; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4873; CHECK-P10-BE-NEXT: or r3, r3, r5 4874; CHECK-P10-BE-NEXT: lbz r3, 7(r3) 4875; CHECK-P10-BE-NEXT: blr 4876; 4877; CHECK-P9-LE-LABEL: ld_not_disjoint64_uint8_t_uint64_t: 4878; CHECK-P9-LE: # %bb.0: # %entry 4879; CHECK-P9-LE-NEXT: li r4, 29 4880; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 4881; CHECK-P9-LE-NEXT: oris r4, r4, 54437 4882; CHECK-P9-LE-NEXT: ori r4, r4, 4097 4883; CHECK-P9-LE-NEXT: or r3, r3, r4 4884; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 4885; CHECK-P9-LE-NEXT: blr 4886; 4887; CHECK-P9-BE-LABEL: ld_not_disjoint64_uint8_t_uint64_t: 4888; CHECK-P9-BE: # %bb.0: # %entry 4889; CHECK-P9-BE-NEXT: li r4, 29 4890; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4891; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4892; CHECK-P9-BE-NEXT: ori r4, r4, 4097 4893; CHECK-P9-BE-NEXT: or r3, r3, r4 4894; CHECK-P9-BE-NEXT: lbz r3, 7(r3) 4895; CHECK-P9-BE-NEXT: blr 4896; 4897; CHECK-P8-LE-LABEL: ld_not_disjoint64_uint8_t_uint64_t: 4898; CHECK-P8-LE: # %bb.0: # %entry 4899; CHECK-P8-LE-NEXT: li r4, 29 4900; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 4901; CHECK-P8-LE-NEXT: oris r4, r4, 54437 4902; CHECK-P8-LE-NEXT: ori r4, r4, 4097 4903; CHECK-P8-LE-NEXT: or r3, r3, r4 4904; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 4905; CHECK-P8-LE-NEXT: blr 4906; 4907; CHECK-P8-BE-LABEL: ld_not_disjoint64_uint8_t_uint64_t: 4908; CHECK-P8-BE: # %bb.0: # %entry 4909; CHECK-P8-BE-NEXT: li r4, 29 4910; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4911; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4912; CHECK-P8-BE-NEXT: ori r4, r4, 4097 4913; CHECK-P8-BE-NEXT: or r3, r3, r4 4914; CHECK-P8-BE-NEXT: lbz r3, 7(r3) 4915; CHECK-P8-BE-NEXT: blr 4916entry: 4917 %or = or i64 %ptr, 1000000000001 4918 %0 = inttoptr i64 %or to ptr 4919 %1 = load i64, ptr %0, align 8 4920 %conv = trunc i64 %1 to i8 4921 ret i8 %conv 4922} 4923 4924; Function Attrs: norecurse nounwind readonly uwtable willreturn 4925define dso_local zeroext i8 @ld_disjoint_unalign64_uint8_t_uint64_t(i64 %ptr) { 4926; CHECK-P10-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint64_t: 4927; CHECK-P10-LE: # %bb.0: # %entry 4928; CHECK-P10-LE-NEXT: pli r4, 232 4929; CHECK-P10-LE-NEXT: pli r5, 3567587329 4930; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 4931; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 4932; CHECK-P10-LE-NEXT: lbzx r3, r3, r5 4933; CHECK-P10-LE-NEXT: blr 4934; 4935; CHECK-P10-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint64_t: 4936; CHECK-P10-BE: # %bb.0: # %entry 4937; CHECK-P10-BE-NEXT: pli r4, 232 4938; CHECK-P10-BE-NEXT: pli r5, 3567587336 4939; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 4940; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4941; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 4942; CHECK-P10-BE-NEXT: blr 4943; 4944; CHECK-P9-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint64_t: 4945; CHECK-P9-LE: # %bb.0: # %entry 4946; CHECK-P9-LE-NEXT: li r4, 29 4947; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 4948; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 4949; CHECK-P9-LE-NEXT: oris r4, r4, 54437 4950; CHECK-P9-LE-NEXT: ori r4, r4, 4097 4951; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 4952; CHECK-P9-LE-NEXT: blr 4953; 4954; CHECK-P9-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint64_t: 4955; CHECK-P9-BE: # %bb.0: # %entry 4956; CHECK-P9-BE-NEXT: li r4, 29 4957; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 4958; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4959; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4960; CHECK-P9-BE-NEXT: ori r4, r4, 4104 4961; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 4962; CHECK-P9-BE-NEXT: blr 4963; 4964; CHECK-P8-LE-LABEL: ld_disjoint_unalign64_uint8_t_uint64_t: 4965; CHECK-P8-LE: # %bb.0: # %entry 4966; CHECK-P8-LE-NEXT: li r4, 29 4967; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 4968; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 4969; CHECK-P8-LE-NEXT: oris r4, r4, 54437 4970; CHECK-P8-LE-NEXT: ori r4, r4, 4097 4971; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 4972; CHECK-P8-LE-NEXT: blr 4973; 4974; CHECK-P8-BE-LABEL: ld_disjoint_unalign64_uint8_t_uint64_t: 4975; CHECK-P8-BE: # %bb.0: # %entry 4976; CHECK-P8-BE-NEXT: li r4, 29 4977; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 4978; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4979; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4980; CHECK-P8-BE-NEXT: ori r4, r4, 4104 4981; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 4982; CHECK-P8-BE-NEXT: blr 4983entry: 4984 %and = and i64 %ptr, -1099511627776 4985 %or = or i64 %and, 1000000000001 4986 %0 = inttoptr i64 %or to ptr 4987 %1 = load i64, ptr %0, align 8 4988 %conv = trunc i64 %1 to i8 4989 ret i8 %conv 4990} 4991 4992; Function Attrs: norecurse nounwind readonly uwtable willreturn 4993define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_uint64_t(i64 %ptr) { 4994; CHECK-P10-LE-LABEL: ld_disjoint_align64_uint8_t_uint64_t: 4995; CHECK-P10-LE: # %bb.0: # %entry 4996; CHECK-P10-LE-NEXT: pli r4, 244140625 4997; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 4998; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 4999; CHECK-P10-LE-NEXT: lbzx r3, r3, r4 5000; CHECK-P10-LE-NEXT: blr 5001; 5002; CHECK-P10-BE-LABEL: ld_disjoint_align64_uint8_t_uint64_t: 5003; CHECK-P10-BE: # %bb.0: # %entry 5004; CHECK-P10-BE-NEXT: pli r4, 232 5005; CHECK-P10-BE-NEXT: pli r5, 3567587335 5006; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 5007; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 5008; CHECK-P10-BE-NEXT: lbzx r3, r3, r5 5009; CHECK-P10-BE-NEXT: blr 5010; 5011; CHECK-P9-LE-LABEL: ld_disjoint_align64_uint8_t_uint64_t: 5012; CHECK-P9-LE: # %bb.0: # %entry 5013; CHECK-P9-LE-NEXT: lis r4, 3725 5014; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 5015; CHECK-P9-LE-NEXT: ori r4, r4, 19025 5016; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 5017; CHECK-P9-LE-NEXT: lbzx r3, r3, r4 5018; CHECK-P9-LE-NEXT: blr 5019; 5020; CHECK-P9-BE-LABEL: ld_disjoint_align64_uint8_t_uint64_t: 5021; CHECK-P9-BE: # %bb.0: # %entry 5022; CHECK-P9-BE-NEXT: li r4, 29 5023; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 5024; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 5025; CHECK-P9-BE-NEXT: oris r4, r4, 54437 5026; CHECK-P9-BE-NEXT: ori r4, r4, 4103 5027; CHECK-P9-BE-NEXT: lbzx r3, r3, r4 5028; CHECK-P9-BE-NEXT: blr 5029; 5030; CHECK-P8-LE-LABEL: ld_disjoint_align64_uint8_t_uint64_t: 5031; CHECK-P8-LE: # %bb.0: # %entry 5032; CHECK-P8-LE-NEXT: lis r4, 3725 5033; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 5034; CHECK-P8-LE-NEXT: ori r4, r4, 19025 5035; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 5036; CHECK-P8-LE-NEXT: lbzx r3, r3, r4 5037; CHECK-P8-LE-NEXT: blr 5038; 5039; CHECK-P8-BE-LABEL: ld_disjoint_align64_uint8_t_uint64_t: 5040; CHECK-P8-BE: # %bb.0: # %entry 5041; CHECK-P8-BE-NEXT: li r4, 29 5042; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 5043; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 5044; CHECK-P8-BE-NEXT: oris r4, r4, 54437 5045; CHECK-P8-BE-NEXT: ori r4, r4, 4103 5046; CHECK-P8-BE-NEXT: lbzx r3, r3, r4 5047; CHECK-P8-BE-NEXT: blr 5048entry: 5049 %and = and i64 %ptr, -1099511627776 5050 %or = or i64 %and, 1000000000000 5051 %0 = inttoptr i64 %or to ptr 5052 %1 = load i64, ptr %0, align 4096 5053 %conv = trunc i64 %1 to i8 5054 ret i8 %conv 5055} 5056 5057; Function Attrs: norecurse nounwind readonly uwtable willreturn 5058define dso_local zeroext i8 @ld_cst_align16_uint8_t_uint64_t() { 5059; CHECK-LE-LABEL: ld_cst_align16_uint8_t_uint64_t: 5060; CHECK-LE: # %bb.0: # %entry 5061; CHECK-LE-NEXT: lbz r3, 4080(0) 5062; CHECK-LE-NEXT: blr 5063; 5064; CHECK-BE-LABEL: ld_cst_align16_uint8_t_uint64_t: 5065; CHECK-BE: # %bb.0: # %entry 5066; CHECK-BE-NEXT: lbz r3, 4087(0) 5067; CHECK-BE-NEXT: blr 5068entry: 5069 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 16 5070 %conv = trunc i64 %0 to i8 5071 ret i8 %conv 5072} 5073 5074; Function Attrs: norecurse nounwind readonly uwtable willreturn 5075define dso_local zeroext i8 @ld_cst_align32_uint8_t_uint64_t() { 5076; CHECK-LE-LABEL: ld_cst_align32_uint8_t_uint64_t: 5077; CHECK-LE: # %bb.0: # %entry 5078; CHECK-LE-NEXT: lis r3, 153 5079; CHECK-LE-NEXT: lbz r3, -27108(r3) 5080; CHECK-LE-NEXT: blr 5081; 5082; CHECK-BE-LABEL: ld_cst_align32_uint8_t_uint64_t: 5083; CHECK-BE: # %bb.0: # %entry 5084; CHECK-BE-NEXT: lis r3, 153 5085; CHECK-BE-NEXT: lbz r3, -27101(r3) 5086; CHECK-BE-NEXT: blr 5087entry: 5088 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 8 5089 %conv = trunc i64 %0 to i8 5090 ret i8 %conv 5091} 5092 5093; Function Attrs: norecurse nounwind readonly uwtable willreturn 5094define dso_local zeroext i8 @ld_cst_unalign64_uint8_t_uint64_t() { 5095; CHECK-P10-LE-LABEL: ld_cst_unalign64_uint8_t_uint64_t: 5096; CHECK-P10-LE: # %bb.0: # %entry 5097; CHECK-P10-LE-NEXT: pli r3, 232 5098; CHECK-P10-LE-NEXT: pli r4, 3567587329 5099; CHECK-P10-LE-NEXT: rldimi r4, r3, 32, 0 5100; CHECK-P10-LE-NEXT: lbz r3, 0(r4) 5101; CHECK-P10-LE-NEXT: blr 5102; 5103; CHECK-P10-BE-LABEL: ld_cst_unalign64_uint8_t_uint64_t: 5104; CHECK-P10-BE: # %bb.0: # %entry 5105; CHECK-P10-BE-NEXT: pli r3, 232 5106; CHECK-P10-BE-NEXT: pli r4, 3567587336 5107; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 5108; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 5109; CHECK-P10-BE-NEXT: blr 5110; 5111; CHECK-P9-LE-LABEL: ld_cst_unalign64_uint8_t_uint64_t: 5112; CHECK-P9-LE: # %bb.0: # %entry 5113; CHECK-P9-LE-NEXT: li r3, 29 5114; CHECK-P9-LE-NEXT: rldic r3, r3, 35, 24 5115; CHECK-P9-LE-NEXT: oris r3, r3, 54437 5116; CHECK-P9-LE-NEXT: ori r3, r3, 4097 5117; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 5118; CHECK-P9-LE-NEXT: blr 5119; 5120; CHECK-P9-BE-LABEL: ld_cst_unalign64_uint8_t_uint64_t: 5121; CHECK-P9-BE: # %bb.0: # %entry 5122; CHECK-P9-BE-NEXT: li r3, 29 5123; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 5124; CHECK-P9-BE-NEXT: oris r3, r3, 54437 5125; CHECK-P9-BE-NEXT: ori r3, r3, 4104 5126; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 5127; CHECK-P9-BE-NEXT: blr 5128; 5129; CHECK-P8-LE-LABEL: ld_cst_unalign64_uint8_t_uint64_t: 5130; CHECK-P8-LE: # %bb.0: # %entry 5131; CHECK-P8-LE-NEXT: li r3, 29 5132; CHECK-P8-LE-NEXT: rldic r3, r3, 35, 24 5133; CHECK-P8-LE-NEXT: oris r3, r3, 54437 5134; CHECK-P8-LE-NEXT: ori r3, r3, 4097 5135; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 5136; CHECK-P8-LE-NEXT: blr 5137; 5138; CHECK-P8-BE-LABEL: ld_cst_unalign64_uint8_t_uint64_t: 5139; CHECK-P8-BE: # %bb.0: # %entry 5140; CHECK-P8-BE-NEXT: li r3, 29 5141; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 5142; CHECK-P8-BE-NEXT: oris r3, r3, 54437 5143; CHECK-P8-BE-NEXT: ori r3, r3, 4104 5144; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 5145; CHECK-P8-BE-NEXT: blr 5146entry: 5147 %0 = load i64, ptr inttoptr (i64 1000000000001 to ptr), align 8 5148 %conv = trunc i64 %0 to i8 5149 ret i8 %conv 5150} 5151 5152; Function Attrs: norecurse nounwind readonly uwtable willreturn 5153define dso_local zeroext i8 @ld_cst_align64_uint8_t_uint64_t() { 5154; CHECK-P10-LE-LABEL: ld_cst_align64_uint8_t_uint64_t: 5155; CHECK-P10-LE: # %bb.0: # %entry 5156; CHECK-P10-LE-NEXT: pli r3, 244140625 5157; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 5158; CHECK-P10-LE-NEXT: lbz r3, 0(r3) 5159; CHECK-P10-LE-NEXT: blr 5160; 5161; CHECK-P10-BE-LABEL: ld_cst_align64_uint8_t_uint64_t: 5162; CHECK-P10-BE: # %bb.0: # %entry 5163; CHECK-P10-BE-NEXT: pli r3, 232 5164; CHECK-P10-BE-NEXT: pli r4, 3567587335 5165; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 5166; CHECK-P10-BE-NEXT: lbz r3, 0(r4) 5167; CHECK-P10-BE-NEXT: blr 5168; 5169; CHECK-P9-LE-LABEL: ld_cst_align64_uint8_t_uint64_t: 5170; CHECK-P9-LE: # %bb.0: # %entry 5171; CHECK-P9-LE-NEXT: lis r3, 3725 5172; CHECK-P9-LE-NEXT: ori r3, r3, 19025 5173; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 5174; CHECK-P9-LE-NEXT: lbz r3, 0(r3) 5175; CHECK-P9-LE-NEXT: blr 5176; 5177; CHECK-P9-BE-LABEL: ld_cst_align64_uint8_t_uint64_t: 5178; CHECK-P9-BE: # %bb.0: # %entry 5179; CHECK-P9-BE-NEXT: li r3, 29 5180; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 5181; CHECK-P9-BE-NEXT: oris r3, r3, 54437 5182; CHECK-P9-BE-NEXT: ori r3, r3, 4103 5183; CHECK-P9-BE-NEXT: lbz r3, 0(r3) 5184; CHECK-P9-BE-NEXT: blr 5185; 5186; CHECK-P8-LE-LABEL: ld_cst_align64_uint8_t_uint64_t: 5187; CHECK-P8-LE: # %bb.0: # %entry 5188; CHECK-P8-LE-NEXT: lis r3, 3725 5189; CHECK-P8-LE-NEXT: ori r3, r3, 19025 5190; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 5191; CHECK-P8-LE-NEXT: lbz r3, 0(r3) 5192; CHECK-P8-LE-NEXT: blr 5193; 5194; CHECK-P8-BE-LABEL: ld_cst_align64_uint8_t_uint64_t: 5195; CHECK-P8-BE: # %bb.0: # %entry 5196; CHECK-P8-BE-NEXT: li r3, 29 5197; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 5198; CHECK-P8-BE-NEXT: oris r3, r3, 54437 5199; CHECK-P8-BE-NEXT: ori r3, r3, 4103 5200; CHECK-P8-BE-NEXT: lbz r3, 0(r3) 5201; CHECK-P8-BE-NEXT: blr 5202entry: 5203 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 4096 5204 %conv = trunc i64 %0 to i8 5205 ret i8 %conv 5206} 5207 5208; Function Attrs: norecurse nounwind readonly uwtable willreturn 5209define dso_local zeroext i8 @ld_0_uint8_t_float(i64 %ptr) { 5210; CHECK-LABEL: ld_0_uint8_t_float: 5211; CHECK: # %bb.0: # %entry 5212; CHECK-NEXT: lfs f0, 0(r3) 5213; CHECK-NEXT: xscvdpsxws f0, f0 5214; CHECK-NEXT: mffprwz r3, f0 5215; CHECK-NEXT: blr 5216entry: 5217 %0 = inttoptr i64 %ptr to ptr 5218 %1 = load float, ptr %0, align 4 5219 %conv = fptoui float %1 to i8 5220 ret i8 %conv 5221} 5222 5223; Function Attrs: norecurse nounwind readonly uwtable willreturn 5224define dso_local zeroext i8 @ld_align16_uint8_t_float(ptr nocapture readonly %ptr) { 5225; CHECK-LABEL: ld_align16_uint8_t_float: 5226; CHECK: # %bb.0: # %entry 5227; CHECK-NEXT: lfs f0, 8(r3) 5228; CHECK-NEXT: xscvdpsxws f0, f0 5229; CHECK-NEXT: mffprwz r3, f0 5230; CHECK-NEXT: blr 5231entry: 5232 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 5233 %0 = load float, ptr %add.ptr, align 4 5234 %conv = fptoui float %0 to i8 5235 ret i8 %conv 5236} 5237 5238; Function Attrs: norecurse nounwind readonly uwtable willreturn 5239define dso_local zeroext i8 @ld_align32_uint8_t_float(ptr nocapture readonly %ptr) { 5240; CHECK-P10-LABEL: ld_align32_uint8_t_float: 5241; CHECK-P10: # %bb.0: # %entry 5242; CHECK-P10-NEXT: plfs f0, 99999000(r3), 0 5243; CHECK-P10-NEXT: xscvdpsxws f0, f0 5244; CHECK-P10-NEXT: mffprwz r3, f0 5245; CHECK-P10-NEXT: blr 5246; 5247; CHECK-PREP10-LABEL: ld_align32_uint8_t_float: 5248; CHECK-PREP10: # %bb.0: # %entry 5249; CHECK-PREP10-NEXT: lis r4, 1525 5250; CHECK-PREP10-NEXT: ori r4, r4, 56600 5251; CHECK-PREP10-NEXT: lfsx f0, r3, r4 5252; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5253; CHECK-PREP10-NEXT: mffprwz r3, f0 5254; CHECK-PREP10-NEXT: blr 5255entry: 5256 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 5257 %0 = load float, ptr %add.ptr, align 4 5258 %conv = fptoui float %0 to i8 5259 ret i8 %conv 5260} 5261 5262; Function Attrs: norecurse nounwind readonly uwtable willreturn 5263define dso_local zeroext i8 @ld_unalign64_uint8_t_float(ptr nocapture readonly %ptr) { 5264; CHECK-P10-LABEL: ld_unalign64_uint8_t_float: 5265; CHECK-P10: # %bb.0: # %entry 5266; CHECK-P10-NEXT: pli r4, 232 5267; CHECK-P10-NEXT: pli r5, 3567587329 5268; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5269; CHECK-P10-NEXT: lfsx f0, r3, r5 5270; CHECK-P10-NEXT: xscvdpsxws f0, f0 5271; CHECK-P10-NEXT: mffprwz r3, f0 5272; CHECK-P10-NEXT: blr 5273; 5274; CHECK-PREP10-LABEL: ld_unalign64_uint8_t_float: 5275; CHECK-PREP10: # %bb.0: # %entry 5276; CHECK-PREP10-NEXT: li r4, 29 5277; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 5278; CHECK-PREP10-NEXT: oris r4, r4, 54437 5279; CHECK-PREP10-NEXT: ori r4, r4, 4097 5280; CHECK-PREP10-NEXT: lfsx f0, r3, r4 5281; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5282; CHECK-PREP10-NEXT: mffprwz r3, f0 5283; CHECK-PREP10-NEXT: blr 5284entry: 5285 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001 5286 %0 = load float, ptr %add.ptr, align 4 5287 %conv = fptoui float %0 to i8 5288 ret i8 %conv 5289} 5290 5291; Function Attrs: norecurse nounwind readonly uwtable willreturn 5292define dso_local zeroext i8 @ld_align64_uint8_t_float(ptr nocapture readonly %ptr) { 5293; CHECK-P10-LABEL: ld_align64_uint8_t_float: 5294; CHECK-P10: # %bb.0: # %entry 5295; CHECK-P10-NEXT: pli r4, 244140625 5296; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5297; CHECK-P10-NEXT: lfsx f0, r3, r4 5298; CHECK-P10-NEXT: xscvdpsxws f0, f0 5299; CHECK-P10-NEXT: mffprwz r3, f0 5300; CHECK-P10-NEXT: blr 5301; 5302; CHECK-PREP10-LABEL: ld_align64_uint8_t_float: 5303; CHECK-PREP10: # %bb.0: # %entry 5304; CHECK-PREP10-NEXT: lis r4, 3725 5305; CHECK-PREP10-NEXT: ori r4, r4, 19025 5306; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5307; CHECK-PREP10-NEXT: lfsx f0, r3, r4 5308; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5309; CHECK-PREP10-NEXT: mffprwz r3, f0 5310; CHECK-PREP10-NEXT: blr 5311entry: 5312 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 5313 %0 = load float, ptr %add.ptr, align 4 5314 %conv = fptoui float %0 to i8 5315 ret i8 %conv 5316} 5317 5318; Function Attrs: norecurse nounwind readonly uwtable willreturn 5319define dso_local zeroext i8 @ld_reg_uint8_t_float(ptr nocapture readonly %ptr, i64 %off) { 5320; CHECK-LABEL: ld_reg_uint8_t_float: 5321; CHECK: # %bb.0: # %entry 5322; CHECK-NEXT: lfsx f0, r3, r4 5323; CHECK-NEXT: xscvdpsxws f0, f0 5324; CHECK-NEXT: mffprwz r3, f0 5325; CHECK-NEXT: blr 5326entry: 5327 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 5328 %0 = load float, ptr %add.ptr, align 4 5329 %conv = fptoui float %0 to i8 5330 ret i8 %conv 5331} 5332 5333; Function Attrs: norecurse nounwind readonly uwtable willreturn 5334define dso_local zeroext i8 @ld_or_uint8_t_float(i64 %ptr, i8 zeroext %off) { 5335; CHECK-LABEL: ld_or_uint8_t_float: 5336; CHECK: # %bb.0: # %entry 5337; CHECK-NEXT: or r3, r4, r3 5338; CHECK-NEXT: lfs f0, 0(r3) 5339; CHECK-NEXT: xscvdpsxws f0, f0 5340; CHECK-NEXT: mffprwz r3, f0 5341; CHECK-NEXT: blr 5342entry: 5343 %conv = zext i8 %off to i64 5344 %or = or i64 %conv, %ptr 5345 %0 = inttoptr i64 %or to ptr 5346 %1 = load float, ptr %0, align 4 5347 %conv1 = fptoui float %1 to i8 5348 ret i8 %conv1 5349} 5350 5351; Function Attrs: norecurse nounwind readonly uwtable willreturn 5352define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_float(i64 %ptr) { 5353; CHECK-LABEL: ld_not_disjoint16_uint8_t_float: 5354; CHECK: # %bb.0: # %entry 5355; CHECK-NEXT: ori r3, r3, 6 5356; CHECK-NEXT: lfs f0, 0(r3) 5357; CHECK-NEXT: xscvdpsxws f0, f0 5358; CHECK-NEXT: mffprwz r3, f0 5359; CHECK-NEXT: blr 5360entry: 5361 %or = or i64 %ptr, 6 5362 %0 = inttoptr i64 %or to ptr 5363 %1 = load float, ptr %0, align 4 5364 %conv = fptoui float %1 to i8 5365 ret i8 %conv 5366} 5367 5368; Function Attrs: norecurse nounwind readonly uwtable willreturn 5369define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_float(i64 %ptr) { 5370; CHECK-LABEL: ld_disjoint_align16_uint8_t_float: 5371; CHECK: # %bb.0: # %entry 5372; CHECK-NEXT: rldicr r3, r3, 0, 51 5373; CHECK-NEXT: lfs f0, 24(r3) 5374; CHECK-NEXT: xscvdpsxws f0, f0 5375; CHECK-NEXT: mffprwz r3, f0 5376; CHECK-NEXT: blr 5377entry: 5378 %and = and i64 %ptr, -4096 5379 %or = or i64 %and, 24 5380 %0 = inttoptr i64 %or to ptr 5381 %1 = load float, ptr %0, align 8 5382 %conv = fptoui float %1 to i8 5383 ret i8 %conv 5384} 5385 5386; Function Attrs: norecurse nounwind readonly uwtable willreturn 5387define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_float(i64 %ptr) { 5388; CHECK-LABEL: ld_not_disjoint32_uint8_t_float: 5389; CHECK: # %bb.0: # %entry 5390; CHECK-NEXT: ori r3, r3, 34463 5391; CHECK-NEXT: oris r3, r3, 1 5392; CHECK-NEXT: lfs f0, 0(r3) 5393; CHECK-NEXT: xscvdpsxws f0, f0 5394; CHECK-NEXT: mffprwz r3, f0 5395; CHECK-NEXT: blr 5396entry: 5397 %or = or i64 %ptr, 99999 5398 %0 = inttoptr i64 %or to ptr 5399 %1 = load float, ptr %0, align 4 5400 %conv = fptoui float %1 to i8 5401 ret i8 %conv 5402} 5403 5404; Function Attrs: norecurse nounwind readonly uwtable willreturn 5405define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_float(i64 %ptr) { 5406; CHECK-P10-LABEL: ld_disjoint_align32_uint8_t_float: 5407; CHECK-P10: # %bb.0: # %entry 5408; CHECK-P10-NEXT: lis r4, -15264 5409; CHECK-P10-NEXT: and r3, r3, r4 5410; CHECK-P10-NEXT: plfs f0, 999990000(r3), 0 5411; CHECK-P10-NEXT: xscvdpsxws f0, f0 5412; CHECK-P10-NEXT: mffprwz r3, f0 5413; CHECK-P10-NEXT: blr 5414; 5415; CHECK-PREP10-LABEL: ld_disjoint_align32_uint8_t_float: 5416; CHECK-PREP10: # %bb.0: # %entry 5417; CHECK-PREP10-NEXT: lis r4, -15264 5418; CHECK-PREP10-NEXT: and r3, r3, r4 5419; CHECK-PREP10-NEXT: lis r4, 15258 5420; CHECK-PREP10-NEXT: ori r4, r4, 41712 5421; CHECK-PREP10-NEXT: lfsx f0, r3, r4 5422; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5423; CHECK-PREP10-NEXT: mffprwz r3, f0 5424; CHECK-PREP10-NEXT: blr 5425entry: 5426 %and = and i64 %ptr, -1000341504 5427 %or = or i64 %and, 999990000 5428 %0 = inttoptr i64 %or to ptr 5429 %1 = load float, ptr %0, align 16 5430 %conv = fptoui float %1 to i8 5431 ret i8 %conv 5432} 5433 5434; Function Attrs: norecurse nounwind readonly uwtable willreturn 5435define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_float(i64 %ptr) { 5436; CHECK-P10-LABEL: ld_not_disjoint64_uint8_t_float: 5437; CHECK-P10: # %bb.0: # %entry 5438; CHECK-P10-NEXT: pli r4, 232 5439; CHECK-P10-NEXT: pli r5, 3567587329 5440; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5441; CHECK-P10-NEXT: or r3, r3, r5 5442; CHECK-P10-NEXT: lfs f0, 0(r3) 5443; CHECK-P10-NEXT: xscvdpsxws f0, f0 5444; CHECK-P10-NEXT: mffprwz r3, f0 5445; CHECK-P10-NEXT: blr 5446; 5447; CHECK-PREP10-LABEL: ld_not_disjoint64_uint8_t_float: 5448; CHECK-PREP10: # %bb.0: # %entry 5449; CHECK-PREP10-NEXT: li r4, 29 5450; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 5451; CHECK-PREP10-NEXT: oris r4, r4, 54437 5452; CHECK-PREP10-NEXT: ori r4, r4, 4097 5453; CHECK-PREP10-NEXT: or r3, r3, r4 5454; CHECK-PREP10-NEXT: lfs f0, 0(r3) 5455; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5456; CHECK-PREP10-NEXT: mffprwz r3, f0 5457; CHECK-PREP10-NEXT: blr 5458entry: 5459 %or = or i64 %ptr, 1000000000001 5460 %0 = inttoptr i64 %or to ptr 5461 %1 = load float, ptr %0, align 4 5462 %conv = fptoui float %1 to i8 5463 ret i8 %conv 5464} 5465 5466; Function Attrs: norecurse nounwind readonly uwtable willreturn 5467define dso_local zeroext i8 @ld_disjoint_unalign64_uint8_t_float(i64 %ptr) { 5468; CHECK-P10-LABEL: ld_disjoint_unalign64_uint8_t_float: 5469; CHECK-P10: # %bb.0: # %entry 5470; CHECK-P10-NEXT: pli r4, 232 5471; CHECK-P10-NEXT: pli r5, 3567587329 5472; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5473; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5474; CHECK-P10-NEXT: lfsx f0, r3, r5 5475; CHECK-P10-NEXT: xscvdpsxws f0, f0 5476; CHECK-P10-NEXT: mffprwz r3, f0 5477; CHECK-P10-NEXT: blr 5478; 5479; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint8_t_float: 5480; CHECK-PREP10: # %bb.0: # %entry 5481; CHECK-PREP10-NEXT: li r4, 29 5482; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5483; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 5484; CHECK-PREP10-NEXT: oris r4, r4, 54437 5485; CHECK-PREP10-NEXT: ori r4, r4, 4097 5486; CHECK-PREP10-NEXT: lfsx f0, r3, r4 5487; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5488; CHECK-PREP10-NEXT: mffprwz r3, f0 5489; CHECK-PREP10-NEXT: blr 5490entry: 5491 %and = and i64 %ptr, -1099511627776 5492 %or = or i64 %and, 1000000000001 5493 %0 = inttoptr i64 %or to ptr 5494 %1 = load float, ptr %0, align 4 5495 %conv = fptoui float %1 to i8 5496 ret i8 %conv 5497} 5498 5499; Function Attrs: norecurse nounwind readonly uwtable willreturn 5500define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_float(i64 %ptr) { 5501; CHECK-P10-LABEL: ld_disjoint_align64_uint8_t_float: 5502; CHECK-P10: # %bb.0: # %entry 5503; CHECK-P10-NEXT: pli r4, 244140625 5504; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5505; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5506; CHECK-P10-NEXT: lfsx f0, r3, r4 5507; CHECK-P10-NEXT: xscvdpsxws f0, f0 5508; CHECK-P10-NEXT: mffprwz r3, f0 5509; CHECK-P10-NEXT: blr 5510; 5511; CHECK-PREP10-LABEL: ld_disjoint_align64_uint8_t_float: 5512; CHECK-PREP10: # %bb.0: # %entry 5513; CHECK-PREP10-NEXT: lis r4, 3725 5514; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5515; CHECK-PREP10-NEXT: ori r4, r4, 19025 5516; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5517; CHECK-PREP10-NEXT: lfsx f0, r3, r4 5518; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5519; CHECK-PREP10-NEXT: mffprwz r3, f0 5520; CHECK-PREP10-NEXT: blr 5521entry: 5522 %and = and i64 %ptr, -1099511627776 5523 %or = or i64 %and, 1000000000000 5524 %0 = inttoptr i64 %or to ptr 5525 %1 = load float, ptr %0, align 4096 5526 %conv = fptoui float %1 to i8 5527 ret i8 %conv 5528} 5529 5530; Function Attrs: norecurse nounwind readonly uwtable willreturn 5531define dso_local zeroext i8 @ld_cst_align16_uint8_t_float() { 5532; CHECK-LABEL: ld_cst_align16_uint8_t_float: 5533; CHECK: # %bb.0: # %entry 5534; CHECK-NEXT: lfs f0, 4080(0) 5535; CHECK-NEXT: xscvdpsxws f0, f0 5536; CHECK-NEXT: mffprwz r3, f0 5537; CHECK-NEXT: blr 5538entry: 5539 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 16 5540 %conv = fptoui float %0 to i8 5541 ret i8 %conv 5542} 5543 5544; Function Attrs: norecurse nounwind readonly uwtable willreturn 5545define dso_local zeroext i8 @ld_cst_align32_uint8_t_float() { 5546; CHECK-LABEL: ld_cst_align32_uint8_t_float: 5547; CHECK: # %bb.0: # %entry 5548; CHECK-NEXT: lis r3, 153 5549; CHECK-NEXT: lfs f0, -27108(r3) 5550; CHECK-NEXT: xscvdpsxws f0, f0 5551; CHECK-NEXT: mffprwz r3, f0 5552; CHECK-NEXT: blr 5553entry: 5554 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 4 5555 %conv = fptoui float %0 to i8 5556 ret i8 %conv 5557} 5558 5559; Function Attrs: norecurse nounwind readonly uwtable willreturn 5560define dso_local zeroext i8 @ld_cst_unalign64_uint8_t_float() { 5561; CHECK-P10-LABEL: ld_cst_unalign64_uint8_t_float: 5562; CHECK-P10: # %bb.0: # %entry 5563; CHECK-P10-NEXT: pli r3, 232 5564; CHECK-P10-NEXT: pli r4, 3567587329 5565; CHECK-P10-NEXT: rldimi r4, r3, 32, 0 5566; CHECK-P10-NEXT: lfs f0, 0(r4) 5567; CHECK-P10-NEXT: xscvdpsxws f0, f0 5568; CHECK-P10-NEXT: mffprwz r3, f0 5569; CHECK-P10-NEXT: blr 5570; 5571; CHECK-PREP10-LABEL: ld_cst_unalign64_uint8_t_float: 5572; CHECK-PREP10: # %bb.0: # %entry 5573; CHECK-PREP10-NEXT: li r3, 29 5574; CHECK-PREP10-NEXT: rldic r3, r3, 35, 24 5575; CHECK-PREP10-NEXT: oris r3, r3, 54437 5576; CHECK-PREP10-NEXT: ori r3, r3, 4097 5577; CHECK-PREP10-NEXT: lfs f0, 0(r3) 5578; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5579; CHECK-PREP10-NEXT: mffprwz r3, f0 5580; CHECK-PREP10-NEXT: blr 5581entry: 5582 %0 = load float, ptr inttoptr (i64 1000000000001 to ptr), align 4 5583 %conv = fptoui float %0 to i8 5584 ret i8 %conv 5585} 5586 5587; Function Attrs: norecurse nounwind readonly uwtable willreturn 5588define dso_local zeroext i8 @ld_cst_align64_uint8_t_float() { 5589; CHECK-P10-LABEL: ld_cst_align64_uint8_t_float: 5590; CHECK-P10: # %bb.0: # %entry 5591; CHECK-P10-NEXT: pli r3, 244140625 5592; CHECK-P10-NEXT: rldic r3, r3, 12, 24 5593; CHECK-P10-NEXT: lfs f0, 0(r3) 5594; CHECK-P10-NEXT: xscvdpsxws f0, f0 5595; CHECK-P10-NEXT: mffprwz r3, f0 5596; CHECK-P10-NEXT: blr 5597; 5598; CHECK-PREP10-LABEL: ld_cst_align64_uint8_t_float: 5599; CHECK-PREP10: # %bb.0: # %entry 5600; CHECK-PREP10-NEXT: lis r3, 3725 5601; CHECK-PREP10-NEXT: ori r3, r3, 19025 5602; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 5603; CHECK-PREP10-NEXT: lfs f0, 0(r3) 5604; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5605; CHECK-PREP10-NEXT: mffprwz r3, f0 5606; CHECK-PREP10-NEXT: blr 5607entry: 5608 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 4096 5609 %conv = fptoui float %0 to i8 5610 ret i8 %conv 5611} 5612 5613; Function Attrs: norecurse nounwind readonly uwtable willreturn 5614define dso_local zeroext i8 @ld_0_uint8_t_double(i64 %ptr) { 5615; CHECK-LABEL: ld_0_uint8_t_double: 5616; CHECK: # %bb.0: # %entry 5617; CHECK-NEXT: lfd f0, 0(r3) 5618; CHECK-NEXT: xscvdpsxws f0, f0 5619; CHECK-NEXT: mffprwz r3, f0 5620; CHECK-NEXT: blr 5621entry: 5622 %0 = inttoptr i64 %ptr to ptr 5623 %1 = load double, ptr %0, align 8 5624 %conv = fptoui double %1 to i8 5625 ret i8 %conv 5626} 5627 5628; Function Attrs: norecurse nounwind readonly uwtable willreturn 5629define dso_local zeroext i8 @ld_align16_uint8_t_double(ptr nocapture readonly %ptr) { 5630; CHECK-LABEL: ld_align16_uint8_t_double: 5631; CHECK: # %bb.0: # %entry 5632; CHECK-NEXT: lfd f0, 8(r3) 5633; CHECK-NEXT: xscvdpsxws f0, f0 5634; CHECK-NEXT: mffprwz r3, f0 5635; CHECK-NEXT: blr 5636entry: 5637 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 5638 %0 = load double, ptr %add.ptr, align 8 5639 %conv = fptoui double %0 to i8 5640 ret i8 %conv 5641} 5642 5643; Function Attrs: norecurse nounwind readonly uwtable willreturn 5644define dso_local zeroext i8 @ld_align32_uint8_t_double(ptr nocapture readonly %ptr) { 5645; CHECK-P10-LABEL: ld_align32_uint8_t_double: 5646; CHECK-P10: # %bb.0: # %entry 5647; CHECK-P10-NEXT: plfd f0, 99999000(r3), 0 5648; CHECK-P10-NEXT: xscvdpsxws f0, f0 5649; CHECK-P10-NEXT: mffprwz r3, f0 5650; CHECK-P10-NEXT: blr 5651; 5652; CHECK-PREP10-LABEL: ld_align32_uint8_t_double: 5653; CHECK-PREP10: # %bb.0: # %entry 5654; CHECK-PREP10-NEXT: lis r4, 1525 5655; CHECK-PREP10-NEXT: ori r4, r4, 56600 5656; CHECK-PREP10-NEXT: lfdx f0, r3, r4 5657; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5658; CHECK-PREP10-NEXT: mffprwz r3, f0 5659; CHECK-PREP10-NEXT: blr 5660entry: 5661 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 5662 %0 = load double, ptr %add.ptr, align 8 5663 %conv = fptoui double %0 to i8 5664 ret i8 %conv 5665} 5666 5667; Function Attrs: norecurse nounwind readonly uwtable willreturn 5668define dso_local zeroext i8 @ld_unalign64_uint8_t_double(ptr nocapture readonly %ptr) { 5669; CHECK-P10-LABEL: ld_unalign64_uint8_t_double: 5670; CHECK-P10: # %bb.0: # %entry 5671; CHECK-P10-NEXT: pli r4, 232 5672; CHECK-P10-NEXT: pli r5, 3567587329 5673; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5674; CHECK-P10-NEXT: lfdx f0, r3, r5 5675; CHECK-P10-NEXT: xscvdpsxws f0, f0 5676; CHECK-P10-NEXT: mffprwz r3, f0 5677; CHECK-P10-NEXT: blr 5678; 5679; CHECK-PREP10-LABEL: ld_unalign64_uint8_t_double: 5680; CHECK-PREP10: # %bb.0: # %entry 5681; CHECK-PREP10-NEXT: li r4, 29 5682; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 5683; CHECK-PREP10-NEXT: oris r4, r4, 54437 5684; CHECK-PREP10-NEXT: ori r4, r4, 4097 5685; CHECK-PREP10-NEXT: lfdx f0, r3, r4 5686; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5687; CHECK-PREP10-NEXT: mffprwz r3, f0 5688; CHECK-PREP10-NEXT: blr 5689entry: 5690 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000001 5691 %0 = load double, ptr %add.ptr, align 8 5692 %conv = fptoui double %0 to i8 5693 ret i8 %conv 5694} 5695 5696; Function Attrs: norecurse nounwind readonly uwtable willreturn 5697define dso_local zeroext i8 @ld_align64_uint8_t_double(ptr nocapture readonly %ptr) { 5698; CHECK-P10-LABEL: ld_align64_uint8_t_double: 5699; CHECK-P10: # %bb.0: # %entry 5700; CHECK-P10-NEXT: pli r4, 244140625 5701; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5702; CHECK-P10-NEXT: lfdx f0, r3, r4 5703; CHECK-P10-NEXT: xscvdpsxws f0, f0 5704; CHECK-P10-NEXT: mffprwz r3, f0 5705; CHECK-P10-NEXT: blr 5706; 5707; CHECK-PREP10-LABEL: ld_align64_uint8_t_double: 5708; CHECK-PREP10: # %bb.0: # %entry 5709; CHECK-PREP10-NEXT: lis r4, 3725 5710; CHECK-PREP10-NEXT: ori r4, r4, 19025 5711; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5712; CHECK-PREP10-NEXT: lfdx f0, r3, r4 5713; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5714; CHECK-PREP10-NEXT: mffprwz r3, f0 5715; CHECK-PREP10-NEXT: blr 5716entry: 5717 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 5718 %0 = load double, ptr %add.ptr, align 8 5719 %conv = fptoui double %0 to i8 5720 ret i8 %conv 5721} 5722 5723; Function Attrs: norecurse nounwind readonly uwtable willreturn 5724define dso_local zeroext i8 @ld_reg_uint8_t_double(ptr nocapture readonly %ptr, i64 %off) { 5725; CHECK-LABEL: ld_reg_uint8_t_double: 5726; CHECK: # %bb.0: # %entry 5727; CHECK-NEXT: lfdx f0, r3, r4 5728; CHECK-NEXT: xscvdpsxws f0, f0 5729; CHECK-NEXT: mffprwz r3, f0 5730; CHECK-NEXT: blr 5731entry: 5732 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 5733 %0 = load double, ptr %add.ptr, align 8 5734 %conv = fptoui double %0 to i8 5735 ret i8 %conv 5736} 5737 5738; Function Attrs: norecurse nounwind readonly uwtable willreturn 5739define dso_local zeroext i8 @ld_or_uint8_t_double(i64 %ptr, i8 zeroext %off) { 5740; CHECK-LABEL: ld_or_uint8_t_double: 5741; CHECK: # %bb.0: # %entry 5742; CHECK-NEXT: or r3, r4, r3 5743; CHECK-NEXT: lfd f0, 0(r3) 5744; CHECK-NEXT: xscvdpsxws f0, f0 5745; CHECK-NEXT: mffprwz r3, f0 5746; CHECK-NEXT: blr 5747entry: 5748 %conv = zext i8 %off to i64 5749 %or = or i64 %conv, %ptr 5750 %0 = inttoptr i64 %or to ptr 5751 %1 = load double, ptr %0, align 8 5752 %conv1 = fptoui double %1 to i8 5753 ret i8 %conv1 5754} 5755 5756; Function Attrs: norecurse nounwind readonly uwtable willreturn 5757define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_double(i64 %ptr) { 5758; CHECK-LABEL: ld_not_disjoint16_uint8_t_double: 5759; CHECK: # %bb.0: # %entry 5760; CHECK-NEXT: ori r3, r3, 6 5761; CHECK-NEXT: lfd f0, 0(r3) 5762; CHECK-NEXT: xscvdpsxws f0, f0 5763; CHECK-NEXT: mffprwz r3, f0 5764; CHECK-NEXT: blr 5765entry: 5766 %or = or i64 %ptr, 6 5767 %0 = inttoptr i64 %or to ptr 5768 %1 = load double, ptr %0, align 8 5769 %conv = fptoui double %1 to i8 5770 ret i8 %conv 5771} 5772 5773; Function Attrs: norecurse nounwind readonly uwtable willreturn 5774define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_double(i64 %ptr) { 5775; CHECK-LABEL: ld_disjoint_align16_uint8_t_double: 5776; CHECK: # %bb.0: # %entry 5777; CHECK-NEXT: rldicr r3, r3, 0, 51 5778; CHECK-NEXT: lfd f0, 24(r3) 5779; CHECK-NEXT: xscvdpsxws f0, f0 5780; CHECK-NEXT: mffprwz r3, f0 5781; CHECK-NEXT: blr 5782entry: 5783 %and = and i64 %ptr, -4096 5784 %or = or i64 %and, 24 5785 %0 = inttoptr i64 %or to ptr 5786 %1 = load double, ptr %0, align 8 5787 %conv = fptoui double %1 to i8 5788 ret i8 %conv 5789} 5790 5791; Function Attrs: norecurse nounwind readonly uwtable willreturn 5792define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_double(i64 %ptr) { 5793; CHECK-LABEL: ld_not_disjoint32_uint8_t_double: 5794; CHECK: # %bb.0: # %entry 5795; CHECK-NEXT: ori r3, r3, 34463 5796; CHECK-NEXT: oris r3, r3, 1 5797; CHECK-NEXT: lfd f0, 0(r3) 5798; CHECK-NEXT: xscvdpsxws f0, f0 5799; CHECK-NEXT: mffprwz r3, f0 5800; CHECK-NEXT: blr 5801entry: 5802 %or = or i64 %ptr, 99999 5803 %0 = inttoptr i64 %or to ptr 5804 %1 = load double, ptr %0, align 8 5805 %conv = fptoui double %1 to i8 5806 ret i8 %conv 5807} 5808 5809; Function Attrs: norecurse nounwind readonly uwtable willreturn 5810define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_double(i64 %ptr) { 5811; CHECK-P10-LABEL: ld_disjoint_align32_uint8_t_double: 5812; CHECK-P10: # %bb.0: # %entry 5813; CHECK-P10-NEXT: lis r4, -15264 5814; CHECK-P10-NEXT: and r3, r3, r4 5815; CHECK-P10-NEXT: plfd f0, 999990000(r3), 0 5816; CHECK-P10-NEXT: xscvdpsxws f0, f0 5817; CHECK-P10-NEXT: mffprwz r3, f0 5818; CHECK-P10-NEXT: blr 5819; 5820; CHECK-PREP10-LABEL: ld_disjoint_align32_uint8_t_double: 5821; CHECK-PREP10: # %bb.0: # %entry 5822; CHECK-PREP10-NEXT: lis r4, -15264 5823; CHECK-PREP10-NEXT: and r3, r3, r4 5824; CHECK-PREP10-NEXT: lis r4, 15258 5825; CHECK-PREP10-NEXT: ori r4, r4, 41712 5826; CHECK-PREP10-NEXT: lfdx f0, r3, r4 5827; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5828; CHECK-PREP10-NEXT: mffprwz r3, f0 5829; CHECK-PREP10-NEXT: blr 5830entry: 5831 %and = and i64 %ptr, -1000341504 5832 %or = or i64 %and, 999990000 5833 %0 = inttoptr i64 %or to ptr 5834 %1 = load double, ptr %0, align 16 5835 %conv = fptoui double %1 to i8 5836 ret i8 %conv 5837} 5838 5839; Function Attrs: norecurse nounwind readonly uwtable willreturn 5840define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_double(i64 %ptr) { 5841; CHECK-P10-LABEL: ld_not_disjoint64_uint8_t_double: 5842; CHECK-P10: # %bb.0: # %entry 5843; CHECK-P10-NEXT: pli r4, 232 5844; CHECK-P10-NEXT: pli r5, 3567587329 5845; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5846; CHECK-P10-NEXT: or r3, r3, r5 5847; CHECK-P10-NEXT: lfd f0, 0(r3) 5848; CHECK-P10-NEXT: xscvdpsxws f0, f0 5849; CHECK-P10-NEXT: mffprwz r3, f0 5850; CHECK-P10-NEXT: blr 5851; 5852; CHECK-PREP10-LABEL: ld_not_disjoint64_uint8_t_double: 5853; CHECK-PREP10: # %bb.0: # %entry 5854; CHECK-PREP10-NEXT: li r4, 29 5855; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 5856; CHECK-PREP10-NEXT: oris r4, r4, 54437 5857; CHECK-PREP10-NEXT: ori r4, r4, 4097 5858; CHECK-PREP10-NEXT: or r3, r3, r4 5859; CHECK-PREP10-NEXT: lfd f0, 0(r3) 5860; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5861; CHECK-PREP10-NEXT: mffprwz r3, f0 5862; CHECK-PREP10-NEXT: blr 5863entry: 5864 %or = or i64 %ptr, 1000000000001 5865 %0 = inttoptr i64 %or to ptr 5866 %1 = load double, ptr %0, align 8 5867 %conv = fptoui double %1 to i8 5868 ret i8 %conv 5869} 5870 5871; Function Attrs: norecurse nounwind readonly uwtable willreturn 5872define dso_local zeroext i8 @ld_disjoint_unalign64_uint8_t_double(i64 %ptr) { 5873; CHECK-P10-LABEL: ld_disjoint_unalign64_uint8_t_double: 5874; CHECK-P10: # %bb.0: # %entry 5875; CHECK-P10-NEXT: pli r4, 232 5876; CHECK-P10-NEXT: pli r5, 3567587329 5877; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5878; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5879; CHECK-P10-NEXT: lfdx f0, r3, r5 5880; CHECK-P10-NEXT: xscvdpsxws f0, f0 5881; CHECK-P10-NEXT: mffprwz r3, f0 5882; CHECK-P10-NEXT: blr 5883; 5884; CHECK-PREP10-LABEL: ld_disjoint_unalign64_uint8_t_double: 5885; CHECK-PREP10: # %bb.0: # %entry 5886; CHECK-PREP10-NEXT: li r4, 29 5887; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5888; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 5889; CHECK-PREP10-NEXT: oris r4, r4, 54437 5890; CHECK-PREP10-NEXT: ori r4, r4, 4097 5891; CHECK-PREP10-NEXT: lfdx f0, r3, r4 5892; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5893; CHECK-PREP10-NEXT: mffprwz r3, f0 5894; CHECK-PREP10-NEXT: blr 5895entry: 5896 %and = and i64 %ptr, -1099511627776 5897 %or = or i64 %and, 1000000000001 5898 %0 = inttoptr i64 %or to ptr 5899 %1 = load double, ptr %0, align 8 5900 %conv = fptoui double %1 to i8 5901 ret i8 %conv 5902} 5903 5904; Function Attrs: norecurse nounwind readonly uwtable willreturn 5905define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_double(i64 %ptr) { 5906; CHECK-P10-LABEL: ld_disjoint_align64_uint8_t_double: 5907; CHECK-P10: # %bb.0: # %entry 5908; CHECK-P10-NEXT: pli r4, 244140625 5909; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5910; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5911; CHECK-P10-NEXT: lfdx f0, r3, r4 5912; CHECK-P10-NEXT: xscvdpsxws f0, f0 5913; CHECK-P10-NEXT: mffprwz r3, f0 5914; CHECK-P10-NEXT: blr 5915; 5916; CHECK-PREP10-LABEL: ld_disjoint_align64_uint8_t_double: 5917; CHECK-PREP10: # %bb.0: # %entry 5918; CHECK-PREP10-NEXT: lis r4, 3725 5919; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5920; CHECK-PREP10-NEXT: ori r4, r4, 19025 5921; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5922; CHECK-PREP10-NEXT: lfdx f0, r3, r4 5923; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5924; CHECK-PREP10-NEXT: mffprwz r3, f0 5925; CHECK-PREP10-NEXT: blr 5926entry: 5927 %and = and i64 %ptr, -1099511627776 5928 %or = or i64 %and, 1000000000000 5929 %0 = inttoptr i64 %or to ptr 5930 %1 = load double, ptr %0, align 4096 5931 %conv = fptoui double %1 to i8 5932 ret i8 %conv 5933} 5934 5935; Function Attrs: norecurse nounwind readonly uwtable willreturn 5936define dso_local zeroext i8 @ld_cst_align16_uint8_t_double() { 5937; CHECK-LABEL: ld_cst_align16_uint8_t_double: 5938; CHECK: # %bb.0: # %entry 5939; CHECK-NEXT: lfd f0, 4080(0) 5940; CHECK-NEXT: xscvdpsxws f0, f0 5941; CHECK-NEXT: mffprwz r3, f0 5942; CHECK-NEXT: blr 5943entry: 5944 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 16 5945 %conv = fptoui double %0 to i8 5946 ret i8 %conv 5947} 5948 5949; Function Attrs: norecurse nounwind readonly uwtable willreturn 5950define dso_local zeroext i8 @ld_cst_align32_uint8_t_double() { 5951; CHECK-LABEL: ld_cst_align32_uint8_t_double: 5952; CHECK: # %bb.0: # %entry 5953; CHECK-NEXT: lis r3, 153 5954; CHECK-NEXT: lfd f0, -27108(r3) 5955; CHECK-NEXT: xscvdpsxws f0, f0 5956; CHECK-NEXT: mffprwz r3, f0 5957; CHECK-NEXT: blr 5958entry: 5959 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 8 5960 %conv = fptoui double %0 to i8 5961 ret i8 %conv 5962} 5963 5964; Function Attrs: norecurse nounwind readonly uwtable willreturn 5965define dso_local zeroext i8 @ld_cst_unalign64_uint8_t_double() { 5966; CHECK-P10-LABEL: ld_cst_unalign64_uint8_t_double: 5967; CHECK-P10: # %bb.0: # %entry 5968; CHECK-P10-NEXT: pli r3, 232 5969; CHECK-P10-NEXT: pli r4, 3567587329 5970; CHECK-P10-NEXT: rldimi r4, r3, 32, 0 5971; CHECK-P10-NEXT: lfd f0, 0(r4) 5972; CHECK-P10-NEXT: xscvdpsxws f0, f0 5973; CHECK-P10-NEXT: mffprwz r3, f0 5974; CHECK-P10-NEXT: blr 5975; 5976; CHECK-PREP10-LABEL: ld_cst_unalign64_uint8_t_double: 5977; CHECK-PREP10: # %bb.0: # %entry 5978; CHECK-PREP10-NEXT: li r3, 29 5979; CHECK-PREP10-NEXT: rldic r3, r3, 35, 24 5980; CHECK-PREP10-NEXT: oris r3, r3, 54437 5981; CHECK-PREP10-NEXT: ori r3, r3, 4097 5982; CHECK-PREP10-NEXT: lfd f0, 0(r3) 5983; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 5984; CHECK-PREP10-NEXT: mffprwz r3, f0 5985; CHECK-PREP10-NEXT: blr 5986entry: 5987 %0 = load double, ptr inttoptr (i64 1000000000001 to ptr), align 8 5988 %conv = fptoui double %0 to i8 5989 ret i8 %conv 5990} 5991 5992; Function Attrs: norecurse nounwind readonly uwtable willreturn 5993define dso_local zeroext i8 @ld_cst_align64_uint8_t_double() { 5994; CHECK-P10-LABEL: ld_cst_align64_uint8_t_double: 5995; CHECK-P10: # %bb.0: # %entry 5996; CHECK-P10-NEXT: pli r3, 244140625 5997; CHECK-P10-NEXT: rldic r3, r3, 12, 24 5998; CHECK-P10-NEXT: lfd f0, 0(r3) 5999; CHECK-P10-NEXT: xscvdpsxws f0, f0 6000; CHECK-P10-NEXT: mffprwz r3, f0 6001; CHECK-P10-NEXT: blr 6002; 6003; CHECK-PREP10-LABEL: ld_cst_align64_uint8_t_double: 6004; CHECK-PREP10: # %bb.0: # %entry 6005; CHECK-PREP10-NEXT: lis r3, 3725 6006; CHECK-PREP10-NEXT: ori r3, r3, 19025 6007; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 6008; CHECK-PREP10-NEXT: lfd f0, 0(r3) 6009; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 6010; CHECK-PREP10-NEXT: mffprwz r3, f0 6011; CHECK-PREP10-NEXT: blr 6012entry: 6013 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 4096 6014 %conv = fptoui double %0 to i8 6015 ret i8 %conv 6016} 6017 6018; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6019define dso_local void @st_0_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 6020; CHECK-LABEL: st_0_uint8_t_uint8_t: 6021; CHECK: # %bb.0: # %entry 6022; CHECK-NEXT: stb r4, 0(r3) 6023; CHECK-NEXT: blr 6024entry: 6025 %0 = inttoptr i64 %ptr to ptr 6026 store i8 %str, ptr %0, align 1 6027 ret void 6028} 6029 6030; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6031define dso_local void @st_align16_uint8_t_uint8_t(ptr nocapture %ptr, i8 zeroext %str) { 6032; CHECK-LABEL: st_align16_uint8_t_uint8_t: 6033; CHECK: # %bb.0: # %entry 6034; CHECK-NEXT: stb r4, 8(r3) 6035; CHECK-NEXT: blr 6036entry: 6037 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 6038 store i8 %str, ptr %add.ptr, align 1 6039 ret void 6040} 6041 6042; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6043define dso_local void @st_align32_uint8_t_uint8_t(ptr nocapture %ptr, i8 zeroext %str) { 6044; CHECK-P10-LABEL: st_align32_uint8_t_uint8_t: 6045; CHECK-P10: # %bb.0: # %entry 6046; CHECK-P10-NEXT: pstb r4, 99999000(r3), 0 6047; CHECK-P10-NEXT: blr 6048; 6049; CHECK-PREP10-LABEL: st_align32_uint8_t_uint8_t: 6050; CHECK-PREP10: # %bb.0: # %entry 6051; CHECK-PREP10-NEXT: lis r5, 1525 6052; CHECK-PREP10-NEXT: ori r5, r5, 56600 6053; CHECK-PREP10-NEXT: stbx r4, r3, r5 6054; CHECK-PREP10-NEXT: blr 6055entry: 6056 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 6057 store i8 %str, ptr %add.ptr, align 1 6058 ret void 6059} 6060 6061; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6062define dso_local void @st_align64_uint8_t_uint8_t(ptr nocapture %ptr, i8 zeroext %str) { 6063; CHECK-P10-LABEL: st_align64_uint8_t_uint8_t: 6064; CHECK-P10: # %bb.0: # %entry 6065; CHECK-P10-NEXT: pli r5, 244140625 6066; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6067; CHECK-P10-NEXT: stbx r4, r3, r5 6068; CHECK-P10-NEXT: blr 6069; 6070; CHECK-PREP10-LABEL: st_align64_uint8_t_uint8_t: 6071; CHECK-PREP10: # %bb.0: # %entry 6072; CHECK-PREP10-NEXT: lis r5, 3725 6073; CHECK-PREP10-NEXT: ori r5, r5, 19025 6074; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6075; CHECK-PREP10-NEXT: stbx r4, r3, r5 6076; CHECK-PREP10-NEXT: blr 6077entry: 6078 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 6079 store i8 %str, ptr %add.ptr, align 1 6080 ret void 6081} 6082 6083; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6084define dso_local void @st_reg_uint8_t_uint8_t(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 6085; CHECK-LABEL: st_reg_uint8_t_uint8_t: 6086; CHECK: # %bb.0: # %entry 6087; CHECK-NEXT: stbx r5, r3, r4 6088; CHECK-NEXT: blr 6089entry: 6090 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 6091 store i8 %str, ptr %add.ptr, align 1 6092 ret void 6093} 6094 6095; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6096define dso_local void @st_or1_uint8_t_uint8_t(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 6097; CHECK-LABEL: st_or1_uint8_t_uint8_t: 6098; CHECK: # %bb.0: # %entry 6099; CHECK-NEXT: or r3, r4, r3 6100; CHECK-NEXT: stb r5, 0(r3) 6101; CHECK-NEXT: blr 6102entry: 6103 %conv = zext i8 %off to i64 6104 %or = or i64 %conv, %ptr 6105 %0 = inttoptr i64 %or to ptr 6106 store i8 %str, ptr %0, align 1 6107 ret void 6108} 6109 6110; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6111define dso_local void @st_not_disjoint16_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 6112; CHECK-LABEL: st_not_disjoint16_uint8_t_uint8_t: 6113; CHECK: # %bb.0: # %entry 6114; CHECK-NEXT: ori r3, r3, 6 6115; CHECK-NEXT: stb r4, 0(r3) 6116; CHECK-NEXT: blr 6117entry: 6118 %or = or i64 %ptr, 6 6119 %0 = inttoptr i64 %or to ptr 6120 store i8 %str, ptr %0, align 1 6121 ret void 6122} 6123 6124; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6125define dso_local void @st_disjoint_align16_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 6126; CHECK-LABEL: st_disjoint_align16_uint8_t_uint8_t: 6127; CHECK: # %bb.0: # %entry 6128; CHECK-NEXT: rldicr r3, r3, 0, 51 6129; CHECK-NEXT: stb r4, 24(r3) 6130; CHECK-NEXT: blr 6131entry: 6132 %and = and i64 %ptr, -4096 6133 %or = or i64 %and, 24 6134 %0 = inttoptr i64 %or to ptr 6135 store i8 %str, ptr %0, align 8 6136 ret void 6137} 6138 6139; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6140define dso_local void @st_not_disjoint32_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 6141; CHECK-LABEL: st_not_disjoint32_uint8_t_uint8_t: 6142; CHECK: # %bb.0: # %entry 6143; CHECK-NEXT: ori r3, r3, 34463 6144; CHECK-NEXT: oris r3, r3, 1 6145; CHECK-NEXT: stb r4, 0(r3) 6146; CHECK-NEXT: blr 6147entry: 6148 %or = or i64 %ptr, 99999 6149 %0 = inttoptr i64 %or to ptr 6150 store i8 %str, ptr %0, align 1 6151 ret void 6152} 6153 6154; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6155define dso_local void @st_disjoint_align32_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 6156; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_uint8_t: 6157; CHECK-P10: # %bb.0: # %entry 6158; CHECK-P10-NEXT: lis r5, -15264 6159; CHECK-P10-NEXT: and r3, r3, r5 6160; CHECK-P10-NEXT: pstb r4, 999990000(r3), 0 6161; CHECK-P10-NEXT: blr 6162; 6163; CHECK-PREP10-LABEL: st_disjoint_align32_uint8_t_uint8_t: 6164; CHECK-PREP10: # %bb.0: # %entry 6165; CHECK-PREP10-NEXT: lis r5, -15264 6166; CHECK-PREP10-NEXT: and r3, r3, r5 6167; CHECK-PREP10-NEXT: lis r5, 15258 6168; CHECK-PREP10-NEXT: ori r5, r5, 41712 6169; CHECK-PREP10-NEXT: stbx r4, r3, r5 6170; CHECK-PREP10-NEXT: blr 6171entry: 6172 %and = and i64 %ptr, -1000341504 6173 %or = or i64 %and, 999990000 6174 %0 = inttoptr i64 %or to ptr 6175 store i8 %str, ptr %0, align 16 6176 ret void 6177} 6178 6179; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6180define dso_local void @st_not_disjoint64_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 6181; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_uint8_t: 6182; CHECK-P10: # %bb.0: # %entry 6183; CHECK-P10-NEXT: pli r5, 232 6184; CHECK-P10-NEXT: pli r6, 3567587329 6185; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 6186; CHECK-P10-NEXT: or r3, r3, r6 6187; CHECK-P10-NEXT: stb r4, 0(r3) 6188; CHECK-P10-NEXT: blr 6189; 6190; CHECK-PREP10-LABEL: st_not_disjoint64_uint8_t_uint8_t: 6191; CHECK-PREP10: # %bb.0: # %entry 6192; CHECK-PREP10-NEXT: li r5, 29 6193; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 6194; CHECK-PREP10-NEXT: oris r5, r5, 54437 6195; CHECK-PREP10-NEXT: ori r5, r5, 4097 6196; CHECK-PREP10-NEXT: or r3, r3, r5 6197; CHECK-PREP10-NEXT: stb r4, 0(r3) 6198; CHECK-PREP10-NEXT: blr 6199entry: 6200 %or = or i64 %ptr, 1000000000001 6201 %0 = inttoptr i64 %or to ptr 6202 store i8 %str, ptr %0, align 1 6203 ret void 6204} 6205 6206; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6207define dso_local void @st_disjoint_align64_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 6208; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_uint8_t: 6209; CHECK-P10: # %bb.0: # %entry 6210; CHECK-P10-NEXT: pli r5, 244140625 6211; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 6212; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6213; CHECK-P10-NEXT: stbx r4, r3, r5 6214; CHECK-P10-NEXT: blr 6215; 6216; CHECK-PREP10-LABEL: st_disjoint_align64_uint8_t_uint8_t: 6217; CHECK-PREP10: # %bb.0: # %entry 6218; CHECK-PREP10-NEXT: lis r5, 3725 6219; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 6220; CHECK-PREP10-NEXT: ori r5, r5, 19025 6221; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6222; CHECK-PREP10-NEXT: stbx r4, r3, r5 6223; CHECK-PREP10-NEXT: blr 6224entry: 6225 %and = and i64 %ptr, -1099511627776 6226 %or = or i64 %and, 1000000000000 6227 %0 = inttoptr i64 %or to ptr 6228 store i8 %str, ptr %0, align 4096 6229 ret void 6230} 6231 6232; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6233define dso_local void @st_cst_align16_uint8_t_uint8_t(i8 zeroext %str) { 6234; CHECK-LABEL: st_cst_align16_uint8_t_uint8_t: 6235; CHECK: # %bb.0: # %entry 6236; CHECK-NEXT: stb r3, 4080(0) 6237; CHECK-NEXT: blr 6238entry: 6239 store i8 %str, ptr inttoptr (i64 4080 to ptr), align 16 6240 ret void 6241} 6242 6243; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6244define dso_local void @st_cst_align32_uint8_t_uint8_t(i8 zeroext %str) { 6245; CHECK-LABEL: st_cst_align32_uint8_t_uint8_t: 6246; CHECK: # %bb.0: # %entry 6247; CHECK-NEXT: lis r4, 153 6248; CHECK-NEXT: stb r3, -27108(r4) 6249; CHECK-NEXT: blr 6250entry: 6251 store i8 %str, ptr inttoptr (i64 9999900 to ptr), align 4 6252 ret void 6253} 6254 6255; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6256define dso_local void @st_cst_align64_uint8_t_uint8_t(i8 zeroext %str) { 6257; CHECK-P10-LABEL: st_cst_align64_uint8_t_uint8_t: 6258; CHECK-P10: # %bb.0: # %entry 6259; CHECK-P10-NEXT: pli r4, 244140625 6260; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6261; CHECK-P10-NEXT: stb r3, 0(r4) 6262; CHECK-P10-NEXT: blr 6263; 6264; CHECK-PREP10-LABEL: st_cst_align64_uint8_t_uint8_t: 6265; CHECK-PREP10: # %bb.0: # %entry 6266; CHECK-PREP10-NEXT: lis r4, 3725 6267; CHECK-PREP10-NEXT: ori r4, r4, 19025 6268; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6269; CHECK-PREP10-NEXT: stb r3, 0(r4) 6270; CHECK-PREP10-NEXT: blr 6271entry: 6272 store i8 %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096 6273 ret void 6274} 6275 6276; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6277define dso_local void @st_0_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 6278; CHECK-LABEL: st_0_uint8_t_uint16_t: 6279; CHECK: # %bb.0: # %entry 6280; CHECK-NEXT: sth r4, 0(r3) 6281; CHECK-NEXT: blr 6282entry: 6283 %conv = zext i8 %str to i16 6284 %0 = inttoptr i64 %ptr to ptr 6285 store i16 %conv, ptr %0, align 2 6286 ret void 6287} 6288 6289; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6290define dso_local void @st_align16_uint8_t_uint16_t(ptr nocapture %ptr, i8 zeroext %str) { 6291; CHECK-LABEL: st_align16_uint8_t_uint16_t: 6292; CHECK: # %bb.0: # %entry 6293; CHECK-NEXT: sth r4, 8(r3) 6294; CHECK-NEXT: blr 6295entry: 6296 %conv = zext i8 %str to i16 6297 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 6298 store i16 %conv, ptr %add.ptr, align 2 6299 ret void 6300} 6301 6302; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6303define dso_local void @st_align32_uint8_t_uint16_t(ptr nocapture %ptr, i8 zeroext %str) { 6304; CHECK-P10-LABEL: st_align32_uint8_t_uint16_t: 6305; CHECK-P10: # %bb.0: # %entry 6306; CHECK-P10-NEXT: psth r4, 99999000(r3), 0 6307; CHECK-P10-NEXT: blr 6308; 6309; CHECK-PREP10-LABEL: st_align32_uint8_t_uint16_t: 6310; CHECK-PREP10: # %bb.0: # %entry 6311; CHECK-PREP10-NEXT: lis r5, 1525 6312; CHECK-PREP10-NEXT: ori r5, r5, 56600 6313; CHECK-PREP10-NEXT: sthx r4, r3, r5 6314; CHECK-PREP10-NEXT: blr 6315entry: 6316 %conv = zext i8 %str to i16 6317 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 6318 store i16 %conv, ptr %add.ptr, align 2 6319 ret void 6320} 6321 6322; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6323define dso_local void @st_align64_uint8_t_uint16_t(ptr nocapture %ptr, i8 zeroext %str) { 6324; CHECK-P10-LABEL: st_align64_uint8_t_uint16_t: 6325; CHECK-P10: # %bb.0: # %entry 6326; CHECK-P10-NEXT: pli r5, 244140625 6327; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6328; CHECK-P10-NEXT: sthx r4, r3, r5 6329; CHECK-P10-NEXT: blr 6330; 6331; CHECK-PREP10-LABEL: st_align64_uint8_t_uint16_t: 6332; CHECK-PREP10: # %bb.0: # %entry 6333; CHECK-PREP10-NEXT: lis r5, 3725 6334; CHECK-PREP10-NEXT: ori r5, r5, 19025 6335; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6336; CHECK-PREP10-NEXT: sthx r4, r3, r5 6337; CHECK-PREP10-NEXT: blr 6338entry: 6339 %conv = zext i8 %str to i16 6340 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 6341 store i16 %conv, ptr %add.ptr, align 2 6342 ret void 6343} 6344 6345; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6346define dso_local void @st_reg_uint8_t_uint16_t(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 6347; CHECK-LABEL: st_reg_uint8_t_uint16_t: 6348; CHECK: # %bb.0: # %entry 6349; CHECK-NEXT: sthx r5, r3, r4 6350; CHECK-NEXT: blr 6351entry: 6352 %conv = zext i8 %str to i16 6353 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 6354 store i16 %conv, ptr %add.ptr, align 2 6355 ret void 6356} 6357 6358; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6359define dso_local void @st_or1_uint8_t_uint16_t(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 6360; CHECK-LABEL: st_or1_uint8_t_uint16_t: 6361; CHECK: # %bb.0: # %entry 6362; CHECK-NEXT: or r3, r4, r3 6363; CHECK-NEXT: sth r5, 0(r3) 6364; CHECK-NEXT: blr 6365entry: 6366 %conv = zext i8 %str to i16 6367 %conv1 = zext i8 %off to i64 6368 %or = or i64 %conv1, %ptr 6369 %0 = inttoptr i64 %or to ptr 6370 store i16 %conv, ptr %0, align 2 6371 ret void 6372} 6373 6374; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6375define dso_local void @st_not_disjoint16_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 6376; CHECK-LABEL: st_not_disjoint16_uint8_t_uint16_t: 6377; CHECK: # %bb.0: # %entry 6378; CHECK-NEXT: ori r3, r3, 6 6379; CHECK-NEXT: sth r4, 0(r3) 6380; CHECK-NEXT: blr 6381entry: 6382 %conv = zext i8 %str to i16 6383 %or = or i64 %ptr, 6 6384 %0 = inttoptr i64 %or to ptr 6385 store i16 %conv, ptr %0, align 2 6386 ret void 6387} 6388 6389; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6390define dso_local void @st_disjoint_align16_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 6391; CHECK-LABEL: st_disjoint_align16_uint8_t_uint16_t: 6392; CHECK: # %bb.0: # %entry 6393; CHECK-NEXT: rldicr r3, r3, 0, 51 6394; CHECK-NEXT: sth r4, 24(r3) 6395; CHECK-NEXT: blr 6396entry: 6397 %and = and i64 %ptr, -4096 6398 %conv = zext i8 %str to i16 6399 %or = or i64 %and, 24 6400 %0 = inttoptr i64 %or to ptr 6401 store i16 %conv, ptr %0, align 8 6402 ret void 6403} 6404 6405; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6406define dso_local void @st_not_disjoint32_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 6407; CHECK-LABEL: st_not_disjoint32_uint8_t_uint16_t: 6408; CHECK: # %bb.0: # %entry 6409; CHECK-NEXT: ori r3, r3, 34463 6410; CHECK-NEXT: oris r3, r3, 1 6411; CHECK-NEXT: sth r4, 0(r3) 6412; CHECK-NEXT: blr 6413entry: 6414 %conv = zext i8 %str to i16 6415 %or = or i64 %ptr, 99999 6416 %0 = inttoptr i64 %or to ptr 6417 store i16 %conv, ptr %0, align 2 6418 ret void 6419} 6420 6421; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6422define dso_local void @st_disjoint_align32_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 6423; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_uint16_t: 6424; CHECK-P10: # %bb.0: # %entry 6425; CHECK-P10-NEXT: lis r5, -15264 6426; CHECK-P10-NEXT: and r3, r3, r5 6427; CHECK-P10-NEXT: psth r4, 999990000(r3), 0 6428; CHECK-P10-NEXT: blr 6429; 6430; CHECK-PREP10-LABEL: st_disjoint_align32_uint8_t_uint16_t: 6431; CHECK-PREP10: # %bb.0: # %entry 6432; CHECK-PREP10-NEXT: lis r5, -15264 6433; CHECK-PREP10-NEXT: and r3, r3, r5 6434; CHECK-PREP10-NEXT: lis r5, 15258 6435; CHECK-PREP10-NEXT: ori r5, r5, 41712 6436; CHECK-PREP10-NEXT: sthx r4, r3, r5 6437; CHECK-PREP10-NEXT: blr 6438entry: 6439 %and = and i64 %ptr, -1000341504 6440 %conv = zext i8 %str to i16 6441 %or = or i64 %and, 999990000 6442 %0 = inttoptr i64 %or to ptr 6443 store i16 %conv, ptr %0, align 16 6444 ret void 6445} 6446 6447; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6448define dso_local void @st_not_disjoint64_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 6449; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_uint16_t: 6450; CHECK-P10: # %bb.0: # %entry 6451; CHECK-P10-NEXT: pli r5, 232 6452; CHECK-P10-NEXT: pli r6, 3567587329 6453; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 6454; CHECK-P10-NEXT: or r3, r3, r6 6455; CHECK-P10-NEXT: sth r4, 0(r3) 6456; CHECK-P10-NEXT: blr 6457; 6458; CHECK-PREP10-LABEL: st_not_disjoint64_uint8_t_uint16_t: 6459; CHECK-PREP10: # %bb.0: # %entry 6460; CHECK-PREP10-NEXT: li r5, 29 6461; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 6462; CHECK-PREP10-NEXT: oris r5, r5, 54437 6463; CHECK-PREP10-NEXT: ori r5, r5, 4097 6464; CHECK-PREP10-NEXT: or r3, r3, r5 6465; CHECK-PREP10-NEXT: sth r4, 0(r3) 6466; CHECK-PREP10-NEXT: blr 6467entry: 6468 %conv = zext i8 %str to i16 6469 %or = or i64 %ptr, 1000000000001 6470 %0 = inttoptr i64 %or to ptr 6471 store i16 %conv, ptr %0, align 2 6472 ret void 6473} 6474 6475; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6476define dso_local void @st_disjoint_align64_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 6477; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_uint16_t: 6478; CHECK-P10: # %bb.0: # %entry 6479; CHECK-P10-NEXT: pli r5, 244140625 6480; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 6481; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6482; CHECK-P10-NEXT: sthx r4, r3, r5 6483; CHECK-P10-NEXT: blr 6484; 6485; CHECK-PREP10-LABEL: st_disjoint_align64_uint8_t_uint16_t: 6486; CHECK-PREP10: # %bb.0: # %entry 6487; CHECK-PREP10-NEXT: lis r5, 3725 6488; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 6489; CHECK-PREP10-NEXT: ori r5, r5, 19025 6490; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6491; CHECK-PREP10-NEXT: sthx r4, r3, r5 6492; CHECK-PREP10-NEXT: blr 6493entry: 6494 %and = and i64 %ptr, -1099511627776 6495 %conv = zext i8 %str to i16 6496 %or = or i64 %and, 1000000000000 6497 %0 = inttoptr i64 %or to ptr 6498 store i16 %conv, ptr %0, align 4096 6499 ret void 6500} 6501 6502; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6503define dso_local void @st_cst_align16_uint8_t_uint16_t(i8 zeroext %str) { 6504; CHECK-LABEL: st_cst_align16_uint8_t_uint16_t: 6505; CHECK: # %bb.0: # %entry 6506; CHECK-NEXT: sth r3, 4080(0) 6507; CHECK-NEXT: blr 6508entry: 6509 %conv = zext i8 %str to i16 6510 store i16 %conv, ptr inttoptr (i64 4080 to ptr), align 16 6511 ret void 6512} 6513 6514; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6515define dso_local void @st_cst_align32_uint8_t_uint16_t(i8 zeroext %str) { 6516; CHECK-LABEL: st_cst_align32_uint8_t_uint16_t: 6517; CHECK: # %bb.0: # %entry 6518; CHECK-NEXT: lis r4, 153 6519; CHECK-NEXT: sth r3, -27108(r4) 6520; CHECK-NEXT: blr 6521entry: 6522 %conv = zext i8 %str to i16 6523 store i16 %conv, ptr inttoptr (i64 9999900 to ptr), align 4 6524 ret void 6525} 6526 6527; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6528define dso_local void @st_cst_align64_uint8_t_uint16_t(i8 zeroext %str) { 6529; CHECK-P10-LABEL: st_cst_align64_uint8_t_uint16_t: 6530; CHECK-P10: # %bb.0: # %entry 6531; CHECK-P10-NEXT: pli r4, 244140625 6532; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6533; CHECK-P10-NEXT: sth r3, 0(r4) 6534; CHECK-P10-NEXT: blr 6535; 6536; CHECK-PREP10-LABEL: st_cst_align64_uint8_t_uint16_t: 6537; CHECK-PREP10: # %bb.0: # %entry 6538; CHECK-PREP10-NEXT: lis r4, 3725 6539; CHECK-PREP10-NEXT: ori r4, r4, 19025 6540; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6541; CHECK-PREP10-NEXT: sth r3, 0(r4) 6542; CHECK-PREP10-NEXT: blr 6543entry: 6544 %conv = zext i8 %str to i16 6545 store i16 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 6546 ret void 6547} 6548 6549; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6550define dso_local void @st_0_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 6551; CHECK-LABEL: st_0_uint8_t_uint32_t: 6552; CHECK: # %bb.0: # %entry 6553; CHECK-NEXT: stw r4, 0(r3) 6554; CHECK-NEXT: blr 6555entry: 6556 %conv = zext i8 %str to i32 6557 %0 = inttoptr i64 %ptr to ptr 6558 store i32 %conv, ptr %0, align 4 6559 ret void 6560} 6561 6562; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6563define dso_local void @st_align16_uint8_t_uint32_t(ptr nocapture %ptr, i8 zeroext %str) { 6564; CHECK-LABEL: st_align16_uint8_t_uint32_t: 6565; CHECK: # %bb.0: # %entry 6566; CHECK-NEXT: stw r4, 8(r3) 6567; CHECK-NEXT: blr 6568entry: 6569 %conv = zext i8 %str to i32 6570 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 6571 store i32 %conv, ptr %add.ptr, align 4 6572 ret void 6573} 6574 6575; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6576define dso_local void @st_align32_uint8_t_uint32_t(ptr nocapture %ptr, i8 zeroext %str) { 6577; CHECK-P10-LABEL: st_align32_uint8_t_uint32_t: 6578; CHECK-P10: # %bb.0: # %entry 6579; CHECK-P10-NEXT: pstw r4, 99999000(r3), 0 6580; CHECK-P10-NEXT: blr 6581; 6582; CHECK-PREP10-LABEL: st_align32_uint8_t_uint32_t: 6583; CHECK-PREP10: # %bb.0: # %entry 6584; CHECK-PREP10-NEXT: lis r5, 1525 6585; CHECK-PREP10-NEXT: ori r5, r5, 56600 6586; CHECK-PREP10-NEXT: stwx r4, r3, r5 6587; CHECK-PREP10-NEXT: blr 6588entry: 6589 %conv = zext i8 %str to i32 6590 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 6591 store i32 %conv, ptr %add.ptr, align 4 6592 ret void 6593} 6594 6595; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6596define dso_local void @st_align64_uint8_t_uint32_t(ptr nocapture %ptr, i8 zeroext %str) { 6597; CHECK-P10-LABEL: st_align64_uint8_t_uint32_t: 6598; CHECK-P10: # %bb.0: # %entry 6599; CHECK-P10-NEXT: pli r5, 244140625 6600; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6601; CHECK-P10-NEXT: stwx r4, r3, r5 6602; CHECK-P10-NEXT: blr 6603; 6604; CHECK-PREP10-LABEL: st_align64_uint8_t_uint32_t: 6605; CHECK-PREP10: # %bb.0: # %entry 6606; CHECK-PREP10-NEXT: lis r5, 3725 6607; CHECK-PREP10-NEXT: ori r5, r5, 19025 6608; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6609; CHECK-PREP10-NEXT: stwx r4, r3, r5 6610; CHECK-PREP10-NEXT: blr 6611entry: 6612 %conv = zext i8 %str to i32 6613 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 6614 store i32 %conv, ptr %add.ptr, align 4 6615 ret void 6616} 6617 6618; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6619define dso_local void @st_reg_uint8_t_uint32_t(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 6620; CHECK-LABEL: st_reg_uint8_t_uint32_t: 6621; CHECK: # %bb.0: # %entry 6622; CHECK-NEXT: stwx r5, r3, r4 6623; CHECK-NEXT: blr 6624entry: 6625 %conv = zext i8 %str to i32 6626 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 6627 store i32 %conv, ptr %add.ptr, align 4 6628 ret void 6629} 6630 6631; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6632define dso_local void @st_or1_uint8_t_uint32_t(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 6633; CHECK-LABEL: st_or1_uint8_t_uint32_t: 6634; CHECK: # %bb.0: # %entry 6635; CHECK-NEXT: or r3, r4, r3 6636; CHECK-NEXT: stw r5, 0(r3) 6637; CHECK-NEXT: blr 6638entry: 6639 %conv = zext i8 %str to i32 6640 %conv1 = zext i8 %off to i64 6641 %or = or i64 %conv1, %ptr 6642 %0 = inttoptr i64 %or to ptr 6643 store i32 %conv, ptr %0, align 4 6644 ret void 6645} 6646 6647; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6648define dso_local void @st_not_disjoint16_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 6649; CHECK-LABEL: st_not_disjoint16_uint8_t_uint32_t: 6650; CHECK: # %bb.0: # %entry 6651; CHECK-NEXT: ori r3, r3, 6 6652; CHECK-NEXT: stw r4, 0(r3) 6653; CHECK-NEXT: blr 6654entry: 6655 %conv = zext i8 %str to i32 6656 %or = or i64 %ptr, 6 6657 %0 = inttoptr i64 %or to ptr 6658 store i32 %conv, ptr %0, align 4 6659 ret void 6660} 6661 6662; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6663define dso_local void @st_disjoint_align16_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 6664; CHECK-LABEL: st_disjoint_align16_uint8_t_uint32_t: 6665; CHECK: # %bb.0: # %entry 6666; CHECK-NEXT: rldicr r3, r3, 0, 51 6667; CHECK-NEXT: stw r4, 24(r3) 6668; CHECK-NEXT: blr 6669entry: 6670 %and = and i64 %ptr, -4096 6671 %conv = zext i8 %str to i32 6672 %or = or i64 %and, 24 6673 %0 = inttoptr i64 %or to ptr 6674 store i32 %conv, ptr %0, align 8 6675 ret void 6676} 6677 6678; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6679define dso_local void @st_not_disjoint32_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 6680; CHECK-LABEL: st_not_disjoint32_uint8_t_uint32_t: 6681; CHECK: # %bb.0: # %entry 6682; CHECK-NEXT: ori r3, r3, 34463 6683; CHECK-NEXT: oris r3, r3, 1 6684; CHECK-NEXT: stw r4, 0(r3) 6685; CHECK-NEXT: blr 6686entry: 6687 %conv = zext i8 %str to i32 6688 %or = or i64 %ptr, 99999 6689 %0 = inttoptr i64 %or to ptr 6690 store i32 %conv, ptr %0, align 4 6691 ret void 6692} 6693 6694; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6695define dso_local void @st_disjoint_align32_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 6696; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_uint32_t: 6697; CHECK-P10: # %bb.0: # %entry 6698; CHECK-P10-NEXT: lis r5, -15264 6699; CHECK-P10-NEXT: and r3, r3, r5 6700; CHECK-P10-NEXT: pstw r4, 999990000(r3), 0 6701; CHECK-P10-NEXT: blr 6702; 6703; CHECK-PREP10-LABEL: st_disjoint_align32_uint8_t_uint32_t: 6704; CHECK-PREP10: # %bb.0: # %entry 6705; CHECK-PREP10-NEXT: lis r5, -15264 6706; CHECK-PREP10-NEXT: and r3, r3, r5 6707; CHECK-PREP10-NEXT: lis r5, 15258 6708; CHECK-PREP10-NEXT: ori r5, r5, 41712 6709; CHECK-PREP10-NEXT: stwx r4, r3, r5 6710; CHECK-PREP10-NEXT: blr 6711entry: 6712 %and = and i64 %ptr, -1000341504 6713 %conv = zext i8 %str to i32 6714 %or = or i64 %and, 999990000 6715 %0 = inttoptr i64 %or to ptr 6716 store i32 %conv, ptr %0, align 16 6717 ret void 6718} 6719 6720; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6721define dso_local void @st_not_disjoint64_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 6722; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_uint32_t: 6723; CHECK-P10: # %bb.0: # %entry 6724; CHECK-P10-NEXT: pli r5, 232 6725; CHECK-P10-NEXT: pli r6, 3567587329 6726; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 6727; CHECK-P10-NEXT: or r3, r3, r6 6728; CHECK-P10-NEXT: stw r4, 0(r3) 6729; CHECK-P10-NEXT: blr 6730; 6731; CHECK-PREP10-LABEL: st_not_disjoint64_uint8_t_uint32_t: 6732; CHECK-PREP10: # %bb.0: # %entry 6733; CHECK-PREP10-NEXT: li r5, 29 6734; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 6735; CHECK-PREP10-NEXT: oris r5, r5, 54437 6736; CHECK-PREP10-NEXT: ori r5, r5, 4097 6737; CHECK-PREP10-NEXT: or r3, r3, r5 6738; CHECK-PREP10-NEXT: stw r4, 0(r3) 6739; CHECK-PREP10-NEXT: blr 6740entry: 6741 %conv = zext i8 %str to i32 6742 %or = or i64 %ptr, 1000000000001 6743 %0 = inttoptr i64 %or to ptr 6744 store i32 %conv, ptr %0, align 4 6745 ret void 6746} 6747 6748; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6749define dso_local void @st_disjoint_align64_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 6750; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_uint32_t: 6751; CHECK-P10: # %bb.0: # %entry 6752; CHECK-P10-NEXT: pli r5, 244140625 6753; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 6754; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6755; CHECK-P10-NEXT: stwx r4, r3, r5 6756; CHECK-P10-NEXT: blr 6757; 6758; CHECK-PREP10-LABEL: st_disjoint_align64_uint8_t_uint32_t: 6759; CHECK-PREP10: # %bb.0: # %entry 6760; CHECK-PREP10-NEXT: lis r5, 3725 6761; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 6762; CHECK-PREP10-NEXT: ori r5, r5, 19025 6763; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6764; CHECK-PREP10-NEXT: stwx r4, r3, r5 6765; CHECK-PREP10-NEXT: blr 6766entry: 6767 %and = and i64 %ptr, -1099511627776 6768 %conv = zext i8 %str to i32 6769 %or = or i64 %and, 1000000000000 6770 %0 = inttoptr i64 %or to ptr 6771 store i32 %conv, ptr %0, align 4096 6772 ret void 6773} 6774 6775; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6776define dso_local void @st_cst_align16_uint8_t_uint32_t(i8 zeroext %str) { 6777; CHECK-LABEL: st_cst_align16_uint8_t_uint32_t: 6778; CHECK: # %bb.0: # %entry 6779; CHECK-NEXT: stw r3, 4080(0) 6780; CHECK-NEXT: blr 6781entry: 6782 %conv = zext i8 %str to i32 6783 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 16 6784 ret void 6785} 6786 6787; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6788define dso_local void @st_cst_align32_uint8_t_uint32_t(i8 zeroext %str) { 6789; CHECK-LABEL: st_cst_align32_uint8_t_uint32_t: 6790; CHECK: # %bb.0: # %entry 6791; CHECK-NEXT: lis r4, 153 6792; CHECK-NEXT: stw r3, -27108(r4) 6793; CHECK-NEXT: blr 6794entry: 6795 %conv = zext i8 %str to i32 6796 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 4 6797 ret void 6798} 6799 6800; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6801define dso_local void @st_cst_align64_uint8_t_uint32_t(i8 zeroext %str) { 6802; CHECK-P10-LABEL: st_cst_align64_uint8_t_uint32_t: 6803; CHECK-P10: # %bb.0: # %entry 6804; CHECK-P10-NEXT: pli r4, 244140625 6805; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6806; CHECK-P10-NEXT: stw r3, 0(r4) 6807; CHECK-P10-NEXT: blr 6808; 6809; CHECK-PREP10-LABEL: st_cst_align64_uint8_t_uint32_t: 6810; CHECK-PREP10: # %bb.0: # %entry 6811; CHECK-PREP10-NEXT: lis r4, 3725 6812; CHECK-PREP10-NEXT: ori r4, r4, 19025 6813; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6814; CHECK-PREP10-NEXT: stw r3, 0(r4) 6815; CHECK-PREP10-NEXT: blr 6816entry: 6817 %conv = zext i8 %str to i32 6818 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 6819 ret void 6820} 6821 6822; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6823define dso_local void @st_0_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 6824; CHECK-LABEL: st_0_uint8_t_uint64_t: 6825; CHECK: # %bb.0: # %entry 6826; CHECK-NEXT: std r4, 0(r3) 6827; CHECK-NEXT: blr 6828entry: 6829 %conv = zext i8 %str to i64 6830 %0 = inttoptr i64 %ptr to ptr 6831 store i64 %conv, ptr %0, align 8 6832 ret void 6833} 6834 6835; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6836define dso_local void @st_align16_uint8_t_uint64_t(ptr nocapture %ptr, i8 zeroext %str) { 6837; CHECK-LABEL: st_align16_uint8_t_uint64_t: 6838; CHECK: # %bb.0: # %entry 6839; CHECK-NEXT: std r4, 8(r3) 6840; CHECK-NEXT: blr 6841entry: 6842 %conv = zext i8 %str to i64 6843 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 6844 store i64 %conv, ptr %add.ptr, align 8 6845 ret void 6846} 6847 6848; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6849define dso_local void @st_align32_uint8_t_uint64_t(ptr nocapture %ptr, i8 zeroext %str) { 6850; CHECK-P10-LABEL: st_align32_uint8_t_uint64_t: 6851; CHECK-P10: # %bb.0: # %entry 6852; CHECK-P10-NEXT: pstd r4, 99999000(r3), 0 6853; CHECK-P10-NEXT: blr 6854; 6855; CHECK-PREP10-LABEL: st_align32_uint8_t_uint64_t: 6856; CHECK-PREP10: # %bb.0: # %entry 6857; CHECK-PREP10-NEXT: lis r5, 1525 6858; CHECK-PREP10-NEXT: ori r5, r5, 56600 6859; CHECK-PREP10-NEXT: stdx r4, r3, r5 6860; CHECK-PREP10-NEXT: blr 6861entry: 6862 %conv = zext i8 %str to i64 6863 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 6864 store i64 %conv, ptr %add.ptr, align 8 6865 ret void 6866} 6867 6868; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6869define dso_local void @st_align64_uint8_t_uint64_t(ptr nocapture %ptr, i8 zeroext %str) { 6870; CHECK-P10-LABEL: st_align64_uint8_t_uint64_t: 6871; CHECK-P10: # %bb.0: # %entry 6872; CHECK-P10-NEXT: pli r5, 244140625 6873; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6874; CHECK-P10-NEXT: stdx r4, r3, r5 6875; CHECK-P10-NEXT: blr 6876; 6877; CHECK-PREP10-LABEL: st_align64_uint8_t_uint64_t: 6878; CHECK-PREP10: # %bb.0: # %entry 6879; CHECK-PREP10-NEXT: lis r5, 3725 6880; CHECK-PREP10-NEXT: ori r5, r5, 19025 6881; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6882; CHECK-PREP10-NEXT: stdx r4, r3, r5 6883; CHECK-PREP10-NEXT: blr 6884entry: 6885 %conv = zext i8 %str to i64 6886 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 6887 store i64 %conv, ptr %add.ptr, align 8 6888 ret void 6889} 6890 6891; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6892define dso_local void @st_reg_uint8_t_uint64_t(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 6893; CHECK-LABEL: st_reg_uint8_t_uint64_t: 6894; CHECK: # %bb.0: # %entry 6895; CHECK-NEXT: stdx r5, r3, r4 6896; CHECK-NEXT: blr 6897entry: 6898 %conv = zext i8 %str to i64 6899 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 6900 store i64 %conv, ptr %add.ptr, align 8 6901 ret void 6902} 6903 6904; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6905define dso_local void @st_or1_uint8_t_uint64_t(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 6906; CHECK-LABEL: st_or1_uint8_t_uint64_t: 6907; CHECK: # %bb.0: # %entry 6908; CHECK-NEXT: or r3, r4, r3 6909; CHECK-NEXT: std r5, 0(r3) 6910; CHECK-NEXT: blr 6911entry: 6912 %conv = zext i8 %str to i64 6913 %conv1 = zext i8 %off to i64 6914 %or = or i64 %conv1, %ptr 6915 %0 = inttoptr i64 %or to ptr 6916 store i64 %conv, ptr %0, align 8 6917 ret void 6918} 6919 6920; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6921define dso_local void @st_not_disjoint16_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 6922; CHECK-LABEL: st_not_disjoint16_uint8_t_uint64_t: 6923; CHECK: # %bb.0: # %entry 6924; CHECK-NEXT: ori r3, r3, 6 6925; CHECK-NEXT: std r4, 0(r3) 6926; CHECK-NEXT: blr 6927entry: 6928 %conv = zext i8 %str to i64 6929 %or = or i64 %ptr, 6 6930 %0 = inttoptr i64 %or to ptr 6931 store i64 %conv, ptr %0, align 8 6932 ret void 6933} 6934 6935; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6936define dso_local void @st_disjoint_align16_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 6937; CHECK-LABEL: st_disjoint_align16_uint8_t_uint64_t: 6938; CHECK: # %bb.0: # %entry 6939; CHECK-NEXT: rldicr r3, r3, 0, 51 6940; CHECK-NEXT: std r4, 24(r3) 6941; CHECK-NEXT: blr 6942entry: 6943 %and = and i64 %ptr, -4096 6944 %conv = zext i8 %str to i64 6945 %or = or i64 %and, 24 6946 %0 = inttoptr i64 %or to ptr 6947 store i64 %conv, ptr %0, align 8 6948 ret void 6949} 6950 6951; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6952define dso_local void @st_not_disjoint32_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 6953; CHECK-LABEL: st_not_disjoint32_uint8_t_uint64_t: 6954; CHECK: # %bb.0: # %entry 6955; CHECK-NEXT: ori r3, r3, 34463 6956; CHECK-NEXT: oris r3, r3, 1 6957; CHECK-NEXT: std r4, 0(r3) 6958; CHECK-NEXT: blr 6959entry: 6960 %conv = zext i8 %str to i64 6961 %or = or i64 %ptr, 99999 6962 %0 = inttoptr i64 %or to ptr 6963 store i64 %conv, ptr %0, align 8 6964 ret void 6965} 6966 6967; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6968define dso_local void @st_disjoint_align32_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 6969; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_uint64_t: 6970; CHECK-P10: # %bb.0: # %entry 6971; CHECK-P10-NEXT: lis r5, -15264 6972; CHECK-P10-NEXT: and r3, r3, r5 6973; CHECK-P10-NEXT: pstd r4, 999990000(r3), 0 6974; CHECK-P10-NEXT: blr 6975; 6976; CHECK-PREP10-LABEL: st_disjoint_align32_uint8_t_uint64_t: 6977; CHECK-PREP10: # %bb.0: # %entry 6978; CHECK-PREP10-NEXT: lis r5, -15264 6979; CHECK-PREP10-NEXT: and r3, r3, r5 6980; CHECK-PREP10-NEXT: lis r5, 15258 6981; CHECK-PREP10-NEXT: ori r5, r5, 41712 6982; CHECK-PREP10-NEXT: stdx r4, r3, r5 6983; CHECK-PREP10-NEXT: blr 6984entry: 6985 %and = and i64 %ptr, -1000341504 6986 %conv = zext i8 %str to i64 6987 %or = or i64 %and, 999990000 6988 %0 = inttoptr i64 %or to ptr 6989 store i64 %conv, ptr %0, align 16 6990 ret void 6991} 6992 6993; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6994define dso_local void @st_not_disjoint64_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 6995; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_uint64_t: 6996; CHECK-P10: # %bb.0: # %entry 6997; CHECK-P10-NEXT: pli r5, 232 6998; CHECK-P10-NEXT: pli r6, 3567587329 6999; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 7000; CHECK-P10-NEXT: or r3, r3, r6 7001; CHECK-P10-NEXT: std r4, 0(r3) 7002; CHECK-P10-NEXT: blr 7003; 7004; CHECK-PREP10-LABEL: st_not_disjoint64_uint8_t_uint64_t: 7005; CHECK-PREP10: # %bb.0: # %entry 7006; CHECK-PREP10-NEXT: li r5, 29 7007; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 7008; CHECK-PREP10-NEXT: oris r5, r5, 54437 7009; CHECK-PREP10-NEXT: ori r5, r5, 4097 7010; CHECK-PREP10-NEXT: or r3, r3, r5 7011; CHECK-PREP10-NEXT: std r4, 0(r3) 7012; CHECK-PREP10-NEXT: blr 7013entry: 7014 %conv = zext i8 %str to i64 7015 %or = or i64 %ptr, 1000000000001 7016 %0 = inttoptr i64 %or to ptr 7017 store i64 %conv, ptr %0, align 8 7018 ret void 7019} 7020 7021; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7022define dso_local void @st_disjoint_align64_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 7023; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_uint64_t: 7024; CHECK-P10: # %bb.0: # %entry 7025; CHECK-P10-NEXT: pli r5, 244140625 7026; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7027; CHECK-P10-NEXT: rldic r5, r5, 12, 24 7028; CHECK-P10-NEXT: stdx r4, r3, r5 7029; CHECK-P10-NEXT: blr 7030; 7031; CHECK-PREP10-LABEL: st_disjoint_align64_uint8_t_uint64_t: 7032; CHECK-PREP10: # %bb.0: # %entry 7033; CHECK-PREP10-NEXT: lis r5, 3725 7034; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 7035; CHECK-PREP10-NEXT: ori r5, r5, 19025 7036; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 7037; CHECK-PREP10-NEXT: stdx r4, r3, r5 7038; CHECK-PREP10-NEXT: blr 7039entry: 7040 %and = and i64 %ptr, -1099511627776 7041 %conv = zext i8 %str to i64 7042 %or = or i64 %and, 1000000000000 7043 %0 = inttoptr i64 %or to ptr 7044 store i64 %conv, ptr %0, align 4096 7045 ret void 7046} 7047 7048; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7049define dso_local void @st_cst_align16_uint8_t_uint64_t(i8 zeroext %str) { 7050; CHECK-LABEL: st_cst_align16_uint8_t_uint64_t: 7051; CHECK: # %bb.0: # %entry 7052; CHECK-NEXT: std r3, 4080(0) 7053; CHECK-NEXT: blr 7054entry: 7055 %conv = zext i8 %str to i64 7056 store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 16 7057 ret void 7058} 7059 7060; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7061define dso_local void @st_cst_align32_uint8_t_uint64_t(i8 zeroext %str) { 7062; CHECK-LABEL: st_cst_align32_uint8_t_uint64_t: 7063; CHECK: # %bb.0: # %entry 7064; CHECK-NEXT: lis r4, 153 7065; CHECK-NEXT: std r3, -27108(r4) 7066; CHECK-NEXT: blr 7067entry: 7068 %conv = zext i8 %str to i64 7069 store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 8 7070 ret void 7071} 7072 7073; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7074define dso_local void @st_cst_align64_uint8_t_uint64_t(i8 zeroext %str) { 7075; CHECK-P10-LABEL: st_cst_align64_uint8_t_uint64_t: 7076; CHECK-P10: # %bb.0: # %entry 7077; CHECK-P10-NEXT: pli r4, 244140625 7078; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7079; CHECK-P10-NEXT: std r3, 0(r4) 7080; CHECK-P10-NEXT: blr 7081; 7082; CHECK-PREP10-LABEL: st_cst_align64_uint8_t_uint64_t: 7083; CHECK-PREP10: # %bb.0: # %entry 7084; CHECK-PREP10-NEXT: lis r4, 3725 7085; CHECK-PREP10-NEXT: ori r4, r4, 19025 7086; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 7087; CHECK-PREP10-NEXT: std r3, 0(r4) 7088; CHECK-PREP10-NEXT: blr 7089entry: 7090 %conv = zext i8 %str to i64 7091 store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 7092 ret void 7093} 7094 7095; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7096define dso_local void @st_0_uint8_t_float(i64 %ptr, i8 zeroext %str) { 7097; CHECK-LABEL: st_0_uint8_t_float: 7098; CHECK: # %bb.0: # %entry 7099; CHECK-NEXT: mtfprwz f0, r4 7100; CHECK-NEXT: xscvuxdsp f0, f0 7101; CHECK-NEXT: stfs f0, 0(r3) 7102; CHECK-NEXT: blr 7103entry: 7104 %conv = uitofp i8 %str to float 7105 %0 = inttoptr i64 %ptr to ptr 7106 store float %conv, ptr %0, align 4 7107 ret void 7108} 7109 7110; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7111define dso_local void @st_align16_uint8_t_float(ptr nocapture %ptr, i8 zeroext %str) { 7112; CHECK-LABEL: st_align16_uint8_t_float: 7113; CHECK: # %bb.0: # %entry 7114; CHECK-NEXT: mtfprwz f0, r4 7115; CHECK-NEXT: xscvuxdsp f0, f0 7116; CHECK-NEXT: stfs f0, 8(r3) 7117; CHECK-NEXT: blr 7118entry: 7119 %conv = uitofp i8 %str to float 7120 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 7121 store float %conv, ptr %add.ptr, align 4 7122 ret void 7123} 7124 7125; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7126define dso_local void @st_align32_uint8_t_float(ptr nocapture %ptr, i8 zeroext %str) { 7127; CHECK-P10-LABEL: st_align32_uint8_t_float: 7128; CHECK-P10: # %bb.0: # %entry 7129; CHECK-P10-NEXT: mtfprwz f0, r4 7130; CHECK-P10-NEXT: xscvuxdsp f0, f0 7131; CHECK-P10-NEXT: pstfs f0, 99999000(r3), 0 7132; CHECK-P10-NEXT: blr 7133; 7134; CHECK-P9-LABEL: st_align32_uint8_t_float: 7135; CHECK-P9: # %bb.0: # %entry 7136; CHECK-P9-NEXT: mtfprwz f0, r4 7137; CHECK-P9-NEXT: lis r4, 1525 7138; CHECK-P9-NEXT: xscvuxdsp f0, f0 7139; CHECK-P9-NEXT: ori r4, r4, 56600 7140; CHECK-P9-NEXT: stfsx f0, r3, r4 7141; CHECK-P9-NEXT: blr 7142; 7143; CHECK-P8-LABEL: st_align32_uint8_t_float: 7144; CHECK-P8: # %bb.0: # %entry 7145; CHECK-P8-NEXT: mtfprwz f0, r4 7146; CHECK-P8-NEXT: lis r4, 1525 7147; CHECK-P8-NEXT: ori r4, r4, 56600 7148; CHECK-P8-NEXT: xscvuxdsp f0, f0 7149; CHECK-P8-NEXT: stfsx f0, r3, r4 7150; CHECK-P8-NEXT: blr 7151entry: 7152 %conv = uitofp i8 %str to float 7153 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 7154 store float %conv, ptr %add.ptr, align 4 7155 ret void 7156} 7157 7158; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7159define dso_local void @st_align64_uint8_t_float(ptr nocapture %ptr, i8 zeroext %str) { 7160; CHECK-P10-LABEL: st_align64_uint8_t_float: 7161; CHECK-P10: # %bb.0: # %entry 7162; CHECK-P10-NEXT: mtfprwz f0, r4 7163; CHECK-P10-NEXT: pli r4, 244140625 7164; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7165; CHECK-P10-NEXT: xscvuxdsp f0, f0 7166; CHECK-P10-NEXT: stfsx f0, r3, r4 7167; CHECK-P10-NEXT: blr 7168; 7169; CHECK-P9-LABEL: st_align64_uint8_t_float: 7170; CHECK-P9: # %bb.0: # %entry 7171; CHECK-P9-NEXT: mtfprwz f0, r4 7172; CHECK-P9-NEXT: lis r4, 3725 7173; CHECK-P9-NEXT: xscvuxdsp f0, f0 7174; CHECK-P9-NEXT: ori r4, r4, 19025 7175; CHECK-P9-NEXT: rldic r4, r4, 12, 24 7176; CHECK-P9-NEXT: stfsx f0, r3, r4 7177; CHECK-P9-NEXT: blr 7178; 7179; CHECK-P8-LABEL: st_align64_uint8_t_float: 7180; CHECK-P8: # %bb.0: # %entry 7181; CHECK-P8-NEXT: mtfprwz f0, r4 7182; CHECK-P8-NEXT: lis r4, 3725 7183; CHECK-P8-NEXT: ori r4, r4, 19025 7184; CHECK-P8-NEXT: rldic r4, r4, 12, 24 7185; CHECK-P8-NEXT: xscvuxdsp f0, f0 7186; CHECK-P8-NEXT: stfsx f0, r3, r4 7187; CHECK-P8-NEXT: blr 7188entry: 7189 %conv = uitofp i8 %str to float 7190 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 7191 store float %conv, ptr %add.ptr, align 4 7192 ret void 7193} 7194 7195; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7196define dso_local void @st_reg_uint8_t_float(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 7197; CHECK-LABEL: st_reg_uint8_t_float: 7198; CHECK: # %bb.0: # %entry 7199; CHECK-NEXT: mtfprwz f0, r5 7200; CHECK-NEXT: xscvuxdsp f0, f0 7201; CHECK-NEXT: stfsx f0, r3, r4 7202; CHECK-NEXT: blr 7203entry: 7204 %conv = uitofp i8 %str to float 7205 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 7206 store float %conv, ptr %add.ptr, align 4 7207 ret void 7208} 7209 7210; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7211define dso_local void @st_or1_uint8_t_float(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 7212; CHECK-LABEL: st_or1_uint8_t_float: 7213; CHECK: # %bb.0: # %entry 7214; CHECK-NEXT: mtfprwz f0, r5 7215; CHECK-NEXT: or r3, r4, r3 7216; CHECK-NEXT: xscvuxdsp f0, f0 7217; CHECK-NEXT: stfs f0, 0(r3) 7218; CHECK-NEXT: blr 7219entry: 7220 %conv = uitofp i8 %str to float 7221 %conv1 = zext i8 %off to i64 7222 %or = or i64 %conv1, %ptr 7223 %0 = inttoptr i64 %or to ptr 7224 store float %conv, ptr %0, align 4 7225 ret void 7226} 7227 7228; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7229define dso_local void @st_not_disjoint16_uint8_t_float(i64 %ptr, i8 zeroext %str) { 7230; CHECK-LABEL: st_not_disjoint16_uint8_t_float: 7231; CHECK: # %bb.0: # %entry 7232; CHECK-NEXT: mtfprwz f0, r4 7233; CHECK-NEXT: ori r3, r3, 6 7234; CHECK-NEXT: xscvuxdsp f0, f0 7235; CHECK-NEXT: stfs f0, 0(r3) 7236; CHECK-NEXT: blr 7237entry: 7238 %conv = uitofp i8 %str to float 7239 %or = or i64 %ptr, 6 7240 %0 = inttoptr i64 %or to ptr 7241 store float %conv, ptr %0, align 4 7242 ret void 7243} 7244 7245; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7246define dso_local void @st_disjoint_align16_uint8_t_float(i64 %ptr, i8 zeroext %str) { 7247; CHECK-LABEL: st_disjoint_align16_uint8_t_float: 7248; CHECK: # %bb.0: # %entry 7249; CHECK-NEXT: mtfprwz f0, r4 7250; CHECK-NEXT: rldicr r3, r3, 0, 51 7251; CHECK-NEXT: xscvuxdsp f0, f0 7252; CHECK-NEXT: stfs f0, 24(r3) 7253; CHECK-NEXT: blr 7254entry: 7255 %and = and i64 %ptr, -4096 7256 %conv = uitofp i8 %str to float 7257 %or = or i64 %and, 24 7258 %0 = inttoptr i64 %or to ptr 7259 store float %conv, ptr %0, align 8 7260 ret void 7261} 7262 7263; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7264define dso_local void @st_not_disjoint32_uint8_t_float(i64 %ptr, i8 zeroext %str) { 7265; CHECK-P10-LABEL: st_not_disjoint32_uint8_t_float: 7266; CHECK-P10: # %bb.0: # %entry 7267; CHECK-P10-NEXT: mtfprwz f0, r4 7268; CHECK-P10-NEXT: ori r3, r3, 34463 7269; CHECK-P10-NEXT: oris r3, r3, 1 7270; CHECK-P10-NEXT: xscvuxdsp f0, f0 7271; CHECK-P10-NEXT: stfs f0, 0(r3) 7272; CHECK-P10-NEXT: blr 7273; 7274; CHECK-P9-LABEL: st_not_disjoint32_uint8_t_float: 7275; CHECK-P9: # %bb.0: # %entry 7276; CHECK-P9-NEXT: mtfprwz f0, r4 7277; CHECK-P9-NEXT: ori r3, r3, 34463 7278; CHECK-P9-NEXT: xscvuxdsp f0, f0 7279; CHECK-P9-NEXT: oris r3, r3, 1 7280; CHECK-P9-NEXT: stfs f0, 0(r3) 7281; CHECK-P9-NEXT: blr 7282; 7283; CHECK-P8-LABEL: st_not_disjoint32_uint8_t_float: 7284; CHECK-P8: # %bb.0: # %entry 7285; CHECK-P8-NEXT: mtfprwz f0, r4 7286; CHECK-P8-NEXT: ori r3, r3, 34463 7287; CHECK-P8-NEXT: oris r3, r3, 1 7288; CHECK-P8-NEXT: xscvuxdsp f0, f0 7289; CHECK-P8-NEXT: stfs f0, 0(r3) 7290; CHECK-P8-NEXT: blr 7291entry: 7292 %conv = uitofp i8 %str to float 7293 %or = or i64 %ptr, 99999 7294 %0 = inttoptr i64 %or to ptr 7295 store float %conv, ptr %0, align 4 7296 ret void 7297} 7298 7299; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7300define dso_local void @st_disjoint_align32_uint8_t_float(i64 %ptr, i8 zeroext %str) { 7301; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_float: 7302; CHECK-P10: # %bb.0: # %entry 7303; CHECK-P10-NEXT: mtfprwz f0, r4 7304; CHECK-P10-NEXT: lis r5, -15264 7305; CHECK-P10-NEXT: and r3, r3, r5 7306; CHECK-P10-NEXT: xscvuxdsp f0, f0 7307; CHECK-P10-NEXT: pstfs f0, 999990000(r3), 0 7308; CHECK-P10-NEXT: blr 7309; 7310; CHECK-P9-LABEL: st_disjoint_align32_uint8_t_float: 7311; CHECK-P9: # %bb.0: # %entry 7312; CHECK-P9-NEXT: mtfprwz f0, r4 7313; CHECK-P9-NEXT: lis r5, -15264 7314; CHECK-P9-NEXT: lis r4, 15258 7315; CHECK-P9-NEXT: xscvuxdsp f0, f0 7316; CHECK-P9-NEXT: and r3, r3, r5 7317; CHECK-P9-NEXT: ori r4, r4, 41712 7318; CHECK-P9-NEXT: stfsx f0, r3, r4 7319; CHECK-P9-NEXT: blr 7320; 7321; CHECK-P8-LABEL: st_disjoint_align32_uint8_t_float: 7322; CHECK-P8: # %bb.0: # %entry 7323; CHECK-P8-NEXT: mtfprwz f0, r4 7324; CHECK-P8-NEXT: lis r5, -15264 7325; CHECK-P8-NEXT: lis r4, 15258 7326; CHECK-P8-NEXT: and r3, r3, r5 7327; CHECK-P8-NEXT: ori r4, r4, 41712 7328; CHECK-P8-NEXT: xscvuxdsp f0, f0 7329; CHECK-P8-NEXT: stfsx f0, r3, r4 7330; CHECK-P8-NEXT: blr 7331entry: 7332 %and = and i64 %ptr, -1000341504 7333 %conv = uitofp i8 %str to float 7334 %or = or i64 %and, 999990000 7335 %0 = inttoptr i64 %or to ptr 7336 store float %conv, ptr %0, align 16 7337 ret void 7338} 7339 7340; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7341define dso_local void @st_not_disjoint64_uint8_t_float(i64 %ptr, i8 zeroext %str) { 7342; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_float: 7343; CHECK-P10: # %bb.0: # %entry 7344; CHECK-P10-NEXT: mtfprwz f0, r4 7345; CHECK-P10-NEXT: pli r4, 232 7346; CHECK-P10-NEXT: pli r5, 3567587329 7347; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 7348; CHECK-P10-NEXT: xscvuxdsp f0, f0 7349; CHECK-P10-NEXT: or r3, r3, r5 7350; CHECK-P10-NEXT: stfs f0, 0(r3) 7351; CHECK-P10-NEXT: blr 7352; 7353; CHECK-P9-LABEL: st_not_disjoint64_uint8_t_float: 7354; CHECK-P9: # %bb.0: # %entry 7355; CHECK-P9-NEXT: mtfprwz f0, r4 7356; CHECK-P9-NEXT: li r4, 29 7357; CHECK-P9-NEXT: rldic r4, r4, 35, 24 7358; CHECK-P9-NEXT: xscvuxdsp f0, f0 7359; CHECK-P9-NEXT: oris r4, r4, 54437 7360; CHECK-P9-NEXT: ori r4, r4, 4097 7361; CHECK-P9-NEXT: or r3, r3, r4 7362; CHECK-P9-NEXT: stfs f0, 0(r3) 7363; CHECK-P9-NEXT: blr 7364; 7365; CHECK-P8-LABEL: st_not_disjoint64_uint8_t_float: 7366; CHECK-P8: # %bb.0: # %entry 7367; CHECK-P8-NEXT: mtfprwz f0, r4 7368; CHECK-P8-NEXT: li r4, 29 7369; CHECK-P8-NEXT: rldic r4, r4, 35, 24 7370; CHECK-P8-NEXT: oris r4, r4, 54437 7371; CHECK-P8-NEXT: xscvuxdsp f0, f0 7372; CHECK-P8-NEXT: ori r4, r4, 4097 7373; CHECK-P8-NEXT: or r3, r3, r4 7374; CHECK-P8-NEXT: stfs f0, 0(r3) 7375; CHECK-P8-NEXT: blr 7376entry: 7377 %conv = uitofp i8 %str to float 7378 %or = or i64 %ptr, 1000000000001 7379 %0 = inttoptr i64 %or to ptr 7380 store float %conv, ptr %0, align 4 7381 ret void 7382} 7383 7384; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7385define dso_local void @st_disjoint_align64_uint8_t_float(i64 %ptr, i8 zeroext %str) { 7386; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_float: 7387; CHECK-P10: # %bb.0: # %entry 7388; CHECK-P10-NEXT: mtfprwz f0, r4 7389; CHECK-P10-NEXT: pli r4, 244140625 7390; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7391; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7392; CHECK-P10-NEXT: xscvuxdsp f0, f0 7393; CHECK-P10-NEXT: stfsx f0, r3, r4 7394; CHECK-P10-NEXT: blr 7395; 7396; CHECK-P9-LABEL: st_disjoint_align64_uint8_t_float: 7397; CHECK-P9: # %bb.0: # %entry 7398; CHECK-P9-NEXT: mtfprwz f0, r4 7399; CHECK-P9-NEXT: lis r4, 3725 7400; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 7401; CHECK-P9-NEXT: xscvuxdsp f0, f0 7402; CHECK-P9-NEXT: ori r4, r4, 19025 7403; CHECK-P9-NEXT: rldic r4, r4, 12, 24 7404; CHECK-P9-NEXT: stfsx f0, r3, r4 7405; CHECK-P9-NEXT: blr 7406; 7407; CHECK-P8-LABEL: st_disjoint_align64_uint8_t_float: 7408; CHECK-P8: # %bb.0: # %entry 7409; CHECK-P8-NEXT: mtfprwz f0, r4 7410; CHECK-P8-NEXT: lis r4, 3725 7411; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 7412; CHECK-P8-NEXT: ori r4, r4, 19025 7413; CHECK-P8-NEXT: rldic r4, r4, 12, 24 7414; CHECK-P8-NEXT: xscvuxdsp f0, f0 7415; CHECK-P8-NEXT: stfsx f0, r3, r4 7416; CHECK-P8-NEXT: blr 7417entry: 7418 %and = and i64 %ptr, -1099511627776 7419 %conv = uitofp i8 %str to float 7420 %or = or i64 %and, 1000000000000 7421 %0 = inttoptr i64 %or to ptr 7422 store float %conv, ptr %0, align 4096 7423 ret void 7424} 7425 7426; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7427define dso_local void @st_cst_align16_uint8_t_float(i8 zeroext %str) { 7428; CHECK-LABEL: st_cst_align16_uint8_t_float: 7429; CHECK: # %bb.0: # %entry 7430; CHECK-NEXT: mtfprwz f0, r3 7431; CHECK-NEXT: xscvuxdsp f0, f0 7432; CHECK-NEXT: stfs f0, 4080(0) 7433; CHECK-NEXT: blr 7434entry: 7435 %conv = uitofp i8 %str to float 7436 store float %conv, ptr inttoptr (i64 4080 to ptr), align 16 7437 ret void 7438} 7439 7440; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7441define dso_local void @st_cst_align32_uint8_t_float(i8 zeroext %str) { 7442; CHECK-LABEL: st_cst_align32_uint8_t_float: 7443; CHECK: # %bb.0: # %entry 7444; CHECK-NEXT: mtfprwz f0, r3 7445; CHECK-NEXT: lis r3, 153 7446; CHECK-NEXT: xscvuxdsp f0, f0 7447; CHECK-NEXT: stfs f0, -27108(r3) 7448; CHECK-NEXT: blr 7449entry: 7450 %conv = uitofp i8 %str to float 7451 store float %conv, ptr inttoptr (i64 9999900 to ptr), align 4 7452 ret void 7453} 7454 7455; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7456define dso_local void @st_cst_align64_uint8_t_float(i8 zeroext %str) { 7457; CHECK-P10-LABEL: st_cst_align64_uint8_t_float: 7458; CHECK-P10: # %bb.0: # %entry 7459; CHECK-P10-NEXT: mtfprwz f0, r3 7460; CHECK-P10-NEXT: pli r3, 244140625 7461; CHECK-P10-NEXT: rldic r3, r3, 12, 24 7462; CHECK-P10-NEXT: xscvuxdsp f0, f0 7463; CHECK-P10-NEXT: stfs f0, 0(r3) 7464; CHECK-P10-NEXT: blr 7465; 7466; CHECK-P9-LABEL: st_cst_align64_uint8_t_float: 7467; CHECK-P9: # %bb.0: # %entry 7468; CHECK-P9-NEXT: mtfprwz f0, r3 7469; CHECK-P9-NEXT: lis r3, 3725 7470; CHECK-P9-NEXT: xscvuxdsp f0, f0 7471; CHECK-P9-NEXT: ori r3, r3, 19025 7472; CHECK-P9-NEXT: rldic r3, r3, 12, 24 7473; CHECK-P9-NEXT: stfs f0, 0(r3) 7474; CHECK-P9-NEXT: blr 7475; 7476; CHECK-P8-LABEL: st_cst_align64_uint8_t_float: 7477; CHECK-P8: # %bb.0: # %entry 7478; CHECK-P8-NEXT: mtfprwz f0, r3 7479; CHECK-P8-NEXT: lis r3, 3725 7480; CHECK-P8-NEXT: ori r3, r3, 19025 7481; CHECK-P8-NEXT: rldic r3, r3, 12, 24 7482; CHECK-P8-NEXT: xscvuxdsp f0, f0 7483; CHECK-P8-NEXT: stfs f0, 0(r3) 7484; CHECK-P8-NEXT: blr 7485entry: 7486 %conv = uitofp i8 %str to float 7487 store float %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 7488 ret void 7489} 7490 7491; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7492define dso_local void @st_0_uint8_t_double(i64 %ptr, i8 zeroext %str) { 7493; CHECK-LABEL: st_0_uint8_t_double: 7494; CHECK: # %bb.0: # %entry 7495; CHECK-NEXT: mtfprwz f0, r4 7496; CHECK-NEXT: xscvuxddp f0, f0 7497; CHECK-NEXT: stfd f0, 0(r3) 7498; CHECK-NEXT: blr 7499entry: 7500 %conv = uitofp i8 %str to double 7501 %0 = inttoptr i64 %ptr to ptr 7502 store double %conv, ptr %0, align 8 7503 ret void 7504} 7505 7506; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7507define dso_local void @st_align16_uint8_t_double(ptr nocapture %ptr, i8 zeroext %str) { 7508; CHECK-LABEL: st_align16_uint8_t_double: 7509; CHECK: # %bb.0: # %entry 7510; CHECK-NEXT: mtfprwz f0, r4 7511; CHECK-NEXT: xscvuxddp f0, f0 7512; CHECK-NEXT: stfd f0, 8(r3) 7513; CHECK-NEXT: blr 7514entry: 7515 %conv = uitofp i8 %str to double 7516 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 7517 store double %conv, ptr %add.ptr, align 8 7518 ret void 7519} 7520 7521; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7522define dso_local void @st_align32_uint8_t_double(ptr nocapture %ptr, i8 zeroext %str) { 7523; CHECK-P10-LABEL: st_align32_uint8_t_double: 7524; CHECK-P10: # %bb.0: # %entry 7525; CHECK-P10-NEXT: mtfprwz f0, r4 7526; CHECK-P10-NEXT: xscvuxddp f0, f0 7527; CHECK-P10-NEXT: pstfd f0, 99999000(r3), 0 7528; CHECK-P10-NEXT: blr 7529; 7530; CHECK-P9-LABEL: st_align32_uint8_t_double: 7531; CHECK-P9: # %bb.0: # %entry 7532; CHECK-P9-NEXT: mtfprwz f0, r4 7533; CHECK-P9-NEXT: lis r4, 1525 7534; CHECK-P9-NEXT: xscvuxddp f0, f0 7535; CHECK-P9-NEXT: ori r4, r4, 56600 7536; CHECK-P9-NEXT: stfdx f0, r3, r4 7537; CHECK-P9-NEXT: blr 7538; 7539; CHECK-P8-LABEL: st_align32_uint8_t_double: 7540; CHECK-P8: # %bb.0: # %entry 7541; CHECK-P8-NEXT: mtfprwz f0, r4 7542; CHECK-P8-NEXT: lis r4, 1525 7543; CHECK-P8-NEXT: ori r4, r4, 56600 7544; CHECK-P8-NEXT: xscvuxddp f0, f0 7545; CHECK-P8-NEXT: stfdx f0, r3, r4 7546; CHECK-P8-NEXT: blr 7547entry: 7548 %conv = uitofp i8 %str to double 7549 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 7550 store double %conv, ptr %add.ptr, align 8 7551 ret void 7552} 7553 7554; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7555define dso_local void @st_align64_uint8_t_double(ptr nocapture %ptr, i8 zeroext %str) { 7556; CHECK-P10-LABEL: st_align64_uint8_t_double: 7557; CHECK-P10: # %bb.0: # %entry 7558; CHECK-P10-NEXT: mtfprwz f0, r4 7559; CHECK-P10-NEXT: pli r4, 244140625 7560; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7561; CHECK-P10-NEXT: xscvuxddp f0, f0 7562; CHECK-P10-NEXT: stfdx f0, r3, r4 7563; CHECK-P10-NEXT: blr 7564; 7565; CHECK-P9-LABEL: st_align64_uint8_t_double: 7566; CHECK-P9: # %bb.0: # %entry 7567; CHECK-P9-NEXT: mtfprwz f0, r4 7568; CHECK-P9-NEXT: lis r4, 3725 7569; CHECK-P9-NEXT: xscvuxddp f0, f0 7570; CHECK-P9-NEXT: ori r4, r4, 19025 7571; CHECK-P9-NEXT: rldic r4, r4, 12, 24 7572; CHECK-P9-NEXT: stfdx f0, r3, r4 7573; CHECK-P9-NEXT: blr 7574; 7575; CHECK-P8-LABEL: st_align64_uint8_t_double: 7576; CHECK-P8: # %bb.0: # %entry 7577; CHECK-P8-NEXT: mtfprwz f0, r4 7578; CHECK-P8-NEXT: lis r4, 3725 7579; CHECK-P8-NEXT: ori r4, r4, 19025 7580; CHECK-P8-NEXT: rldic r4, r4, 12, 24 7581; CHECK-P8-NEXT: xscvuxddp f0, f0 7582; CHECK-P8-NEXT: stfdx f0, r3, r4 7583; CHECK-P8-NEXT: blr 7584entry: 7585 %conv = uitofp i8 %str to double 7586 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 7587 store double %conv, ptr %add.ptr, align 8 7588 ret void 7589} 7590 7591; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7592define dso_local void @st_reg_uint8_t_double(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 7593; CHECK-LABEL: st_reg_uint8_t_double: 7594; CHECK: # %bb.0: # %entry 7595; CHECK-NEXT: mtfprwz f0, r5 7596; CHECK-NEXT: xscvuxddp f0, f0 7597; CHECK-NEXT: stfdx f0, r3, r4 7598; CHECK-NEXT: blr 7599entry: 7600 %conv = uitofp i8 %str to double 7601 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 7602 store double %conv, ptr %add.ptr, align 8 7603 ret void 7604} 7605 7606; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7607define dso_local void @st_or1_uint8_t_double(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 7608; CHECK-LABEL: st_or1_uint8_t_double: 7609; CHECK: # %bb.0: # %entry 7610; CHECK-NEXT: mtfprwz f0, r5 7611; CHECK-NEXT: or r3, r4, r3 7612; CHECK-NEXT: xscvuxddp f0, f0 7613; CHECK-NEXT: stfd f0, 0(r3) 7614; CHECK-NEXT: blr 7615entry: 7616 %conv = uitofp i8 %str to double 7617 %conv1 = zext i8 %off to i64 7618 %or = or i64 %conv1, %ptr 7619 %0 = inttoptr i64 %or to ptr 7620 store double %conv, ptr %0, align 8 7621 ret void 7622} 7623 7624; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7625define dso_local void @st_not_disjoint16_uint8_t_double(i64 %ptr, i8 zeroext %str) { 7626; CHECK-LABEL: st_not_disjoint16_uint8_t_double: 7627; CHECK: # %bb.0: # %entry 7628; CHECK-NEXT: mtfprwz f0, r4 7629; CHECK-NEXT: ori r3, r3, 6 7630; CHECK-NEXT: xscvuxddp f0, f0 7631; CHECK-NEXT: stfd f0, 0(r3) 7632; CHECK-NEXT: blr 7633entry: 7634 %conv = uitofp i8 %str to double 7635 %or = or i64 %ptr, 6 7636 %0 = inttoptr i64 %or to ptr 7637 store double %conv, ptr %0, align 8 7638 ret void 7639} 7640 7641; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7642define dso_local void @st_disjoint_align16_uint8_t_double(i64 %ptr, i8 zeroext %str) { 7643; CHECK-LABEL: st_disjoint_align16_uint8_t_double: 7644; CHECK: # %bb.0: # %entry 7645; CHECK-NEXT: mtfprwz f0, r4 7646; CHECK-NEXT: rldicr r3, r3, 0, 51 7647; CHECK-NEXT: xscvuxddp f0, f0 7648; CHECK-NEXT: stfd f0, 24(r3) 7649; CHECK-NEXT: blr 7650entry: 7651 %and = and i64 %ptr, -4096 7652 %conv = uitofp i8 %str to double 7653 %or = or i64 %and, 24 7654 %0 = inttoptr i64 %or to ptr 7655 store double %conv, ptr %0, align 8 7656 ret void 7657} 7658 7659; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7660define dso_local void @st_not_disjoint32_uint8_t_double(i64 %ptr, i8 zeroext %str) { 7661; CHECK-P10-LABEL: st_not_disjoint32_uint8_t_double: 7662; CHECK-P10: # %bb.0: # %entry 7663; CHECK-P10-NEXT: mtfprwz f0, r4 7664; CHECK-P10-NEXT: ori r3, r3, 34463 7665; CHECK-P10-NEXT: oris r3, r3, 1 7666; CHECK-P10-NEXT: xscvuxddp f0, f0 7667; CHECK-P10-NEXT: stfd f0, 0(r3) 7668; CHECK-P10-NEXT: blr 7669; 7670; CHECK-P9-LABEL: st_not_disjoint32_uint8_t_double: 7671; CHECK-P9: # %bb.0: # %entry 7672; CHECK-P9-NEXT: mtfprwz f0, r4 7673; CHECK-P9-NEXT: ori r3, r3, 34463 7674; CHECK-P9-NEXT: xscvuxddp f0, f0 7675; CHECK-P9-NEXT: oris r3, r3, 1 7676; CHECK-P9-NEXT: stfd f0, 0(r3) 7677; CHECK-P9-NEXT: blr 7678; 7679; CHECK-P8-LABEL: st_not_disjoint32_uint8_t_double: 7680; CHECK-P8: # %bb.0: # %entry 7681; CHECK-P8-NEXT: mtfprwz f0, r4 7682; CHECK-P8-NEXT: ori r3, r3, 34463 7683; CHECK-P8-NEXT: oris r3, r3, 1 7684; CHECK-P8-NEXT: xscvuxddp f0, f0 7685; CHECK-P8-NEXT: stfd f0, 0(r3) 7686; CHECK-P8-NEXT: blr 7687entry: 7688 %conv = uitofp i8 %str to double 7689 %or = or i64 %ptr, 99999 7690 %0 = inttoptr i64 %or to ptr 7691 store double %conv, ptr %0, align 8 7692 ret void 7693} 7694 7695; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7696define dso_local void @st_disjoint_align32_uint8_t_double(i64 %ptr, i8 zeroext %str) { 7697; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_double: 7698; CHECK-P10: # %bb.0: # %entry 7699; CHECK-P10-NEXT: mtfprwz f0, r4 7700; CHECK-P10-NEXT: lis r5, -15264 7701; CHECK-P10-NEXT: and r3, r3, r5 7702; CHECK-P10-NEXT: xscvuxddp f0, f0 7703; CHECK-P10-NEXT: pstfd f0, 999990000(r3), 0 7704; CHECK-P10-NEXT: blr 7705; 7706; CHECK-P9-LABEL: st_disjoint_align32_uint8_t_double: 7707; CHECK-P9: # %bb.0: # %entry 7708; CHECK-P9-NEXT: mtfprwz f0, r4 7709; CHECK-P9-NEXT: lis r5, -15264 7710; CHECK-P9-NEXT: lis r4, 15258 7711; CHECK-P9-NEXT: xscvuxddp f0, f0 7712; CHECK-P9-NEXT: and r3, r3, r5 7713; CHECK-P9-NEXT: ori r4, r4, 41712 7714; CHECK-P9-NEXT: stfdx f0, r3, r4 7715; CHECK-P9-NEXT: blr 7716; 7717; CHECK-P8-LABEL: st_disjoint_align32_uint8_t_double: 7718; CHECK-P8: # %bb.0: # %entry 7719; CHECK-P8-NEXT: mtfprwz f0, r4 7720; CHECK-P8-NEXT: lis r5, -15264 7721; CHECK-P8-NEXT: lis r4, 15258 7722; CHECK-P8-NEXT: and r3, r3, r5 7723; CHECK-P8-NEXT: ori r4, r4, 41712 7724; CHECK-P8-NEXT: xscvuxddp f0, f0 7725; CHECK-P8-NEXT: stfdx f0, r3, r4 7726; CHECK-P8-NEXT: blr 7727entry: 7728 %and = and i64 %ptr, -1000341504 7729 %conv = uitofp i8 %str to double 7730 %or = or i64 %and, 999990000 7731 %0 = inttoptr i64 %or to ptr 7732 store double %conv, ptr %0, align 16 7733 ret void 7734} 7735 7736; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7737define dso_local void @st_not_disjoint64_uint8_t_double(i64 %ptr, i8 zeroext %str) { 7738; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_double: 7739; CHECK-P10: # %bb.0: # %entry 7740; CHECK-P10-NEXT: mtfprwz f0, r4 7741; CHECK-P10-NEXT: pli r4, 232 7742; CHECK-P10-NEXT: pli r5, 3567587329 7743; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 7744; CHECK-P10-NEXT: xscvuxddp f0, f0 7745; CHECK-P10-NEXT: or r3, r3, r5 7746; CHECK-P10-NEXT: stfd f0, 0(r3) 7747; CHECK-P10-NEXT: blr 7748; 7749; CHECK-P9-LABEL: st_not_disjoint64_uint8_t_double: 7750; CHECK-P9: # %bb.0: # %entry 7751; CHECK-P9-NEXT: mtfprwz f0, r4 7752; CHECK-P9-NEXT: li r4, 29 7753; CHECK-P9-NEXT: rldic r4, r4, 35, 24 7754; CHECK-P9-NEXT: xscvuxddp f0, f0 7755; CHECK-P9-NEXT: oris r4, r4, 54437 7756; CHECK-P9-NEXT: ori r4, r4, 4097 7757; CHECK-P9-NEXT: or r3, r3, r4 7758; CHECK-P9-NEXT: stfd f0, 0(r3) 7759; CHECK-P9-NEXT: blr 7760; 7761; CHECK-P8-LABEL: st_not_disjoint64_uint8_t_double: 7762; CHECK-P8: # %bb.0: # %entry 7763; CHECK-P8-NEXT: mtfprwz f0, r4 7764; CHECK-P8-NEXT: li r4, 29 7765; CHECK-P8-NEXT: rldic r4, r4, 35, 24 7766; CHECK-P8-NEXT: oris r4, r4, 54437 7767; CHECK-P8-NEXT: xscvuxddp f0, f0 7768; CHECK-P8-NEXT: ori r4, r4, 4097 7769; CHECK-P8-NEXT: or r3, r3, r4 7770; CHECK-P8-NEXT: stfd f0, 0(r3) 7771; CHECK-P8-NEXT: blr 7772entry: 7773 %conv = uitofp i8 %str to double 7774 %or = or i64 %ptr, 1000000000001 7775 %0 = inttoptr i64 %or to ptr 7776 store double %conv, ptr %0, align 8 7777 ret void 7778} 7779 7780; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7781define dso_local void @st_disjoint_align64_uint8_t_double(i64 %ptr, i8 zeroext %str) { 7782; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_double: 7783; CHECK-P10: # %bb.0: # %entry 7784; CHECK-P10-NEXT: mtfprwz f0, r4 7785; CHECK-P10-NEXT: pli r4, 244140625 7786; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7787; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7788; CHECK-P10-NEXT: xscvuxddp f0, f0 7789; CHECK-P10-NEXT: stfdx f0, r3, r4 7790; CHECK-P10-NEXT: blr 7791; 7792; CHECK-P9-LABEL: st_disjoint_align64_uint8_t_double: 7793; CHECK-P9: # %bb.0: # %entry 7794; CHECK-P9-NEXT: mtfprwz f0, r4 7795; CHECK-P9-NEXT: lis r4, 3725 7796; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 7797; CHECK-P9-NEXT: xscvuxddp f0, f0 7798; CHECK-P9-NEXT: ori r4, r4, 19025 7799; CHECK-P9-NEXT: rldic r4, r4, 12, 24 7800; CHECK-P9-NEXT: stfdx f0, r3, r4 7801; CHECK-P9-NEXT: blr 7802; 7803; CHECK-P8-LABEL: st_disjoint_align64_uint8_t_double: 7804; CHECK-P8: # %bb.0: # %entry 7805; CHECK-P8-NEXT: mtfprwz f0, r4 7806; CHECK-P8-NEXT: lis r4, 3725 7807; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 7808; CHECK-P8-NEXT: ori r4, r4, 19025 7809; CHECK-P8-NEXT: rldic r4, r4, 12, 24 7810; CHECK-P8-NEXT: xscvuxddp f0, f0 7811; CHECK-P8-NEXT: stfdx f0, r3, r4 7812; CHECK-P8-NEXT: blr 7813entry: 7814 %and = and i64 %ptr, -1099511627776 7815 %conv = uitofp i8 %str to double 7816 %or = or i64 %and, 1000000000000 7817 %0 = inttoptr i64 %or to ptr 7818 store double %conv, ptr %0, align 4096 7819 ret void 7820} 7821 7822; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7823define dso_local void @st_cst_align16_uint8_t_double(i8 zeroext %str) { 7824; CHECK-LABEL: st_cst_align16_uint8_t_double: 7825; CHECK: # %bb.0: # %entry 7826; CHECK-NEXT: mtfprwz f0, r3 7827; CHECK-NEXT: xscvuxddp f0, f0 7828; CHECK-NEXT: stfd f0, 4080(0) 7829; CHECK-NEXT: blr 7830entry: 7831 %conv = uitofp i8 %str to double 7832 store double %conv, ptr inttoptr (i64 4080 to ptr), align 16 7833 ret void 7834} 7835 7836; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7837define dso_local void @st_cst_align32_uint8_t_double(i8 zeroext %str) { 7838; CHECK-LABEL: st_cst_align32_uint8_t_double: 7839; CHECK: # %bb.0: # %entry 7840; CHECK-NEXT: mtfprwz f0, r3 7841; CHECK-NEXT: lis r3, 153 7842; CHECK-NEXT: xscvuxddp f0, f0 7843; CHECK-NEXT: stfd f0, -27108(r3) 7844; CHECK-NEXT: blr 7845entry: 7846 %conv = uitofp i8 %str to double 7847 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 8 7848 ret void 7849} 7850 7851; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7852define dso_local void @st_cst_align64_uint8_t_double(i8 zeroext %str) { 7853; CHECK-P10-LABEL: st_cst_align64_uint8_t_double: 7854; CHECK-P10: # %bb.0: # %entry 7855; CHECK-P10-NEXT: mtfprwz f0, r3 7856; CHECK-P10-NEXT: pli r3, 244140625 7857; CHECK-P10-NEXT: rldic r3, r3, 12, 24 7858; CHECK-P10-NEXT: xscvuxddp f0, f0 7859; CHECK-P10-NEXT: stfd f0, 0(r3) 7860; CHECK-P10-NEXT: blr 7861; 7862; CHECK-P9-LABEL: st_cst_align64_uint8_t_double: 7863; CHECK-P9: # %bb.0: # %entry 7864; CHECK-P9-NEXT: mtfprwz f0, r3 7865; CHECK-P9-NEXT: lis r3, 3725 7866; CHECK-P9-NEXT: xscvuxddp f0, f0 7867; CHECK-P9-NEXT: ori r3, r3, 19025 7868; CHECK-P9-NEXT: rldic r3, r3, 12, 24 7869; CHECK-P9-NEXT: stfd f0, 0(r3) 7870; CHECK-P9-NEXT: blr 7871; 7872; CHECK-P8-LABEL: st_cst_align64_uint8_t_double: 7873; CHECK-P8: # %bb.0: # %entry 7874; CHECK-P8-NEXT: mtfprwz f0, r3 7875; CHECK-P8-NEXT: lis r3, 3725 7876; CHECK-P8-NEXT: ori r3, r3, 19025 7877; CHECK-P8-NEXT: rldic r3, r3, 12, 24 7878; CHECK-P8-NEXT: xscvuxddp f0, f0 7879; CHECK-P8-NEXT: stfd f0, 0(r3) 7880; CHECK-P8-NEXT: blr 7881entry: 7882 %conv = uitofp i8 %str to double 7883 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 7884 ret void 7885} 7886 7887; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7888define dso_local void @st_0_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 7889; CHECK-LABEL: st_0_int8_t_uint16_t: 7890; CHECK: # %bb.0: # %entry 7891; CHECK-NEXT: sth r4, 0(r3) 7892; CHECK-NEXT: blr 7893entry: 7894 %conv = sext i8 %str to i16 7895 %0 = inttoptr i64 %ptr to ptr 7896 store i16 %conv, ptr %0, align 2 7897 ret void 7898} 7899 7900; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7901define dso_local void @st_align16_int8_t_uint16_t(ptr nocapture %ptr, i8 signext %str) { 7902; CHECK-LABEL: st_align16_int8_t_uint16_t: 7903; CHECK: # %bb.0: # %entry 7904; CHECK-NEXT: sth r4, 8(r3) 7905; CHECK-NEXT: blr 7906entry: 7907 %conv = sext i8 %str to i16 7908 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 7909 store i16 %conv, ptr %add.ptr, align 2 7910 ret void 7911} 7912 7913; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7914define dso_local void @st_align32_int8_t_uint16_t(ptr nocapture %ptr, i8 signext %str) { 7915; CHECK-P10-LABEL: st_align32_int8_t_uint16_t: 7916; CHECK-P10: # %bb.0: # %entry 7917; CHECK-P10-NEXT: psth r4, 99999000(r3), 0 7918; CHECK-P10-NEXT: blr 7919; 7920; CHECK-PREP10-LABEL: st_align32_int8_t_uint16_t: 7921; CHECK-PREP10: # %bb.0: # %entry 7922; CHECK-PREP10-NEXT: lis r5, 1525 7923; CHECK-PREP10-NEXT: ori r5, r5, 56600 7924; CHECK-PREP10-NEXT: sthx r4, r3, r5 7925; CHECK-PREP10-NEXT: blr 7926entry: 7927 %conv = sext i8 %str to i16 7928 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 7929 store i16 %conv, ptr %add.ptr, align 2 7930 ret void 7931} 7932 7933; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7934define dso_local void @st_align64_int8_t_uint16_t(ptr nocapture %ptr, i8 signext %str) { 7935; CHECK-P10-LABEL: st_align64_int8_t_uint16_t: 7936; CHECK-P10: # %bb.0: # %entry 7937; CHECK-P10-NEXT: pli r5, 244140625 7938; CHECK-P10-NEXT: rldic r5, r5, 12, 24 7939; CHECK-P10-NEXT: sthx r4, r3, r5 7940; CHECK-P10-NEXT: blr 7941; 7942; CHECK-PREP10-LABEL: st_align64_int8_t_uint16_t: 7943; CHECK-PREP10: # %bb.0: # %entry 7944; CHECK-PREP10-NEXT: lis r5, 3725 7945; CHECK-PREP10-NEXT: ori r5, r5, 19025 7946; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 7947; CHECK-PREP10-NEXT: sthx r4, r3, r5 7948; CHECK-PREP10-NEXT: blr 7949entry: 7950 %conv = sext i8 %str to i16 7951 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 7952 store i16 %conv, ptr %add.ptr, align 2 7953 ret void 7954} 7955 7956; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7957define dso_local void @st_reg_int8_t_uint16_t(ptr nocapture %ptr, i64 %off, i8 signext %str) { 7958; CHECK-LABEL: st_reg_int8_t_uint16_t: 7959; CHECK: # %bb.0: # %entry 7960; CHECK-NEXT: sthx r5, r3, r4 7961; CHECK-NEXT: blr 7962entry: 7963 %conv = sext i8 %str to i16 7964 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 7965 store i16 %conv, ptr %add.ptr, align 2 7966 ret void 7967} 7968 7969; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7970define dso_local void @st_or1_int8_t_uint16_t(i64 %ptr, i8 zeroext %off, i8 signext %str) { 7971; CHECK-LABEL: st_or1_int8_t_uint16_t: 7972; CHECK: # %bb.0: # %entry 7973; CHECK-NEXT: or r3, r4, r3 7974; CHECK-NEXT: sth r5, 0(r3) 7975; CHECK-NEXT: blr 7976entry: 7977 %conv = sext i8 %str to i16 7978 %conv1 = zext i8 %off to i64 7979 %or = or i64 %conv1, %ptr 7980 %0 = inttoptr i64 %or to ptr 7981 store i16 %conv, ptr %0, align 2 7982 ret void 7983} 7984 7985; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7986define dso_local void @st_not_disjoint16_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 7987; CHECK-LABEL: st_not_disjoint16_int8_t_uint16_t: 7988; CHECK: # %bb.0: # %entry 7989; CHECK-NEXT: ori r3, r3, 6 7990; CHECK-NEXT: sth r4, 0(r3) 7991; CHECK-NEXT: blr 7992entry: 7993 %conv = sext i8 %str to i16 7994 %or = or i64 %ptr, 6 7995 %0 = inttoptr i64 %or to ptr 7996 store i16 %conv, ptr %0, align 2 7997 ret void 7998} 7999 8000; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8001define dso_local void @st_disjoint_align16_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 8002; CHECK-LABEL: st_disjoint_align16_int8_t_uint16_t: 8003; CHECK: # %bb.0: # %entry 8004; CHECK-NEXT: rldicr r3, r3, 0, 51 8005; CHECK-NEXT: sth r4, 24(r3) 8006; CHECK-NEXT: blr 8007entry: 8008 %and = and i64 %ptr, -4096 8009 %conv = sext i8 %str to i16 8010 %or = or i64 %and, 24 8011 %0 = inttoptr i64 %or to ptr 8012 store i16 %conv, ptr %0, align 8 8013 ret void 8014} 8015 8016; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8017define dso_local void @st_not_disjoint32_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 8018; CHECK-LABEL: st_not_disjoint32_int8_t_uint16_t: 8019; CHECK: # %bb.0: # %entry 8020; CHECK-NEXT: ori r3, r3, 34463 8021; CHECK-NEXT: oris r3, r3, 1 8022; CHECK-NEXT: sth r4, 0(r3) 8023; CHECK-NEXT: blr 8024entry: 8025 %conv = sext i8 %str to i16 8026 %or = or i64 %ptr, 99999 8027 %0 = inttoptr i64 %or to ptr 8028 store i16 %conv, ptr %0, align 2 8029 ret void 8030} 8031 8032; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8033define dso_local void @st_disjoint_align32_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 8034; CHECK-P10-LABEL: st_disjoint_align32_int8_t_uint16_t: 8035; CHECK-P10: # %bb.0: # %entry 8036; CHECK-P10-NEXT: lis r5, -15264 8037; CHECK-P10-NEXT: and r3, r3, r5 8038; CHECK-P10-NEXT: psth r4, 999990000(r3), 0 8039; CHECK-P10-NEXT: blr 8040; 8041; CHECK-PREP10-LABEL: st_disjoint_align32_int8_t_uint16_t: 8042; CHECK-PREP10: # %bb.0: # %entry 8043; CHECK-PREP10-NEXT: lis r5, -15264 8044; CHECK-PREP10-NEXT: and r3, r3, r5 8045; CHECK-PREP10-NEXT: lis r5, 15258 8046; CHECK-PREP10-NEXT: ori r5, r5, 41712 8047; CHECK-PREP10-NEXT: sthx r4, r3, r5 8048; CHECK-PREP10-NEXT: blr 8049entry: 8050 %and = and i64 %ptr, -1000341504 8051 %conv = sext i8 %str to i16 8052 %or = or i64 %and, 999990000 8053 %0 = inttoptr i64 %or to ptr 8054 store i16 %conv, ptr %0, align 16 8055 ret void 8056} 8057 8058; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8059define dso_local void @st_not_disjoint64_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 8060; CHECK-P10-LABEL: st_not_disjoint64_int8_t_uint16_t: 8061; CHECK-P10: # %bb.0: # %entry 8062; CHECK-P10-NEXT: pli r5, 232 8063; CHECK-P10-NEXT: pli r6, 3567587329 8064; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 8065; CHECK-P10-NEXT: or r3, r3, r6 8066; CHECK-P10-NEXT: sth r4, 0(r3) 8067; CHECK-P10-NEXT: blr 8068; 8069; CHECK-PREP10-LABEL: st_not_disjoint64_int8_t_uint16_t: 8070; CHECK-PREP10: # %bb.0: # %entry 8071; CHECK-PREP10-NEXT: li r5, 29 8072; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 8073; CHECK-PREP10-NEXT: oris r5, r5, 54437 8074; CHECK-PREP10-NEXT: ori r5, r5, 4097 8075; CHECK-PREP10-NEXT: or r3, r3, r5 8076; CHECK-PREP10-NEXT: sth r4, 0(r3) 8077; CHECK-PREP10-NEXT: blr 8078entry: 8079 %conv = sext i8 %str to i16 8080 %or = or i64 %ptr, 1000000000001 8081 %0 = inttoptr i64 %or to ptr 8082 store i16 %conv, ptr %0, align 2 8083 ret void 8084} 8085 8086; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8087define dso_local void @st_disjoint_align64_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 8088; CHECK-P10-LABEL: st_disjoint_align64_int8_t_uint16_t: 8089; CHECK-P10: # %bb.0: # %entry 8090; CHECK-P10-NEXT: pli r5, 244140625 8091; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 8092; CHECK-P10-NEXT: rldic r5, r5, 12, 24 8093; CHECK-P10-NEXT: sthx r4, r3, r5 8094; CHECK-P10-NEXT: blr 8095; 8096; CHECK-PREP10-LABEL: st_disjoint_align64_int8_t_uint16_t: 8097; CHECK-PREP10: # %bb.0: # %entry 8098; CHECK-PREP10-NEXT: lis r5, 3725 8099; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 8100; CHECK-PREP10-NEXT: ori r5, r5, 19025 8101; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 8102; CHECK-PREP10-NEXT: sthx r4, r3, r5 8103; CHECK-PREP10-NEXT: blr 8104entry: 8105 %and = and i64 %ptr, -1099511627776 8106 %conv = sext i8 %str to i16 8107 %or = or i64 %and, 1000000000000 8108 %0 = inttoptr i64 %or to ptr 8109 store i16 %conv, ptr %0, align 4096 8110 ret void 8111} 8112 8113; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8114define dso_local void @st_cst_align16_int8_t_uint16_t(i8 signext %str) { 8115; CHECK-LABEL: st_cst_align16_int8_t_uint16_t: 8116; CHECK: # %bb.0: # %entry 8117; CHECK-NEXT: sth r3, 4080(0) 8118; CHECK-NEXT: blr 8119entry: 8120 %conv = sext i8 %str to i16 8121 store i16 %conv, ptr inttoptr (i64 4080 to ptr), align 16 8122 ret void 8123} 8124 8125; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8126define dso_local void @st_cst_align32_int8_t_uint16_t(i8 signext %str) { 8127; CHECK-LABEL: st_cst_align32_int8_t_uint16_t: 8128; CHECK: # %bb.0: # %entry 8129; CHECK-NEXT: lis r4, 153 8130; CHECK-NEXT: sth r3, -27108(r4) 8131; CHECK-NEXT: blr 8132entry: 8133 %conv = sext i8 %str to i16 8134 store i16 %conv, ptr inttoptr (i64 9999900 to ptr), align 4 8135 ret void 8136} 8137 8138; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8139define dso_local void @st_cst_align64_int8_t_uint16_t(i8 signext %str) { 8140; CHECK-P10-LABEL: st_cst_align64_int8_t_uint16_t: 8141; CHECK-P10: # %bb.0: # %entry 8142; CHECK-P10-NEXT: pli r4, 244140625 8143; CHECK-P10-NEXT: rldic r4, r4, 12, 24 8144; CHECK-P10-NEXT: sth r3, 0(r4) 8145; CHECK-P10-NEXT: blr 8146; 8147; CHECK-PREP10-LABEL: st_cst_align64_int8_t_uint16_t: 8148; CHECK-PREP10: # %bb.0: # %entry 8149; CHECK-PREP10-NEXT: lis r4, 3725 8150; CHECK-PREP10-NEXT: ori r4, r4, 19025 8151; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 8152; CHECK-PREP10-NEXT: sth r3, 0(r4) 8153; CHECK-PREP10-NEXT: blr 8154entry: 8155 %conv = sext i8 %str to i16 8156 store i16 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 8157 ret void 8158} 8159 8160; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8161define dso_local void @st_0_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 8162; CHECK-LABEL: st_0_int8_t_uint32_t: 8163; CHECK: # %bb.0: # %entry 8164; CHECK-NEXT: stw r4, 0(r3) 8165; CHECK-NEXT: blr 8166entry: 8167 %conv = sext i8 %str to i32 8168 %0 = inttoptr i64 %ptr to ptr 8169 store i32 %conv, ptr %0, align 4 8170 ret void 8171} 8172 8173; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8174define dso_local void @st_align16_int8_t_uint32_t(ptr nocapture %ptr, i8 signext %str) { 8175; CHECK-LABEL: st_align16_int8_t_uint32_t: 8176; CHECK: # %bb.0: # %entry 8177; CHECK-NEXT: stw r4, 8(r3) 8178; CHECK-NEXT: blr 8179entry: 8180 %conv = sext i8 %str to i32 8181 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 8182 store i32 %conv, ptr %add.ptr, align 4 8183 ret void 8184} 8185 8186; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8187define dso_local void @st_align32_int8_t_uint32_t(ptr nocapture %ptr, i8 signext %str) { 8188; CHECK-P10-LABEL: st_align32_int8_t_uint32_t: 8189; CHECK-P10: # %bb.0: # %entry 8190; CHECK-P10-NEXT: pstw r4, 99999000(r3), 0 8191; CHECK-P10-NEXT: blr 8192; 8193; CHECK-PREP10-LABEL: st_align32_int8_t_uint32_t: 8194; CHECK-PREP10: # %bb.0: # %entry 8195; CHECK-PREP10-NEXT: lis r5, 1525 8196; CHECK-PREP10-NEXT: ori r5, r5, 56600 8197; CHECK-PREP10-NEXT: stwx r4, r3, r5 8198; CHECK-PREP10-NEXT: blr 8199entry: 8200 %conv = sext i8 %str to i32 8201 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 8202 store i32 %conv, ptr %add.ptr, align 4 8203 ret void 8204} 8205 8206; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8207define dso_local void @st_align64_int8_t_uint32_t(ptr nocapture %ptr, i8 signext %str) { 8208; CHECK-P10-LABEL: st_align64_int8_t_uint32_t: 8209; CHECK-P10: # %bb.0: # %entry 8210; CHECK-P10-NEXT: pli r5, 244140625 8211; CHECK-P10-NEXT: rldic r5, r5, 12, 24 8212; CHECK-P10-NEXT: stwx r4, r3, r5 8213; CHECK-P10-NEXT: blr 8214; 8215; CHECK-PREP10-LABEL: st_align64_int8_t_uint32_t: 8216; CHECK-PREP10: # %bb.0: # %entry 8217; CHECK-PREP10-NEXT: lis r5, 3725 8218; CHECK-PREP10-NEXT: ori r5, r5, 19025 8219; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 8220; CHECK-PREP10-NEXT: stwx r4, r3, r5 8221; CHECK-PREP10-NEXT: blr 8222entry: 8223 %conv = sext i8 %str to i32 8224 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 8225 store i32 %conv, ptr %add.ptr, align 4 8226 ret void 8227} 8228 8229; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8230define dso_local void @st_reg_int8_t_uint32_t(ptr nocapture %ptr, i64 %off, i8 signext %str) { 8231; CHECK-LABEL: st_reg_int8_t_uint32_t: 8232; CHECK: # %bb.0: # %entry 8233; CHECK-NEXT: stwx r5, r3, r4 8234; CHECK-NEXT: blr 8235entry: 8236 %conv = sext i8 %str to i32 8237 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 8238 store i32 %conv, ptr %add.ptr, align 4 8239 ret void 8240} 8241 8242; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8243define dso_local void @st_or1_int8_t_uint32_t(i64 %ptr, i8 zeroext %off, i8 signext %str) { 8244; CHECK-LABEL: st_or1_int8_t_uint32_t: 8245; CHECK: # %bb.0: # %entry 8246; CHECK-NEXT: or r3, r4, r3 8247; CHECK-NEXT: stw r5, 0(r3) 8248; CHECK-NEXT: blr 8249entry: 8250 %conv = sext i8 %str to i32 8251 %conv1 = zext i8 %off to i64 8252 %or = or i64 %conv1, %ptr 8253 %0 = inttoptr i64 %or to ptr 8254 store i32 %conv, ptr %0, align 4 8255 ret void 8256} 8257 8258; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8259define dso_local void @st_not_disjoint16_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 8260; CHECK-LABEL: st_not_disjoint16_int8_t_uint32_t: 8261; CHECK: # %bb.0: # %entry 8262; CHECK-NEXT: ori r3, r3, 6 8263; CHECK-NEXT: stw r4, 0(r3) 8264; CHECK-NEXT: blr 8265entry: 8266 %conv = sext i8 %str to i32 8267 %or = or i64 %ptr, 6 8268 %0 = inttoptr i64 %or to ptr 8269 store i32 %conv, ptr %0, align 4 8270 ret void 8271} 8272 8273; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8274define dso_local void @st_disjoint_align16_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 8275; CHECK-LABEL: st_disjoint_align16_int8_t_uint32_t: 8276; CHECK: # %bb.0: # %entry 8277; CHECK-NEXT: rldicr r3, r3, 0, 51 8278; CHECK-NEXT: stw r4, 24(r3) 8279; CHECK-NEXT: blr 8280entry: 8281 %and = and i64 %ptr, -4096 8282 %conv = sext i8 %str to i32 8283 %or = or i64 %and, 24 8284 %0 = inttoptr i64 %or to ptr 8285 store i32 %conv, ptr %0, align 8 8286 ret void 8287} 8288 8289; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8290define dso_local void @st_not_disjoint32_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 8291; CHECK-LABEL: st_not_disjoint32_int8_t_uint32_t: 8292; CHECK: # %bb.0: # %entry 8293; CHECK-NEXT: ori r3, r3, 34463 8294; CHECK-NEXT: oris r3, r3, 1 8295; CHECK-NEXT: stw r4, 0(r3) 8296; CHECK-NEXT: blr 8297entry: 8298 %conv = sext i8 %str to i32 8299 %or = or i64 %ptr, 99999 8300 %0 = inttoptr i64 %or to ptr 8301 store i32 %conv, ptr %0, align 4 8302 ret void 8303} 8304 8305; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8306define dso_local void @st_disjoint_align32_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 8307; CHECK-P10-LABEL: st_disjoint_align32_int8_t_uint32_t: 8308; CHECK-P10: # %bb.0: # %entry 8309; CHECK-P10-NEXT: lis r5, -15264 8310; CHECK-P10-NEXT: and r3, r3, r5 8311; CHECK-P10-NEXT: pstw r4, 999990000(r3), 0 8312; CHECK-P10-NEXT: blr 8313; 8314; CHECK-PREP10-LABEL: st_disjoint_align32_int8_t_uint32_t: 8315; CHECK-PREP10: # %bb.0: # %entry 8316; CHECK-PREP10-NEXT: lis r5, -15264 8317; CHECK-PREP10-NEXT: and r3, r3, r5 8318; CHECK-PREP10-NEXT: lis r5, 15258 8319; CHECK-PREP10-NEXT: ori r5, r5, 41712 8320; CHECK-PREP10-NEXT: stwx r4, r3, r5 8321; CHECK-PREP10-NEXT: blr 8322entry: 8323 %and = and i64 %ptr, -1000341504 8324 %conv = sext i8 %str to i32 8325 %or = or i64 %and, 999990000 8326 %0 = inttoptr i64 %or to ptr 8327 store i32 %conv, ptr %0, align 16 8328 ret void 8329} 8330 8331; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8332define dso_local void @st_not_disjoint64_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 8333; CHECK-P10-LABEL: st_not_disjoint64_int8_t_uint32_t: 8334; CHECK-P10: # %bb.0: # %entry 8335; CHECK-P10-NEXT: pli r5, 232 8336; CHECK-P10-NEXT: pli r6, 3567587329 8337; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 8338; CHECK-P10-NEXT: or r3, r3, r6 8339; CHECK-P10-NEXT: stw r4, 0(r3) 8340; CHECK-P10-NEXT: blr 8341; 8342; CHECK-PREP10-LABEL: st_not_disjoint64_int8_t_uint32_t: 8343; CHECK-PREP10: # %bb.0: # %entry 8344; CHECK-PREP10-NEXT: li r5, 29 8345; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 8346; CHECK-PREP10-NEXT: oris r5, r5, 54437 8347; CHECK-PREP10-NEXT: ori r5, r5, 4097 8348; CHECK-PREP10-NEXT: or r3, r3, r5 8349; CHECK-PREP10-NEXT: stw r4, 0(r3) 8350; CHECK-PREP10-NEXT: blr 8351entry: 8352 %conv = sext i8 %str to i32 8353 %or = or i64 %ptr, 1000000000001 8354 %0 = inttoptr i64 %or to ptr 8355 store i32 %conv, ptr %0, align 4 8356 ret void 8357} 8358 8359; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8360define dso_local void @st_disjoint_align64_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 8361; CHECK-P10-LABEL: st_disjoint_align64_int8_t_uint32_t: 8362; CHECK-P10: # %bb.0: # %entry 8363; CHECK-P10-NEXT: pli r5, 244140625 8364; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 8365; CHECK-P10-NEXT: rldic r5, r5, 12, 24 8366; CHECK-P10-NEXT: stwx r4, r3, r5 8367; CHECK-P10-NEXT: blr 8368; 8369; CHECK-PREP10-LABEL: st_disjoint_align64_int8_t_uint32_t: 8370; CHECK-PREP10: # %bb.0: # %entry 8371; CHECK-PREP10-NEXT: lis r5, 3725 8372; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 8373; CHECK-PREP10-NEXT: ori r5, r5, 19025 8374; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 8375; CHECK-PREP10-NEXT: stwx r4, r3, r5 8376; CHECK-PREP10-NEXT: blr 8377entry: 8378 %and = and i64 %ptr, -1099511627776 8379 %conv = sext i8 %str to i32 8380 %or = or i64 %and, 1000000000000 8381 %0 = inttoptr i64 %or to ptr 8382 store i32 %conv, ptr %0, align 4096 8383 ret void 8384} 8385 8386; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8387define dso_local void @st_cst_align16_int8_t_uint32_t(i8 signext %str) { 8388; CHECK-LABEL: st_cst_align16_int8_t_uint32_t: 8389; CHECK: # %bb.0: # %entry 8390; CHECK-NEXT: stw r3, 4080(0) 8391; CHECK-NEXT: blr 8392entry: 8393 %conv = sext i8 %str to i32 8394 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 16 8395 ret void 8396} 8397 8398; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8399define dso_local void @st_cst_align32_int8_t_uint32_t(i8 signext %str) { 8400; CHECK-LABEL: st_cst_align32_int8_t_uint32_t: 8401; CHECK: # %bb.0: # %entry 8402; CHECK-NEXT: lis r4, 153 8403; CHECK-NEXT: stw r3, -27108(r4) 8404; CHECK-NEXT: blr 8405entry: 8406 %conv = sext i8 %str to i32 8407 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 4 8408 ret void 8409} 8410 8411; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8412define dso_local void @st_cst_align64_int8_t_uint32_t(i8 signext %str) { 8413; CHECK-P10-LABEL: st_cst_align64_int8_t_uint32_t: 8414; CHECK-P10: # %bb.0: # %entry 8415; CHECK-P10-NEXT: pli r4, 244140625 8416; CHECK-P10-NEXT: rldic r4, r4, 12, 24 8417; CHECK-P10-NEXT: stw r3, 0(r4) 8418; CHECK-P10-NEXT: blr 8419; 8420; CHECK-PREP10-LABEL: st_cst_align64_int8_t_uint32_t: 8421; CHECK-PREP10: # %bb.0: # %entry 8422; CHECK-PREP10-NEXT: lis r4, 3725 8423; CHECK-PREP10-NEXT: ori r4, r4, 19025 8424; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 8425; CHECK-PREP10-NEXT: stw r3, 0(r4) 8426; CHECK-PREP10-NEXT: blr 8427entry: 8428 %conv = sext i8 %str to i32 8429 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 8430 ret void 8431} 8432 8433; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8434define dso_local void @st_0_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 8435; CHECK-LABEL: st_0_int8_t_uint64_t: 8436; CHECK: # %bb.0: # %entry 8437; CHECK-NEXT: std r4, 0(r3) 8438; CHECK-NEXT: blr 8439entry: 8440 %conv = sext i8 %str to i64 8441 %0 = inttoptr i64 %ptr to ptr 8442 store i64 %conv, ptr %0, align 8 8443 ret void 8444} 8445 8446; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8447define dso_local void @st_align16_int8_t_uint64_t(ptr nocapture %ptr, i8 signext %str) { 8448; CHECK-LABEL: st_align16_int8_t_uint64_t: 8449; CHECK: # %bb.0: # %entry 8450; CHECK-NEXT: std r4, 8(r3) 8451; CHECK-NEXT: blr 8452entry: 8453 %conv = sext i8 %str to i64 8454 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 8455 store i64 %conv, ptr %add.ptr, align 8 8456 ret void 8457} 8458 8459; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8460define dso_local void @st_align32_int8_t_uint64_t(ptr nocapture %ptr, i8 signext %str) { 8461; CHECK-P10-LABEL: st_align32_int8_t_uint64_t: 8462; CHECK-P10: # %bb.0: # %entry 8463; CHECK-P10-NEXT: pstd r4, 99999000(r3), 0 8464; CHECK-P10-NEXT: blr 8465; 8466; CHECK-PREP10-LABEL: st_align32_int8_t_uint64_t: 8467; CHECK-PREP10: # %bb.0: # %entry 8468; CHECK-PREP10-NEXT: lis r5, 1525 8469; CHECK-PREP10-NEXT: ori r5, r5, 56600 8470; CHECK-PREP10-NEXT: stdx r4, r3, r5 8471; CHECK-PREP10-NEXT: blr 8472entry: 8473 %conv = sext i8 %str to i64 8474 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 8475 store i64 %conv, ptr %add.ptr, align 8 8476 ret void 8477} 8478 8479; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8480define dso_local void @st_align64_int8_t_uint64_t(ptr nocapture %ptr, i8 signext %str) { 8481; CHECK-P10-LABEL: st_align64_int8_t_uint64_t: 8482; CHECK-P10: # %bb.0: # %entry 8483; CHECK-P10-NEXT: pli r5, 244140625 8484; CHECK-P10-NEXT: rldic r5, r5, 12, 24 8485; CHECK-P10-NEXT: stdx r4, r3, r5 8486; CHECK-P10-NEXT: blr 8487; 8488; CHECK-PREP10-LABEL: st_align64_int8_t_uint64_t: 8489; CHECK-PREP10: # %bb.0: # %entry 8490; CHECK-PREP10-NEXT: lis r5, 3725 8491; CHECK-PREP10-NEXT: ori r5, r5, 19025 8492; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 8493; CHECK-PREP10-NEXT: stdx r4, r3, r5 8494; CHECK-PREP10-NEXT: blr 8495entry: 8496 %conv = sext i8 %str to i64 8497 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 8498 store i64 %conv, ptr %add.ptr, align 8 8499 ret void 8500} 8501 8502; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8503define dso_local void @st_reg_int8_t_uint64_t(ptr nocapture %ptr, i64 %off, i8 signext %str) { 8504; CHECK-LABEL: st_reg_int8_t_uint64_t: 8505; CHECK: # %bb.0: # %entry 8506; CHECK-NEXT: stdx r5, r3, r4 8507; CHECK-NEXT: blr 8508entry: 8509 %conv = sext i8 %str to i64 8510 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 8511 store i64 %conv, ptr %add.ptr, align 8 8512 ret void 8513} 8514 8515; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8516define dso_local void @st_or1_int8_t_uint64_t(i64 %ptr, i8 zeroext %off, i8 signext %str) { 8517; CHECK-LABEL: st_or1_int8_t_uint64_t: 8518; CHECK: # %bb.0: # %entry 8519; CHECK-NEXT: or r3, r4, r3 8520; CHECK-NEXT: std r5, 0(r3) 8521; CHECK-NEXT: blr 8522entry: 8523 %conv = sext i8 %str to i64 8524 %conv1 = zext i8 %off to i64 8525 %or = or i64 %conv1, %ptr 8526 %0 = inttoptr i64 %or to ptr 8527 store i64 %conv, ptr %0, align 8 8528 ret void 8529} 8530 8531; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8532define dso_local void @st_not_disjoint16_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 8533; CHECK-LABEL: st_not_disjoint16_int8_t_uint64_t: 8534; CHECK: # %bb.0: # %entry 8535; CHECK-NEXT: ori r3, r3, 6 8536; CHECK-NEXT: std r4, 0(r3) 8537; CHECK-NEXT: blr 8538entry: 8539 %conv = sext i8 %str to i64 8540 %or = or i64 %ptr, 6 8541 %0 = inttoptr i64 %or to ptr 8542 store i64 %conv, ptr %0, align 8 8543 ret void 8544} 8545 8546; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8547define dso_local void @st_disjoint_align16_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 8548; CHECK-LABEL: st_disjoint_align16_int8_t_uint64_t: 8549; CHECK: # %bb.0: # %entry 8550; CHECK-NEXT: rldicr r3, r3, 0, 51 8551; CHECK-NEXT: std r4, 24(r3) 8552; CHECK-NEXT: blr 8553entry: 8554 %and = and i64 %ptr, -4096 8555 %conv = sext i8 %str to i64 8556 %or = or i64 %and, 24 8557 %0 = inttoptr i64 %or to ptr 8558 store i64 %conv, ptr %0, align 8 8559 ret void 8560} 8561 8562; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8563define dso_local void @st_not_disjoint32_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 8564; CHECK-LABEL: st_not_disjoint32_int8_t_uint64_t: 8565; CHECK: # %bb.0: # %entry 8566; CHECK-NEXT: ori r3, r3, 34463 8567; CHECK-NEXT: oris r3, r3, 1 8568; CHECK-NEXT: std r4, 0(r3) 8569; CHECK-NEXT: blr 8570entry: 8571 %conv = sext i8 %str to i64 8572 %or = or i64 %ptr, 99999 8573 %0 = inttoptr i64 %or to ptr 8574 store i64 %conv, ptr %0, align 8 8575 ret void 8576} 8577 8578; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8579define dso_local void @st_disjoint_align32_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 8580; CHECK-P10-LABEL: st_disjoint_align32_int8_t_uint64_t: 8581; CHECK-P10: # %bb.0: # %entry 8582; CHECK-P10-NEXT: lis r5, -15264 8583; CHECK-P10-NEXT: and r3, r3, r5 8584; CHECK-P10-NEXT: pstd r4, 999990000(r3), 0 8585; CHECK-P10-NEXT: blr 8586; 8587; CHECK-PREP10-LABEL: st_disjoint_align32_int8_t_uint64_t: 8588; CHECK-PREP10: # %bb.0: # %entry 8589; CHECK-PREP10-NEXT: lis r5, -15264 8590; CHECK-PREP10-NEXT: and r3, r3, r5 8591; CHECK-PREP10-NEXT: lis r5, 15258 8592; CHECK-PREP10-NEXT: ori r5, r5, 41712 8593; CHECK-PREP10-NEXT: stdx r4, r3, r5 8594; CHECK-PREP10-NEXT: blr 8595entry: 8596 %and = and i64 %ptr, -1000341504 8597 %conv = sext i8 %str to i64 8598 %or = or i64 %and, 999990000 8599 %0 = inttoptr i64 %or to ptr 8600 store i64 %conv, ptr %0, align 16 8601 ret void 8602} 8603 8604; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8605define dso_local void @st_not_disjoint64_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 8606; CHECK-P10-LABEL: st_not_disjoint64_int8_t_uint64_t: 8607; CHECK-P10: # %bb.0: # %entry 8608; CHECK-P10-NEXT: pli r5, 232 8609; CHECK-P10-NEXT: pli r6, 3567587329 8610; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 8611; CHECK-P10-NEXT: or r3, r3, r6 8612; CHECK-P10-NEXT: std r4, 0(r3) 8613; CHECK-P10-NEXT: blr 8614; 8615; CHECK-PREP10-LABEL: st_not_disjoint64_int8_t_uint64_t: 8616; CHECK-PREP10: # %bb.0: # %entry 8617; CHECK-PREP10-NEXT: li r5, 29 8618; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 8619; CHECK-PREP10-NEXT: oris r5, r5, 54437 8620; CHECK-PREP10-NEXT: ori r5, r5, 4097 8621; CHECK-PREP10-NEXT: or r3, r3, r5 8622; CHECK-PREP10-NEXT: std r4, 0(r3) 8623; CHECK-PREP10-NEXT: blr 8624entry: 8625 %conv = sext i8 %str to i64 8626 %or = or i64 %ptr, 1000000000001 8627 %0 = inttoptr i64 %or to ptr 8628 store i64 %conv, ptr %0, align 8 8629 ret void 8630} 8631 8632; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8633define dso_local void @st_disjoint_align64_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 8634; CHECK-P10-LABEL: st_disjoint_align64_int8_t_uint64_t: 8635; CHECK-P10: # %bb.0: # %entry 8636; CHECK-P10-NEXT: pli r5, 244140625 8637; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 8638; CHECK-P10-NEXT: rldic r5, r5, 12, 24 8639; CHECK-P10-NEXT: stdx r4, r3, r5 8640; CHECK-P10-NEXT: blr 8641; 8642; CHECK-PREP10-LABEL: st_disjoint_align64_int8_t_uint64_t: 8643; CHECK-PREP10: # %bb.0: # %entry 8644; CHECK-PREP10-NEXT: lis r5, 3725 8645; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 8646; CHECK-PREP10-NEXT: ori r5, r5, 19025 8647; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 8648; CHECK-PREP10-NEXT: stdx r4, r3, r5 8649; CHECK-PREP10-NEXT: blr 8650entry: 8651 %and = and i64 %ptr, -1099511627776 8652 %conv = sext i8 %str to i64 8653 %or = or i64 %and, 1000000000000 8654 %0 = inttoptr i64 %or to ptr 8655 store i64 %conv, ptr %0, align 4096 8656 ret void 8657} 8658 8659; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8660define dso_local void @st_cst_align16_int8_t_uint64_t(i8 signext %str) { 8661; CHECK-LABEL: st_cst_align16_int8_t_uint64_t: 8662; CHECK: # %bb.0: # %entry 8663; CHECK-NEXT: std r3, 4080(0) 8664; CHECK-NEXT: blr 8665entry: 8666 %conv = sext i8 %str to i64 8667 store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 16 8668 ret void 8669} 8670 8671; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8672define dso_local void @st_cst_align32_int8_t_uint64_t(i8 signext %str) { 8673; CHECK-LABEL: st_cst_align32_int8_t_uint64_t: 8674; CHECK: # %bb.0: # %entry 8675; CHECK-NEXT: lis r4, 153 8676; CHECK-NEXT: std r3, -27108(r4) 8677; CHECK-NEXT: blr 8678entry: 8679 %conv = sext i8 %str to i64 8680 store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 8 8681 ret void 8682} 8683 8684; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8685define dso_local void @st_cst_align64_int8_t_uint64_t(i8 signext %str) { 8686; CHECK-P10-LABEL: st_cst_align64_int8_t_uint64_t: 8687; CHECK-P10: # %bb.0: # %entry 8688; CHECK-P10-NEXT: pli r4, 244140625 8689; CHECK-P10-NEXT: rldic r4, r4, 12, 24 8690; CHECK-P10-NEXT: std r3, 0(r4) 8691; CHECK-P10-NEXT: blr 8692; 8693; CHECK-PREP10-LABEL: st_cst_align64_int8_t_uint64_t: 8694; CHECK-PREP10: # %bb.0: # %entry 8695; CHECK-PREP10-NEXT: lis r4, 3725 8696; CHECK-PREP10-NEXT: ori r4, r4, 19025 8697; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 8698; CHECK-PREP10-NEXT: std r3, 0(r4) 8699; CHECK-PREP10-NEXT: blr 8700entry: 8701 %conv = sext i8 %str to i64 8702 store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 8703 ret void 8704} 8705 8706; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8707define dso_local void @st_0_int8_t_float(i64 %ptr, i8 signext %str) { 8708; CHECK-LABEL: st_0_int8_t_float: 8709; CHECK: # %bb.0: # %entry 8710; CHECK-NEXT: mtfprwa f0, r4 8711; CHECK-NEXT: xscvsxdsp f0, f0 8712; CHECK-NEXT: stfs f0, 0(r3) 8713; CHECK-NEXT: blr 8714entry: 8715 %conv = sitofp i8 %str to float 8716 %0 = inttoptr i64 %ptr to ptr 8717 store float %conv, ptr %0, align 4 8718 ret void 8719} 8720 8721; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8722define dso_local void @st_align16_int8_t_float(ptr nocapture %ptr, i8 signext %str) { 8723; CHECK-LABEL: st_align16_int8_t_float: 8724; CHECK: # %bb.0: # %entry 8725; CHECK-NEXT: mtfprwa f0, r4 8726; CHECK-NEXT: xscvsxdsp f0, f0 8727; CHECK-NEXT: stfs f0, 8(r3) 8728; CHECK-NEXT: blr 8729entry: 8730 %conv = sitofp i8 %str to float 8731 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 8732 store float %conv, ptr %add.ptr, align 4 8733 ret void 8734} 8735 8736; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8737define dso_local void @st_align32_int8_t_float(ptr nocapture %ptr, i8 signext %str) { 8738; CHECK-P10-LABEL: st_align32_int8_t_float: 8739; CHECK-P10: # %bb.0: # %entry 8740; CHECK-P10-NEXT: mtfprwa f0, r4 8741; CHECK-P10-NEXT: xscvsxdsp f0, f0 8742; CHECK-P10-NEXT: pstfs f0, 99999000(r3), 0 8743; CHECK-P10-NEXT: blr 8744; 8745; CHECK-P9-LABEL: st_align32_int8_t_float: 8746; CHECK-P9: # %bb.0: # %entry 8747; CHECK-P9-NEXT: mtfprwa f0, r4 8748; CHECK-P9-NEXT: lis r4, 1525 8749; CHECK-P9-NEXT: xscvsxdsp f0, f0 8750; CHECK-P9-NEXT: ori r4, r4, 56600 8751; CHECK-P9-NEXT: stfsx f0, r3, r4 8752; CHECK-P9-NEXT: blr 8753; 8754; CHECK-P8-LABEL: st_align32_int8_t_float: 8755; CHECK-P8: # %bb.0: # %entry 8756; CHECK-P8-NEXT: mtfprwa f0, r4 8757; CHECK-P8-NEXT: lis r4, 1525 8758; CHECK-P8-NEXT: ori r4, r4, 56600 8759; CHECK-P8-NEXT: xscvsxdsp f0, f0 8760; CHECK-P8-NEXT: stfsx f0, r3, r4 8761; CHECK-P8-NEXT: blr 8762entry: 8763 %conv = sitofp i8 %str to float 8764 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 8765 store float %conv, ptr %add.ptr, align 4 8766 ret void 8767} 8768 8769; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8770define dso_local void @st_align64_int8_t_float(ptr nocapture %ptr, i8 signext %str) { 8771; CHECK-P10-LABEL: st_align64_int8_t_float: 8772; CHECK-P10: # %bb.0: # %entry 8773; CHECK-P10-NEXT: mtfprwa f0, r4 8774; CHECK-P10-NEXT: pli r4, 244140625 8775; CHECK-P10-NEXT: rldic r4, r4, 12, 24 8776; CHECK-P10-NEXT: xscvsxdsp f0, f0 8777; CHECK-P10-NEXT: stfsx f0, r3, r4 8778; CHECK-P10-NEXT: blr 8779; 8780; CHECK-P9-LABEL: st_align64_int8_t_float: 8781; CHECK-P9: # %bb.0: # %entry 8782; CHECK-P9-NEXT: mtfprwa f0, r4 8783; CHECK-P9-NEXT: lis r4, 3725 8784; CHECK-P9-NEXT: xscvsxdsp f0, f0 8785; CHECK-P9-NEXT: ori r4, r4, 19025 8786; CHECK-P9-NEXT: rldic r4, r4, 12, 24 8787; CHECK-P9-NEXT: stfsx f0, r3, r4 8788; CHECK-P9-NEXT: blr 8789; 8790; CHECK-P8-LABEL: st_align64_int8_t_float: 8791; CHECK-P8: # %bb.0: # %entry 8792; CHECK-P8-NEXT: mtfprwa f0, r4 8793; CHECK-P8-NEXT: lis r4, 3725 8794; CHECK-P8-NEXT: ori r4, r4, 19025 8795; CHECK-P8-NEXT: rldic r4, r4, 12, 24 8796; CHECK-P8-NEXT: xscvsxdsp f0, f0 8797; CHECK-P8-NEXT: stfsx f0, r3, r4 8798; CHECK-P8-NEXT: blr 8799entry: 8800 %conv = sitofp i8 %str to float 8801 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 8802 store float %conv, ptr %add.ptr, align 4 8803 ret void 8804} 8805 8806; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8807define dso_local void @st_reg_int8_t_float(ptr nocapture %ptr, i64 %off, i8 signext %str) { 8808; CHECK-LABEL: st_reg_int8_t_float: 8809; CHECK: # %bb.0: # %entry 8810; CHECK-NEXT: mtfprwa f0, r5 8811; CHECK-NEXT: xscvsxdsp f0, f0 8812; CHECK-NEXT: stfsx f0, r3, r4 8813; CHECK-NEXT: blr 8814entry: 8815 %conv = sitofp i8 %str to float 8816 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 8817 store float %conv, ptr %add.ptr, align 4 8818 ret void 8819} 8820 8821; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8822define dso_local void @st_or1_int8_t_float(i64 %ptr, i8 zeroext %off, i8 signext %str) { 8823; CHECK-LABEL: st_or1_int8_t_float: 8824; CHECK: # %bb.0: # %entry 8825; CHECK-NEXT: mtfprwa f0, r5 8826; CHECK-NEXT: or r3, r4, r3 8827; CHECK-NEXT: xscvsxdsp f0, f0 8828; CHECK-NEXT: stfs f0, 0(r3) 8829; CHECK-NEXT: blr 8830entry: 8831 %conv = sitofp i8 %str to float 8832 %conv1 = zext i8 %off to i64 8833 %or = or i64 %conv1, %ptr 8834 %0 = inttoptr i64 %or to ptr 8835 store float %conv, ptr %0, align 4 8836 ret void 8837} 8838 8839; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8840define dso_local void @st_not_disjoint16_int8_t_float(i64 %ptr, i8 signext %str) { 8841; CHECK-LABEL: st_not_disjoint16_int8_t_float: 8842; CHECK: # %bb.0: # %entry 8843; CHECK-NEXT: mtfprwa f0, r4 8844; CHECK-NEXT: ori r3, r3, 6 8845; CHECK-NEXT: xscvsxdsp f0, f0 8846; CHECK-NEXT: stfs f0, 0(r3) 8847; CHECK-NEXT: blr 8848entry: 8849 %conv = sitofp i8 %str to float 8850 %or = or i64 %ptr, 6 8851 %0 = inttoptr i64 %or to ptr 8852 store float %conv, ptr %0, align 4 8853 ret void 8854} 8855 8856; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8857define dso_local void @st_disjoint_align16_int8_t_float(i64 %ptr, i8 signext %str) { 8858; CHECK-LABEL: st_disjoint_align16_int8_t_float: 8859; CHECK: # %bb.0: # %entry 8860; CHECK-NEXT: mtfprwa f0, r4 8861; CHECK-NEXT: rldicr r3, r3, 0, 51 8862; CHECK-NEXT: xscvsxdsp f0, f0 8863; CHECK-NEXT: stfs f0, 24(r3) 8864; CHECK-NEXT: blr 8865entry: 8866 %and = and i64 %ptr, -4096 8867 %conv = sitofp i8 %str to float 8868 %or = or i64 %and, 24 8869 %0 = inttoptr i64 %or to ptr 8870 store float %conv, ptr %0, align 8 8871 ret void 8872} 8873 8874; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8875define dso_local void @st_not_disjoint32_int8_t_float(i64 %ptr, i8 signext %str) { 8876; CHECK-P10-LABEL: st_not_disjoint32_int8_t_float: 8877; CHECK-P10: # %bb.0: # %entry 8878; CHECK-P10-NEXT: mtfprwa f0, r4 8879; CHECK-P10-NEXT: ori r3, r3, 34463 8880; CHECK-P10-NEXT: oris r3, r3, 1 8881; CHECK-P10-NEXT: xscvsxdsp f0, f0 8882; CHECK-P10-NEXT: stfs f0, 0(r3) 8883; CHECK-P10-NEXT: blr 8884; 8885; CHECK-P9-LABEL: st_not_disjoint32_int8_t_float: 8886; CHECK-P9: # %bb.0: # %entry 8887; CHECK-P9-NEXT: mtfprwa f0, r4 8888; CHECK-P9-NEXT: ori r3, r3, 34463 8889; CHECK-P9-NEXT: xscvsxdsp f0, f0 8890; CHECK-P9-NEXT: oris r3, r3, 1 8891; CHECK-P9-NEXT: stfs f0, 0(r3) 8892; CHECK-P9-NEXT: blr 8893; 8894; CHECK-P8-LABEL: st_not_disjoint32_int8_t_float: 8895; CHECK-P8: # %bb.0: # %entry 8896; CHECK-P8-NEXT: mtfprwa f0, r4 8897; CHECK-P8-NEXT: ori r3, r3, 34463 8898; CHECK-P8-NEXT: oris r3, r3, 1 8899; CHECK-P8-NEXT: xscvsxdsp f0, f0 8900; CHECK-P8-NEXT: stfs f0, 0(r3) 8901; CHECK-P8-NEXT: blr 8902entry: 8903 %conv = sitofp i8 %str to float 8904 %or = or i64 %ptr, 99999 8905 %0 = inttoptr i64 %or to ptr 8906 store float %conv, ptr %0, align 4 8907 ret void 8908} 8909 8910; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8911define dso_local void @st_disjoint_align32_int8_t_float(i64 %ptr, i8 signext %str) { 8912; CHECK-P10-LABEL: st_disjoint_align32_int8_t_float: 8913; CHECK-P10: # %bb.0: # %entry 8914; CHECK-P10-NEXT: mtfprwa f0, r4 8915; CHECK-P10-NEXT: lis r5, -15264 8916; CHECK-P10-NEXT: and r3, r3, r5 8917; CHECK-P10-NEXT: xscvsxdsp f0, f0 8918; CHECK-P10-NEXT: pstfs f0, 999990000(r3), 0 8919; CHECK-P10-NEXT: blr 8920; 8921; CHECK-P9-LABEL: st_disjoint_align32_int8_t_float: 8922; CHECK-P9: # %bb.0: # %entry 8923; CHECK-P9-NEXT: mtfprwa f0, r4 8924; CHECK-P9-NEXT: lis r5, -15264 8925; CHECK-P9-NEXT: lis r4, 15258 8926; CHECK-P9-NEXT: xscvsxdsp f0, f0 8927; CHECK-P9-NEXT: and r3, r3, r5 8928; CHECK-P9-NEXT: ori r4, r4, 41712 8929; CHECK-P9-NEXT: stfsx f0, r3, r4 8930; CHECK-P9-NEXT: blr 8931; 8932; CHECK-P8-LABEL: st_disjoint_align32_int8_t_float: 8933; CHECK-P8: # %bb.0: # %entry 8934; CHECK-P8-NEXT: mtfprwa f0, r4 8935; CHECK-P8-NEXT: lis r5, -15264 8936; CHECK-P8-NEXT: lis r4, 15258 8937; CHECK-P8-NEXT: and r3, r3, r5 8938; CHECK-P8-NEXT: ori r4, r4, 41712 8939; CHECK-P8-NEXT: xscvsxdsp f0, f0 8940; CHECK-P8-NEXT: stfsx f0, r3, r4 8941; CHECK-P8-NEXT: blr 8942entry: 8943 %and = and i64 %ptr, -1000341504 8944 %conv = sitofp i8 %str to float 8945 %or = or i64 %and, 999990000 8946 %0 = inttoptr i64 %or to ptr 8947 store float %conv, ptr %0, align 16 8948 ret void 8949} 8950 8951; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8952define dso_local void @st_not_disjoint64_int8_t_float(i64 %ptr, i8 signext %str) { 8953; CHECK-P10-LABEL: st_not_disjoint64_int8_t_float: 8954; CHECK-P10: # %bb.0: # %entry 8955; CHECK-P10-NEXT: mtfprwa f0, r4 8956; CHECK-P10-NEXT: pli r4, 232 8957; CHECK-P10-NEXT: pli r5, 3567587329 8958; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 8959; CHECK-P10-NEXT: xscvsxdsp f0, f0 8960; CHECK-P10-NEXT: or r3, r3, r5 8961; CHECK-P10-NEXT: stfs f0, 0(r3) 8962; CHECK-P10-NEXT: blr 8963; 8964; CHECK-P9-LABEL: st_not_disjoint64_int8_t_float: 8965; CHECK-P9: # %bb.0: # %entry 8966; CHECK-P9-NEXT: mtfprwa f0, r4 8967; CHECK-P9-NEXT: li r4, 29 8968; CHECK-P9-NEXT: rldic r4, r4, 35, 24 8969; CHECK-P9-NEXT: xscvsxdsp f0, f0 8970; CHECK-P9-NEXT: oris r4, r4, 54437 8971; CHECK-P9-NEXT: ori r4, r4, 4097 8972; CHECK-P9-NEXT: or r3, r3, r4 8973; CHECK-P9-NEXT: stfs f0, 0(r3) 8974; CHECK-P9-NEXT: blr 8975; 8976; CHECK-P8-LABEL: st_not_disjoint64_int8_t_float: 8977; CHECK-P8: # %bb.0: # %entry 8978; CHECK-P8-NEXT: mtfprwa f0, r4 8979; CHECK-P8-NEXT: li r4, 29 8980; CHECK-P8-NEXT: rldic r4, r4, 35, 24 8981; CHECK-P8-NEXT: oris r4, r4, 54437 8982; CHECK-P8-NEXT: xscvsxdsp f0, f0 8983; CHECK-P8-NEXT: ori r4, r4, 4097 8984; CHECK-P8-NEXT: or r3, r3, r4 8985; CHECK-P8-NEXT: stfs f0, 0(r3) 8986; CHECK-P8-NEXT: blr 8987entry: 8988 %conv = sitofp i8 %str to float 8989 %or = or i64 %ptr, 1000000000001 8990 %0 = inttoptr i64 %or to ptr 8991 store float %conv, ptr %0, align 4 8992 ret void 8993} 8994 8995; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8996define dso_local void @st_disjoint_align64_int8_t_float(i64 %ptr, i8 signext %str) { 8997; CHECK-P10-LABEL: st_disjoint_align64_int8_t_float: 8998; CHECK-P10: # %bb.0: # %entry 8999; CHECK-P10-NEXT: mtfprwa f0, r4 9000; CHECK-P10-NEXT: pli r4, 244140625 9001; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 9002; CHECK-P10-NEXT: rldic r4, r4, 12, 24 9003; CHECK-P10-NEXT: xscvsxdsp f0, f0 9004; CHECK-P10-NEXT: stfsx f0, r3, r4 9005; CHECK-P10-NEXT: blr 9006; 9007; CHECK-P9-LABEL: st_disjoint_align64_int8_t_float: 9008; CHECK-P9: # %bb.0: # %entry 9009; CHECK-P9-NEXT: mtfprwa f0, r4 9010; CHECK-P9-NEXT: lis r4, 3725 9011; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 9012; CHECK-P9-NEXT: xscvsxdsp f0, f0 9013; CHECK-P9-NEXT: ori r4, r4, 19025 9014; CHECK-P9-NEXT: rldic r4, r4, 12, 24 9015; CHECK-P9-NEXT: stfsx f0, r3, r4 9016; CHECK-P9-NEXT: blr 9017; 9018; CHECK-P8-LABEL: st_disjoint_align64_int8_t_float: 9019; CHECK-P8: # %bb.0: # %entry 9020; CHECK-P8-NEXT: mtfprwa f0, r4 9021; CHECK-P8-NEXT: lis r4, 3725 9022; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 9023; CHECK-P8-NEXT: ori r4, r4, 19025 9024; CHECK-P8-NEXT: rldic r4, r4, 12, 24 9025; CHECK-P8-NEXT: xscvsxdsp f0, f0 9026; CHECK-P8-NEXT: stfsx f0, r3, r4 9027; CHECK-P8-NEXT: blr 9028entry: 9029 %and = and i64 %ptr, -1099511627776 9030 %conv = sitofp i8 %str to float 9031 %or = or i64 %and, 1000000000000 9032 %0 = inttoptr i64 %or to ptr 9033 store float %conv, ptr %0, align 4096 9034 ret void 9035} 9036 9037; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9038define dso_local void @st_cst_align16_int8_t_float(i8 signext %str) { 9039; CHECK-LABEL: st_cst_align16_int8_t_float: 9040; CHECK: # %bb.0: # %entry 9041; CHECK-NEXT: mtfprwa f0, r3 9042; CHECK-NEXT: xscvsxdsp f0, f0 9043; CHECK-NEXT: stfs f0, 4080(0) 9044; CHECK-NEXT: blr 9045entry: 9046 %conv = sitofp i8 %str to float 9047 store float %conv, ptr inttoptr (i64 4080 to ptr), align 16 9048 ret void 9049} 9050 9051; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9052define dso_local void @st_cst_align32_int8_t_float(i8 signext %str) { 9053; CHECK-LABEL: st_cst_align32_int8_t_float: 9054; CHECK: # %bb.0: # %entry 9055; CHECK-NEXT: mtfprwa f0, r3 9056; CHECK-NEXT: lis r3, 153 9057; CHECK-NEXT: xscvsxdsp f0, f0 9058; CHECK-NEXT: stfs f0, -27108(r3) 9059; CHECK-NEXT: blr 9060entry: 9061 %conv = sitofp i8 %str to float 9062 store float %conv, ptr inttoptr (i64 9999900 to ptr), align 4 9063 ret void 9064} 9065 9066; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9067define dso_local void @st_cst_align64_int8_t_float(i8 signext %str) { 9068; CHECK-P10-LABEL: st_cst_align64_int8_t_float: 9069; CHECK-P10: # %bb.0: # %entry 9070; CHECK-P10-NEXT: mtfprwa f0, r3 9071; CHECK-P10-NEXT: pli r3, 244140625 9072; CHECK-P10-NEXT: rldic r3, r3, 12, 24 9073; CHECK-P10-NEXT: xscvsxdsp f0, f0 9074; CHECK-P10-NEXT: stfs f0, 0(r3) 9075; CHECK-P10-NEXT: blr 9076; 9077; CHECK-P9-LABEL: st_cst_align64_int8_t_float: 9078; CHECK-P9: # %bb.0: # %entry 9079; CHECK-P9-NEXT: mtfprwa f0, r3 9080; CHECK-P9-NEXT: lis r3, 3725 9081; CHECK-P9-NEXT: xscvsxdsp f0, f0 9082; CHECK-P9-NEXT: ori r3, r3, 19025 9083; CHECK-P9-NEXT: rldic r3, r3, 12, 24 9084; CHECK-P9-NEXT: stfs f0, 0(r3) 9085; CHECK-P9-NEXT: blr 9086; 9087; CHECK-P8-LABEL: st_cst_align64_int8_t_float: 9088; CHECK-P8: # %bb.0: # %entry 9089; CHECK-P8-NEXT: mtfprwa f0, r3 9090; CHECK-P8-NEXT: lis r3, 3725 9091; CHECK-P8-NEXT: ori r3, r3, 19025 9092; CHECK-P8-NEXT: rldic r3, r3, 12, 24 9093; CHECK-P8-NEXT: xscvsxdsp f0, f0 9094; CHECK-P8-NEXT: stfs f0, 0(r3) 9095; CHECK-P8-NEXT: blr 9096entry: 9097 %conv = sitofp i8 %str to float 9098 store float %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 9099 ret void 9100} 9101 9102; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9103define dso_local void @st_0_int8_t_double(i64 %ptr, i8 signext %str) { 9104; CHECK-LABEL: st_0_int8_t_double: 9105; CHECK: # %bb.0: # %entry 9106; CHECK-NEXT: mtfprwa f0, r4 9107; CHECK-NEXT: xscvsxddp f0, f0 9108; CHECK-NEXT: stfd f0, 0(r3) 9109; CHECK-NEXT: blr 9110entry: 9111 %conv = sitofp i8 %str to double 9112 %0 = inttoptr i64 %ptr to ptr 9113 store double %conv, ptr %0, align 8 9114 ret void 9115} 9116 9117; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9118define dso_local void @st_align16_int8_t_double(ptr nocapture %ptr, i8 signext %str) { 9119; CHECK-LABEL: st_align16_int8_t_double: 9120; CHECK: # %bb.0: # %entry 9121; CHECK-NEXT: mtfprwa f0, r4 9122; CHECK-NEXT: xscvsxddp f0, f0 9123; CHECK-NEXT: stfd f0, 8(r3) 9124; CHECK-NEXT: blr 9125entry: 9126 %conv = sitofp i8 %str to double 9127 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 9128 store double %conv, ptr %add.ptr, align 8 9129 ret void 9130} 9131 9132; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9133define dso_local void @st_align32_int8_t_double(ptr nocapture %ptr, i8 signext %str) { 9134; CHECK-P10-LABEL: st_align32_int8_t_double: 9135; CHECK-P10: # %bb.0: # %entry 9136; CHECK-P10-NEXT: mtfprwa f0, r4 9137; CHECK-P10-NEXT: xscvsxddp f0, f0 9138; CHECK-P10-NEXT: pstfd f0, 99999000(r3), 0 9139; CHECK-P10-NEXT: blr 9140; 9141; CHECK-P9-LABEL: st_align32_int8_t_double: 9142; CHECK-P9: # %bb.0: # %entry 9143; CHECK-P9-NEXT: mtfprwa f0, r4 9144; CHECK-P9-NEXT: lis r4, 1525 9145; CHECK-P9-NEXT: xscvsxddp f0, f0 9146; CHECK-P9-NEXT: ori r4, r4, 56600 9147; CHECK-P9-NEXT: stfdx f0, r3, r4 9148; CHECK-P9-NEXT: blr 9149; 9150; CHECK-P8-LABEL: st_align32_int8_t_double: 9151; CHECK-P8: # %bb.0: # %entry 9152; CHECK-P8-NEXT: mtfprwa f0, r4 9153; CHECK-P8-NEXT: lis r4, 1525 9154; CHECK-P8-NEXT: ori r4, r4, 56600 9155; CHECK-P8-NEXT: xscvsxddp f0, f0 9156; CHECK-P8-NEXT: stfdx f0, r3, r4 9157; CHECK-P8-NEXT: blr 9158entry: 9159 %conv = sitofp i8 %str to double 9160 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 9161 store double %conv, ptr %add.ptr, align 8 9162 ret void 9163} 9164 9165; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9166define dso_local void @st_align64_int8_t_double(ptr nocapture %ptr, i8 signext %str) { 9167; CHECK-P10-LABEL: st_align64_int8_t_double: 9168; CHECK-P10: # %bb.0: # %entry 9169; CHECK-P10-NEXT: mtfprwa f0, r4 9170; CHECK-P10-NEXT: pli r4, 244140625 9171; CHECK-P10-NEXT: rldic r4, r4, 12, 24 9172; CHECK-P10-NEXT: xscvsxddp f0, f0 9173; CHECK-P10-NEXT: stfdx f0, r3, r4 9174; CHECK-P10-NEXT: blr 9175; 9176; CHECK-P9-LABEL: st_align64_int8_t_double: 9177; CHECK-P9: # %bb.0: # %entry 9178; CHECK-P9-NEXT: mtfprwa f0, r4 9179; CHECK-P9-NEXT: lis r4, 3725 9180; CHECK-P9-NEXT: xscvsxddp f0, f0 9181; CHECK-P9-NEXT: ori r4, r4, 19025 9182; CHECK-P9-NEXT: rldic r4, r4, 12, 24 9183; CHECK-P9-NEXT: stfdx f0, r3, r4 9184; CHECK-P9-NEXT: blr 9185; 9186; CHECK-P8-LABEL: st_align64_int8_t_double: 9187; CHECK-P8: # %bb.0: # %entry 9188; CHECK-P8-NEXT: mtfprwa f0, r4 9189; CHECK-P8-NEXT: lis r4, 3725 9190; CHECK-P8-NEXT: ori r4, r4, 19025 9191; CHECK-P8-NEXT: rldic r4, r4, 12, 24 9192; CHECK-P8-NEXT: xscvsxddp f0, f0 9193; CHECK-P8-NEXT: stfdx f0, r3, r4 9194; CHECK-P8-NEXT: blr 9195entry: 9196 %conv = sitofp i8 %str to double 9197 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 9198 store double %conv, ptr %add.ptr, align 8 9199 ret void 9200} 9201 9202; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9203define dso_local void @st_reg_int8_t_double(ptr nocapture %ptr, i64 %off, i8 signext %str) { 9204; CHECK-LABEL: st_reg_int8_t_double: 9205; CHECK: # %bb.0: # %entry 9206; CHECK-NEXT: mtfprwa f0, r5 9207; CHECK-NEXT: xscvsxddp f0, f0 9208; CHECK-NEXT: stfdx f0, r3, r4 9209; CHECK-NEXT: blr 9210entry: 9211 %conv = sitofp i8 %str to double 9212 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 9213 store double %conv, ptr %add.ptr, align 8 9214 ret void 9215} 9216 9217; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9218define dso_local void @st_or1_int8_t_double(i64 %ptr, i8 zeroext %off, i8 signext %str) { 9219; CHECK-LABEL: st_or1_int8_t_double: 9220; CHECK: # %bb.0: # %entry 9221; CHECK-NEXT: mtfprwa f0, r5 9222; CHECK-NEXT: or r3, r4, r3 9223; CHECK-NEXT: xscvsxddp f0, f0 9224; CHECK-NEXT: stfd f0, 0(r3) 9225; CHECK-NEXT: blr 9226entry: 9227 %conv = sitofp i8 %str to double 9228 %conv1 = zext i8 %off to i64 9229 %or = or i64 %conv1, %ptr 9230 %0 = inttoptr i64 %or to ptr 9231 store double %conv, ptr %0, align 8 9232 ret void 9233} 9234 9235; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9236define dso_local void @st_not_disjoint16_int8_t_double(i64 %ptr, i8 signext %str) { 9237; CHECK-LABEL: st_not_disjoint16_int8_t_double: 9238; CHECK: # %bb.0: # %entry 9239; CHECK-NEXT: mtfprwa f0, r4 9240; CHECK-NEXT: ori r3, r3, 6 9241; CHECK-NEXT: xscvsxddp f0, f0 9242; CHECK-NEXT: stfd f0, 0(r3) 9243; CHECK-NEXT: blr 9244entry: 9245 %conv = sitofp i8 %str to double 9246 %or = or i64 %ptr, 6 9247 %0 = inttoptr i64 %or to ptr 9248 store double %conv, ptr %0, align 8 9249 ret void 9250} 9251 9252; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9253define dso_local void @st_disjoint_align16_int8_t_double(i64 %ptr, i8 signext %str) { 9254; CHECK-LABEL: st_disjoint_align16_int8_t_double: 9255; CHECK: # %bb.0: # %entry 9256; CHECK-NEXT: mtfprwa f0, r4 9257; CHECK-NEXT: rldicr r3, r3, 0, 51 9258; CHECK-NEXT: xscvsxddp f0, f0 9259; CHECK-NEXT: stfd f0, 24(r3) 9260; CHECK-NEXT: blr 9261entry: 9262 %and = and i64 %ptr, -4096 9263 %conv = sitofp i8 %str to double 9264 %or = or i64 %and, 24 9265 %0 = inttoptr i64 %or to ptr 9266 store double %conv, ptr %0, align 8 9267 ret void 9268} 9269 9270; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9271define dso_local void @st_not_disjoint32_int8_t_double(i64 %ptr, i8 signext %str) { 9272; CHECK-P10-LABEL: st_not_disjoint32_int8_t_double: 9273; CHECK-P10: # %bb.0: # %entry 9274; CHECK-P10-NEXT: mtfprwa f0, r4 9275; CHECK-P10-NEXT: ori r3, r3, 34463 9276; CHECK-P10-NEXT: oris r3, r3, 1 9277; CHECK-P10-NEXT: xscvsxddp f0, f0 9278; CHECK-P10-NEXT: stfd f0, 0(r3) 9279; CHECK-P10-NEXT: blr 9280; 9281; CHECK-P9-LABEL: st_not_disjoint32_int8_t_double: 9282; CHECK-P9: # %bb.0: # %entry 9283; CHECK-P9-NEXT: mtfprwa f0, r4 9284; CHECK-P9-NEXT: ori r3, r3, 34463 9285; CHECK-P9-NEXT: xscvsxddp f0, f0 9286; CHECK-P9-NEXT: oris r3, r3, 1 9287; CHECK-P9-NEXT: stfd f0, 0(r3) 9288; CHECK-P9-NEXT: blr 9289; 9290; CHECK-P8-LABEL: st_not_disjoint32_int8_t_double: 9291; CHECK-P8: # %bb.0: # %entry 9292; CHECK-P8-NEXT: mtfprwa f0, r4 9293; CHECK-P8-NEXT: ori r3, r3, 34463 9294; CHECK-P8-NEXT: oris r3, r3, 1 9295; CHECK-P8-NEXT: xscvsxddp f0, f0 9296; CHECK-P8-NEXT: stfd f0, 0(r3) 9297; CHECK-P8-NEXT: blr 9298entry: 9299 %conv = sitofp i8 %str to double 9300 %or = or i64 %ptr, 99999 9301 %0 = inttoptr i64 %or to ptr 9302 store double %conv, ptr %0, align 8 9303 ret void 9304} 9305 9306; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9307define dso_local void @st_disjoint_align32_int8_t_double(i64 %ptr, i8 signext %str) { 9308; CHECK-P10-LABEL: st_disjoint_align32_int8_t_double: 9309; CHECK-P10: # %bb.0: # %entry 9310; CHECK-P10-NEXT: mtfprwa f0, r4 9311; CHECK-P10-NEXT: lis r5, -15264 9312; CHECK-P10-NEXT: and r3, r3, r5 9313; CHECK-P10-NEXT: xscvsxddp f0, f0 9314; CHECK-P10-NEXT: pstfd f0, 999990000(r3), 0 9315; CHECK-P10-NEXT: blr 9316; 9317; CHECK-P9-LABEL: st_disjoint_align32_int8_t_double: 9318; CHECK-P9: # %bb.0: # %entry 9319; CHECK-P9-NEXT: mtfprwa f0, r4 9320; CHECK-P9-NEXT: lis r5, -15264 9321; CHECK-P9-NEXT: lis r4, 15258 9322; CHECK-P9-NEXT: xscvsxddp f0, f0 9323; CHECK-P9-NEXT: and r3, r3, r5 9324; CHECK-P9-NEXT: ori r4, r4, 41712 9325; CHECK-P9-NEXT: stfdx f0, r3, r4 9326; CHECK-P9-NEXT: blr 9327; 9328; CHECK-P8-LABEL: st_disjoint_align32_int8_t_double: 9329; CHECK-P8: # %bb.0: # %entry 9330; CHECK-P8-NEXT: mtfprwa f0, r4 9331; CHECK-P8-NEXT: lis r5, -15264 9332; CHECK-P8-NEXT: lis r4, 15258 9333; CHECK-P8-NEXT: and r3, r3, r5 9334; CHECK-P8-NEXT: ori r4, r4, 41712 9335; CHECK-P8-NEXT: xscvsxddp f0, f0 9336; CHECK-P8-NEXT: stfdx f0, r3, r4 9337; CHECK-P8-NEXT: blr 9338entry: 9339 %and = and i64 %ptr, -1000341504 9340 %conv = sitofp i8 %str to double 9341 %or = or i64 %and, 999990000 9342 %0 = inttoptr i64 %or to ptr 9343 store double %conv, ptr %0, align 16 9344 ret void 9345} 9346 9347; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9348define dso_local void @st_not_disjoint64_int8_t_double(i64 %ptr, i8 signext %str) { 9349; CHECK-P10-LABEL: st_not_disjoint64_int8_t_double: 9350; CHECK-P10: # %bb.0: # %entry 9351; CHECK-P10-NEXT: mtfprwa f0, r4 9352; CHECK-P10-NEXT: pli r4, 232 9353; CHECK-P10-NEXT: pli r5, 3567587329 9354; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 9355; CHECK-P10-NEXT: xscvsxddp f0, f0 9356; CHECK-P10-NEXT: or r3, r3, r5 9357; CHECK-P10-NEXT: stfd f0, 0(r3) 9358; CHECK-P10-NEXT: blr 9359; 9360; CHECK-P9-LABEL: st_not_disjoint64_int8_t_double: 9361; CHECK-P9: # %bb.0: # %entry 9362; CHECK-P9-NEXT: mtfprwa f0, r4 9363; CHECK-P9-NEXT: li r4, 29 9364; CHECK-P9-NEXT: rldic r4, r4, 35, 24 9365; CHECK-P9-NEXT: xscvsxddp f0, f0 9366; CHECK-P9-NEXT: oris r4, r4, 54437 9367; CHECK-P9-NEXT: ori r4, r4, 4097 9368; CHECK-P9-NEXT: or r3, r3, r4 9369; CHECK-P9-NEXT: stfd f0, 0(r3) 9370; CHECK-P9-NEXT: blr 9371; 9372; CHECK-P8-LABEL: st_not_disjoint64_int8_t_double: 9373; CHECK-P8: # %bb.0: # %entry 9374; CHECK-P8-NEXT: mtfprwa f0, r4 9375; CHECK-P8-NEXT: li r4, 29 9376; CHECK-P8-NEXT: rldic r4, r4, 35, 24 9377; CHECK-P8-NEXT: oris r4, r4, 54437 9378; CHECK-P8-NEXT: xscvsxddp f0, f0 9379; CHECK-P8-NEXT: ori r4, r4, 4097 9380; CHECK-P8-NEXT: or r3, r3, r4 9381; CHECK-P8-NEXT: stfd f0, 0(r3) 9382; CHECK-P8-NEXT: blr 9383entry: 9384 %conv = sitofp i8 %str to double 9385 %or = or i64 %ptr, 1000000000001 9386 %0 = inttoptr i64 %or to ptr 9387 store double %conv, ptr %0, align 8 9388 ret void 9389} 9390 9391; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9392define dso_local void @st_disjoint_align64_int8_t_double(i64 %ptr, i8 signext %str) { 9393; CHECK-P10-LABEL: st_disjoint_align64_int8_t_double: 9394; CHECK-P10: # %bb.0: # %entry 9395; CHECK-P10-NEXT: mtfprwa f0, r4 9396; CHECK-P10-NEXT: pli r4, 244140625 9397; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 9398; CHECK-P10-NEXT: rldic r4, r4, 12, 24 9399; CHECK-P10-NEXT: xscvsxddp f0, f0 9400; CHECK-P10-NEXT: stfdx f0, r3, r4 9401; CHECK-P10-NEXT: blr 9402; 9403; CHECK-P9-LABEL: st_disjoint_align64_int8_t_double: 9404; CHECK-P9: # %bb.0: # %entry 9405; CHECK-P9-NEXT: mtfprwa f0, r4 9406; CHECK-P9-NEXT: lis r4, 3725 9407; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 9408; CHECK-P9-NEXT: xscvsxddp f0, f0 9409; CHECK-P9-NEXT: ori r4, r4, 19025 9410; CHECK-P9-NEXT: rldic r4, r4, 12, 24 9411; CHECK-P9-NEXT: stfdx f0, r3, r4 9412; CHECK-P9-NEXT: blr 9413; 9414; CHECK-P8-LABEL: st_disjoint_align64_int8_t_double: 9415; CHECK-P8: # %bb.0: # %entry 9416; CHECK-P8-NEXT: mtfprwa f0, r4 9417; CHECK-P8-NEXT: lis r4, 3725 9418; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 9419; CHECK-P8-NEXT: ori r4, r4, 19025 9420; CHECK-P8-NEXT: rldic r4, r4, 12, 24 9421; CHECK-P8-NEXT: xscvsxddp f0, f0 9422; CHECK-P8-NEXT: stfdx f0, r3, r4 9423; CHECK-P8-NEXT: blr 9424entry: 9425 %and = and i64 %ptr, -1099511627776 9426 %conv = sitofp i8 %str to double 9427 %or = or i64 %and, 1000000000000 9428 %0 = inttoptr i64 %or to ptr 9429 store double %conv, ptr %0, align 4096 9430 ret void 9431} 9432 9433; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9434define dso_local void @st_cst_align16_int8_t_double(i8 signext %str) { 9435; CHECK-LABEL: st_cst_align16_int8_t_double: 9436; CHECK: # %bb.0: # %entry 9437; CHECK-NEXT: mtfprwa f0, r3 9438; CHECK-NEXT: xscvsxddp f0, f0 9439; CHECK-NEXT: stfd f0, 4080(0) 9440; CHECK-NEXT: blr 9441entry: 9442 %conv = sitofp i8 %str to double 9443 store double %conv, ptr inttoptr (i64 4080 to ptr), align 16 9444 ret void 9445} 9446 9447; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9448define dso_local void @st_cst_align32_int8_t_double(i8 signext %str) { 9449; CHECK-LABEL: st_cst_align32_int8_t_double: 9450; CHECK: # %bb.0: # %entry 9451; CHECK-NEXT: mtfprwa f0, r3 9452; CHECK-NEXT: lis r3, 153 9453; CHECK-NEXT: xscvsxddp f0, f0 9454; CHECK-NEXT: stfd f0, -27108(r3) 9455; CHECK-NEXT: blr 9456entry: 9457 %conv = sitofp i8 %str to double 9458 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 8 9459 ret void 9460} 9461 9462; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 9463define dso_local void @st_cst_align64_int8_t_double(i8 signext %str) { 9464; CHECK-P10-LABEL: st_cst_align64_int8_t_double: 9465; CHECK-P10: # %bb.0: # %entry 9466; CHECK-P10-NEXT: mtfprwa f0, r3 9467; CHECK-P10-NEXT: pli r3, 244140625 9468; CHECK-P10-NEXT: rldic r3, r3, 12, 24 9469; CHECK-P10-NEXT: xscvsxddp f0, f0 9470; CHECK-P10-NEXT: stfd f0, 0(r3) 9471; CHECK-P10-NEXT: blr 9472; 9473; CHECK-P9-LABEL: st_cst_align64_int8_t_double: 9474; CHECK-P9: # %bb.0: # %entry 9475; CHECK-P9-NEXT: mtfprwa f0, r3 9476; CHECK-P9-NEXT: lis r3, 3725 9477; CHECK-P9-NEXT: xscvsxddp f0, f0 9478; CHECK-P9-NEXT: ori r3, r3, 19025 9479; CHECK-P9-NEXT: rldic r3, r3, 12, 24 9480; CHECK-P9-NEXT: stfd f0, 0(r3) 9481; CHECK-P9-NEXT: blr 9482; 9483; CHECK-P8-LABEL: st_cst_align64_int8_t_double: 9484; CHECK-P8: # %bb.0: # %entry 9485; CHECK-P8-NEXT: mtfprwa f0, r3 9486; CHECK-P8-NEXT: lis r3, 3725 9487; CHECK-P8-NEXT: ori r3, r3, 19025 9488; CHECK-P8-NEXT: rldic r3, r3, 12, 24 9489; CHECK-P8-NEXT: xscvsxddp f0, f0 9490; CHECK-P8-NEXT: stfd f0, 0(r3) 9491; CHECK-P8-NEXT: blr 9492entry: 9493 %conv = sitofp i8 %str to double 9494 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 9495 ret void 9496} 9497