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 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 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 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 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 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 20 21; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %0 monotonic, align 1 31 ret i8 %1 32} 33 34; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %add.ptr monotonic, align 1 44 ret i8 %0 45} 46 47; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %add.ptr monotonic, align 1 65 ret i8 %0 66} 67 68; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %add.ptr monotonic, align 1 89 ret i8 %0 90} 91 92; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %add.ptr monotonic, align 1 102 ret i8 %0 103} 104 105; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %0 monotonic, align 1 118 ret i8 %1 119} 120 121; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %0 monotonic, align 1 133 ret i8 %1 134} 135 136; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %0 monotonic, align 8 149 ret i8 %1 150} 151 152; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %0 monotonic, align 1 165 ret i8 %1 166} 167 168; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %0 monotonic, align 16 192 ret i8 %1 193} 194 195; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %0 monotonic, align 1 221 ret i8 %1 222} 223 224; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr %0 monotonic, align 4096 249 ret i8 %1 250} 251 252; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 261 ret i8 %0 262} 263 264; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 274 ret i8 %0 275} 276 277; Function Attrs: nofree norecurse nounwind 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 atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 297 ret i8 %0 298} 299 300; Function Attrs: nofree norecurse nounwind uwtable willreturn 301define dso_local signext i8 @ld_0_int8_t_uint16_t(i64 %ptr) { 302; CHECK-LABEL: ld_0_int8_t_uint16_t: 303; CHECK: # %bb.0: # %entry 304; CHECK-NEXT: lhz r3, 0(r3) 305; CHECK-NEXT: extsb r3, r3 306; CHECK-NEXT: blr 307entry: 308 %0 = inttoptr i64 %ptr to ptr 309 %1 = load atomic i16, ptr %0 monotonic, align 2 310 %conv = trunc i16 %1 to i8 311 ret i8 %conv 312} 313 314; Function Attrs: nofree norecurse nounwind uwtable willreturn 315define dso_local signext i8 @ld_align16_int8_t_uint16_t(ptr nocapture readonly %ptr) { 316; CHECK-LABEL: ld_align16_int8_t_uint16_t: 317; CHECK: # %bb.0: # %entry 318; CHECK-NEXT: lhz r3, 8(r3) 319; CHECK-NEXT: extsb r3, r3 320; CHECK-NEXT: blr 321entry: 322 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 323 %0 = load atomic i16, ptr %add.ptr monotonic, align 2 324 %conv = trunc i16 %0 to i8 325 ret i8 %conv 326} 327 328; Function Attrs: nofree norecurse nounwind uwtable willreturn 329define dso_local signext i8 @ld_align32_int8_t_uint16_t(ptr nocapture readonly %ptr) { 330; CHECK-P10-LABEL: ld_align32_int8_t_uint16_t: 331; CHECK-P10: # %bb.0: # %entry 332; CHECK-P10-NEXT: plhz r3, 99999000(r3), 0 333; CHECK-P10-NEXT: extsb r3, r3 334; CHECK-P10-NEXT: blr 335; 336; CHECK-PREP10-LABEL: ld_align32_int8_t_uint16_t: 337; CHECK-PREP10: # %bb.0: # %entry 338; CHECK-PREP10-NEXT: lis r4, 1525 339; CHECK-PREP10-NEXT: ori r4, r4, 56600 340; CHECK-PREP10-NEXT: lhzx r3, r3, r4 341; CHECK-PREP10-NEXT: extsb r3, r3 342; CHECK-PREP10-NEXT: blr 343entry: 344 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 345 %0 = load atomic i16, ptr %add.ptr monotonic, align 2 346 %conv = trunc i16 %0 to i8 347 ret i8 %conv 348} 349 350; Function Attrs: nofree norecurse nounwind uwtable willreturn 351define dso_local signext i8 @ld_align64_int8_t_uint16_t(ptr nocapture readonly %ptr) { 352; CHECK-P10-LABEL: ld_align64_int8_t_uint16_t: 353; CHECK-P10: # %bb.0: # %entry 354; CHECK-P10-NEXT: pli r4, 244140625 355; CHECK-P10-NEXT: rldic r4, r4, 12, 24 356; CHECK-P10-NEXT: lhzx r3, r3, r4 357; CHECK-P10-NEXT: extsb r3, r3 358; CHECK-P10-NEXT: blr 359; 360; CHECK-PREP10-LABEL: ld_align64_int8_t_uint16_t: 361; CHECK-PREP10: # %bb.0: # %entry 362; CHECK-PREP10-NEXT: lis r4, 3725 363; CHECK-PREP10-NEXT: ori r4, r4, 19025 364; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 365; CHECK-PREP10-NEXT: lhzx r3, r3, r4 366; CHECK-PREP10-NEXT: extsb r3, r3 367; CHECK-PREP10-NEXT: blr 368entry: 369 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 370 %0 = load atomic i16, ptr %add.ptr monotonic, align 2 371 %conv = trunc i16 %0 to i8 372 ret i8 %conv 373} 374 375; Function Attrs: nofree norecurse nounwind uwtable willreturn 376define dso_local signext i8 @ld_reg_int8_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) { 377; CHECK-LABEL: ld_reg_int8_t_uint16_t: 378; CHECK: # %bb.0: # %entry 379; CHECK-NEXT: lhzx r3, r3, r4 380; CHECK-NEXT: extsb r3, r3 381; CHECK-NEXT: blr 382entry: 383 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 384 %0 = load atomic i16, ptr %add.ptr monotonic, align 2 385 %conv = trunc i16 %0 to i8 386 ret i8 %conv 387} 388 389; Function Attrs: nofree norecurse nounwind uwtable willreturn 390define dso_local signext i8 @ld_or_int8_t_uint16_t(i64 %ptr, i8 zeroext %off) { 391; CHECK-LABEL: ld_or_int8_t_uint16_t: 392; CHECK: # %bb.0: # %entry 393; CHECK-NEXT: or r3, r4, r3 394; CHECK-NEXT: lhz r3, 0(r3) 395; CHECK-NEXT: extsb r3, r3 396; CHECK-NEXT: blr 397entry: 398 %conv = zext i8 %off to i64 399 %or = or i64 %conv, %ptr 400 %0 = inttoptr i64 %or to ptr 401 %1 = load atomic i16, ptr %0 monotonic, align 2 402 %conv1 = trunc i16 %1 to i8 403 ret i8 %conv1 404} 405 406; Function Attrs: nofree norecurse nounwind uwtable willreturn 407define dso_local signext i8 @ld_not_disjoint16_int8_t_uint16_t(i64 %ptr) { 408; CHECK-LABEL: ld_not_disjoint16_int8_t_uint16_t: 409; CHECK: # %bb.0: # %entry 410; CHECK-NEXT: ori r3, r3, 6 411; CHECK-NEXT: lhz r3, 0(r3) 412; CHECK-NEXT: extsb r3, r3 413; CHECK-NEXT: blr 414entry: 415 %or = or i64 %ptr, 6 416 %0 = inttoptr i64 %or to ptr 417 %1 = load atomic i16, ptr %0 monotonic, align 2 418 %conv = trunc i16 %1 to i8 419 ret i8 %conv 420} 421 422; Function Attrs: nofree norecurse nounwind uwtable willreturn 423define dso_local signext i8 @ld_disjoint_align16_int8_t_uint16_t(i64 %ptr) { 424; CHECK-LABEL: ld_disjoint_align16_int8_t_uint16_t: 425; CHECK: # %bb.0: # %entry 426; CHECK-NEXT: rldicr r3, r3, 0, 51 427; CHECK-NEXT: lhz r3, 24(r3) 428; CHECK-NEXT: extsb r3, r3 429; CHECK-NEXT: blr 430entry: 431 %and = and i64 %ptr, -4096 432 %or = or i64 %and, 24 433 %0 = inttoptr i64 %or to ptr 434 %1 = load atomic i16, ptr %0 monotonic, align 8 435 %conv = trunc i16 %1 to i8 436 ret i8 %conv 437} 438 439; Function Attrs: nofree norecurse nounwind uwtable willreturn 440define dso_local signext i8 @ld_not_disjoint32_int8_t_uint16_t(i64 %ptr) { 441; CHECK-LABEL: ld_not_disjoint32_int8_t_uint16_t: 442; CHECK: # %bb.0: # %entry 443; CHECK-NEXT: ori r3, r3, 34463 444; CHECK-NEXT: oris r3, r3, 1 445; CHECK-NEXT: lhz r3, 0(r3) 446; CHECK-NEXT: extsb r3, r3 447; CHECK-NEXT: blr 448entry: 449 %or = or i64 %ptr, 99999 450 %0 = inttoptr i64 %or to ptr 451 %1 = load atomic i16, ptr %0 monotonic, align 2 452 %conv = trunc i16 %1 to i8 453 ret i8 %conv 454} 455 456; Function Attrs: nofree norecurse nounwind uwtable willreturn 457define dso_local signext i8 @ld_disjoint_align32_int8_t_uint16_t(i64 %ptr) { 458; CHECK-P10-LABEL: ld_disjoint_align32_int8_t_uint16_t: 459; CHECK-P10: # %bb.0: # %entry 460; CHECK-P10-NEXT: lis r4, -15264 461; CHECK-P10-NEXT: and r3, r3, r4 462; CHECK-P10-NEXT: plhz r3, 999990000(r3), 0 463; CHECK-P10-NEXT: extsb r3, r3 464; CHECK-P10-NEXT: blr 465; 466; CHECK-PREP10-LABEL: ld_disjoint_align32_int8_t_uint16_t: 467; CHECK-PREP10: # %bb.0: # %entry 468; CHECK-PREP10-NEXT: lis r4, -15264 469; CHECK-PREP10-NEXT: and r3, r3, r4 470; CHECK-PREP10-NEXT: lis r4, 15258 471; CHECK-PREP10-NEXT: ori r4, r4, 41712 472; CHECK-PREP10-NEXT: lhzx r3, r3, r4 473; CHECK-PREP10-NEXT: extsb r3, r3 474; CHECK-PREP10-NEXT: blr 475entry: 476 %and = and i64 %ptr, -1000341504 477 %or = or i64 %and, 999990000 478 %0 = inttoptr i64 %or to ptr 479 %1 = load atomic i16, ptr %0 monotonic, align 16 480 %conv = trunc i16 %1 to i8 481 ret i8 %conv 482} 483 484; Function Attrs: nofree norecurse nounwind uwtable willreturn 485define dso_local signext i8 @ld_not_disjoint64_int8_t_uint16_t(i64 %ptr) { 486; CHECK-P10-LABEL: ld_not_disjoint64_int8_t_uint16_t: 487; CHECK-P10: # %bb.0: # %entry 488; CHECK-P10-NEXT: pli r4, 232 489; CHECK-P10-NEXT: pli r5, 3567587329 490; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 491; CHECK-P10-NEXT: or r3, r3, r5 492; CHECK-P10-NEXT: lhz r3, 0(r3) 493; CHECK-P10-NEXT: extsb r3, r3 494; CHECK-P10-NEXT: blr 495; 496; CHECK-PREP10-LABEL: ld_not_disjoint64_int8_t_uint16_t: 497; CHECK-PREP10: # %bb.0: # %entry 498; CHECK-PREP10-NEXT: li r4, 29 499; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 500; CHECK-PREP10-NEXT: oris r4, r4, 54437 501; CHECK-PREP10-NEXT: ori r4, r4, 4097 502; CHECK-PREP10-NEXT: or r3, r3, r4 503; CHECK-PREP10-NEXT: lhz r3, 0(r3) 504; CHECK-PREP10-NEXT: extsb r3, r3 505; CHECK-PREP10-NEXT: blr 506entry: 507 %or = or i64 %ptr, 1000000000001 508 %0 = inttoptr i64 %or to ptr 509 %1 = load atomic i16, ptr %0 monotonic, align 2 510 %conv = trunc i16 %1 to i8 511 ret i8 %conv 512} 513 514; Function Attrs: nofree norecurse nounwind uwtable willreturn 515define dso_local signext i8 @ld_disjoint_align64_int8_t_uint16_t(i64 %ptr) { 516; CHECK-P10-LABEL: ld_disjoint_align64_int8_t_uint16_t: 517; CHECK-P10: # %bb.0: # %entry 518; CHECK-P10-NEXT: pli r4, 244140625 519; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 520; CHECK-P10-NEXT: rldic r4, r4, 12, 24 521; CHECK-P10-NEXT: lhzx r3, r3, r4 522; CHECK-P10-NEXT: extsb r3, r3 523; CHECK-P10-NEXT: blr 524; 525; CHECK-PREP10-LABEL: ld_disjoint_align64_int8_t_uint16_t: 526; CHECK-PREP10: # %bb.0: # %entry 527; CHECK-PREP10-NEXT: lis r4, 3725 528; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 529; CHECK-PREP10-NEXT: ori r4, r4, 19025 530; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 531; CHECK-PREP10-NEXT: lhzx r3, r3, r4 532; CHECK-PREP10-NEXT: extsb r3, r3 533; CHECK-PREP10-NEXT: blr 534entry: 535 %and = and i64 %ptr, -1099511627776 536 %or = or i64 %and, 1000000000000 537 %0 = inttoptr i64 %or to ptr 538 %1 = load atomic i16, ptr %0 monotonic, align 4096 539 %conv = trunc i16 %1 to i8 540 ret i8 %conv 541} 542 543; Function Attrs: nofree norecurse nounwind uwtable willreturn 544define dso_local signext i8 @ld_cst_align16_int8_t_uint16_t() { 545; CHECK-LABEL: ld_cst_align16_int8_t_uint16_t: 546; CHECK: # %bb.0: # %entry 547; CHECK-NEXT: lhz r3, 4080(0) 548; CHECK-NEXT: extsb r3, r3 549; CHECK-NEXT: blr 550entry: 551 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 552 %conv = trunc i16 %0 to i8 553 ret i8 %conv 554} 555 556; Function Attrs: nofree norecurse nounwind uwtable willreturn 557define dso_local signext i8 @ld_cst_align32_int8_t_uint16_t() { 558; CHECK-LABEL: ld_cst_align32_int8_t_uint16_t: 559; CHECK: # %bb.0: # %entry 560; CHECK-NEXT: lis r3, 153 561; CHECK-NEXT: lhz r3, -27108(r3) 562; CHECK-NEXT: extsb r3, r3 563; CHECK-NEXT: blr 564entry: 565 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 566 %conv = trunc i16 %0 to i8 567 ret i8 %conv 568} 569 570; Function Attrs: nofree norecurse nounwind uwtable willreturn 571define dso_local signext i8 @ld_cst_align64_int8_t_uint16_t() { 572; CHECK-P10-LABEL: ld_cst_align64_int8_t_uint16_t: 573; CHECK-P10: # %bb.0: # %entry 574; CHECK-P10-NEXT: pli r3, 244140625 575; CHECK-P10-NEXT: rldic r3, r3, 12, 24 576; CHECK-P10-NEXT: lhz r3, 0(r3) 577; CHECK-P10-NEXT: extsb r3, r3 578; CHECK-P10-NEXT: blr 579; 580; CHECK-PREP10-LABEL: ld_cst_align64_int8_t_uint16_t: 581; CHECK-PREP10: # %bb.0: # %entry 582; CHECK-PREP10-NEXT: lis r3, 3725 583; CHECK-PREP10-NEXT: ori r3, r3, 19025 584; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 585; CHECK-PREP10-NEXT: lhz r3, 0(r3) 586; CHECK-PREP10-NEXT: extsb r3, r3 587; CHECK-PREP10-NEXT: blr 588entry: 589 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 590 %conv = trunc i16 %0 to i8 591 ret i8 %conv 592} 593 594; Function Attrs: nofree norecurse nounwind uwtable willreturn 595define dso_local signext i8 @ld_0_int8_t_uint32_t(i64 %ptr) { 596; CHECK-LABEL: ld_0_int8_t_uint32_t: 597; CHECK: # %bb.0: # %entry 598; CHECK-NEXT: lwz r3, 0(r3) 599; CHECK-NEXT: extsb r3, r3 600; CHECK-NEXT: blr 601entry: 602 %0 = inttoptr i64 %ptr to ptr 603 %1 = load atomic i32, ptr %0 monotonic, align 4 604 %conv = trunc i32 %1 to i8 605 ret i8 %conv 606} 607 608; Function Attrs: nofree norecurse nounwind uwtable willreturn 609define dso_local signext i8 @ld_align16_int8_t_uint32_t(ptr nocapture readonly %ptr) { 610; CHECK-LABEL: ld_align16_int8_t_uint32_t: 611; CHECK: # %bb.0: # %entry 612; CHECK-NEXT: lwz r3, 8(r3) 613; CHECK-NEXT: extsb r3, r3 614; CHECK-NEXT: blr 615entry: 616 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 617 %0 = load atomic i32, ptr %add.ptr monotonic, align 4 618 %conv = trunc i32 %0 to i8 619 ret i8 %conv 620} 621 622; Function Attrs: nofree norecurse nounwind uwtable willreturn 623define dso_local signext i8 @ld_align32_int8_t_uint32_t(ptr nocapture readonly %ptr) { 624; CHECK-P10-LABEL: ld_align32_int8_t_uint32_t: 625; CHECK-P10: # %bb.0: # %entry 626; CHECK-P10-NEXT: plwz r3, 99999000(r3), 0 627; CHECK-P10-NEXT: extsb r3, r3 628; CHECK-P10-NEXT: blr 629; 630; CHECK-PREP10-LABEL: ld_align32_int8_t_uint32_t: 631; CHECK-PREP10: # %bb.0: # %entry 632; CHECK-PREP10-NEXT: lis r4, 1525 633; CHECK-PREP10-NEXT: ori r4, r4, 56600 634; CHECK-PREP10-NEXT: lwzx r3, r3, r4 635; CHECK-PREP10-NEXT: extsb r3, r3 636; CHECK-PREP10-NEXT: blr 637entry: 638 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 639 %0 = load atomic i32, ptr %add.ptr monotonic, align 4 640 %conv = trunc i32 %0 to i8 641 ret i8 %conv 642} 643 644; Function Attrs: nofree norecurse nounwind uwtable willreturn 645define dso_local signext i8 @ld_align64_int8_t_uint32_t(ptr nocapture readonly %ptr) { 646; CHECK-P10-LABEL: ld_align64_int8_t_uint32_t: 647; CHECK-P10: # %bb.0: # %entry 648; CHECK-P10-NEXT: pli r4, 244140625 649; CHECK-P10-NEXT: rldic r4, r4, 12, 24 650; CHECK-P10-NEXT: lwzx r3, r3, r4 651; CHECK-P10-NEXT: extsb r3, r3 652; CHECK-P10-NEXT: blr 653; 654; CHECK-PREP10-LABEL: ld_align64_int8_t_uint32_t: 655; CHECK-PREP10: # %bb.0: # %entry 656; CHECK-PREP10-NEXT: lis r4, 3725 657; CHECK-PREP10-NEXT: ori r4, r4, 19025 658; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 659; CHECK-PREP10-NEXT: lwzx r3, r3, r4 660; CHECK-PREP10-NEXT: extsb r3, r3 661; CHECK-PREP10-NEXT: blr 662entry: 663 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 664 %0 = load atomic i32, ptr %add.ptr monotonic, align 4 665 %conv = trunc i32 %0 to i8 666 ret i8 %conv 667} 668 669; Function Attrs: nofree norecurse nounwind uwtable willreturn 670define dso_local signext i8 @ld_reg_int8_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) { 671; CHECK-LABEL: ld_reg_int8_t_uint32_t: 672; CHECK: # %bb.0: # %entry 673; CHECK-NEXT: lwzx r3, r3, r4 674; CHECK-NEXT: extsb r3, r3 675; CHECK-NEXT: blr 676entry: 677 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 678 %0 = load atomic i32, ptr %add.ptr monotonic, align 4 679 %conv = trunc i32 %0 to i8 680 ret i8 %conv 681} 682 683; Function Attrs: nofree norecurse nounwind uwtable willreturn 684define dso_local signext i8 @ld_or_int8_t_uint32_t(i64 %ptr, i8 zeroext %off) { 685; CHECK-LABEL: ld_or_int8_t_uint32_t: 686; CHECK: # %bb.0: # %entry 687; CHECK-NEXT: or r3, r4, r3 688; CHECK-NEXT: lwz r3, 0(r3) 689; CHECK-NEXT: extsb r3, r3 690; CHECK-NEXT: blr 691entry: 692 %conv = zext i8 %off to i64 693 %or = or i64 %conv, %ptr 694 %0 = inttoptr i64 %or to ptr 695 %1 = load atomic i32, ptr %0 monotonic, align 4 696 %conv1 = trunc i32 %1 to i8 697 ret i8 %conv1 698} 699 700; Function Attrs: nofree norecurse nounwind uwtable willreturn 701define dso_local signext i8 @ld_not_disjoint16_int8_t_uint32_t(i64 %ptr) { 702; CHECK-LABEL: ld_not_disjoint16_int8_t_uint32_t: 703; CHECK: # %bb.0: # %entry 704; CHECK-NEXT: ori r3, r3, 6 705; CHECK-NEXT: lwz r3, 0(r3) 706; CHECK-NEXT: extsb r3, r3 707; CHECK-NEXT: blr 708entry: 709 %or = or i64 %ptr, 6 710 %0 = inttoptr i64 %or to ptr 711 %1 = load atomic i32, ptr %0 monotonic, align 4 712 %conv = trunc i32 %1 to i8 713 ret i8 %conv 714} 715 716; Function Attrs: nofree norecurse nounwind uwtable willreturn 717define dso_local signext i8 @ld_disjoint_align16_int8_t_uint32_t(i64 %ptr) { 718; CHECK-LABEL: ld_disjoint_align16_int8_t_uint32_t: 719; CHECK: # %bb.0: # %entry 720; CHECK-NEXT: rldicr r3, r3, 0, 51 721; CHECK-NEXT: lwz r3, 24(r3) 722; CHECK-NEXT: extsb r3, r3 723; CHECK-NEXT: blr 724entry: 725 %and = and i64 %ptr, -4096 726 %or = or i64 %and, 24 727 %0 = inttoptr i64 %or to ptr 728 %1 = load atomic i32, ptr %0 monotonic, align 8 729 %conv = trunc i32 %1 to i8 730 ret i8 %conv 731} 732 733; Function Attrs: nofree norecurse nounwind uwtable willreturn 734define dso_local signext i8 @ld_not_disjoint32_int8_t_uint32_t(i64 %ptr) { 735; CHECK-LABEL: ld_not_disjoint32_int8_t_uint32_t: 736; CHECK: # %bb.0: # %entry 737; CHECK-NEXT: ori r3, r3, 34463 738; CHECK-NEXT: oris r3, r3, 1 739; CHECK-NEXT: lwz r3, 0(r3) 740; CHECK-NEXT: extsb r3, r3 741; CHECK-NEXT: blr 742entry: 743 %or = or i64 %ptr, 99999 744 %0 = inttoptr i64 %or to ptr 745 %1 = load atomic i32, ptr %0 monotonic, align 4 746 %conv = trunc i32 %1 to i8 747 ret i8 %conv 748} 749 750; Function Attrs: nofree norecurse nounwind uwtable willreturn 751define dso_local signext i8 @ld_disjoint_align32_int8_t_uint32_t(i64 %ptr) { 752; CHECK-P10-LABEL: ld_disjoint_align32_int8_t_uint32_t: 753; CHECK-P10: # %bb.0: # %entry 754; CHECK-P10-NEXT: lis r4, -15264 755; CHECK-P10-NEXT: and r3, r3, r4 756; CHECK-P10-NEXT: plwz r3, 999990000(r3), 0 757; CHECK-P10-NEXT: extsb r3, r3 758; CHECK-P10-NEXT: blr 759; 760; CHECK-PREP10-LABEL: ld_disjoint_align32_int8_t_uint32_t: 761; CHECK-PREP10: # %bb.0: # %entry 762; CHECK-PREP10-NEXT: lis r4, -15264 763; CHECK-PREP10-NEXT: and r3, r3, r4 764; CHECK-PREP10-NEXT: lis r4, 15258 765; CHECK-PREP10-NEXT: ori r4, r4, 41712 766; CHECK-PREP10-NEXT: lwzx r3, r3, r4 767; CHECK-PREP10-NEXT: extsb r3, r3 768; CHECK-PREP10-NEXT: blr 769entry: 770 %and = and i64 %ptr, -1000341504 771 %or = or i64 %and, 999990000 772 %0 = inttoptr i64 %or to ptr 773 %1 = load atomic i32, ptr %0 monotonic, align 16 774 %conv = trunc i32 %1 to i8 775 ret i8 %conv 776} 777 778; Function Attrs: nofree norecurse nounwind uwtable willreturn 779define dso_local signext i8 @ld_not_disjoint64_int8_t_uint32_t(i64 %ptr) { 780; CHECK-P10-LABEL: ld_not_disjoint64_int8_t_uint32_t: 781; CHECK-P10: # %bb.0: # %entry 782; CHECK-P10-NEXT: pli r4, 232 783; CHECK-P10-NEXT: pli r5, 3567587329 784; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 785; CHECK-P10-NEXT: or r3, r3, r5 786; CHECK-P10-NEXT: lwz r3, 0(r3) 787; CHECK-P10-NEXT: extsb r3, r3 788; CHECK-P10-NEXT: blr 789; 790; CHECK-PREP10-LABEL: ld_not_disjoint64_int8_t_uint32_t: 791; CHECK-PREP10: # %bb.0: # %entry 792; CHECK-PREP10-NEXT: li r4, 29 793; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 794; CHECK-PREP10-NEXT: oris r4, r4, 54437 795; CHECK-PREP10-NEXT: ori r4, r4, 4097 796; CHECK-PREP10-NEXT: or r3, r3, r4 797; CHECK-PREP10-NEXT: lwz r3, 0(r3) 798; CHECK-PREP10-NEXT: extsb r3, r3 799; CHECK-PREP10-NEXT: blr 800entry: 801 %or = or i64 %ptr, 1000000000001 802 %0 = inttoptr i64 %or to ptr 803 %1 = load atomic i32, ptr %0 monotonic, align 4 804 %conv = trunc i32 %1 to i8 805 ret i8 %conv 806} 807 808; Function Attrs: nofree norecurse nounwind uwtable willreturn 809define dso_local signext i8 @ld_disjoint_align64_int8_t_uint32_t(i64 %ptr) { 810; CHECK-P10-LABEL: ld_disjoint_align64_int8_t_uint32_t: 811; CHECK-P10: # %bb.0: # %entry 812; CHECK-P10-NEXT: pli r4, 244140625 813; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 814; CHECK-P10-NEXT: rldic r4, r4, 12, 24 815; CHECK-P10-NEXT: lwzx r3, r3, r4 816; CHECK-P10-NEXT: extsb r3, r3 817; CHECK-P10-NEXT: blr 818; 819; CHECK-PREP10-LABEL: ld_disjoint_align64_int8_t_uint32_t: 820; CHECK-PREP10: # %bb.0: # %entry 821; CHECK-PREP10-NEXT: lis r4, 3725 822; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 823; CHECK-PREP10-NEXT: ori r4, r4, 19025 824; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 825; CHECK-PREP10-NEXT: lwzx r3, r3, r4 826; CHECK-PREP10-NEXT: extsb r3, r3 827; CHECK-PREP10-NEXT: blr 828entry: 829 %and = and i64 %ptr, -1099511627776 830 %or = or i64 %and, 1000000000000 831 %0 = inttoptr i64 %or to ptr 832 %1 = load atomic i32, ptr %0 monotonic, align 4096 833 %conv = trunc i32 %1 to i8 834 ret i8 %conv 835} 836 837; Function Attrs: nofree norecurse nounwind uwtable willreturn 838define dso_local signext i8 @ld_cst_align16_int8_t_uint32_t() { 839; CHECK-LABEL: ld_cst_align16_int8_t_uint32_t: 840; CHECK: # %bb.0: # %entry 841; CHECK-NEXT: lwz r3, 4080(0) 842; CHECK-NEXT: extsb r3, r3 843; CHECK-NEXT: blr 844entry: 845 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 846 %conv = trunc i32 %0 to i8 847 ret i8 %conv 848} 849 850; Function Attrs: nofree norecurse nounwind uwtable willreturn 851define dso_local signext i8 @ld_cst_align32_int8_t_uint32_t() { 852; CHECK-LABEL: ld_cst_align32_int8_t_uint32_t: 853; CHECK: # %bb.0: # %entry 854; CHECK-NEXT: lis r3, 153 855; CHECK-NEXT: lwz r3, -27108(r3) 856; CHECK-NEXT: extsb r3, r3 857; CHECK-NEXT: blr 858entry: 859 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 860 %conv = trunc i32 %0 to i8 861 ret i8 %conv 862} 863 864; Function Attrs: nofree norecurse nounwind uwtable willreturn 865define dso_local signext i8 @ld_cst_align64_int8_t_uint32_t() { 866; CHECK-P10-LABEL: ld_cst_align64_int8_t_uint32_t: 867; CHECK-P10: # %bb.0: # %entry 868; CHECK-P10-NEXT: pli r3, 244140625 869; CHECK-P10-NEXT: rldic r3, r3, 12, 24 870; CHECK-P10-NEXT: lwz r3, 0(r3) 871; CHECK-P10-NEXT: extsb r3, r3 872; CHECK-P10-NEXT: blr 873; 874; CHECK-PREP10-LABEL: ld_cst_align64_int8_t_uint32_t: 875; CHECK-PREP10: # %bb.0: # %entry 876; CHECK-PREP10-NEXT: lis r3, 3725 877; CHECK-PREP10-NEXT: ori r3, r3, 19025 878; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 879; CHECK-PREP10-NEXT: lwz r3, 0(r3) 880; CHECK-PREP10-NEXT: extsb r3, r3 881; CHECK-PREP10-NEXT: blr 882entry: 883 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 884 %conv = trunc i32 %0 to i8 885 ret i8 %conv 886} 887 888; Function Attrs: nofree norecurse nounwind uwtable willreturn 889define dso_local signext i8 @ld_0_int8_t_uint64_t(i64 %ptr) { 890; CHECK-LABEL: ld_0_int8_t_uint64_t: 891; CHECK: # %bb.0: # %entry 892; CHECK-NEXT: ld r3, 0(r3) 893; CHECK-NEXT: extsb r3, r3 894; CHECK-NEXT: blr 895entry: 896 %0 = inttoptr i64 %ptr to ptr 897 %1 = load atomic i64, ptr %0 monotonic, align 8 898 %conv = trunc i64 %1 to i8 899 ret i8 %conv 900} 901 902; Function Attrs: nofree norecurse nounwind uwtable willreturn 903define dso_local signext i8 @ld_align16_int8_t_uint64_t(ptr nocapture readonly %ptr) { 904; CHECK-LABEL: ld_align16_int8_t_uint64_t: 905; CHECK: # %bb.0: # %entry 906; CHECK-NEXT: ld r3, 8(r3) 907; CHECK-NEXT: extsb r3, r3 908; CHECK-NEXT: blr 909entry: 910 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 911 %0 = load atomic i64, ptr %add.ptr monotonic, align 8 912 %conv = trunc i64 %0 to i8 913 ret i8 %conv 914} 915 916; Function Attrs: nofree norecurse nounwind uwtable willreturn 917define dso_local signext i8 @ld_align32_int8_t_uint64_t(ptr nocapture readonly %ptr) { 918; CHECK-P10-LABEL: ld_align32_int8_t_uint64_t: 919; CHECK-P10: # %bb.0: # %entry 920; CHECK-P10-NEXT: pld r3, 99999000(r3), 0 921; CHECK-P10-NEXT: extsb r3, r3 922; CHECK-P10-NEXT: blr 923; 924; CHECK-PREP10-LABEL: ld_align32_int8_t_uint64_t: 925; CHECK-PREP10: # %bb.0: # %entry 926; CHECK-PREP10-NEXT: lis r4, 1525 927; CHECK-PREP10-NEXT: ori r4, r4, 56600 928; CHECK-PREP10-NEXT: ldx r3, r3, r4 929; CHECK-PREP10-NEXT: extsb r3, r3 930; CHECK-PREP10-NEXT: blr 931entry: 932 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 933 %0 = load atomic i64, ptr %add.ptr monotonic, align 8 934 %conv = trunc i64 %0 to i8 935 ret i8 %conv 936} 937 938; Function Attrs: nofree norecurse nounwind uwtable willreturn 939define dso_local signext i8 @ld_align64_int8_t_uint64_t(ptr nocapture readonly %ptr) { 940; CHECK-P10-LABEL: ld_align64_int8_t_uint64_t: 941; CHECK-P10: # %bb.0: # %entry 942; CHECK-P10-NEXT: pli r4, 244140625 943; CHECK-P10-NEXT: rldic r4, r4, 12, 24 944; CHECK-P10-NEXT: ldx r3, r3, r4 945; CHECK-P10-NEXT: extsb r3, r3 946; CHECK-P10-NEXT: blr 947; 948; CHECK-PREP10-LABEL: ld_align64_int8_t_uint64_t: 949; CHECK-PREP10: # %bb.0: # %entry 950; CHECK-PREP10-NEXT: lis r4, 3725 951; CHECK-PREP10-NEXT: ori r4, r4, 19025 952; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 953; CHECK-PREP10-NEXT: ldx r3, r3, r4 954; CHECK-PREP10-NEXT: extsb r3, r3 955; CHECK-PREP10-NEXT: blr 956entry: 957 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 958 %0 = load atomic i64, ptr %add.ptr monotonic, align 8 959 %conv = trunc i64 %0 to i8 960 ret i8 %conv 961} 962 963; Function Attrs: nofree norecurse nounwind uwtable willreturn 964define dso_local signext i8 @ld_reg_int8_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) { 965; CHECK-LABEL: ld_reg_int8_t_uint64_t: 966; CHECK: # %bb.0: # %entry 967; CHECK-NEXT: ldx r3, r3, r4 968; CHECK-NEXT: extsb r3, r3 969; CHECK-NEXT: blr 970entry: 971 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 972 %0 = load atomic i64, ptr %add.ptr monotonic, align 8 973 %conv = trunc i64 %0 to i8 974 ret i8 %conv 975} 976 977; Function Attrs: nofree norecurse nounwind uwtable willreturn 978define dso_local signext i8 @ld_or_int8_t_uint64_t(i64 %ptr, i8 zeroext %off) { 979; CHECK-LABEL: ld_or_int8_t_uint64_t: 980; CHECK: # %bb.0: # %entry 981; CHECK-NEXT: or r3, r4, r3 982; CHECK-NEXT: ld r3, 0(r3) 983; CHECK-NEXT: extsb r3, r3 984; CHECK-NEXT: blr 985entry: 986 %conv = zext i8 %off to i64 987 %or = or i64 %conv, %ptr 988 %0 = inttoptr i64 %or to ptr 989 %1 = load atomic i64, ptr %0 monotonic, align 8 990 %conv1 = trunc i64 %1 to i8 991 ret i8 %conv1 992} 993 994; Function Attrs: nofree norecurse nounwind uwtable willreturn 995define dso_local signext i8 @ld_not_disjoint16_int8_t_uint64_t(i64 %ptr) { 996; CHECK-LABEL: ld_not_disjoint16_int8_t_uint64_t: 997; CHECK: # %bb.0: # %entry 998; CHECK-NEXT: ori r3, r3, 6 999; CHECK-NEXT: ld r3, 0(r3) 1000; CHECK-NEXT: extsb r3, r3 1001; CHECK-NEXT: blr 1002entry: 1003 %or = or i64 %ptr, 6 1004 %0 = inttoptr i64 %or to ptr 1005 %1 = load atomic i64, ptr %0 monotonic, align 8 1006 %conv = trunc i64 %1 to i8 1007 ret i8 %conv 1008} 1009 1010; Function Attrs: nofree norecurse nounwind uwtable willreturn 1011define dso_local signext i8 @ld_disjoint_align16_int8_t_uint64_t(i64 %ptr) { 1012; CHECK-LABEL: ld_disjoint_align16_int8_t_uint64_t: 1013; CHECK: # %bb.0: # %entry 1014; CHECK-NEXT: rldicr r3, r3, 0, 51 1015; CHECK-NEXT: ld r3, 24(r3) 1016; CHECK-NEXT: extsb r3, r3 1017; CHECK-NEXT: blr 1018entry: 1019 %and = and i64 %ptr, -4096 1020 %or = or i64 %and, 24 1021 %0 = inttoptr i64 %or to ptr 1022 %1 = load atomic i64, ptr %0 monotonic, align 8 1023 %conv = trunc i64 %1 to i8 1024 ret i8 %conv 1025} 1026 1027; Function Attrs: nofree norecurse nounwind uwtable willreturn 1028define dso_local signext i8 @ld_not_disjoint32_int8_t_uint64_t(i64 %ptr) { 1029; CHECK-LABEL: ld_not_disjoint32_int8_t_uint64_t: 1030; CHECK: # %bb.0: # %entry 1031; CHECK-NEXT: ori r3, r3, 34463 1032; CHECK-NEXT: oris r3, r3, 1 1033; CHECK-NEXT: ld r3, 0(r3) 1034; CHECK-NEXT: extsb r3, r3 1035; CHECK-NEXT: blr 1036entry: 1037 %or = or i64 %ptr, 99999 1038 %0 = inttoptr i64 %or to ptr 1039 %1 = load atomic i64, ptr %0 monotonic, align 8 1040 %conv = trunc i64 %1 to i8 1041 ret i8 %conv 1042} 1043 1044; Function Attrs: nofree norecurse nounwind uwtable willreturn 1045define dso_local signext i8 @ld_disjoint_align32_int8_t_uint64_t(i64 %ptr) { 1046; CHECK-P10-LABEL: ld_disjoint_align32_int8_t_uint64_t: 1047; CHECK-P10: # %bb.0: # %entry 1048; CHECK-P10-NEXT: lis r4, -15264 1049; CHECK-P10-NEXT: and r3, r3, r4 1050; CHECK-P10-NEXT: pld r3, 999990000(r3), 0 1051; CHECK-P10-NEXT: extsb r3, r3 1052; CHECK-P10-NEXT: blr 1053; 1054; CHECK-PREP10-LABEL: ld_disjoint_align32_int8_t_uint64_t: 1055; CHECK-PREP10: # %bb.0: # %entry 1056; CHECK-PREP10-NEXT: lis r4, -15264 1057; CHECK-PREP10-NEXT: and r3, r3, r4 1058; CHECK-PREP10-NEXT: lis r4, 15258 1059; CHECK-PREP10-NEXT: ori r4, r4, 41712 1060; CHECK-PREP10-NEXT: ldx r3, r3, r4 1061; CHECK-PREP10-NEXT: extsb r3, r3 1062; CHECK-PREP10-NEXT: blr 1063entry: 1064 %and = and i64 %ptr, -1000341504 1065 %or = or i64 %and, 999990000 1066 %0 = inttoptr i64 %or to ptr 1067 %1 = load atomic i64, ptr %0 monotonic, align 16 1068 %conv = trunc i64 %1 to i8 1069 ret i8 %conv 1070} 1071 1072; Function Attrs: nofree norecurse nounwind uwtable willreturn 1073define dso_local signext i8 @ld_not_disjoint64_int8_t_uint64_t(i64 %ptr) { 1074; CHECK-P10-LABEL: ld_not_disjoint64_int8_t_uint64_t: 1075; CHECK-P10: # %bb.0: # %entry 1076; CHECK-P10-NEXT: pli r4, 232 1077; CHECK-P10-NEXT: pli r5, 3567587329 1078; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 1079; CHECK-P10-NEXT: or r3, r3, r5 1080; CHECK-P10-NEXT: ld r3, 0(r3) 1081; CHECK-P10-NEXT: extsb r3, r3 1082; CHECK-P10-NEXT: blr 1083; 1084; CHECK-PREP10-LABEL: ld_not_disjoint64_int8_t_uint64_t: 1085; CHECK-PREP10: # %bb.0: # %entry 1086; CHECK-PREP10-NEXT: li r4, 29 1087; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 1088; CHECK-PREP10-NEXT: oris r4, r4, 54437 1089; CHECK-PREP10-NEXT: ori r4, r4, 4097 1090; CHECK-PREP10-NEXT: or r3, r3, r4 1091; CHECK-PREP10-NEXT: ld r3, 0(r3) 1092; CHECK-PREP10-NEXT: extsb r3, r3 1093; CHECK-PREP10-NEXT: blr 1094entry: 1095 %or = or i64 %ptr, 1000000000001 1096 %0 = inttoptr i64 %or to ptr 1097 %1 = load atomic i64, ptr %0 monotonic, align 8 1098 %conv = trunc i64 %1 to i8 1099 ret i8 %conv 1100} 1101 1102; Function Attrs: nofree norecurse nounwind uwtable willreturn 1103define dso_local signext i8 @ld_disjoint_align64_int8_t_uint64_t(i64 %ptr) { 1104; CHECK-P10-LABEL: ld_disjoint_align64_int8_t_uint64_t: 1105; CHECK-P10: # %bb.0: # %entry 1106; CHECK-P10-NEXT: pli r4, 244140625 1107; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 1108; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1109; CHECK-P10-NEXT: ldx r3, r3, r4 1110; CHECK-P10-NEXT: extsb r3, r3 1111; CHECK-P10-NEXT: blr 1112; 1113; CHECK-PREP10-LABEL: ld_disjoint_align64_int8_t_uint64_t: 1114; CHECK-PREP10: # %bb.0: # %entry 1115; CHECK-PREP10-NEXT: lis r4, 3725 1116; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 1117; CHECK-PREP10-NEXT: ori r4, r4, 19025 1118; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1119; CHECK-PREP10-NEXT: ldx r3, r3, r4 1120; CHECK-PREP10-NEXT: extsb r3, r3 1121; CHECK-PREP10-NEXT: blr 1122entry: 1123 %and = and i64 %ptr, -1099511627776 1124 %or = or i64 %and, 1000000000000 1125 %0 = inttoptr i64 %or to ptr 1126 %1 = load atomic i64, ptr %0 monotonic, align 4096 1127 %conv = trunc i64 %1 to i8 1128 ret i8 %conv 1129} 1130 1131; Function Attrs: nofree norecurse nounwind uwtable willreturn 1132define dso_local signext i8 @ld_cst_align16_int8_t_uint64_t() { 1133; CHECK-LABEL: ld_cst_align16_int8_t_uint64_t: 1134; CHECK: # %bb.0: # %entry 1135; CHECK-NEXT: ld r3, 4080(0) 1136; CHECK-NEXT: extsb r3, r3 1137; CHECK-NEXT: blr 1138entry: 1139 %0 = load atomic i64, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 1140 %conv = trunc i64 %0 to i8 1141 ret i8 %conv 1142} 1143 1144; Function Attrs: nofree norecurse nounwind uwtable willreturn 1145define dso_local signext i8 @ld_cst_align32_int8_t_uint64_t() { 1146; CHECK-LABEL: ld_cst_align32_int8_t_uint64_t: 1147; CHECK: # %bb.0: # %entry 1148; CHECK-NEXT: lis r3, 153 1149; CHECK-NEXT: ld r3, -27108(r3) 1150; CHECK-NEXT: extsb r3, r3 1151; CHECK-NEXT: blr 1152entry: 1153 %0 = load atomic i64, ptr inttoptr (i64 9999900 to ptr) monotonic, align 8 1154 %conv = trunc i64 %0 to i8 1155 ret i8 %conv 1156} 1157 1158; Function Attrs: nofree norecurse nounwind uwtable willreturn 1159define dso_local signext i8 @ld_cst_align64_int8_t_uint64_t() { 1160; CHECK-P10-LABEL: ld_cst_align64_int8_t_uint64_t: 1161; CHECK-P10: # %bb.0: # %entry 1162; CHECK-P10-NEXT: pli r3, 244140625 1163; CHECK-P10-NEXT: rldic r3, r3, 12, 24 1164; CHECK-P10-NEXT: ld r3, 0(r3) 1165; CHECK-P10-NEXT: extsb r3, r3 1166; CHECK-P10-NEXT: blr 1167; 1168; CHECK-PREP10-LABEL: ld_cst_align64_int8_t_uint64_t: 1169; CHECK-PREP10: # %bb.0: # %entry 1170; CHECK-PREP10-NEXT: lis r3, 3725 1171; CHECK-PREP10-NEXT: ori r3, r3, 19025 1172; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 1173; CHECK-PREP10-NEXT: ld r3, 0(r3) 1174; CHECK-PREP10-NEXT: extsb r3, r3 1175; CHECK-PREP10-NEXT: blr 1176entry: 1177 %0 = load atomic i64, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 1178 %conv = trunc i64 %0 to i8 1179 ret i8 %conv 1180} 1181 1182; Function Attrs: nofree norecurse nounwind uwtable willreturn 1183define dso_local zeroext i8 @ld_0_uint8_t_uint8_t(i64 %ptr) { 1184; CHECK-LABEL: ld_0_uint8_t_uint8_t: 1185; CHECK: # %bb.0: # %entry 1186; CHECK-NEXT: lbz r3, 0(r3) 1187; CHECK-NEXT: blr 1188entry: 1189 %0 = inttoptr i64 %ptr to ptr 1190 %1 = load atomic i8, ptr %0 monotonic, align 1 1191 ret i8 %1 1192} 1193 1194; Function Attrs: nofree norecurse nounwind uwtable willreturn 1195define dso_local zeroext i8 @ld_align16_uint8_t_uint8_t(ptr nocapture readonly %ptr) { 1196; CHECK-LABEL: ld_align16_uint8_t_uint8_t: 1197; CHECK: # %bb.0: # %entry 1198; CHECK-NEXT: lbz r3, 8(r3) 1199; CHECK-NEXT: blr 1200entry: 1201 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 1202 %0 = load atomic i8, ptr %add.ptr monotonic, align 1 1203 ret i8 %0 1204} 1205 1206; Function Attrs: nofree norecurse nounwind uwtable willreturn 1207define dso_local zeroext i8 @ld_align32_uint8_t_uint8_t(ptr nocapture readonly %ptr) { 1208; CHECK-P10-LABEL: ld_align32_uint8_t_uint8_t: 1209; CHECK-P10: # %bb.0: # %entry 1210; CHECK-P10-NEXT: plbz r3, 99999000(r3), 0 1211; CHECK-P10-NEXT: clrldi r3, r3, 32 1212; CHECK-P10-NEXT: blr 1213; 1214; CHECK-PREP10-LABEL: ld_align32_uint8_t_uint8_t: 1215; CHECK-PREP10: # %bb.0: # %entry 1216; CHECK-PREP10-NEXT: lis r4, 1525 1217; CHECK-PREP10-NEXT: ori r4, r4, 56600 1218; CHECK-PREP10-NEXT: lbzx r3, r3, r4 1219; CHECK-PREP10-NEXT: blr 1220entry: 1221 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 1222 %0 = load atomic i8, ptr %add.ptr monotonic, align 1 1223 ret i8 %0 1224} 1225 1226; Function Attrs: nofree norecurse nounwind uwtable willreturn 1227define dso_local zeroext i8 @ld_align64_uint8_t_uint8_t(ptr nocapture readonly %ptr) { 1228; CHECK-P10-LABEL: ld_align64_uint8_t_uint8_t: 1229; CHECK-P10: # %bb.0: # %entry 1230; CHECK-P10-NEXT: pli r4, 244140625 1231; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1232; CHECK-P10-NEXT: lbzx r3, r3, r4 1233; CHECK-P10-NEXT: blr 1234; 1235; CHECK-PREP10-LABEL: ld_align64_uint8_t_uint8_t: 1236; CHECK-PREP10: # %bb.0: # %entry 1237; CHECK-PREP10-NEXT: lis r4, 3725 1238; CHECK-PREP10-NEXT: ori r4, r4, 19025 1239; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1240; CHECK-PREP10-NEXT: lbzx r3, r3, r4 1241; CHECK-PREP10-NEXT: blr 1242entry: 1243 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 1244 %0 = load atomic i8, ptr %add.ptr monotonic, align 1 1245 ret i8 %0 1246} 1247 1248; Function Attrs: nofree norecurse nounwind uwtable willreturn 1249define dso_local zeroext i8 @ld_reg_uint8_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) { 1250; CHECK-LABEL: ld_reg_uint8_t_uint8_t: 1251; CHECK: # %bb.0: # %entry 1252; CHECK-NEXT: lbzx r3, r3, r4 1253; CHECK-NEXT: blr 1254entry: 1255 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 1256 %0 = load atomic i8, ptr %add.ptr monotonic, align 1 1257 ret i8 %0 1258} 1259 1260; Function Attrs: nofree norecurse nounwind uwtable willreturn 1261define dso_local zeroext i8 @ld_or_uint8_t_uint8_t(i64 %ptr, i8 zeroext %off) { 1262; CHECK-LABEL: ld_or_uint8_t_uint8_t: 1263; CHECK: # %bb.0: # %entry 1264; CHECK-NEXT: or r3, r4, r3 1265; CHECK-NEXT: lbz r3, 0(r3) 1266; CHECK-NEXT: blr 1267entry: 1268 %conv = zext i8 %off to i64 1269 %or = or i64 %conv, %ptr 1270 %0 = inttoptr i64 %or to ptr 1271 %1 = load atomic i8, ptr %0 monotonic, align 1 1272 ret i8 %1 1273} 1274 1275; Function Attrs: nofree norecurse nounwind uwtable willreturn 1276define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_uint8_t(i64 %ptr) { 1277; CHECK-LABEL: ld_not_disjoint16_uint8_t_uint8_t: 1278; CHECK: # %bb.0: # %entry 1279; CHECK-NEXT: ori r3, r3, 6 1280; CHECK-NEXT: lbz r3, 0(r3) 1281; CHECK-NEXT: blr 1282entry: 1283 %or = or i64 %ptr, 6 1284 %0 = inttoptr i64 %or to ptr 1285 %1 = load atomic i8, ptr %0 monotonic, align 1 1286 ret i8 %1 1287} 1288 1289; Function Attrs: nofree norecurse nounwind uwtable willreturn 1290define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_uint8_t(i64 %ptr) { 1291; CHECK-LABEL: ld_disjoint_align16_uint8_t_uint8_t: 1292; CHECK: # %bb.0: # %entry 1293; CHECK-NEXT: rldicr r3, r3, 0, 51 1294; CHECK-NEXT: lbz r3, 24(r3) 1295; CHECK-NEXT: blr 1296entry: 1297 %and = and i64 %ptr, -4096 1298 %or = or i64 %and, 24 1299 %0 = inttoptr i64 %or to ptr 1300 %1 = load atomic i8, ptr %0 monotonic, align 8 1301 ret i8 %1 1302} 1303 1304; Function Attrs: nofree norecurse nounwind uwtable willreturn 1305define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_uint8_t(i64 %ptr) { 1306; CHECK-LABEL: ld_not_disjoint32_uint8_t_uint8_t: 1307; CHECK: # %bb.0: # %entry 1308; CHECK-NEXT: ori r3, r3, 34463 1309; CHECK-NEXT: oris r3, r3, 1 1310; CHECK-NEXT: lbz r3, 0(r3) 1311; CHECK-NEXT: blr 1312entry: 1313 %or = or i64 %ptr, 99999 1314 %0 = inttoptr i64 %or to ptr 1315 %1 = load atomic i8, ptr %0 monotonic, align 1 1316 ret i8 %1 1317} 1318 1319; Function Attrs: nofree norecurse nounwind uwtable willreturn 1320define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_uint8_t(i64 %ptr) { 1321; CHECK-P10-LABEL: ld_disjoint_align32_uint8_t_uint8_t: 1322; CHECK-P10: # %bb.0: # %entry 1323; CHECK-P10-NEXT: lis r4, -15264 1324; CHECK-P10-NEXT: and r3, r3, r4 1325; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0 1326; CHECK-P10-NEXT: clrldi r3, r3, 32 1327; CHECK-P10-NEXT: blr 1328; 1329; CHECK-PREP10-LABEL: ld_disjoint_align32_uint8_t_uint8_t: 1330; CHECK-PREP10: # %bb.0: # %entry 1331; CHECK-PREP10-NEXT: lis r4, -15264 1332; CHECK-PREP10-NEXT: and r3, r3, r4 1333; CHECK-PREP10-NEXT: lis r4, 15258 1334; CHECK-PREP10-NEXT: ori r4, r4, 41712 1335; CHECK-PREP10-NEXT: lbzx r3, r3, r4 1336; CHECK-PREP10-NEXT: blr 1337entry: 1338 %and = and i64 %ptr, -1000341504 1339 %or = or i64 %and, 999990000 1340 %0 = inttoptr i64 %or to ptr 1341 %1 = load atomic i8, ptr %0 monotonic, align 16 1342 ret i8 %1 1343} 1344 1345; Function Attrs: nofree norecurse nounwind uwtable willreturn 1346define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_uint8_t(i64 %ptr) { 1347; CHECK-P10-LABEL: ld_not_disjoint64_uint8_t_uint8_t: 1348; CHECK-P10: # %bb.0: # %entry 1349; CHECK-P10-NEXT: pli r4, 232 1350; CHECK-P10-NEXT: pli r5, 3567587329 1351; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 1352; CHECK-P10-NEXT: or r3, r3, r5 1353; CHECK-P10-NEXT: lbz r3, 0(r3) 1354; CHECK-P10-NEXT: blr 1355; 1356; CHECK-PREP10-LABEL: ld_not_disjoint64_uint8_t_uint8_t: 1357; CHECK-PREP10: # %bb.0: # %entry 1358; CHECK-PREP10-NEXT: li r4, 29 1359; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 1360; CHECK-PREP10-NEXT: oris r4, r4, 54437 1361; CHECK-PREP10-NEXT: ori r4, r4, 4097 1362; CHECK-PREP10-NEXT: or r3, r3, r4 1363; CHECK-PREP10-NEXT: lbz r3, 0(r3) 1364; CHECK-PREP10-NEXT: blr 1365entry: 1366 %or = or i64 %ptr, 1000000000001 1367 %0 = inttoptr i64 %or to ptr 1368 %1 = load atomic i8, ptr %0 monotonic, align 1 1369 ret i8 %1 1370} 1371 1372; Function Attrs: nofree norecurse nounwind uwtable willreturn 1373define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_uint8_t(i64 %ptr) { 1374; CHECK-P10-LABEL: ld_disjoint_align64_uint8_t_uint8_t: 1375; CHECK-P10: # %bb.0: # %entry 1376; CHECK-P10-NEXT: pli r4, 244140625 1377; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 1378; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1379; CHECK-P10-NEXT: lbzx r3, r3, r4 1380; CHECK-P10-NEXT: blr 1381; 1382; CHECK-PREP10-LABEL: ld_disjoint_align64_uint8_t_uint8_t: 1383; CHECK-PREP10: # %bb.0: # %entry 1384; CHECK-PREP10-NEXT: lis r4, 3725 1385; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 1386; CHECK-PREP10-NEXT: ori r4, r4, 19025 1387; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1388; CHECK-PREP10-NEXT: lbzx r3, r3, r4 1389; CHECK-PREP10-NEXT: blr 1390entry: 1391 %and = and i64 %ptr, -1099511627776 1392 %or = or i64 %and, 1000000000000 1393 %0 = inttoptr i64 %or to ptr 1394 %1 = load atomic i8, ptr %0 monotonic, align 4096 1395 ret i8 %1 1396} 1397 1398; Function Attrs: nofree norecurse nounwind uwtable willreturn 1399define dso_local zeroext i8 @ld_cst_align16_uint8_t_uint8_t() { 1400; CHECK-LABEL: ld_cst_align16_uint8_t_uint8_t: 1401; CHECK: # %bb.0: # %entry 1402; CHECK-NEXT: lbz r3, 4080(0) 1403; CHECK-NEXT: blr 1404entry: 1405 %0 = load atomic i8, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 1406 ret i8 %0 1407} 1408 1409; Function Attrs: nofree norecurse nounwind uwtable willreturn 1410define dso_local zeroext i8 @ld_cst_align32_uint8_t_uint8_t() { 1411; CHECK-LABEL: ld_cst_align32_uint8_t_uint8_t: 1412; CHECK: # %bb.0: # %entry 1413; CHECK-NEXT: lis r3, 153 1414; CHECK-NEXT: lbz r3, -27108(r3) 1415; CHECK-NEXT: blr 1416entry: 1417 %0 = load atomic i8, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 1418 ret i8 %0 1419} 1420 1421; Function Attrs: nofree norecurse nounwind uwtable willreturn 1422define dso_local zeroext i8 @ld_cst_align64_uint8_t_uint8_t() { 1423; CHECK-P10-LABEL: ld_cst_align64_uint8_t_uint8_t: 1424; CHECK-P10: # %bb.0: # %entry 1425; CHECK-P10-NEXT: pli r3, 244140625 1426; CHECK-P10-NEXT: rldic r3, r3, 12, 24 1427; CHECK-P10-NEXT: lbz r3, 0(r3) 1428; CHECK-P10-NEXT: blr 1429; 1430; CHECK-PREP10-LABEL: ld_cst_align64_uint8_t_uint8_t: 1431; CHECK-PREP10: # %bb.0: # %entry 1432; CHECK-PREP10-NEXT: lis r3, 3725 1433; CHECK-PREP10-NEXT: ori r3, r3, 19025 1434; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 1435; CHECK-PREP10-NEXT: lbz r3, 0(r3) 1436; CHECK-PREP10-NEXT: blr 1437entry: 1438 %0 = load atomic i8, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 1439 ret i8 %0 1440} 1441 1442; Function Attrs: nofree norecurse nounwind uwtable willreturn 1443define dso_local zeroext i8 @ld_0_uint8_t_uint16_t(i64 %ptr) { 1444; CHECK-LABEL: ld_0_uint8_t_uint16_t: 1445; CHECK: # %bb.0: # %entry 1446; CHECK-NEXT: lhz r3, 0(r3) 1447; CHECK-NEXT: clrldi r3, r3, 56 1448; CHECK-NEXT: blr 1449entry: 1450 %0 = inttoptr i64 %ptr to ptr 1451 %1 = load atomic i16, ptr %0 monotonic, align 2 1452 %conv = trunc i16 %1 to i8 1453 ret i8 %conv 1454} 1455 1456; Function Attrs: nofree norecurse nounwind uwtable willreturn 1457define dso_local zeroext i8 @ld_align16_uint8_t_uint16_t(ptr nocapture readonly %ptr) { 1458; CHECK-LABEL: ld_align16_uint8_t_uint16_t: 1459; CHECK: # %bb.0: # %entry 1460; CHECK-NEXT: lhz r3, 8(r3) 1461; CHECK-NEXT: clrldi r3, r3, 56 1462; CHECK-NEXT: blr 1463entry: 1464 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 1465 %0 = load atomic i16, ptr %add.ptr monotonic, align 2 1466 %conv = trunc i16 %0 to i8 1467 ret i8 %conv 1468} 1469 1470; Function Attrs: nofree norecurse nounwind uwtable willreturn 1471define dso_local zeroext i8 @ld_align32_uint8_t_uint16_t(ptr nocapture readonly %ptr) { 1472; CHECK-P10-LABEL: ld_align32_uint8_t_uint16_t: 1473; CHECK-P10: # %bb.0: # %entry 1474; CHECK-P10-NEXT: plhz r3, 99999000(r3), 0 1475; CHECK-P10-NEXT: clrldi r3, r3, 56 1476; CHECK-P10-NEXT: blr 1477; 1478; CHECK-PREP10-LABEL: ld_align32_uint8_t_uint16_t: 1479; CHECK-PREP10: # %bb.0: # %entry 1480; CHECK-PREP10-NEXT: lis r4, 1525 1481; CHECK-PREP10-NEXT: ori r4, r4, 56600 1482; CHECK-PREP10-NEXT: lhzx r3, r3, r4 1483; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1484; CHECK-PREP10-NEXT: blr 1485entry: 1486 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 1487 %0 = load atomic i16, ptr %add.ptr monotonic, align 2 1488 %conv = trunc i16 %0 to i8 1489 ret i8 %conv 1490} 1491 1492; Function Attrs: nofree norecurse nounwind uwtable willreturn 1493define dso_local zeroext i8 @ld_align64_uint8_t_uint16_t(ptr nocapture readonly %ptr) { 1494; CHECK-P10-LABEL: ld_align64_uint8_t_uint16_t: 1495; CHECK-P10: # %bb.0: # %entry 1496; CHECK-P10-NEXT: pli r4, 244140625 1497; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1498; CHECK-P10-NEXT: lhzx r3, r3, r4 1499; CHECK-P10-NEXT: clrldi r3, r3, 56 1500; CHECK-P10-NEXT: blr 1501; 1502; CHECK-PREP10-LABEL: ld_align64_uint8_t_uint16_t: 1503; CHECK-PREP10: # %bb.0: # %entry 1504; CHECK-PREP10-NEXT: lis r4, 3725 1505; CHECK-PREP10-NEXT: ori r4, r4, 19025 1506; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1507; CHECK-PREP10-NEXT: lhzx r3, r3, r4 1508; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1509; CHECK-PREP10-NEXT: blr 1510entry: 1511 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 1512 %0 = load atomic i16, ptr %add.ptr monotonic, align 2 1513 %conv = trunc i16 %0 to i8 1514 ret i8 %conv 1515} 1516 1517; Function Attrs: nofree norecurse nounwind uwtable willreturn 1518define dso_local zeroext i8 @ld_reg_uint8_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) { 1519; CHECK-LABEL: ld_reg_uint8_t_uint16_t: 1520; CHECK: # %bb.0: # %entry 1521; CHECK-NEXT: lhzx r3, r3, r4 1522; CHECK-NEXT: clrldi r3, r3, 56 1523; CHECK-NEXT: blr 1524entry: 1525 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 1526 %0 = load atomic i16, ptr %add.ptr monotonic, align 2 1527 %conv = trunc i16 %0 to i8 1528 ret i8 %conv 1529} 1530 1531; Function Attrs: nofree norecurse nounwind uwtable willreturn 1532define dso_local zeroext i8 @ld_or_uint8_t_uint16_t(i64 %ptr, i8 zeroext %off) { 1533; CHECK-LABEL: ld_or_uint8_t_uint16_t: 1534; CHECK: # %bb.0: # %entry 1535; CHECK-NEXT: or r3, r4, r3 1536; CHECK-NEXT: lhz r3, 0(r3) 1537; CHECK-NEXT: clrldi r3, r3, 56 1538; CHECK-NEXT: blr 1539entry: 1540 %conv = zext i8 %off to i64 1541 %or = or i64 %conv, %ptr 1542 %0 = inttoptr i64 %or to ptr 1543 %1 = load atomic i16, ptr %0 monotonic, align 2 1544 %conv1 = trunc i16 %1 to i8 1545 ret i8 %conv1 1546} 1547 1548; Function Attrs: nofree norecurse nounwind uwtable willreturn 1549define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_uint16_t(i64 %ptr) { 1550; CHECK-LABEL: ld_not_disjoint16_uint8_t_uint16_t: 1551; CHECK: # %bb.0: # %entry 1552; CHECK-NEXT: ori r3, r3, 6 1553; CHECK-NEXT: lhz r3, 0(r3) 1554; CHECK-NEXT: clrldi r3, r3, 56 1555; CHECK-NEXT: blr 1556entry: 1557 %or = or i64 %ptr, 6 1558 %0 = inttoptr i64 %or to ptr 1559 %1 = load atomic i16, ptr %0 monotonic, align 2 1560 %conv = trunc i16 %1 to i8 1561 ret i8 %conv 1562} 1563 1564; Function Attrs: nofree norecurse nounwind uwtable willreturn 1565define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_uint16_t(i64 %ptr) { 1566; CHECK-LABEL: ld_disjoint_align16_uint8_t_uint16_t: 1567; CHECK: # %bb.0: # %entry 1568; CHECK-NEXT: rldicr r3, r3, 0, 51 1569; CHECK-NEXT: lhz r3, 24(r3) 1570; CHECK-NEXT: clrldi r3, r3, 56 1571; CHECK-NEXT: blr 1572entry: 1573 %and = and i64 %ptr, -4096 1574 %or = or i64 %and, 24 1575 %0 = inttoptr i64 %or to ptr 1576 %1 = load atomic i16, ptr %0 monotonic, align 8 1577 %conv = trunc i16 %1 to i8 1578 ret i8 %conv 1579} 1580 1581; Function Attrs: nofree norecurse nounwind uwtable willreturn 1582define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_uint16_t(i64 %ptr) { 1583; CHECK-LABEL: ld_not_disjoint32_uint8_t_uint16_t: 1584; CHECK: # %bb.0: # %entry 1585; CHECK-NEXT: ori r3, r3, 34463 1586; CHECK-NEXT: oris r3, r3, 1 1587; CHECK-NEXT: lhz r3, 0(r3) 1588; CHECK-NEXT: clrldi r3, r3, 56 1589; CHECK-NEXT: blr 1590entry: 1591 %or = or i64 %ptr, 99999 1592 %0 = inttoptr i64 %or to ptr 1593 %1 = load atomic i16, ptr %0 monotonic, align 2 1594 %conv = trunc i16 %1 to i8 1595 ret i8 %conv 1596} 1597 1598; Function Attrs: nofree norecurse nounwind uwtable willreturn 1599define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_uint16_t(i64 %ptr) { 1600; CHECK-P10-LABEL: ld_disjoint_align32_uint8_t_uint16_t: 1601; CHECK-P10: # %bb.0: # %entry 1602; CHECK-P10-NEXT: lis r4, -15264 1603; CHECK-P10-NEXT: and r3, r3, r4 1604; CHECK-P10-NEXT: plhz r3, 999990000(r3), 0 1605; CHECK-P10-NEXT: clrldi r3, r3, 56 1606; CHECK-P10-NEXT: blr 1607; 1608; CHECK-PREP10-LABEL: ld_disjoint_align32_uint8_t_uint16_t: 1609; CHECK-PREP10: # %bb.0: # %entry 1610; CHECK-PREP10-NEXT: lis r4, -15264 1611; CHECK-PREP10-NEXT: and r3, r3, r4 1612; CHECK-PREP10-NEXT: lis r4, 15258 1613; CHECK-PREP10-NEXT: ori r4, r4, 41712 1614; CHECK-PREP10-NEXT: lhzx r3, r3, r4 1615; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1616; CHECK-PREP10-NEXT: blr 1617entry: 1618 %and = and i64 %ptr, -1000341504 1619 %or = or i64 %and, 999990000 1620 %0 = inttoptr i64 %or to ptr 1621 %1 = load atomic i16, ptr %0 monotonic, align 16 1622 %conv = trunc i16 %1 to i8 1623 ret i8 %conv 1624} 1625 1626; Function Attrs: nofree norecurse nounwind uwtable willreturn 1627define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_uint16_t(i64 %ptr) { 1628; CHECK-P10-LABEL: ld_not_disjoint64_uint8_t_uint16_t: 1629; CHECK-P10: # %bb.0: # %entry 1630; CHECK-P10-NEXT: pli r4, 232 1631; CHECK-P10-NEXT: pli r5, 3567587329 1632; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 1633; CHECK-P10-NEXT: or r3, r3, r5 1634; CHECK-P10-NEXT: lhz r3, 0(r3) 1635; CHECK-P10-NEXT: clrldi r3, r3, 56 1636; CHECK-P10-NEXT: blr 1637; 1638; CHECK-PREP10-LABEL: ld_not_disjoint64_uint8_t_uint16_t: 1639; CHECK-PREP10: # %bb.0: # %entry 1640; CHECK-PREP10-NEXT: li r4, 29 1641; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 1642; CHECK-PREP10-NEXT: oris r4, r4, 54437 1643; CHECK-PREP10-NEXT: ori r4, r4, 4097 1644; CHECK-PREP10-NEXT: or r3, r3, r4 1645; CHECK-PREP10-NEXT: lhz r3, 0(r3) 1646; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1647; CHECK-PREP10-NEXT: blr 1648entry: 1649 %or = or i64 %ptr, 1000000000001 1650 %0 = inttoptr i64 %or to ptr 1651 %1 = load atomic i16, ptr %0 monotonic, align 2 1652 %conv = trunc i16 %1 to i8 1653 ret i8 %conv 1654} 1655 1656; Function Attrs: nofree norecurse nounwind uwtable willreturn 1657define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_uint16_t(i64 %ptr) { 1658; CHECK-P10-LABEL: ld_disjoint_align64_uint8_t_uint16_t: 1659; CHECK-P10: # %bb.0: # %entry 1660; CHECK-P10-NEXT: pli r4, 244140625 1661; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 1662; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1663; CHECK-P10-NEXT: lhzx r3, r3, r4 1664; CHECK-P10-NEXT: clrldi r3, r3, 56 1665; CHECK-P10-NEXT: blr 1666; 1667; CHECK-PREP10-LABEL: ld_disjoint_align64_uint8_t_uint16_t: 1668; CHECK-PREP10: # %bb.0: # %entry 1669; CHECK-PREP10-NEXT: lis r4, 3725 1670; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 1671; CHECK-PREP10-NEXT: ori r4, r4, 19025 1672; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1673; CHECK-PREP10-NEXT: lhzx r3, r3, r4 1674; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1675; CHECK-PREP10-NEXT: blr 1676entry: 1677 %and = and i64 %ptr, -1099511627776 1678 %or = or i64 %and, 1000000000000 1679 %0 = inttoptr i64 %or to ptr 1680 %1 = load atomic i16, ptr %0 monotonic, align 4096 1681 %conv = trunc i16 %1 to i8 1682 ret i8 %conv 1683} 1684 1685; Function Attrs: nofree norecurse nounwind uwtable willreturn 1686define dso_local zeroext i8 @ld_cst_align16_uint8_t_uint16_t() { 1687; CHECK-LABEL: ld_cst_align16_uint8_t_uint16_t: 1688; CHECK: # %bb.0: # %entry 1689; CHECK-NEXT: lhz r3, 4080(0) 1690; CHECK-NEXT: clrldi r3, r3, 56 1691; CHECK-NEXT: blr 1692entry: 1693 %0 = load atomic i16, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 1694 %conv = trunc i16 %0 to i8 1695 ret i8 %conv 1696} 1697 1698; Function Attrs: nofree norecurse nounwind uwtable willreturn 1699define dso_local zeroext i8 @ld_cst_align32_uint8_t_uint16_t() { 1700; CHECK-LABEL: ld_cst_align32_uint8_t_uint16_t: 1701; CHECK: # %bb.0: # %entry 1702; CHECK-NEXT: lis r3, 153 1703; CHECK-NEXT: lhz r3, -27108(r3) 1704; CHECK-NEXT: clrldi r3, r3, 56 1705; CHECK-NEXT: blr 1706entry: 1707 %0 = load atomic i16, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 1708 %conv = trunc i16 %0 to i8 1709 ret i8 %conv 1710} 1711 1712; Function Attrs: nofree norecurse nounwind uwtable willreturn 1713define dso_local zeroext i8 @ld_cst_align64_uint8_t_uint16_t() { 1714; CHECK-P10-LABEL: ld_cst_align64_uint8_t_uint16_t: 1715; CHECK-P10: # %bb.0: # %entry 1716; CHECK-P10-NEXT: pli r3, 244140625 1717; CHECK-P10-NEXT: rldic r3, r3, 12, 24 1718; CHECK-P10-NEXT: lhz r3, 0(r3) 1719; CHECK-P10-NEXT: clrldi r3, r3, 56 1720; CHECK-P10-NEXT: blr 1721; 1722; CHECK-PREP10-LABEL: ld_cst_align64_uint8_t_uint16_t: 1723; CHECK-PREP10: # %bb.0: # %entry 1724; CHECK-PREP10-NEXT: lis r3, 3725 1725; CHECK-PREP10-NEXT: ori r3, r3, 19025 1726; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 1727; CHECK-PREP10-NEXT: lhz r3, 0(r3) 1728; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1729; CHECK-PREP10-NEXT: blr 1730entry: 1731 %0 = load atomic i16, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 1732 %conv = trunc i16 %0 to i8 1733 ret i8 %conv 1734} 1735 1736; Function Attrs: nofree norecurse nounwind uwtable willreturn 1737define dso_local zeroext i8 @ld_0_uint8_t_uint32_t(i64 %ptr) { 1738; CHECK-LABEL: ld_0_uint8_t_uint32_t: 1739; CHECK: # %bb.0: # %entry 1740; CHECK-NEXT: lwz r3, 0(r3) 1741; CHECK-NEXT: clrldi r3, r3, 56 1742; CHECK-NEXT: blr 1743entry: 1744 %0 = inttoptr i64 %ptr to ptr 1745 %1 = load atomic i32, ptr %0 monotonic, align 4 1746 %conv = trunc i32 %1 to i8 1747 ret i8 %conv 1748} 1749 1750; Function Attrs: nofree norecurse nounwind uwtable willreturn 1751define dso_local zeroext i8 @ld_align16_uint8_t_uint32_t(ptr nocapture readonly %ptr) { 1752; CHECK-LABEL: ld_align16_uint8_t_uint32_t: 1753; CHECK: # %bb.0: # %entry 1754; CHECK-NEXT: lwz r3, 8(r3) 1755; CHECK-NEXT: clrldi r3, r3, 56 1756; CHECK-NEXT: blr 1757entry: 1758 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 1759 %0 = load atomic i32, ptr %add.ptr monotonic, align 4 1760 %conv = trunc i32 %0 to i8 1761 ret i8 %conv 1762} 1763 1764; Function Attrs: nofree norecurse nounwind uwtable willreturn 1765define dso_local zeroext i8 @ld_align32_uint8_t_uint32_t(ptr nocapture readonly %ptr) { 1766; CHECK-P10-LABEL: ld_align32_uint8_t_uint32_t: 1767; CHECK-P10: # %bb.0: # %entry 1768; CHECK-P10-NEXT: plwz r3, 99999000(r3), 0 1769; CHECK-P10-NEXT: clrldi r3, r3, 56 1770; CHECK-P10-NEXT: blr 1771; 1772; CHECK-PREP10-LABEL: ld_align32_uint8_t_uint32_t: 1773; CHECK-PREP10: # %bb.0: # %entry 1774; CHECK-PREP10-NEXT: lis r4, 1525 1775; CHECK-PREP10-NEXT: ori r4, r4, 56600 1776; CHECK-PREP10-NEXT: lwzx r3, r3, r4 1777; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1778; CHECK-PREP10-NEXT: blr 1779entry: 1780 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 1781 %0 = load atomic i32, ptr %add.ptr monotonic, align 4 1782 %conv = trunc i32 %0 to i8 1783 ret i8 %conv 1784} 1785 1786; Function Attrs: nofree norecurse nounwind uwtable willreturn 1787define dso_local zeroext i8 @ld_align64_uint8_t_uint32_t(ptr nocapture readonly %ptr) { 1788; CHECK-P10-LABEL: ld_align64_uint8_t_uint32_t: 1789; CHECK-P10: # %bb.0: # %entry 1790; CHECK-P10-NEXT: pli r4, 244140625 1791; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1792; CHECK-P10-NEXT: lwzx r3, r3, r4 1793; CHECK-P10-NEXT: clrldi r3, r3, 56 1794; CHECK-P10-NEXT: blr 1795; 1796; CHECK-PREP10-LABEL: ld_align64_uint8_t_uint32_t: 1797; CHECK-PREP10: # %bb.0: # %entry 1798; CHECK-PREP10-NEXT: lis r4, 3725 1799; CHECK-PREP10-NEXT: ori r4, r4, 19025 1800; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1801; CHECK-PREP10-NEXT: lwzx r3, r3, r4 1802; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1803; CHECK-PREP10-NEXT: blr 1804entry: 1805 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 1806 %0 = load atomic i32, ptr %add.ptr monotonic, align 4 1807 %conv = trunc i32 %0 to i8 1808 ret i8 %conv 1809} 1810 1811; Function Attrs: nofree norecurse nounwind uwtable willreturn 1812define dso_local zeroext i8 @ld_reg_uint8_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) { 1813; CHECK-LABEL: ld_reg_uint8_t_uint32_t: 1814; CHECK: # %bb.0: # %entry 1815; CHECK-NEXT: lwzx r3, r3, r4 1816; CHECK-NEXT: clrldi r3, r3, 56 1817; CHECK-NEXT: blr 1818entry: 1819 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 1820 %0 = load atomic i32, ptr %add.ptr monotonic, align 4 1821 %conv = trunc i32 %0 to i8 1822 ret i8 %conv 1823} 1824 1825; Function Attrs: nofree norecurse nounwind uwtable willreturn 1826define dso_local zeroext i8 @ld_or_uint8_t_uint32_t(i64 %ptr, i8 zeroext %off) { 1827; CHECK-LABEL: ld_or_uint8_t_uint32_t: 1828; CHECK: # %bb.0: # %entry 1829; CHECK-NEXT: or r3, r4, r3 1830; CHECK-NEXT: lwz r3, 0(r3) 1831; CHECK-NEXT: clrldi r3, r3, 56 1832; CHECK-NEXT: blr 1833entry: 1834 %conv = zext i8 %off to i64 1835 %or = or i64 %conv, %ptr 1836 %0 = inttoptr i64 %or to ptr 1837 %1 = load atomic i32, ptr %0 monotonic, align 4 1838 %conv1 = trunc i32 %1 to i8 1839 ret i8 %conv1 1840} 1841 1842; Function Attrs: nofree norecurse nounwind uwtable willreturn 1843define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_uint32_t(i64 %ptr) { 1844; CHECK-LABEL: ld_not_disjoint16_uint8_t_uint32_t: 1845; CHECK: # %bb.0: # %entry 1846; CHECK-NEXT: ori r3, r3, 6 1847; CHECK-NEXT: lwz r3, 0(r3) 1848; CHECK-NEXT: clrldi r3, r3, 56 1849; CHECK-NEXT: blr 1850entry: 1851 %or = or i64 %ptr, 6 1852 %0 = inttoptr i64 %or to ptr 1853 %1 = load atomic i32, ptr %0 monotonic, align 4 1854 %conv = trunc i32 %1 to i8 1855 ret i8 %conv 1856} 1857 1858; Function Attrs: nofree norecurse nounwind uwtable willreturn 1859define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_uint32_t(i64 %ptr) { 1860; CHECK-LABEL: ld_disjoint_align16_uint8_t_uint32_t: 1861; CHECK: # %bb.0: # %entry 1862; CHECK-NEXT: rldicr r3, r3, 0, 51 1863; CHECK-NEXT: lwz r3, 24(r3) 1864; CHECK-NEXT: clrldi r3, r3, 56 1865; CHECK-NEXT: blr 1866entry: 1867 %and = and i64 %ptr, -4096 1868 %or = or i64 %and, 24 1869 %0 = inttoptr i64 %or to ptr 1870 %1 = load atomic i32, ptr %0 monotonic, align 8 1871 %conv = trunc i32 %1 to i8 1872 ret i8 %conv 1873} 1874 1875; Function Attrs: nofree norecurse nounwind uwtable willreturn 1876define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_uint32_t(i64 %ptr) { 1877; CHECK-LABEL: ld_not_disjoint32_uint8_t_uint32_t: 1878; CHECK: # %bb.0: # %entry 1879; CHECK-NEXT: ori r3, r3, 34463 1880; CHECK-NEXT: oris r3, r3, 1 1881; CHECK-NEXT: lwz r3, 0(r3) 1882; CHECK-NEXT: clrldi r3, r3, 56 1883; CHECK-NEXT: blr 1884entry: 1885 %or = or i64 %ptr, 99999 1886 %0 = inttoptr i64 %or to ptr 1887 %1 = load atomic i32, ptr %0 monotonic, align 4 1888 %conv = trunc i32 %1 to i8 1889 ret i8 %conv 1890} 1891 1892; Function Attrs: nofree norecurse nounwind uwtable willreturn 1893define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_uint32_t(i64 %ptr) { 1894; CHECK-P10-LABEL: ld_disjoint_align32_uint8_t_uint32_t: 1895; CHECK-P10: # %bb.0: # %entry 1896; CHECK-P10-NEXT: lis r4, -15264 1897; CHECK-P10-NEXT: and r3, r3, r4 1898; CHECK-P10-NEXT: plwz r3, 999990000(r3), 0 1899; CHECK-P10-NEXT: clrldi r3, r3, 56 1900; CHECK-P10-NEXT: blr 1901; 1902; CHECK-PREP10-LABEL: ld_disjoint_align32_uint8_t_uint32_t: 1903; CHECK-PREP10: # %bb.0: # %entry 1904; CHECK-PREP10-NEXT: lis r4, -15264 1905; CHECK-PREP10-NEXT: and r3, r3, r4 1906; CHECK-PREP10-NEXT: lis r4, 15258 1907; CHECK-PREP10-NEXT: ori r4, r4, 41712 1908; CHECK-PREP10-NEXT: lwzx r3, r3, r4 1909; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1910; CHECK-PREP10-NEXT: blr 1911entry: 1912 %and = and i64 %ptr, -1000341504 1913 %or = or i64 %and, 999990000 1914 %0 = inttoptr i64 %or to ptr 1915 %1 = load atomic i32, ptr %0 monotonic, align 16 1916 %conv = trunc i32 %1 to i8 1917 ret i8 %conv 1918} 1919 1920; Function Attrs: nofree norecurse nounwind uwtable willreturn 1921define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_uint32_t(i64 %ptr) { 1922; CHECK-P10-LABEL: ld_not_disjoint64_uint8_t_uint32_t: 1923; CHECK-P10: # %bb.0: # %entry 1924; CHECK-P10-NEXT: pli r4, 232 1925; CHECK-P10-NEXT: pli r5, 3567587329 1926; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 1927; CHECK-P10-NEXT: or r3, r3, r5 1928; CHECK-P10-NEXT: lwz r3, 0(r3) 1929; CHECK-P10-NEXT: clrldi r3, r3, 56 1930; CHECK-P10-NEXT: blr 1931; 1932; CHECK-PREP10-LABEL: ld_not_disjoint64_uint8_t_uint32_t: 1933; CHECK-PREP10: # %bb.0: # %entry 1934; CHECK-PREP10-NEXT: li r4, 29 1935; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 1936; CHECK-PREP10-NEXT: oris r4, r4, 54437 1937; CHECK-PREP10-NEXT: ori r4, r4, 4097 1938; CHECK-PREP10-NEXT: or r3, r3, r4 1939; CHECK-PREP10-NEXT: lwz r3, 0(r3) 1940; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1941; CHECK-PREP10-NEXT: blr 1942entry: 1943 %or = or i64 %ptr, 1000000000001 1944 %0 = inttoptr i64 %or to ptr 1945 %1 = load atomic i32, ptr %0 monotonic, align 4 1946 %conv = trunc i32 %1 to i8 1947 ret i8 %conv 1948} 1949 1950; Function Attrs: nofree norecurse nounwind uwtable willreturn 1951define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_uint32_t(i64 %ptr) { 1952; CHECK-P10-LABEL: ld_disjoint_align64_uint8_t_uint32_t: 1953; CHECK-P10: # %bb.0: # %entry 1954; CHECK-P10-NEXT: pli r4, 244140625 1955; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 1956; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1957; CHECK-P10-NEXT: lwzx r3, r3, r4 1958; CHECK-P10-NEXT: clrldi r3, r3, 56 1959; CHECK-P10-NEXT: blr 1960; 1961; CHECK-PREP10-LABEL: ld_disjoint_align64_uint8_t_uint32_t: 1962; CHECK-PREP10: # %bb.0: # %entry 1963; CHECK-PREP10-NEXT: lis r4, 3725 1964; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 1965; CHECK-PREP10-NEXT: ori r4, r4, 19025 1966; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1967; CHECK-PREP10-NEXT: lwzx r3, r3, r4 1968; CHECK-PREP10-NEXT: clrldi r3, r3, 56 1969; CHECK-PREP10-NEXT: blr 1970entry: 1971 %and = and i64 %ptr, -1099511627776 1972 %or = or i64 %and, 1000000000000 1973 %0 = inttoptr i64 %or to ptr 1974 %1 = load atomic i32, ptr %0 monotonic, align 4096 1975 %conv = trunc i32 %1 to i8 1976 ret i8 %conv 1977} 1978 1979; Function Attrs: nofree norecurse nounwind uwtable willreturn 1980define dso_local zeroext i8 @ld_cst_align16_uint8_t_uint32_t() { 1981; CHECK-LABEL: ld_cst_align16_uint8_t_uint32_t: 1982; CHECK: # %bb.0: # %entry 1983; CHECK-NEXT: lwz r3, 4080(0) 1984; CHECK-NEXT: clrldi r3, r3, 56 1985; CHECK-NEXT: blr 1986entry: 1987 %0 = load atomic i32, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 1988 %conv = trunc i32 %0 to i8 1989 ret i8 %conv 1990} 1991 1992; Function Attrs: nofree norecurse nounwind uwtable willreturn 1993define dso_local zeroext i8 @ld_cst_align32_uint8_t_uint32_t() { 1994; CHECK-LABEL: ld_cst_align32_uint8_t_uint32_t: 1995; CHECK: # %bb.0: # %entry 1996; CHECK-NEXT: lis r3, 153 1997; CHECK-NEXT: lwz r3, -27108(r3) 1998; CHECK-NEXT: clrldi r3, r3, 56 1999; CHECK-NEXT: blr 2000entry: 2001 %0 = load atomic i32, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 2002 %conv = trunc i32 %0 to i8 2003 ret i8 %conv 2004} 2005 2006; Function Attrs: nofree norecurse nounwind uwtable willreturn 2007define dso_local zeroext i8 @ld_cst_align64_uint8_t_uint32_t() { 2008; CHECK-P10-LABEL: ld_cst_align64_uint8_t_uint32_t: 2009; CHECK-P10: # %bb.0: # %entry 2010; CHECK-P10-NEXT: pli r3, 244140625 2011; CHECK-P10-NEXT: rldic r3, r3, 12, 24 2012; CHECK-P10-NEXT: lwz r3, 0(r3) 2013; CHECK-P10-NEXT: clrldi r3, r3, 56 2014; CHECK-P10-NEXT: blr 2015; 2016; CHECK-PREP10-LABEL: ld_cst_align64_uint8_t_uint32_t: 2017; CHECK-PREP10: # %bb.0: # %entry 2018; CHECK-PREP10-NEXT: lis r3, 3725 2019; CHECK-PREP10-NEXT: ori r3, r3, 19025 2020; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 2021; CHECK-PREP10-NEXT: lwz r3, 0(r3) 2022; CHECK-PREP10-NEXT: clrldi r3, r3, 56 2023; CHECK-PREP10-NEXT: blr 2024entry: 2025 %0 = load atomic i32, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 2026 %conv = trunc i32 %0 to i8 2027 ret i8 %conv 2028} 2029 2030; Function Attrs: nofree norecurse nounwind uwtable willreturn 2031define dso_local zeroext i8 @ld_0_uint8_t_uint64_t(i64 %ptr) { 2032; CHECK-LABEL: ld_0_uint8_t_uint64_t: 2033; CHECK: # %bb.0: # %entry 2034; CHECK-NEXT: ld r3, 0(r3) 2035; CHECK-NEXT: clrldi r3, r3, 56 2036; CHECK-NEXT: blr 2037entry: 2038 %0 = inttoptr i64 %ptr to ptr 2039 %1 = load atomic i64, ptr %0 monotonic, align 8 2040 %conv = trunc i64 %1 to i8 2041 ret i8 %conv 2042} 2043 2044; Function Attrs: nofree norecurse nounwind uwtable willreturn 2045define dso_local zeroext i8 @ld_align16_uint8_t_uint64_t(ptr nocapture readonly %ptr) { 2046; CHECK-LABEL: ld_align16_uint8_t_uint64_t: 2047; CHECK: # %bb.0: # %entry 2048; CHECK-NEXT: ld r3, 8(r3) 2049; CHECK-NEXT: clrldi r3, r3, 56 2050; CHECK-NEXT: blr 2051entry: 2052 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2053 %0 = load atomic i64, ptr %add.ptr monotonic, align 8 2054 %conv = trunc i64 %0 to i8 2055 ret i8 %conv 2056} 2057 2058; Function Attrs: nofree norecurse nounwind uwtable willreturn 2059define dso_local zeroext i8 @ld_align32_uint8_t_uint64_t(ptr nocapture readonly %ptr) { 2060; CHECK-P10-LABEL: ld_align32_uint8_t_uint64_t: 2061; CHECK-P10: # %bb.0: # %entry 2062; CHECK-P10-NEXT: pld r3, 99999000(r3), 0 2063; CHECK-P10-NEXT: clrldi r3, r3, 56 2064; CHECK-P10-NEXT: blr 2065; 2066; CHECK-PREP10-LABEL: ld_align32_uint8_t_uint64_t: 2067; CHECK-PREP10: # %bb.0: # %entry 2068; CHECK-PREP10-NEXT: lis r4, 1525 2069; CHECK-PREP10-NEXT: ori r4, r4, 56600 2070; CHECK-PREP10-NEXT: ldx r3, r3, r4 2071; CHECK-PREP10-NEXT: clrldi r3, r3, 56 2072; CHECK-PREP10-NEXT: blr 2073entry: 2074 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2075 %0 = load atomic i64, ptr %add.ptr monotonic, align 8 2076 %conv = trunc i64 %0 to i8 2077 ret i8 %conv 2078} 2079 2080; Function Attrs: nofree norecurse nounwind uwtable willreturn 2081define dso_local zeroext i8 @ld_align64_uint8_t_uint64_t(ptr nocapture readonly %ptr) { 2082; CHECK-P10-LABEL: ld_align64_uint8_t_uint64_t: 2083; CHECK-P10: # %bb.0: # %entry 2084; CHECK-P10-NEXT: pli r4, 244140625 2085; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2086; CHECK-P10-NEXT: ldx r3, r3, r4 2087; CHECK-P10-NEXT: clrldi r3, r3, 56 2088; CHECK-P10-NEXT: blr 2089; 2090; CHECK-PREP10-LABEL: ld_align64_uint8_t_uint64_t: 2091; CHECK-PREP10: # %bb.0: # %entry 2092; CHECK-PREP10-NEXT: lis r4, 3725 2093; CHECK-PREP10-NEXT: ori r4, r4, 19025 2094; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2095; CHECK-PREP10-NEXT: ldx r3, r3, r4 2096; CHECK-PREP10-NEXT: clrldi r3, r3, 56 2097; CHECK-PREP10-NEXT: blr 2098entry: 2099 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2100 %0 = load atomic i64, ptr %add.ptr monotonic, align 8 2101 %conv = trunc i64 %0 to i8 2102 ret i8 %conv 2103} 2104 2105; Function Attrs: nofree norecurse nounwind uwtable willreturn 2106define dso_local zeroext i8 @ld_reg_uint8_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) { 2107; CHECK-LABEL: ld_reg_uint8_t_uint64_t: 2108; CHECK: # %bb.0: # %entry 2109; CHECK-NEXT: ldx r3, r3, r4 2110; CHECK-NEXT: clrldi r3, r3, 56 2111; CHECK-NEXT: blr 2112entry: 2113 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2114 %0 = load atomic i64, ptr %add.ptr monotonic, align 8 2115 %conv = trunc i64 %0 to i8 2116 ret i8 %conv 2117} 2118 2119; Function Attrs: nofree norecurse nounwind uwtable willreturn 2120define dso_local zeroext i8 @ld_or_uint8_t_uint64_t(i64 %ptr, i8 zeroext %off) { 2121; CHECK-LABEL: ld_or_uint8_t_uint64_t: 2122; CHECK: # %bb.0: # %entry 2123; CHECK-NEXT: or r3, r4, r3 2124; CHECK-NEXT: ld r3, 0(r3) 2125; CHECK-NEXT: clrldi r3, r3, 56 2126; CHECK-NEXT: blr 2127entry: 2128 %conv = zext i8 %off to i64 2129 %or = or i64 %conv, %ptr 2130 %0 = inttoptr i64 %or to ptr 2131 %1 = load atomic i64, ptr %0 monotonic, align 8 2132 %conv1 = trunc i64 %1 to i8 2133 ret i8 %conv1 2134} 2135 2136; Function Attrs: nofree norecurse nounwind uwtable willreturn 2137define dso_local zeroext i8 @ld_not_disjoint16_uint8_t_uint64_t(i64 %ptr) { 2138; CHECK-LABEL: ld_not_disjoint16_uint8_t_uint64_t: 2139; CHECK: # %bb.0: # %entry 2140; CHECK-NEXT: ori r3, r3, 6 2141; CHECK-NEXT: ld r3, 0(r3) 2142; CHECK-NEXT: clrldi r3, r3, 56 2143; CHECK-NEXT: blr 2144entry: 2145 %or = or i64 %ptr, 6 2146 %0 = inttoptr i64 %or to ptr 2147 %1 = load atomic i64, ptr %0 monotonic, align 8 2148 %conv = trunc i64 %1 to i8 2149 ret i8 %conv 2150} 2151 2152; Function Attrs: nofree norecurse nounwind uwtable willreturn 2153define dso_local zeroext i8 @ld_disjoint_align16_uint8_t_uint64_t(i64 %ptr) { 2154; CHECK-LABEL: ld_disjoint_align16_uint8_t_uint64_t: 2155; CHECK: # %bb.0: # %entry 2156; CHECK-NEXT: rldicr r3, r3, 0, 51 2157; CHECK-NEXT: ld r3, 24(r3) 2158; CHECK-NEXT: clrldi r3, r3, 56 2159; CHECK-NEXT: blr 2160entry: 2161 %and = and i64 %ptr, -4096 2162 %or = or i64 %and, 24 2163 %0 = inttoptr i64 %or to ptr 2164 %1 = load atomic i64, ptr %0 monotonic, align 8 2165 %conv = trunc i64 %1 to i8 2166 ret i8 %conv 2167} 2168 2169; Function Attrs: nofree norecurse nounwind uwtable willreturn 2170define dso_local zeroext i8 @ld_not_disjoint32_uint8_t_uint64_t(i64 %ptr) { 2171; CHECK-LABEL: ld_not_disjoint32_uint8_t_uint64_t: 2172; CHECK: # %bb.0: # %entry 2173; CHECK-NEXT: ori r3, r3, 34463 2174; CHECK-NEXT: oris r3, r3, 1 2175; CHECK-NEXT: ld r3, 0(r3) 2176; CHECK-NEXT: clrldi r3, r3, 56 2177; CHECK-NEXT: blr 2178entry: 2179 %or = or i64 %ptr, 99999 2180 %0 = inttoptr i64 %or to ptr 2181 %1 = load atomic i64, ptr %0 monotonic, align 8 2182 %conv = trunc i64 %1 to i8 2183 ret i8 %conv 2184} 2185 2186; Function Attrs: nofree norecurse nounwind uwtable willreturn 2187define dso_local zeroext i8 @ld_disjoint_align32_uint8_t_uint64_t(i64 %ptr) { 2188; CHECK-P10-LABEL: ld_disjoint_align32_uint8_t_uint64_t: 2189; CHECK-P10: # %bb.0: # %entry 2190; CHECK-P10-NEXT: lis r4, -15264 2191; CHECK-P10-NEXT: and r3, r3, r4 2192; CHECK-P10-NEXT: pld r3, 999990000(r3), 0 2193; CHECK-P10-NEXT: clrldi r3, r3, 56 2194; CHECK-P10-NEXT: blr 2195; 2196; CHECK-PREP10-LABEL: ld_disjoint_align32_uint8_t_uint64_t: 2197; CHECK-PREP10: # %bb.0: # %entry 2198; CHECK-PREP10-NEXT: lis r4, -15264 2199; CHECK-PREP10-NEXT: and r3, r3, r4 2200; CHECK-PREP10-NEXT: lis r4, 15258 2201; CHECK-PREP10-NEXT: ori r4, r4, 41712 2202; CHECK-PREP10-NEXT: ldx r3, r3, r4 2203; CHECK-PREP10-NEXT: clrldi r3, r3, 56 2204; CHECK-PREP10-NEXT: blr 2205entry: 2206 %and = and i64 %ptr, -1000341504 2207 %or = or i64 %and, 999990000 2208 %0 = inttoptr i64 %or to ptr 2209 %1 = load atomic i64, ptr %0 monotonic, align 16 2210 %conv = trunc i64 %1 to i8 2211 ret i8 %conv 2212} 2213 2214; Function Attrs: nofree norecurse nounwind uwtable willreturn 2215define dso_local zeroext i8 @ld_not_disjoint64_uint8_t_uint64_t(i64 %ptr) { 2216; CHECK-P10-LABEL: ld_not_disjoint64_uint8_t_uint64_t: 2217; CHECK-P10: # %bb.0: # %entry 2218; CHECK-P10-NEXT: pli r4, 232 2219; CHECK-P10-NEXT: pli r5, 3567587329 2220; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2221; CHECK-P10-NEXT: or r3, r3, r5 2222; CHECK-P10-NEXT: ld r3, 0(r3) 2223; CHECK-P10-NEXT: clrldi r3, r3, 56 2224; CHECK-P10-NEXT: blr 2225; 2226; CHECK-PREP10-LABEL: ld_not_disjoint64_uint8_t_uint64_t: 2227; CHECK-PREP10: # %bb.0: # %entry 2228; CHECK-PREP10-NEXT: li r4, 29 2229; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2230; CHECK-PREP10-NEXT: oris r4, r4, 54437 2231; CHECK-PREP10-NEXT: ori r4, r4, 4097 2232; CHECK-PREP10-NEXT: or r3, r3, r4 2233; CHECK-PREP10-NEXT: ld r3, 0(r3) 2234; CHECK-PREP10-NEXT: clrldi r3, r3, 56 2235; CHECK-PREP10-NEXT: blr 2236entry: 2237 %or = or i64 %ptr, 1000000000001 2238 %0 = inttoptr i64 %or to ptr 2239 %1 = load atomic i64, ptr %0 monotonic, align 8 2240 %conv = trunc i64 %1 to i8 2241 ret i8 %conv 2242} 2243 2244; Function Attrs: nofree norecurse nounwind uwtable willreturn 2245define dso_local zeroext i8 @ld_disjoint_align64_uint8_t_uint64_t(i64 %ptr) { 2246; CHECK-P10-LABEL: ld_disjoint_align64_uint8_t_uint64_t: 2247; CHECK-P10: # %bb.0: # %entry 2248; CHECK-P10-NEXT: pli r4, 244140625 2249; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2250; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2251; CHECK-P10-NEXT: ldx r3, r3, r4 2252; CHECK-P10-NEXT: clrldi r3, r3, 56 2253; CHECK-P10-NEXT: blr 2254; 2255; CHECK-PREP10-LABEL: ld_disjoint_align64_uint8_t_uint64_t: 2256; CHECK-PREP10: # %bb.0: # %entry 2257; CHECK-PREP10-NEXT: lis r4, 3725 2258; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2259; CHECK-PREP10-NEXT: ori r4, r4, 19025 2260; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2261; CHECK-PREP10-NEXT: ldx r3, r3, r4 2262; CHECK-PREP10-NEXT: clrldi r3, r3, 56 2263; CHECK-PREP10-NEXT: blr 2264entry: 2265 %and = and i64 %ptr, -1099511627776 2266 %or = or i64 %and, 1000000000000 2267 %0 = inttoptr i64 %or to ptr 2268 %1 = load atomic i64, ptr %0 monotonic, align 4096 2269 %conv = trunc i64 %1 to i8 2270 ret i8 %conv 2271} 2272 2273; Function Attrs: nofree norecurse nounwind uwtable willreturn 2274define dso_local zeroext i8 @ld_cst_align16_uint8_t_uint64_t() { 2275; CHECK-LABEL: ld_cst_align16_uint8_t_uint64_t: 2276; CHECK: # %bb.0: # %entry 2277; CHECK-NEXT: ld r3, 4080(0) 2278; CHECK-NEXT: clrldi r3, r3, 56 2279; CHECK-NEXT: blr 2280entry: 2281 %0 = load atomic i64, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 2282 %conv = trunc i64 %0 to i8 2283 ret i8 %conv 2284} 2285 2286; Function Attrs: nofree norecurse nounwind uwtable willreturn 2287define dso_local zeroext i8 @ld_cst_align32_uint8_t_uint64_t() { 2288; CHECK-LABEL: ld_cst_align32_uint8_t_uint64_t: 2289; CHECK: # %bb.0: # %entry 2290; CHECK-NEXT: lis r3, 153 2291; CHECK-NEXT: ld r3, -27108(r3) 2292; CHECK-NEXT: clrldi r3, r3, 56 2293; CHECK-NEXT: blr 2294entry: 2295 %0 = load atomic i64, ptr inttoptr (i64 9999900 to ptr) monotonic, align 8 2296 %conv = trunc i64 %0 to i8 2297 ret i8 %conv 2298} 2299 2300; Function Attrs: nofree norecurse nounwind uwtable willreturn 2301define dso_local zeroext i8 @ld_cst_align64_uint8_t_uint64_t() { 2302; CHECK-P10-LABEL: ld_cst_align64_uint8_t_uint64_t: 2303; CHECK-P10: # %bb.0: # %entry 2304; CHECK-P10-NEXT: pli r3, 244140625 2305; CHECK-P10-NEXT: rldic r3, r3, 12, 24 2306; CHECK-P10-NEXT: ld r3, 0(r3) 2307; CHECK-P10-NEXT: clrldi r3, r3, 56 2308; CHECK-P10-NEXT: blr 2309; 2310; CHECK-PREP10-LABEL: ld_cst_align64_uint8_t_uint64_t: 2311; CHECK-PREP10: # %bb.0: # %entry 2312; CHECK-PREP10-NEXT: lis r3, 3725 2313; CHECK-PREP10-NEXT: ori r3, r3, 19025 2314; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 2315; CHECK-PREP10-NEXT: ld r3, 0(r3) 2316; CHECK-PREP10-NEXT: clrldi r3, r3, 56 2317; CHECK-PREP10-NEXT: blr 2318entry: 2319 %0 = load atomic i64, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 2320 %conv = trunc i64 %0 to i8 2321 ret i8 %conv 2322} 2323 2324; Function Attrs: nofree norecurse nounwind uwtable willreturn 2325define dso_local void @st_0_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 2326; CHECK-LABEL: st_0_uint8_t_uint8_t: 2327; CHECK: # %bb.0: # %entry 2328; CHECK-NEXT: stb r4, 0(r3) 2329; CHECK-NEXT: blr 2330entry: 2331 %0 = inttoptr i64 %ptr to ptr 2332 store atomic i8 %str, ptr %0 monotonic, align 1 2333 ret void 2334} 2335 2336; Function Attrs: nofree norecurse nounwind uwtable willreturn 2337define dso_local void @st_align16_uint8_t_uint8_t(ptr nocapture %ptr, i8 zeroext %str) { 2338; CHECK-LABEL: st_align16_uint8_t_uint8_t: 2339; CHECK: # %bb.0: # %entry 2340; CHECK-NEXT: stb r4, 8(r3) 2341; CHECK-NEXT: blr 2342entry: 2343 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2344 store atomic i8 %str, ptr %add.ptr monotonic, align 1 2345 ret void 2346} 2347 2348; Function Attrs: nofree norecurse nounwind uwtable willreturn 2349define dso_local void @st_align32_uint8_t_uint8_t(ptr nocapture %ptr, i8 zeroext %str) { 2350; CHECK-P10-LABEL: st_align32_uint8_t_uint8_t: 2351; CHECK-P10: # %bb.0: # %entry 2352; CHECK-P10-NEXT: pstb r4, 99999000(r3), 0 2353; CHECK-P10-NEXT: blr 2354; 2355; CHECK-PREP10-LABEL: st_align32_uint8_t_uint8_t: 2356; CHECK-PREP10: # %bb.0: # %entry 2357; CHECK-PREP10-NEXT: lis r5, 1525 2358; CHECK-PREP10-NEXT: ori r5, r5, 56600 2359; CHECK-PREP10-NEXT: stbx r4, r3, r5 2360; CHECK-PREP10-NEXT: blr 2361entry: 2362 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2363 store atomic i8 %str, ptr %add.ptr monotonic, align 1 2364 ret void 2365} 2366 2367; Function Attrs: nofree norecurse nounwind uwtable willreturn 2368define dso_local void @st_align64_uint8_t_uint8_t(ptr nocapture %ptr, i8 zeroext %str) { 2369; CHECK-P10-LABEL: st_align64_uint8_t_uint8_t: 2370; CHECK-P10: # %bb.0: # %entry 2371; CHECK-P10-NEXT: pli r5, 244140625 2372; CHECK-P10-NEXT: rldic r5, r5, 12, 24 2373; CHECK-P10-NEXT: stbx r4, r3, r5 2374; CHECK-P10-NEXT: blr 2375; 2376; CHECK-PREP10-LABEL: st_align64_uint8_t_uint8_t: 2377; CHECK-PREP10: # %bb.0: # %entry 2378; CHECK-PREP10-NEXT: lis r5, 3725 2379; CHECK-PREP10-NEXT: ori r5, r5, 19025 2380; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 2381; CHECK-PREP10-NEXT: stbx r4, r3, r5 2382; CHECK-PREP10-NEXT: blr 2383entry: 2384 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2385 store atomic i8 %str, ptr %add.ptr monotonic, align 1 2386 ret void 2387} 2388 2389; Function Attrs: nofree norecurse nounwind uwtable willreturn 2390define dso_local void @st_reg_uint8_t_uint8_t(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 2391; CHECK-LABEL: st_reg_uint8_t_uint8_t: 2392; CHECK: # %bb.0: # %entry 2393; CHECK-NEXT: stbx r5, r3, r4 2394; CHECK-NEXT: blr 2395entry: 2396 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2397 store atomic i8 %str, ptr %add.ptr monotonic, align 1 2398 ret void 2399} 2400 2401; Function Attrs: nofree norecurse nounwind uwtable willreturn 2402define dso_local void @st_or1_uint8_t_uint8_t(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 2403; CHECK-LABEL: st_or1_uint8_t_uint8_t: 2404; CHECK: # %bb.0: # %entry 2405; CHECK-NEXT: or r3, r4, r3 2406; CHECK-NEXT: stb r5, 0(r3) 2407; CHECK-NEXT: blr 2408entry: 2409 %conv = zext i8 %off to i64 2410 %or = or i64 %conv, %ptr 2411 %0 = inttoptr i64 %or to ptr 2412 store atomic i8 %str, ptr %0 monotonic, align 1 2413 ret void 2414} 2415 2416; Function Attrs: nofree norecurse nounwind uwtable willreturn 2417define dso_local void @st_not_disjoint16_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 2418; CHECK-LABEL: st_not_disjoint16_uint8_t_uint8_t: 2419; CHECK: # %bb.0: # %entry 2420; CHECK-NEXT: ori r3, r3, 6 2421; CHECK-NEXT: stb r4, 0(r3) 2422; CHECK-NEXT: blr 2423entry: 2424 %or = or i64 %ptr, 6 2425 %0 = inttoptr i64 %or to ptr 2426 store atomic i8 %str, ptr %0 monotonic, align 1 2427 ret void 2428} 2429 2430; Function Attrs: nofree norecurse nounwind uwtable willreturn 2431define dso_local void @st_disjoint_align16_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 2432; CHECK-LABEL: st_disjoint_align16_uint8_t_uint8_t: 2433; CHECK: # %bb.0: # %entry 2434; CHECK-NEXT: rldicr r3, r3, 0, 51 2435; CHECK-NEXT: stb r4, 24(r3) 2436; CHECK-NEXT: blr 2437entry: 2438 %and = and i64 %ptr, -4096 2439 %or = or i64 %and, 24 2440 %0 = inttoptr i64 %or to ptr 2441 store atomic i8 %str, ptr %0 monotonic, align 8 2442 ret void 2443} 2444 2445; Function Attrs: nofree norecurse nounwind uwtable willreturn 2446define dso_local void @st_not_disjoint32_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 2447; CHECK-LABEL: st_not_disjoint32_uint8_t_uint8_t: 2448; CHECK: # %bb.0: # %entry 2449; CHECK-NEXT: ori r3, r3, 34463 2450; CHECK-NEXT: oris r3, r3, 1 2451; CHECK-NEXT: stb r4, 0(r3) 2452; CHECK-NEXT: blr 2453entry: 2454 %or = or i64 %ptr, 99999 2455 %0 = inttoptr i64 %or to ptr 2456 store atomic i8 %str, ptr %0 monotonic, align 1 2457 ret void 2458} 2459 2460; Function Attrs: nofree norecurse nounwind uwtable willreturn 2461define dso_local void @st_disjoint_align32_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 2462; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_uint8_t: 2463; CHECK-P10: # %bb.0: # %entry 2464; CHECK-P10-NEXT: lis r5, -15264 2465; CHECK-P10-NEXT: and r3, r3, r5 2466; CHECK-P10-NEXT: pstb r4, 999990000(r3), 0 2467; CHECK-P10-NEXT: blr 2468; 2469; CHECK-PREP10-LABEL: st_disjoint_align32_uint8_t_uint8_t: 2470; CHECK-PREP10: # %bb.0: # %entry 2471; CHECK-PREP10-NEXT: lis r5, -15264 2472; CHECK-PREP10-NEXT: and r3, r3, r5 2473; CHECK-PREP10-NEXT: lis r5, 15258 2474; CHECK-PREP10-NEXT: ori r5, r5, 41712 2475; CHECK-PREP10-NEXT: stbx r4, r3, r5 2476; CHECK-PREP10-NEXT: blr 2477entry: 2478 %and = and i64 %ptr, -1000341504 2479 %or = or i64 %and, 999990000 2480 %0 = inttoptr i64 %or to ptr 2481 store atomic i8 %str, ptr %0 monotonic, align 16 2482 ret void 2483} 2484 2485; Function Attrs: nofree norecurse nounwind uwtable willreturn 2486define dso_local void @st_not_disjoint64_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 2487; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_uint8_t: 2488; CHECK-P10: # %bb.0: # %entry 2489; CHECK-P10-NEXT: pli r5, 232 2490; CHECK-P10-NEXT: pli r6, 3567587329 2491; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 2492; CHECK-P10-NEXT: or r3, r3, r6 2493; CHECK-P10-NEXT: stb r4, 0(r3) 2494; CHECK-P10-NEXT: blr 2495; 2496; CHECK-PREP10-LABEL: st_not_disjoint64_uint8_t_uint8_t: 2497; CHECK-PREP10: # %bb.0: # %entry 2498; CHECK-PREP10-NEXT: li r5, 29 2499; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 2500; CHECK-PREP10-NEXT: oris r5, r5, 54437 2501; CHECK-PREP10-NEXT: ori r5, r5, 4097 2502; CHECK-PREP10-NEXT: or r3, r3, r5 2503; CHECK-PREP10-NEXT: stb r4, 0(r3) 2504; CHECK-PREP10-NEXT: blr 2505entry: 2506 %or = or i64 %ptr, 1000000000001 2507 %0 = inttoptr i64 %or to ptr 2508 store atomic i8 %str, ptr %0 monotonic, align 1 2509 ret void 2510} 2511 2512; Function Attrs: nofree norecurse nounwind uwtable willreturn 2513define dso_local void @st_disjoint_align64_uint8_t_uint8_t(i64 %ptr, i8 zeroext %str) { 2514; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_uint8_t: 2515; CHECK-P10: # %bb.0: # %entry 2516; CHECK-P10-NEXT: pli r5, 244140625 2517; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2518; CHECK-P10-NEXT: rldic r5, r5, 12, 24 2519; CHECK-P10-NEXT: stbx r4, r3, r5 2520; CHECK-P10-NEXT: blr 2521; 2522; CHECK-PREP10-LABEL: st_disjoint_align64_uint8_t_uint8_t: 2523; CHECK-PREP10: # %bb.0: # %entry 2524; CHECK-PREP10-NEXT: lis r5, 3725 2525; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2526; CHECK-PREP10-NEXT: ori r5, r5, 19025 2527; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 2528; CHECK-PREP10-NEXT: stbx r4, r3, r5 2529; CHECK-PREP10-NEXT: blr 2530entry: 2531 %and = and i64 %ptr, -1099511627776 2532 %or = or i64 %and, 1000000000000 2533 %0 = inttoptr i64 %or to ptr 2534 store atomic i8 %str, ptr %0 monotonic, align 4096 2535 ret void 2536} 2537 2538; Function Attrs: nofree norecurse nounwind uwtable willreturn 2539define dso_local void @st_cst_align16_uint8_t_uint8_t(i8 zeroext %str) { 2540; CHECK-LABEL: st_cst_align16_uint8_t_uint8_t: 2541; CHECK: # %bb.0: # %entry 2542; CHECK-NEXT: stb r3, 4080(0) 2543; CHECK-NEXT: blr 2544entry: 2545 store atomic i8 %str, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 2546 ret void 2547} 2548 2549; Function Attrs: nofree norecurse nounwind uwtable willreturn 2550define dso_local void @st_cst_align32_uint8_t_uint8_t(i8 zeroext %str) { 2551; CHECK-LABEL: st_cst_align32_uint8_t_uint8_t: 2552; CHECK: # %bb.0: # %entry 2553; CHECK-NEXT: lis r4, 153 2554; CHECK-NEXT: stb r3, -27108(r4) 2555; CHECK-NEXT: blr 2556entry: 2557 store atomic i8 %str, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 2558 ret void 2559} 2560 2561; Function Attrs: nofree norecurse nounwind uwtable willreturn 2562define dso_local void @st_cst_align64_uint8_t_uint8_t(i8 zeroext %str) { 2563; CHECK-P10-LABEL: st_cst_align64_uint8_t_uint8_t: 2564; CHECK-P10: # %bb.0: # %entry 2565; CHECK-P10-NEXT: pli r4, 244140625 2566; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2567; CHECK-P10-NEXT: stb r3, 0(r4) 2568; CHECK-P10-NEXT: blr 2569; 2570; CHECK-PREP10-LABEL: st_cst_align64_uint8_t_uint8_t: 2571; CHECK-PREP10: # %bb.0: # %entry 2572; CHECK-PREP10-NEXT: lis r4, 3725 2573; CHECK-PREP10-NEXT: ori r4, r4, 19025 2574; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2575; CHECK-PREP10-NEXT: stb r3, 0(r4) 2576; CHECK-PREP10-NEXT: blr 2577entry: 2578 store atomic i8 %str, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 2579 ret void 2580} 2581 2582; Function Attrs: nofree norecurse nounwind uwtable willreturn 2583define dso_local void @st_0_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 2584; CHECK-LABEL: st_0_uint8_t_uint16_t: 2585; CHECK: # %bb.0: # %entry 2586; CHECK-NEXT: sth r4, 0(r3) 2587; CHECK-NEXT: blr 2588entry: 2589 %0 = inttoptr i64 %ptr to ptr 2590 %conv = zext i8 %str to i16 2591 store atomic i16 %conv, ptr %0 monotonic, align 2 2592 ret void 2593} 2594 2595; Function Attrs: nofree norecurse nounwind uwtable willreturn 2596define dso_local void @st_align16_uint8_t_uint16_t(ptr nocapture %ptr, i8 zeroext %str) { 2597; CHECK-LABEL: st_align16_uint8_t_uint16_t: 2598; CHECK: # %bb.0: # %entry 2599; CHECK-NEXT: sth r4, 8(r3) 2600; CHECK-NEXT: blr 2601entry: 2602 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2603 %conv = zext i8 %str to i16 2604 store atomic i16 %conv, ptr %add.ptr monotonic, align 2 2605 ret void 2606} 2607 2608; Function Attrs: nofree norecurse nounwind uwtable willreturn 2609define dso_local void @st_align32_uint8_t_uint16_t(ptr nocapture %ptr, i8 zeroext %str) { 2610; CHECK-P10-LABEL: st_align32_uint8_t_uint16_t: 2611; CHECK-P10: # %bb.0: # %entry 2612; CHECK-P10-NEXT: psth r4, 99999000(r3), 0 2613; CHECK-P10-NEXT: blr 2614; 2615; CHECK-PREP10-LABEL: st_align32_uint8_t_uint16_t: 2616; CHECK-PREP10: # %bb.0: # %entry 2617; CHECK-PREP10-NEXT: lis r5, 1525 2618; CHECK-PREP10-NEXT: ori r5, r5, 56600 2619; CHECK-PREP10-NEXT: sthx r4, r3, r5 2620; CHECK-PREP10-NEXT: blr 2621entry: 2622 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2623 %conv = zext i8 %str to i16 2624 store atomic i16 %conv, ptr %add.ptr monotonic, align 2 2625 ret void 2626} 2627 2628; Function Attrs: nofree norecurse nounwind uwtable willreturn 2629define dso_local void @st_align64_uint8_t_uint16_t(ptr nocapture %ptr, i8 zeroext %str) { 2630; CHECK-P10-LABEL: st_align64_uint8_t_uint16_t: 2631; CHECK-P10: # %bb.0: # %entry 2632; CHECK-P10-NEXT: pli r5, 244140625 2633; CHECK-P10-NEXT: rldic r5, r5, 12, 24 2634; CHECK-P10-NEXT: sthx r4, r3, r5 2635; CHECK-P10-NEXT: blr 2636; 2637; CHECK-PREP10-LABEL: st_align64_uint8_t_uint16_t: 2638; CHECK-PREP10: # %bb.0: # %entry 2639; CHECK-PREP10-NEXT: lis r5, 3725 2640; CHECK-PREP10-NEXT: ori r5, r5, 19025 2641; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 2642; CHECK-PREP10-NEXT: sthx r4, r3, r5 2643; CHECK-PREP10-NEXT: blr 2644entry: 2645 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2646 %conv = zext i8 %str to i16 2647 store atomic i16 %conv, ptr %add.ptr monotonic, align 2 2648 ret void 2649} 2650 2651; Function Attrs: nofree norecurse nounwind uwtable willreturn 2652define dso_local void @st_reg_uint8_t_uint16_t(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 2653; CHECK-LABEL: st_reg_uint8_t_uint16_t: 2654; CHECK: # %bb.0: # %entry 2655; CHECK-NEXT: sthx r5, r3, r4 2656; CHECK-NEXT: blr 2657entry: 2658 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2659 %conv = zext i8 %str to i16 2660 store atomic i16 %conv, ptr %add.ptr monotonic, align 2 2661 ret void 2662} 2663 2664; Function Attrs: nofree norecurse nounwind uwtable willreturn 2665define dso_local void @st_or1_uint8_t_uint16_t(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 2666; CHECK-LABEL: st_or1_uint8_t_uint16_t: 2667; CHECK: # %bb.0: # %entry 2668; CHECK-NEXT: or r3, r4, r3 2669; CHECK-NEXT: sth r5, 0(r3) 2670; CHECK-NEXT: blr 2671entry: 2672 %conv = zext i8 %off to i64 2673 %or = or i64 %conv, %ptr 2674 %0 = inttoptr i64 %or to ptr 2675 %conv1 = zext i8 %str to i16 2676 store atomic i16 %conv1, ptr %0 monotonic, align 2 2677 ret void 2678} 2679 2680; Function Attrs: nofree norecurse nounwind uwtable willreturn 2681define dso_local void @st_not_disjoint16_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 2682; CHECK-LABEL: st_not_disjoint16_uint8_t_uint16_t: 2683; CHECK: # %bb.0: # %entry 2684; CHECK-NEXT: ori r3, r3, 6 2685; CHECK-NEXT: sth r4, 0(r3) 2686; CHECK-NEXT: blr 2687entry: 2688 %or = or i64 %ptr, 6 2689 %0 = inttoptr i64 %or to ptr 2690 %conv = zext i8 %str to i16 2691 store atomic i16 %conv, ptr %0 monotonic, align 2 2692 ret void 2693} 2694 2695; Function Attrs: nofree norecurse nounwind uwtable willreturn 2696define dso_local void @st_disjoint_align16_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 2697; CHECK-LABEL: st_disjoint_align16_uint8_t_uint16_t: 2698; CHECK: # %bb.0: # %entry 2699; CHECK-NEXT: rldicr r3, r3, 0, 51 2700; CHECK-NEXT: sth r4, 24(r3) 2701; CHECK-NEXT: blr 2702entry: 2703 %and = and i64 %ptr, -4096 2704 %or = or i64 %and, 24 2705 %0 = inttoptr i64 %or to ptr 2706 %conv = zext i8 %str to i16 2707 store atomic i16 %conv, ptr %0 monotonic, align 8 2708 ret void 2709} 2710 2711; Function Attrs: nofree norecurse nounwind uwtable willreturn 2712define dso_local void @st_not_disjoint32_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 2713; CHECK-LABEL: st_not_disjoint32_uint8_t_uint16_t: 2714; CHECK: # %bb.0: # %entry 2715; CHECK-NEXT: ori r3, r3, 34463 2716; CHECK-NEXT: oris r3, r3, 1 2717; CHECK-NEXT: sth r4, 0(r3) 2718; CHECK-NEXT: blr 2719entry: 2720 %or = or i64 %ptr, 99999 2721 %0 = inttoptr i64 %or to ptr 2722 %conv = zext i8 %str to i16 2723 store atomic i16 %conv, ptr %0 monotonic, align 2 2724 ret void 2725} 2726 2727; Function Attrs: nofree norecurse nounwind uwtable willreturn 2728define dso_local void @st_disjoint_align32_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 2729; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_uint16_t: 2730; CHECK-P10: # %bb.0: # %entry 2731; CHECK-P10-NEXT: lis r5, -15264 2732; CHECK-P10-NEXT: and r3, r3, r5 2733; CHECK-P10-NEXT: psth r4, 999990000(r3), 0 2734; CHECK-P10-NEXT: blr 2735; 2736; CHECK-PREP10-LABEL: st_disjoint_align32_uint8_t_uint16_t: 2737; CHECK-PREP10: # %bb.0: # %entry 2738; CHECK-PREP10-NEXT: lis r5, -15264 2739; CHECK-PREP10-NEXT: and r3, r3, r5 2740; CHECK-PREP10-NEXT: lis r5, 15258 2741; CHECK-PREP10-NEXT: ori r5, r5, 41712 2742; CHECK-PREP10-NEXT: sthx r4, r3, r5 2743; CHECK-PREP10-NEXT: blr 2744entry: 2745 %and = and i64 %ptr, -1000341504 2746 %or = or i64 %and, 999990000 2747 %0 = inttoptr i64 %or to ptr 2748 %conv = zext i8 %str to i16 2749 store atomic i16 %conv, ptr %0 monotonic, align 16 2750 ret void 2751} 2752 2753; Function Attrs: nofree norecurse nounwind uwtable willreturn 2754define dso_local void @st_not_disjoint64_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 2755; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_uint16_t: 2756; CHECK-P10: # %bb.0: # %entry 2757; CHECK-P10-NEXT: pli r5, 232 2758; CHECK-P10-NEXT: pli r6, 3567587329 2759; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 2760; CHECK-P10-NEXT: or r3, r3, r6 2761; CHECK-P10-NEXT: sth r4, 0(r3) 2762; CHECK-P10-NEXT: blr 2763; 2764; CHECK-PREP10-LABEL: st_not_disjoint64_uint8_t_uint16_t: 2765; CHECK-PREP10: # %bb.0: # %entry 2766; CHECK-PREP10-NEXT: li r5, 29 2767; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 2768; CHECK-PREP10-NEXT: oris r5, r5, 54437 2769; CHECK-PREP10-NEXT: ori r5, r5, 4097 2770; CHECK-PREP10-NEXT: or r3, r3, r5 2771; CHECK-PREP10-NEXT: sth r4, 0(r3) 2772; CHECK-PREP10-NEXT: blr 2773entry: 2774 %or = or i64 %ptr, 1000000000001 2775 %0 = inttoptr i64 %or to ptr 2776 %conv = zext i8 %str to i16 2777 store atomic i16 %conv, ptr %0 monotonic, align 2 2778 ret void 2779} 2780 2781; Function Attrs: nofree norecurse nounwind uwtable willreturn 2782define dso_local void @st_disjoint_align64_uint8_t_uint16_t(i64 %ptr, i8 zeroext %str) { 2783; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_uint16_t: 2784; CHECK-P10: # %bb.0: # %entry 2785; CHECK-P10-NEXT: pli r5, 244140625 2786; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2787; CHECK-P10-NEXT: rldic r5, r5, 12, 24 2788; CHECK-P10-NEXT: sthx r4, r3, r5 2789; CHECK-P10-NEXT: blr 2790; 2791; CHECK-PREP10-LABEL: st_disjoint_align64_uint8_t_uint16_t: 2792; CHECK-PREP10: # %bb.0: # %entry 2793; CHECK-PREP10-NEXT: lis r5, 3725 2794; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2795; CHECK-PREP10-NEXT: ori r5, r5, 19025 2796; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 2797; CHECK-PREP10-NEXT: sthx r4, r3, r5 2798; CHECK-PREP10-NEXT: blr 2799entry: 2800 %and = and i64 %ptr, -1099511627776 2801 %or = or i64 %and, 1000000000000 2802 %0 = inttoptr i64 %or to ptr 2803 %conv = zext i8 %str to i16 2804 store atomic i16 %conv, ptr %0 monotonic, align 4096 2805 ret void 2806} 2807 2808; Function Attrs: nofree norecurse nounwind uwtable willreturn 2809define dso_local void @st_cst_align16_uint8_t_uint16_t(i8 zeroext %str) { 2810; CHECK-LABEL: st_cst_align16_uint8_t_uint16_t: 2811; CHECK: # %bb.0: # %entry 2812; CHECK-NEXT: sth r3, 4080(0) 2813; CHECK-NEXT: blr 2814entry: 2815 %conv = zext i8 %str to i16 2816 store atomic i16 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 2817 ret void 2818} 2819 2820; Function Attrs: nofree norecurse nounwind uwtable willreturn 2821define dso_local void @st_cst_align32_uint8_t_uint16_t(i8 zeroext %str) { 2822; CHECK-LABEL: st_cst_align32_uint8_t_uint16_t: 2823; CHECK: # %bb.0: # %entry 2824; CHECK-NEXT: lis r4, 153 2825; CHECK-NEXT: sth r3, -27108(r4) 2826; CHECK-NEXT: blr 2827entry: 2828 %conv = zext i8 %str to i16 2829 store atomic i16 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 2830 ret void 2831} 2832 2833; Function Attrs: nofree norecurse nounwind uwtable willreturn 2834define dso_local void @st_cst_align64_uint8_t_uint16_t(i8 zeroext %str) { 2835; CHECK-P10-LABEL: st_cst_align64_uint8_t_uint16_t: 2836; CHECK-P10: # %bb.0: # %entry 2837; CHECK-P10-NEXT: pli r4, 244140625 2838; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2839; CHECK-P10-NEXT: sth r3, 0(r4) 2840; CHECK-P10-NEXT: blr 2841; 2842; CHECK-PREP10-LABEL: st_cst_align64_uint8_t_uint16_t: 2843; CHECK-PREP10: # %bb.0: # %entry 2844; CHECK-PREP10-NEXT: lis r4, 3725 2845; CHECK-PREP10-NEXT: ori r4, r4, 19025 2846; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2847; CHECK-PREP10-NEXT: sth r3, 0(r4) 2848; CHECK-PREP10-NEXT: blr 2849entry: 2850 %conv = zext i8 %str to i16 2851 store atomic i16 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 2852 ret void 2853} 2854 2855; Function Attrs: nofree norecurse nounwind uwtable willreturn 2856define dso_local void @st_0_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 2857; CHECK-LABEL: st_0_uint8_t_uint32_t: 2858; CHECK: # %bb.0: # %entry 2859; CHECK-NEXT: stw r4, 0(r3) 2860; CHECK-NEXT: blr 2861entry: 2862 %0 = inttoptr i64 %ptr to ptr 2863 %conv = zext i8 %str to i32 2864 store atomic i32 %conv, ptr %0 monotonic, align 4 2865 ret void 2866} 2867 2868; Function Attrs: nofree norecurse nounwind uwtable willreturn 2869define dso_local void @st_align16_uint8_t_uint32_t(ptr nocapture %ptr, i8 zeroext %str) { 2870; CHECK-LABEL: st_align16_uint8_t_uint32_t: 2871; CHECK: # %bb.0: # %entry 2872; CHECK-NEXT: stw r4, 8(r3) 2873; CHECK-NEXT: blr 2874entry: 2875 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2876 %conv = zext i8 %str to i32 2877 store atomic i32 %conv, ptr %add.ptr monotonic, align 4 2878 ret void 2879} 2880 2881; Function Attrs: nofree norecurse nounwind uwtable willreturn 2882define dso_local void @st_align32_uint8_t_uint32_t(ptr nocapture %ptr, i8 zeroext %str) { 2883; CHECK-P10-LABEL: st_align32_uint8_t_uint32_t: 2884; CHECK-P10: # %bb.0: # %entry 2885; CHECK-P10-NEXT: pstw r4, 99999000(r3), 0 2886; CHECK-P10-NEXT: blr 2887; 2888; CHECK-PREP10-LABEL: st_align32_uint8_t_uint32_t: 2889; CHECK-PREP10: # %bb.0: # %entry 2890; CHECK-PREP10-NEXT: lis r5, 1525 2891; CHECK-PREP10-NEXT: ori r5, r5, 56600 2892; CHECK-PREP10-NEXT: stwx r4, r3, r5 2893; CHECK-PREP10-NEXT: blr 2894entry: 2895 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2896 %conv = zext i8 %str to i32 2897 store atomic i32 %conv, ptr %add.ptr monotonic, align 4 2898 ret void 2899} 2900 2901; Function Attrs: nofree norecurse nounwind uwtable willreturn 2902define dso_local void @st_align64_uint8_t_uint32_t(ptr nocapture %ptr, i8 zeroext %str) { 2903; CHECK-P10-LABEL: st_align64_uint8_t_uint32_t: 2904; CHECK-P10: # %bb.0: # %entry 2905; CHECK-P10-NEXT: pli r5, 244140625 2906; CHECK-P10-NEXT: rldic r5, r5, 12, 24 2907; CHECK-P10-NEXT: stwx r4, r3, r5 2908; CHECK-P10-NEXT: blr 2909; 2910; CHECK-PREP10-LABEL: st_align64_uint8_t_uint32_t: 2911; CHECK-PREP10: # %bb.0: # %entry 2912; CHECK-PREP10-NEXT: lis r5, 3725 2913; CHECK-PREP10-NEXT: ori r5, r5, 19025 2914; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 2915; CHECK-PREP10-NEXT: stwx r4, r3, r5 2916; CHECK-PREP10-NEXT: blr 2917entry: 2918 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2919 %conv = zext i8 %str to i32 2920 store atomic i32 %conv, ptr %add.ptr monotonic, align 4 2921 ret void 2922} 2923 2924; Function Attrs: nofree norecurse nounwind uwtable willreturn 2925define dso_local void @st_reg_uint8_t_uint32_t(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 2926; CHECK-LABEL: st_reg_uint8_t_uint32_t: 2927; CHECK: # %bb.0: # %entry 2928; CHECK-NEXT: stwx r5, r3, r4 2929; CHECK-NEXT: blr 2930entry: 2931 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2932 %conv = zext i8 %str to i32 2933 store atomic i32 %conv, ptr %add.ptr monotonic, align 4 2934 ret void 2935} 2936 2937; Function Attrs: nofree norecurse nounwind uwtable willreturn 2938define dso_local void @st_or1_uint8_t_uint32_t(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 2939; CHECK-LABEL: st_or1_uint8_t_uint32_t: 2940; CHECK: # %bb.0: # %entry 2941; CHECK-NEXT: or r3, r4, r3 2942; CHECK-NEXT: stw r5, 0(r3) 2943; CHECK-NEXT: blr 2944entry: 2945 %conv = zext i8 %off to i64 2946 %or = or i64 %conv, %ptr 2947 %0 = inttoptr i64 %or to ptr 2948 %conv1 = zext i8 %str to i32 2949 store atomic i32 %conv1, ptr %0 monotonic, align 4 2950 ret void 2951} 2952 2953; Function Attrs: nofree norecurse nounwind uwtable willreturn 2954define dso_local void @st_not_disjoint16_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 2955; CHECK-LABEL: st_not_disjoint16_uint8_t_uint32_t: 2956; CHECK: # %bb.0: # %entry 2957; CHECK-NEXT: ori r3, r3, 6 2958; CHECK-NEXT: stw r4, 0(r3) 2959; CHECK-NEXT: blr 2960entry: 2961 %or = or i64 %ptr, 6 2962 %0 = inttoptr i64 %or to ptr 2963 %conv = zext i8 %str to i32 2964 store atomic i32 %conv, ptr %0 monotonic, align 4 2965 ret void 2966} 2967 2968; Function Attrs: nofree norecurse nounwind uwtable willreturn 2969define dso_local void @st_disjoint_align16_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 2970; CHECK-LABEL: st_disjoint_align16_uint8_t_uint32_t: 2971; CHECK: # %bb.0: # %entry 2972; CHECK-NEXT: rldicr r3, r3, 0, 51 2973; CHECK-NEXT: stw r4, 24(r3) 2974; CHECK-NEXT: blr 2975entry: 2976 %and = and i64 %ptr, -4096 2977 %or = or i64 %and, 24 2978 %0 = inttoptr i64 %or to ptr 2979 %conv = zext i8 %str to i32 2980 store atomic i32 %conv, ptr %0 monotonic, align 8 2981 ret void 2982} 2983 2984; Function Attrs: nofree norecurse nounwind uwtable willreturn 2985define dso_local void @st_not_disjoint32_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 2986; CHECK-LABEL: st_not_disjoint32_uint8_t_uint32_t: 2987; CHECK: # %bb.0: # %entry 2988; CHECK-NEXT: ori r3, r3, 34463 2989; CHECK-NEXT: oris r3, r3, 1 2990; CHECK-NEXT: stw r4, 0(r3) 2991; CHECK-NEXT: blr 2992entry: 2993 %or = or i64 %ptr, 99999 2994 %0 = inttoptr i64 %or to ptr 2995 %conv = zext i8 %str to i32 2996 store atomic i32 %conv, ptr %0 monotonic, align 4 2997 ret void 2998} 2999 3000; Function Attrs: nofree norecurse nounwind uwtable willreturn 3001define dso_local void @st_disjoint_align32_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 3002; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_uint32_t: 3003; CHECK-P10: # %bb.0: # %entry 3004; CHECK-P10-NEXT: lis r5, -15264 3005; CHECK-P10-NEXT: and r3, r3, r5 3006; CHECK-P10-NEXT: pstw r4, 999990000(r3), 0 3007; CHECK-P10-NEXT: blr 3008; 3009; CHECK-PREP10-LABEL: st_disjoint_align32_uint8_t_uint32_t: 3010; CHECK-PREP10: # %bb.0: # %entry 3011; CHECK-PREP10-NEXT: lis r5, -15264 3012; CHECK-PREP10-NEXT: and r3, r3, r5 3013; CHECK-PREP10-NEXT: lis r5, 15258 3014; CHECK-PREP10-NEXT: ori r5, r5, 41712 3015; CHECK-PREP10-NEXT: stwx r4, r3, r5 3016; CHECK-PREP10-NEXT: blr 3017entry: 3018 %and = and i64 %ptr, -1000341504 3019 %or = or i64 %and, 999990000 3020 %0 = inttoptr i64 %or to ptr 3021 %conv = zext i8 %str to i32 3022 store atomic i32 %conv, ptr %0 monotonic, align 16 3023 ret void 3024} 3025 3026; Function Attrs: nofree norecurse nounwind uwtable willreturn 3027define dso_local void @st_not_disjoint64_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 3028; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_uint32_t: 3029; CHECK-P10: # %bb.0: # %entry 3030; CHECK-P10-NEXT: pli r5, 232 3031; CHECK-P10-NEXT: pli r6, 3567587329 3032; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 3033; CHECK-P10-NEXT: or r3, r3, r6 3034; CHECK-P10-NEXT: stw r4, 0(r3) 3035; CHECK-P10-NEXT: blr 3036; 3037; CHECK-PREP10-LABEL: st_not_disjoint64_uint8_t_uint32_t: 3038; CHECK-PREP10: # %bb.0: # %entry 3039; CHECK-PREP10-NEXT: li r5, 29 3040; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 3041; CHECK-PREP10-NEXT: oris r5, r5, 54437 3042; CHECK-PREP10-NEXT: ori r5, r5, 4097 3043; CHECK-PREP10-NEXT: or r3, r3, r5 3044; CHECK-PREP10-NEXT: stw r4, 0(r3) 3045; CHECK-PREP10-NEXT: blr 3046entry: 3047 %or = or i64 %ptr, 1000000000001 3048 %0 = inttoptr i64 %or to ptr 3049 %conv = zext i8 %str to i32 3050 store atomic i32 %conv, ptr %0 monotonic, align 4 3051 ret void 3052} 3053 3054; Function Attrs: nofree norecurse nounwind uwtable willreturn 3055define dso_local void @st_disjoint_align64_uint8_t_uint32_t(i64 %ptr, i8 zeroext %str) { 3056; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_uint32_t: 3057; CHECK-P10: # %bb.0: # %entry 3058; CHECK-P10-NEXT: pli r5, 244140625 3059; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 3060; CHECK-P10-NEXT: rldic r5, r5, 12, 24 3061; CHECK-P10-NEXT: stwx r4, r3, r5 3062; CHECK-P10-NEXT: blr 3063; 3064; CHECK-PREP10-LABEL: st_disjoint_align64_uint8_t_uint32_t: 3065; CHECK-PREP10: # %bb.0: # %entry 3066; CHECK-PREP10-NEXT: lis r5, 3725 3067; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 3068; CHECK-PREP10-NEXT: ori r5, r5, 19025 3069; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 3070; CHECK-PREP10-NEXT: stwx r4, r3, r5 3071; CHECK-PREP10-NEXT: blr 3072entry: 3073 %and = and i64 %ptr, -1099511627776 3074 %or = or i64 %and, 1000000000000 3075 %0 = inttoptr i64 %or to ptr 3076 %conv = zext i8 %str to i32 3077 store atomic i32 %conv, ptr %0 monotonic, align 4096 3078 ret void 3079} 3080 3081; Function Attrs: nofree norecurse nounwind uwtable willreturn 3082define dso_local void @st_cst_align16_uint8_t_uint32_t(i8 zeroext %str) { 3083; CHECK-LABEL: st_cst_align16_uint8_t_uint32_t: 3084; CHECK: # %bb.0: # %entry 3085; CHECK-NEXT: stw r3, 4080(0) 3086; CHECK-NEXT: blr 3087entry: 3088 %conv = zext i8 %str to i32 3089 store atomic i32 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 3090 ret void 3091} 3092 3093; Function Attrs: nofree norecurse nounwind uwtable willreturn 3094define dso_local void @st_cst_align32_uint8_t_uint32_t(i8 zeroext %str) { 3095; CHECK-LABEL: st_cst_align32_uint8_t_uint32_t: 3096; CHECK: # %bb.0: # %entry 3097; CHECK-NEXT: lis r4, 153 3098; CHECK-NEXT: stw r3, -27108(r4) 3099; CHECK-NEXT: blr 3100entry: 3101 %conv = zext i8 %str to i32 3102 store atomic i32 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 3103 ret void 3104} 3105 3106; Function Attrs: nofree norecurse nounwind uwtable willreturn 3107define dso_local void @st_cst_align64_uint8_t_uint32_t(i8 zeroext %str) { 3108; CHECK-P10-LABEL: st_cst_align64_uint8_t_uint32_t: 3109; CHECK-P10: # %bb.0: # %entry 3110; CHECK-P10-NEXT: pli r4, 244140625 3111; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3112; CHECK-P10-NEXT: stw r3, 0(r4) 3113; CHECK-P10-NEXT: blr 3114; 3115; CHECK-PREP10-LABEL: st_cst_align64_uint8_t_uint32_t: 3116; CHECK-PREP10: # %bb.0: # %entry 3117; CHECK-PREP10-NEXT: lis r4, 3725 3118; CHECK-PREP10-NEXT: ori r4, r4, 19025 3119; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3120; CHECK-PREP10-NEXT: stw r3, 0(r4) 3121; CHECK-PREP10-NEXT: blr 3122entry: 3123 %conv = zext i8 %str to i32 3124 store atomic i32 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 3125 ret void 3126} 3127 3128; Function Attrs: nofree norecurse nounwind uwtable willreturn 3129define dso_local void @st_0_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 3130; CHECK-LABEL: st_0_uint8_t_uint64_t: 3131; CHECK: # %bb.0: # %entry 3132; CHECK-NEXT: std r4, 0(r3) 3133; CHECK-NEXT: blr 3134entry: 3135 %0 = inttoptr i64 %ptr to ptr 3136 %conv = zext i8 %str to i64 3137 store atomic i64 %conv, ptr %0 monotonic, align 8 3138 ret void 3139} 3140 3141; Function Attrs: nofree norecurse nounwind uwtable willreturn 3142define dso_local void @st_align16_uint8_t_uint64_t(ptr nocapture %ptr, i8 zeroext %str) { 3143; CHECK-LABEL: st_align16_uint8_t_uint64_t: 3144; CHECK: # %bb.0: # %entry 3145; CHECK-NEXT: std r4, 8(r3) 3146; CHECK-NEXT: blr 3147entry: 3148 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 3149 %conv = zext i8 %str to i64 3150 store atomic i64 %conv, ptr %add.ptr monotonic, align 8 3151 ret void 3152} 3153 3154; Function Attrs: nofree norecurse nounwind uwtable willreturn 3155define dso_local void @st_align32_uint8_t_uint64_t(ptr nocapture %ptr, i8 zeroext %str) { 3156; CHECK-P10-LABEL: st_align32_uint8_t_uint64_t: 3157; CHECK-P10: # %bb.0: # %entry 3158; CHECK-P10-NEXT: pstd r4, 99999000(r3), 0 3159; CHECK-P10-NEXT: blr 3160; 3161; CHECK-PREP10-LABEL: st_align32_uint8_t_uint64_t: 3162; CHECK-PREP10: # %bb.0: # %entry 3163; CHECK-PREP10-NEXT: lis r5, 1525 3164; CHECK-PREP10-NEXT: ori r5, r5, 56600 3165; CHECK-PREP10-NEXT: stdx r4, r3, r5 3166; CHECK-PREP10-NEXT: blr 3167entry: 3168 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 3169 %conv = zext i8 %str to i64 3170 store atomic i64 %conv, ptr %add.ptr monotonic, align 8 3171 ret void 3172} 3173 3174; Function Attrs: nofree norecurse nounwind uwtable willreturn 3175define dso_local void @st_align64_uint8_t_uint64_t(ptr nocapture %ptr, i8 zeroext %str) { 3176; CHECK-P10-LABEL: st_align64_uint8_t_uint64_t: 3177; CHECK-P10: # %bb.0: # %entry 3178; CHECK-P10-NEXT: pli r5, 244140625 3179; CHECK-P10-NEXT: rldic r5, r5, 12, 24 3180; CHECK-P10-NEXT: stdx r4, r3, r5 3181; CHECK-P10-NEXT: blr 3182; 3183; CHECK-PREP10-LABEL: st_align64_uint8_t_uint64_t: 3184; CHECK-PREP10: # %bb.0: # %entry 3185; CHECK-PREP10-NEXT: lis r5, 3725 3186; CHECK-PREP10-NEXT: ori r5, r5, 19025 3187; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 3188; CHECK-PREP10-NEXT: stdx r4, r3, r5 3189; CHECK-PREP10-NEXT: blr 3190entry: 3191 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 3192 %conv = zext i8 %str to i64 3193 store atomic i64 %conv, ptr %add.ptr monotonic, align 8 3194 ret void 3195} 3196 3197; Function Attrs: nofree norecurse nounwind uwtable willreturn 3198define dso_local void @st_reg_uint8_t_uint64_t(ptr nocapture %ptr, i64 %off, i8 zeroext %str) { 3199; CHECK-LABEL: st_reg_uint8_t_uint64_t: 3200; CHECK: # %bb.0: # %entry 3201; CHECK-NEXT: stdx r5, r3, r4 3202; CHECK-NEXT: blr 3203entry: 3204 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 3205 %conv = zext i8 %str to i64 3206 store atomic i64 %conv, ptr %add.ptr monotonic, align 8 3207 ret void 3208} 3209 3210; Function Attrs: nofree norecurse nounwind uwtable willreturn 3211define dso_local void @st_or1_uint8_t_uint64_t(i64 %ptr, i8 zeroext %off, i8 zeroext %str) { 3212; CHECK-LABEL: st_or1_uint8_t_uint64_t: 3213; CHECK: # %bb.0: # %entry 3214; CHECK-NEXT: or r3, r4, r3 3215; CHECK-NEXT: std r5, 0(r3) 3216; CHECK-NEXT: blr 3217entry: 3218 %conv = zext i8 %off to i64 3219 %or = or i64 %conv, %ptr 3220 %0 = inttoptr i64 %or to ptr 3221 %conv1 = zext i8 %str to i64 3222 store atomic i64 %conv1, ptr %0 monotonic, align 8 3223 ret void 3224} 3225 3226; Function Attrs: nofree norecurse nounwind uwtable willreturn 3227define dso_local void @st_not_disjoint16_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 3228; CHECK-LABEL: st_not_disjoint16_uint8_t_uint64_t: 3229; CHECK: # %bb.0: # %entry 3230; CHECK-NEXT: ori r3, r3, 6 3231; CHECK-NEXT: std r4, 0(r3) 3232; CHECK-NEXT: blr 3233entry: 3234 %or = or i64 %ptr, 6 3235 %0 = inttoptr i64 %or to ptr 3236 %conv = zext i8 %str to i64 3237 store atomic i64 %conv, ptr %0 monotonic, align 8 3238 ret void 3239} 3240 3241; Function Attrs: nofree norecurse nounwind uwtable willreturn 3242define dso_local void @st_disjoint_align16_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 3243; CHECK-LABEL: st_disjoint_align16_uint8_t_uint64_t: 3244; CHECK: # %bb.0: # %entry 3245; CHECK-NEXT: rldicr r3, r3, 0, 51 3246; CHECK-NEXT: std r4, 24(r3) 3247; CHECK-NEXT: blr 3248entry: 3249 %and = and i64 %ptr, -4096 3250 %or = or i64 %and, 24 3251 %0 = inttoptr i64 %or to ptr 3252 %conv = zext i8 %str to i64 3253 store atomic i64 %conv, ptr %0 monotonic, align 8 3254 ret void 3255} 3256 3257; Function Attrs: nofree norecurse nounwind uwtable willreturn 3258define dso_local void @st_not_disjoint32_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 3259; CHECK-LABEL: st_not_disjoint32_uint8_t_uint64_t: 3260; CHECK: # %bb.0: # %entry 3261; CHECK-NEXT: ori r3, r3, 34463 3262; CHECK-NEXT: oris r3, r3, 1 3263; CHECK-NEXT: std r4, 0(r3) 3264; CHECK-NEXT: blr 3265entry: 3266 %or = or i64 %ptr, 99999 3267 %0 = inttoptr i64 %or to ptr 3268 %conv = zext i8 %str to i64 3269 store atomic i64 %conv, ptr %0 monotonic, align 8 3270 ret void 3271} 3272 3273; Function Attrs: nofree norecurse nounwind uwtable willreturn 3274define dso_local void @st_disjoint_align32_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 3275; CHECK-P10-LABEL: st_disjoint_align32_uint8_t_uint64_t: 3276; CHECK-P10: # %bb.0: # %entry 3277; CHECK-P10-NEXT: lis r5, -15264 3278; CHECK-P10-NEXT: and r3, r3, r5 3279; CHECK-P10-NEXT: pstd r4, 999990000(r3), 0 3280; CHECK-P10-NEXT: blr 3281; 3282; CHECK-PREP10-LABEL: st_disjoint_align32_uint8_t_uint64_t: 3283; CHECK-PREP10: # %bb.0: # %entry 3284; CHECK-PREP10-NEXT: lis r5, -15264 3285; CHECK-PREP10-NEXT: and r3, r3, r5 3286; CHECK-PREP10-NEXT: lis r5, 15258 3287; CHECK-PREP10-NEXT: ori r5, r5, 41712 3288; CHECK-PREP10-NEXT: stdx r4, r3, r5 3289; CHECK-PREP10-NEXT: blr 3290entry: 3291 %and = and i64 %ptr, -1000341504 3292 %or = or i64 %and, 999990000 3293 %0 = inttoptr i64 %or to ptr 3294 %conv = zext i8 %str to i64 3295 store atomic i64 %conv, ptr %0 monotonic, align 16 3296 ret void 3297} 3298 3299; Function Attrs: nofree norecurse nounwind uwtable willreturn 3300define dso_local void @st_not_disjoint64_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 3301; CHECK-P10-LABEL: st_not_disjoint64_uint8_t_uint64_t: 3302; CHECK-P10: # %bb.0: # %entry 3303; CHECK-P10-NEXT: pli r5, 232 3304; CHECK-P10-NEXT: pli r6, 3567587329 3305; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 3306; CHECK-P10-NEXT: or r3, r3, r6 3307; CHECK-P10-NEXT: std r4, 0(r3) 3308; CHECK-P10-NEXT: blr 3309; 3310; CHECK-PREP10-LABEL: st_not_disjoint64_uint8_t_uint64_t: 3311; CHECK-PREP10: # %bb.0: # %entry 3312; CHECK-PREP10-NEXT: li r5, 29 3313; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 3314; CHECK-PREP10-NEXT: oris r5, r5, 54437 3315; CHECK-PREP10-NEXT: ori r5, r5, 4097 3316; CHECK-PREP10-NEXT: or r3, r3, r5 3317; CHECK-PREP10-NEXT: std r4, 0(r3) 3318; CHECK-PREP10-NEXT: blr 3319entry: 3320 %or = or i64 %ptr, 1000000000001 3321 %0 = inttoptr i64 %or to ptr 3322 %conv = zext i8 %str to i64 3323 store atomic i64 %conv, ptr %0 monotonic, align 8 3324 ret void 3325} 3326 3327; Function Attrs: nofree norecurse nounwind uwtable willreturn 3328define dso_local void @st_disjoint_align64_uint8_t_uint64_t(i64 %ptr, i8 zeroext %str) { 3329; CHECK-P10-LABEL: st_disjoint_align64_uint8_t_uint64_t: 3330; CHECK-P10: # %bb.0: # %entry 3331; CHECK-P10-NEXT: pli r5, 244140625 3332; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 3333; CHECK-P10-NEXT: rldic r5, r5, 12, 24 3334; CHECK-P10-NEXT: stdx r4, r3, r5 3335; CHECK-P10-NEXT: blr 3336; 3337; CHECK-PREP10-LABEL: st_disjoint_align64_uint8_t_uint64_t: 3338; CHECK-PREP10: # %bb.0: # %entry 3339; CHECK-PREP10-NEXT: lis r5, 3725 3340; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 3341; CHECK-PREP10-NEXT: ori r5, r5, 19025 3342; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 3343; CHECK-PREP10-NEXT: stdx r4, r3, r5 3344; CHECK-PREP10-NEXT: blr 3345entry: 3346 %and = and i64 %ptr, -1099511627776 3347 %or = or i64 %and, 1000000000000 3348 %0 = inttoptr i64 %or to ptr 3349 %conv = zext i8 %str to i64 3350 store atomic i64 %conv, ptr %0 monotonic, align 4096 3351 ret void 3352} 3353 3354; Function Attrs: nofree norecurse nounwind uwtable willreturn 3355define dso_local void @st_cst_align16_uint8_t_uint64_t(i8 zeroext %str) { 3356; CHECK-LABEL: st_cst_align16_uint8_t_uint64_t: 3357; CHECK: # %bb.0: # %entry 3358; CHECK-NEXT: std r3, 4080(0) 3359; CHECK-NEXT: blr 3360entry: 3361 %conv = zext i8 %str to i64 3362 store atomic i64 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 3363 ret void 3364} 3365 3366; Function Attrs: nofree norecurse nounwind uwtable willreturn 3367define dso_local void @st_cst_align32_uint8_t_uint64_t(i8 zeroext %str) { 3368; CHECK-LABEL: st_cst_align32_uint8_t_uint64_t: 3369; CHECK: # %bb.0: # %entry 3370; CHECK-NEXT: lis r4, 153 3371; CHECK-NEXT: std r3, -27108(r4) 3372; CHECK-NEXT: blr 3373entry: 3374 %conv = zext i8 %str to i64 3375 store atomic i64 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 8 3376 ret void 3377} 3378 3379; Function Attrs: nofree norecurse nounwind uwtable willreturn 3380define dso_local void @st_cst_align64_uint8_t_uint64_t(i8 zeroext %str) { 3381; CHECK-P10-LABEL: st_cst_align64_uint8_t_uint64_t: 3382; CHECK-P10: # %bb.0: # %entry 3383; CHECK-P10-NEXT: pli r4, 244140625 3384; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3385; CHECK-P10-NEXT: std r3, 0(r4) 3386; CHECK-P10-NEXT: blr 3387; 3388; CHECK-PREP10-LABEL: st_cst_align64_uint8_t_uint64_t: 3389; CHECK-PREP10: # %bb.0: # %entry 3390; CHECK-PREP10-NEXT: lis r4, 3725 3391; CHECK-PREP10-NEXT: ori r4, r4, 19025 3392; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3393; CHECK-PREP10-NEXT: std r3, 0(r4) 3394; CHECK-PREP10-NEXT: blr 3395entry: 3396 %conv = zext i8 %str to i64 3397 store atomic i64 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 3398 ret void 3399} 3400 3401; Function Attrs: nofree norecurse nounwind uwtable willreturn 3402define dso_local void @st_0_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 3403; CHECK-LABEL: st_0_int8_t_uint16_t: 3404; CHECK: # %bb.0: # %entry 3405; CHECK-NEXT: sth r4, 0(r3) 3406; CHECK-NEXT: blr 3407entry: 3408 %0 = inttoptr i64 %ptr to ptr 3409 %conv = sext i8 %str to i16 3410 store atomic i16 %conv, ptr %0 monotonic, align 2 3411 ret void 3412} 3413 3414; Function Attrs: nofree norecurse nounwind uwtable willreturn 3415define dso_local void @st_align16_int8_t_uint16_t(ptr nocapture %ptr, i8 signext %str) { 3416; CHECK-LABEL: st_align16_int8_t_uint16_t: 3417; CHECK: # %bb.0: # %entry 3418; CHECK-NEXT: sth r4, 8(r3) 3419; CHECK-NEXT: blr 3420entry: 3421 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 3422 %conv = sext i8 %str to i16 3423 store atomic i16 %conv, ptr %add.ptr monotonic, align 2 3424 ret void 3425} 3426 3427; Function Attrs: nofree norecurse nounwind uwtable willreturn 3428define dso_local void @st_align32_int8_t_uint16_t(ptr nocapture %ptr, i8 signext %str) { 3429; CHECK-P10-LABEL: st_align32_int8_t_uint16_t: 3430; CHECK-P10: # %bb.0: # %entry 3431; CHECK-P10-NEXT: psth r4, 99999000(r3), 0 3432; CHECK-P10-NEXT: blr 3433; 3434; CHECK-PREP10-LABEL: st_align32_int8_t_uint16_t: 3435; CHECK-PREP10: # %bb.0: # %entry 3436; CHECK-PREP10-NEXT: lis r5, 1525 3437; CHECK-PREP10-NEXT: ori r5, r5, 56600 3438; CHECK-PREP10-NEXT: sthx r4, r3, r5 3439; CHECK-PREP10-NEXT: blr 3440entry: 3441 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 3442 %conv = sext i8 %str to i16 3443 store atomic i16 %conv, ptr %add.ptr monotonic, align 2 3444 ret void 3445} 3446 3447; Function Attrs: nofree norecurse nounwind uwtable willreturn 3448define dso_local void @st_align64_int8_t_uint16_t(ptr nocapture %ptr, i8 signext %str) { 3449; CHECK-P10-LABEL: st_align64_int8_t_uint16_t: 3450; CHECK-P10: # %bb.0: # %entry 3451; CHECK-P10-NEXT: pli r5, 244140625 3452; CHECK-P10-NEXT: rldic r5, r5, 12, 24 3453; CHECK-P10-NEXT: sthx r4, r3, r5 3454; CHECK-P10-NEXT: blr 3455; 3456; CHECK-PREP10-LABEL: st_align64_int8_t_uint16_t: 3457; CHECK-PREP10: # %bb.0: # %entry 3458; CHECK-PREP10-NEXT: lis r5, 3725 3459; CHECK-PREP10-NEXT: ori r5, r5, 19025 3460; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 3461; CHECK-PREP10-NEXT: sthx r4, r3, r5 3462; CHECK-PREP10-NEXT: blr 3463entry: 3464 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 3465 %conv = sext i8 %str to i16 3466 store atomic i16 %conv, ptr %add.ptr monotonic, align 2 3467 ret void 3468} 3469 3470; Function Attrs: nofree norecurse nounwind uwtable willreturn 3471define dso_local void @st_reg_int8_t_uint16_t(ptr nocapture %ptr, i64 %off, i8 signext %str) { 3472; CHECK-LABEL: st_reg_int8_t_uint16_t: 3473; CHECK: # %bb.0: # %entry 3474; CHECK-NEXT: sthx r5, r3, r4 3475; CHECK-NEXT: blr 3476entry: 3477 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 3478 %conv = sext i8 %str to i16 3479 store atomic i16 %conv, ptr %add.ptr monotonic, align 2 3480 ret void 3481} 3482 3483; Function Attrs: nofree norecurse nounwind uwtable willreturn 3484define dso_local void @st_or1_int8_t_uint16_t(i64 %ptr, i8 zeroext %off, i8 signext %str) { 3485; CHECK-LABEL: st_or1_int8_t_uint16_t: 3486; CHECK: # %bb.0: # %entry 3487; CHECK-NEXT: or r3, r4, r3 3488; CHECK-NEXT: sth r5, 0(r3) 3489; CHECK-NEXT: blr 3490entry: 3491 %conv = zext i8 %off to i64 3492 %or = or i64 %conv, %ptr 3493 %0 = inttoptr i64 %or to ptr 3494 %conv1 = sext i8 %str to i16 3495 store atomic i16 %conv1, ptr %0 monotonic, align 2 3496 ret void 3497} 3498 3499; Function Attrs: nofree norecurse nounwind uwtable willreturn 3500define dso_local void @st_not_disjoint16_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 3501; CHECK-LABEL: st_not_disjoint16_int8_t_uint16_t: 3502; CHECK: # %bb.0: # %entry 3503; CHECK-NEXT: ori r3, r3, 6 3504; CHECK-NEXT: sth r4, 0(r3) 3505; CHECK-NEXT: blr 3506entry: 3507 %or = or i64 %ptr, 6 3508 %0 = inttoptr i64 %or to ptr 3509 %conv = sext i8 %str to i16 3510 store atomic i16 %conv, ptr %0 monotonic, align 2 3511 ret void 3512} 3513 3514; Function Attrs: nofree norecurse nounwind uwtable willreturn 3515define dso_local void @st_disjoint_align16_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 3516; CHECK-LABEL: st_disjoint_align16_int8_t_uint16_t: 3517; CHECK: # %bb.0: # %entry 3518; CHECK-NEXT: rldicr r3, r3, 0, 51 3519; CHECK-NEXT: sth r4, 24(r3) 3520; CHECK-NEXT: blr 3521entry: 3522 %and = and i64 %ptr, -4096 3523 %or = or i64 %and, 24 3524 %0 = inttoptr i64 %or to ptr 3525 %conv = sext i8 %str to i16 3526 store atomic i16 %conv, ptr %0 monotonic, align 8 3527 ret void 3528} 3529 3530; Function Attrs: nofree norecurse nounwind uwtable willreturn 3531define dso_local void @st_not_disjoint32_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 3532; CHECK-LABEL: st_not_disjoint32_int8_t_uint16_t: 3533; CHECK: # %bb.0: # %entry 3534; CHECK-NEXT: ori r3, r3, 34463 3535; CHECK-NEXT: oris r3, r3, 1 3536; CHECK-NEXT: sth r4, 0(r3) 3537; CHECK-NEXT: blr 3538entry: 3539 %or = or i64 %ptr, 99999 3540 %0 = inttoptr i64 %or to ptr 3541 %conv = sext i8 %str to i16 3542 store atomic i16 %conv, ptr %0 monotonic, align 2 3543 ret void 3544} 3545 3546; Function Attrs: nofree norecurse nounwind uwtable willreturn 3547define dso_local void @st_disjoint_align32_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 3548; CHECK-P10-LABEL: st_disjoint_align32_int8_t_uint16_t: 3549; CHECK-P10: # %bb.0: # %entry 3550; CHECK-P10-NEXT: lis r5, -15264 3551; CHECK-P10-NEXT: and r3, r3, r5 3552; CHECK-P10-NEXT: psth r4, 999990000(r3), 0 3553; CHECK-P10-NEXT: blr 3554; 3555; CHECK-PREP10-LABEL: st_disjoint_align32_int8_t_uint16_t: 3556; CHECK-PREP10: # %bb.0: # %entry 3557; CHECK-PREP10-NEXT: lis r5, -15264 3558; CHECK-PREP10-NEXT: and r3, r3, r5 3559; CHECK-PREP10-NEXT: lis r5, 15258 3560; CHECK-PREP10-NEXT: ori r5, r5, 41712 3561; CHECK-PREP10-NEXT: sthx r4, r3, r5 3562; CHECK-PREP10-NEXT: blr 3563entry: 3564 %and = and i64 %ptr, -1000341504 3565 %or = or i64 %and, 999990000 3566 %0 = inttoptr i64 %or to ptr 3567 %conv = sext i8 %str to i16 3568 store atomic i16 %conv, ptr %0 monotonic, align 16 3569 ret void 3570} 3571 3572; Function Attrs: nofree norecurse nounwind uwtable willreturn 3573define dso_local void @st_not_disjoint64_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 3574; CHECK-P10-LABEL: st_not_disjoint64_int8_t_uint16_t: 3575; CHECK-P10: # %bb.0: # %entry 3576; CHECK-P10-NEXT: pli r5, 232 3577; CHECK-P10-NEXT: pli r6, 3567587329 3578; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 3579; CHECK-P10-NEXT: or r3, r3, r6 3580; CHECK-P10-NEXT: sth r4, 0(r3) 3581; CHECK-P10-NEXT: blr 3582; 3583; CHECK-PREP10-LABEL: st_not_disjoint64_int8_t_uint16_t: 3584; CHECK-PREP10: # %bb.0: # %entry 3585; CHECK-PREP10-NEXT: li r5, 29 3586; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 3587; CHECK-PREP10-NEXT: oris r5, r5, 54437 3588; CHECK-PREP10-NEXT: ori r5, r5, 4097 3589; CHECK-PREP10-NEXT: or r3, r3, r5 3590; CHECK-PREP10-NEXT: sth r4, 0(r3) 3591; CHECK-PREP10-NEXT: blr 3592entry: 3593 %or = or i64 %ptr, 1000000000001 3594 %0 = inttoptr i64 %or to ptr 3595 %conv = sext i8 %str to i16 3596 store atomic i16 %conv, ptr %0 monotonic, align 2 3597 ret void 3598} 3599 3600; Function Attrs: nofree norecurse nounwind uwtable willreturn 3601define dso_local void @st_disjoint_align64_int8_t_uint16_t(i64 %ptr, i8 signext %str) { 3602; CHECK-P10-LABEL: st_disjoint_align64_int8_t_uint16_t: 3603; CHECK-P10: # %bb.0: # %entry 3604; CHECK-P10-NEXT: pli r5, 244140625 3605; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 3606; CHECK-P10-NEXT: rldic r5, r5, 12, 24 3607; CHECK-P10-NEXT: sthx r4, r3, r5 3608; CHECK-P10-NEXT: blr 3609; 3610; CHECK-PREP10-LABEL: st_disjoint_align64_int8_t_uint16_t: 3611; CHECK-PREP10: # %bb.0: # %entry 3612; CHECK-PREP10-NEXT: lis r5, 3725 3613; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 3614; CHECK-PREP10-NEXT: ori r5, r5, 19025 3615; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 3616; CHECK-PREP10-NEXT: sthx r4, r3, r5 3617; CHECK-PREP10-NEXT: blr 3618entry: 3619 %and = and i64 %ptr, -1099511627776 3620 %or = or i64 %and, 1000000000000 3621 %0 = inttoptr i64 %or to ptr 3622 %conv = sext i8 %str to i16 3623 store atomic i16 %conv, ptr %0 monotonic, align 4096 3624 ret void 3625} 3626 3627; Function Attrs: nofree norecurse nounwind uwtable willreturn 3628define dso_local void @st_cst_align16_int8_t_uint16_t(i8 signext %str) { 3629; CHECK-LABEL: st_cst_align16_int8_t_uint16_t: 3630; CHECK: # %bb.0: # %entry 3631; CHECK-NEXT: sth r3, 4080(0) 3632; CHECK-NEXT: blr 3633entry: 3634 %conv = sext i8 %str to i16 3635 store atomic i16 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 3636 ret void 3637} 3638 3639; Function Attrs: nofree norecurse nounwind uwtable willreturn 3640define dso_local void @st_cst_align32_int8_t_uint16_t(i8 signext %str) { 3641; CHECK-LABEL: st_cst_align32_int8_t_uint16_t: 3642; CHECK: # %bb.0: # %entry 3643; CHECK-NEXT: lis r4, 153 3644; CHECK-NEXT: sth r3, -27108(r4) 3645; CHECK-NEXT: blr 3646entry: 3647 %conv = sext i8 %str to i16 3648 store atomic i16 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 3649 ret void 3650} 3651 3652; Function Attrs: nofree norecurse nounwind uwtable willreturn 3653define dso_local void @st_cst_align64_int8_t_uint16_t(i8 signext %str) { 3654; CHECK-P10-LABEL: st_cst_align64_int8_t_uint16_t: 3655; CHECK-P10: # %bb.0: # %entry 3656; CHECK-P10-NEXT: pli r4, 244140625 3657; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3658; CHECK-P10-NEXT: sth r3, 0(r4) 3659; CHECK-P10-NEXT: blr 3660; 3661; CHECK-PREP10-LABEL: st_cst_align64_int8_t_uint16_t: 3662; CHECK-PREP10: # %bb.0: # %entry 3663; CHECK-PREP10-NEXT: lis r4, 3725 3664; CHECK-PREP10-NEXT: ori r4, r4, 19025 3665; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3666; CHECK-PREP10-NEXT: sth r3, 0(r4) 3667; CHECK-PREP10-NEXT: blr 3668entry: 3669 %conv = sext i8 %str to i16 3670 store atomic i16 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 3671 ret void 3672} 3673 3674; Function Attrs: nofree norecurse nounwind uwtable willreturn 3675define dso_local void @st_0_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 3676; CHECK-LABEL: st_0_int8_t_uint32_t: 3677; CHECK: # %bb.0: # %entry 3678; CHECK-NEXT: stw r4, 0(r3) 3679; CHECK-NEXT: blr 3680entry: 3681 %0 = inttoptr i64 %ptr to ptr 3682 %conv = sext i8 %str to i32 3683 store atomic i32 %conv, ptr %0 monotonic, align 4 3684 ret void 3685} 3686 3687; Function Attrs: nofree norecurse nounwind uwtable willreturn 3688define dso_local void @st_align16_int8_t_uint32_t(ptr nocapture %ptr, i8 signext %str) { 3689; CHECK-LABEL: st_align16_int8_t_uint32_t: 3690; CHECK: # %bb.0: # %entry 3691; CHECK-NEXT: stw r4, 8(r3) 3692; CHECK-NEXT: blr 3693entry: 3694 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 3695 %conv = sext i8 %str to i32 3696 store atomic i32 %conv, ptr %add.ptr monotonic, align 4 3697 ret void 3698} 3699 3700; Function Attrs: nofree norecurse nounwind uwtable willreturn 3701define dso_local void @st_align32_int8_t_uint32_t(ptr nocapture %ptr, i8 signext %str) { 3702; CHECK-P10-LABEL: st_align32_int8_t_uint32_t: 3703; CHECK-P10: # %bb.0: # %entry 3704; CHECK-P10-NEXT: pstw r4, 99999000(r3), 0 3705; CHECK-P10-NEXT: blr 3706; 3707; CHECK-PREP10-LABEL: st_align32_int8_t_uint32_t: 3708; CHECK-PREP10: # %bb.0: # %entry 3709; CHECK-PREP10-NEXT: lis r5, 1525 3710; CHECK-PREP10-NEXT: ori r5, r5, 56600 3711; CHECK-PREP10-NEXT: stwx r4, r3, r5 3712; CHECK-PREP10-NEXT: blr 3713entry: 3714 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 3715 %conv = sext i8 %str to i32 3716 store atomic i32 %conv, ptr %add.ptr monotonic, align 4 3717 ret void 3718} 3719 3720; Function Attrs: nofree norecurse nounwind uwtable willreturn 3721define dso_local void @st_align64_int8_t_uint32_t(ptr nocapture %ptr, i8 signext %str) { 3722; CHECK-P10-LABEL: st_align64_int8_t_uint32_t: 3723; CHECK-P10: # %bb.0: # %entry 3724; CHECK-P10-NEXT: pli r5, 244140625 3725; CHECK-P10-NEXT: rldic r5, r5, 12, 24 3726; CHECK-P10-NEXT: stwx r4, r3, r5 3727; CHECK-P10-NEXT: blr 3728; 3729; CHECK-PREP10-LABEL: st_align64_int8_t_uint32_t: 3730; CHECK-PREP10: # %bb.0: # %entry 3731; CHECK-PREP10-NEXT: lis r5, 3725 3732; CHECK-PREP10-NEXT: ori r5, r5, 19025 3733; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 3734; CHECK-PREP10-NEXT: stwx r4, r3, r5 3735; CHECK-PREP10-NEXT: blr 3736entry: 3737 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 3738 %conv = sext i8 %str to i32 3739 store atomic i32 %conv, ptr %add.ptr monotonic, align 4 3740 ret void 3741} 3742 3743; Function Attrs: nofree norecurse nounwind uwtable willreturn 3744define dso_local void @st_reg_int8_t_uint32_t(ptr nocapture %ptr, i64 %off, i8 signext %str) { 3745; CHECK-LABEL: st_reg_int8_t_uint32_t: 3746; CHECK: # %bb.0: # %entry 3747; CHECK-NEXT: stwx r5, r3, r4 3748; CHECK-NEXT: blr 3749entry: 3750 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 3751 %conv = sext i8 %str to i32 3752 store atomic i32 %conv, ptr %add.ptr monotonic, align 4 3753 ret void 3754} 3755 3756; Function Attrs: nofree norecurse nounwind uwtable willreturn 3757define dso_local void @st_or1_int8_t_uint32_t(i64 %ptr, i8 zeroext %off, i8 signext %str) { 3758; CHECK-LABEL: st_or1_int8_t_uint32_t: 3759; CHECK: # %bb.0: # %entry 3760; CHECK-NEXT: or r3, r4, r3 3761; CHECK-NEXT: stw r5, 0(r3) 3762; CHECK-NEXT: blr 3763entry: 3764 %conv = zext i8 %off to i64 3765 %or = or i64 %conv, %ptr 3766 %0 = inttoptr i64 %or to ptr 3767 %conv1 = sext i8 %str to i32 3768 store atomic i32 %conv1, ptr %0 monotonic, align 4 3769 ret void 3770} 3771 3772; Function Attrs: nofree norecurse nounwind uwtable willreturn 3773define dso_local void @st_not_disjoint16_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 3774; CHECK-LABEL: st_not_disjoint16_int8_t_uint32_t: 3775; CHECK: # %bb.0: # %entry 3776; CHECK-NEXT: ori r3, r3, 6 3777; CHECK-NEXT: stw r4, 0(r3) 3778; CHECK-NEXT: blr 3779entry: 3780 %or = or i64 %ptr, 6 3781 %0 = inttoptr i64 %or to ptr 3782 %conv = sext i8 %str to i32 3783 store atomic i32 %conv, ptr %0 monotonic, align 4 3784 ret void 3785} 3786 3787; Function Attrs: nofree norecurse nounwind uwtable willreturn 3788define dso_local void @st_disjoint_align16_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 3789; CHECK-LABEL: st_disjoint_align16_int8_t_uint32_t: 3790; CHECK: # %bb.0: # %entry 3791; CHECK-NEXT: rldicr r3, r3, 0, 51 3792; CHECK-NEXT: stw r4, 24(r3) 3793; CHECK-NEXT: blr 3794entry: 3795 %and = and i64 %ptr, -4096 3796 %or = or i64 %and, 24 3797 %0 = inttoptr i64 %or to ptr 3798 %conv = sext i8 %str to i32 3799 store atomic i32 %conv, ptr %0 monotonic, align 8 3800 ret void 3801} 3802 3803; Function Attrs: nofree norecurse nounwind uwtable willreturn 3804define dso_local void @st_not_disjoint32_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 3805; CHECK-LABEL: st_not_disjoint32_int8_t_uint32_t: 3806; CHECK: # %bb.0: # %entry 3807; CHECK-NEXT: ori r3, r3, 34463 3808; CHECK-NEXT: oris r3, r3, 1 3809; CHECK-NEXT: stw r4, 0(r3) 3810; CHECK-NEXT: blr 3811entry: 3812 %or = or i64 %ptr, 99999 3813 %0 = inttoptr i64 %or to ptr 3814 %conv = sext i8 %str to i32 3815 store atomic i32 %conv, ptr %0 monotonic, align 4 3816 ret void 3817} 3818 3819; Function Attrs: nofree norecurse nounwind uwtable willreturn 3820define dso_local void @st_disjoint_align32_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 3821; CHECK-P10-LABEL: st_disjoint_align32_int8_t_uint32_t: 3822; CHECK-P10: # %bb.0: # %entry 3823; CHECK-P10-NEXT: lis r5, -15264 3824; CHECK-P10-NEXT: and r3, r3, r5 3825; CHECK-P10-NEXT: pstw r4, 999990000(r3), 0 3826; CHECK-P10-NEXT: blr 3827; 3828; CHECK-PREP10-LABEL: st_disjoint_align32_int8_t_uint32_t: 3829; CHECK-PREP10: # %bb.0: # %entry 3830; CHECK-PREP10-NEXT: lis r5, -15264 3831; CHECK-PREP10-NEXT: and r3, r3, r5 3832; CHECK-PREP10-NEXT: lis r5, 15258 3833; CHECK-PREP10-NEXT: ori r5, r5, 41712 3834; CHECK-PREP10-NEXT: stwx r4, r3, r5 3835; CHECK-PREP10-NEXT: blr 3836entry: 3837 %and = and i64 %ptr, -1000341504 3838 %or = or i64 %and, 999990000 3839 %0 = inttoptr i64 %or to ptr 3840 %conv = sext i8 %str to i32 3841 store atomic i32 %conv, ptr %0 monotonic, align 16 3842 ret void 3843} 3844 3845; Function Attrs: nofree norecurse nounwind uwtable willreturn 3846define dso_local void @st_not_disjoint64_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 3847; CHECK-P10-LABEL: st_not_disjoint64_int8_t_uint32_t: 3848; CHECK-P10: # %bb.0: # %entry 3849; CHECK-P10-NEXT: pli r5, 232 3850; CHECK-P10-NEXT: pli r6, 3567587329 3851; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 3852; CHECK-P10-NEXT: or r3, r3, r6 3853; CHECK-P10-NEXT: stw r4, 0(r3) 3854; CHECK-P10-NEXT: blr 3855; 3856; CHECK-PREP10-LABEL: st_not_disjoint64_int8_t_uint32_t: 3857; CHECK-PREP10: # %bb.0: # %entry 3858; CHECK-PREP10-NEXT: li r5, 29 3859; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 3860; CHECK-PREP10-NEXT: oris r5, r5, 54437 3861; CHECK-PREP10-NEXT: ori r5, r5, 4097 3862; CHECK-PREP10-NEXT: or r3, r3, r5 3863; CHECK-PREP10-NEXT: stw r4, 0(r3) 3864; CHECK-PREP10-NEXT: blr 3865entry: 3866 %or = or i64 %ptr, 1000000000001 3867 %0 = inttoptr i64 %or to ptr 3868 %conv = sext i8 %str to i32 3869 store atomic i32 %conv, ptr %0 monotonic, align 4 3870 ret void 3871} 3872 3873; Function Attrs: nofree norecurse nounwind uwtable willreturn 3874define dso_local void @st_disjoint_align64_int8_t_uint32_t(i64 %ptr, i8 signext %str) { 3875; CHECK-P10-LABEL: st_disjoint_align64_int8_t_uint32_t: 3876; CHECK-P10: # %bb.0: # %entry 3877; CHECK-P10-NEXT: pli r5, 244140625 3878; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 3879; CHECK-P10-NEXT: rldic r5, r5, 12, 24 3880; CHECK-P10-NEXT: stwx r4, r3, r5 3881; CHECK-P10-NEXT: blr 3882; 3883; CHECK-PREP10-LABEL: st_disjoint_align64_int8_t_uint32_t: 3884; CHECK-PREP10: # %bb.0: # %entry 3885; CHECK-PREP10-NEXT: lis r5, 3725 3886; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 3887; CHECK-PREP10-NEXT: ori r5, r5, 19025 3888; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 3889; CHECK-PREP10-NEXT: stwx r4, r3, r5 3890; CHECK-PREP10-NEXT: blr 3891entry: 3892 %and = and i64 %ptr, -1099511627776 3893 %or = or i64 %and, 1000000000000 3894 %0 = inttoptr i64 %or to ptr 3895 %conv = sext i8 %str to i32 3896 store atomic i32 %conv, ptr %0 monotonic, align 4096 3897 ret void 3898} 3899 3900; Function Attrs: nofree norecurse nounwind uwtable willreturn 3901define dso_local void @st_cst_align16_int8_t_uint32_t(i8 signext %str) { 3902; CHECK-LABEL: st_cst_align16_int8_t_uint32_t: 3903; CHECK: # %bb.0: # %entry 3904; CHECK-NEXT: stw r3, 4080(0) 3905; CHECK-NEXT: blr 3906entry: 3907 %conv = sext i8 %str to i32 3908 store atomic i32 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 3909 ret void 3910} 3911 3912; Function Attrs: nofree norecurse nounwind uwtable willreturn 3913define dso_local void @st_cst_align32_int8_t_uint32_t(i8 signext %str) { 3914; CHECK-LABEL: st_cst_align32_int8_t_uint32_t: 3915; CHECK: # %bb.0: # %entry 3916; CHECK-NEXT: lis r4, 153 3917; CHECK-NEXT: stw r3, -27108(r4) 3918; CHECK-NEXT: blr 3919entry: 3920 %conv = sext i8 %str to i32 3921 store atomic i32 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 4 3922 ret void 3923} 3924 3925; Function Attrs: nofree norecurse nounwind uwtable willreturn 3926define dso_local void @st_cst_align64_int8_t_uint32_t(i8 signext %str) { 3927; CHECK-P10-LABEL: st_cst_align64_int8_t_uint32_t: 3928; CHECK-P10: # %bb.0: # %entry 3929; CHECK-P10-NEXT: pli r4, 244140625 3930; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3931; CHECK-P10-NEXT: stw r3, 0(r4) 3932; CHECK-P10-NEXT: blr 3933; 3934; CHECK-PREP10-LABEL: st_cst_align64_int8_t_uint32_t: 3935; CHECK-PREP10: # %bb.0: # %entry 3936; CHECK-PREP10-NEXT: lis r4, 3725 3937; CHECK-PREP10-NEXT: ori r4, r4, 19025 3938; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3939; CHECK-PREP10-NEXT: stw r3, 0(r4) 3940; CHECK-PREP10-NEXT: blr 3941entry: 3942 %conv = sext i8 %str to i32 3943 store atomic i32 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 3944 ret void 3945} 3946 3947; Function Attrs: nofree norecurse nounwind uwtable willreturn 3948define dso_local void @st_0_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 3949; CHECK-LABEL: st_0_int8_t_uint64_t: 3950; CHECK: # %bb.0: # %entry 3951; CHECK-NEXT: std r4, 0(r3) 3952; CHECK-NEXT: blr 3953entry: 3954 %0 = inttoptr i64 %ptr to ptr 3955 %conv = sext i8 %str to i64 3956 store atomic i64 %conv, ptr %0 monotonic, align 8 3957 ret void 3958} 3959 3960; Function Attrs: nofree norecurse nounwind uwtable willreturn 3961define dso_local void @st_align16_int8_t_uint64_t(ptr nocapture %ptr, i8 signext %str) { 3962; CHECK-LABEL: st_align16_int8_t_uint64_t: 3963; CHECK: # %bb.0: # %entry 3964; CHECK-NEXT: std r4, 8(r3) 3965; CHECK-NEXT: blr 3966entry: 3967 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 3968 %conv = sext i8 %str to i64 3969 store atomic i64 %conv, ptr %add.ptr monotonic, align 8 3970 ret void 3971} 3972 3973; Function Attrs: nofree norecurse nounwind uwtable willreturn 3974define dso_local void @st_align32_int8_t_uint64_t(ptr nocapture %ptr, i8 signext %str) { 3975; CHECK-P10-LABEL: st_align32_int8_t_uint64_t: 3976; CHECK-P10: # %bb.0: # %entry 3977; CHECK-P10-NEXT: pstd r4, 99999000(r3), 0 3978; CHECK-P10-NEXT: blr 3979; 3980; CHECK-PREP10-LABEL: st_align32_int8_t_uint64_t: 3981; CHECK-PREP10: # %bb.0: # %entry 3982; CHECK-PREP10-NEXT: lis r5, 1525 3983; CHECK-PREP10-NEXT: ori r5, r5, 56600 3984; CHECK-PREP10-NEXT: stdx r4, r3, r5 3985; CHECK-PREP10-NEXT: blr 3986entry: 3987 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 3988 %conv = sext i8 %str to i64 3989 store atomic i64 %conv, ptr %add.ptr monotonic, align 8 3990 ret void 3991} 3992 3993; Function Attrs: nofree norecurse nounwind uwtable willreturn 3994define dso_local void @st_align64_int8_t_uint64_t(ptr nocapture %ptr, i8 signext %str) { 3995; CHECK-P10-LABEL: st_align64_int8_t_uint64_t: 3996; CHECK-P10: # %bb.0: # %entry 3997; CHECK-P10-NEXT: pli r5, 244140625 3998; CHECK-P10-NEXT: rldic r5, r5, 12, 24 3999; CHECK-P10-NEXT: stdx r4, r3, r5 4000; CHECK-P10-NEXT: blr 4001; 4002; CHECK-PREP10-LABEL: st_align64_int8_t_uint64_t: 4003; CHECK-PREP10: # %bb.0: # %entry 4004; CHECK-PREP10-NEXT: lis r5, 3725 4005; CHECK-PREP10-NEXT: ori r5, r5, 19025 4006; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 4007; CHECK-PREP10-NEXT: stdx r4, r3, r5 4008; CHECK-PREP10-NEXT: blr 4009entry: 4010 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 4011 %conv = sext i8 %str to i64 4012 store atomic i64 %conv, ptr %add.ptr monotonic, align 8 4013 ret void 4014} 4015 4016; Function Attrs: nofree norecurse nounwind uwtable willreturn 4017define dso_local void @st_reg_int8_t_uint64_t(ptr nocapture %ptr, i64 %off, i8 signext %str) { 4018; CHECK-LABEL: st_reg_int8_t_uint64_t: 4019; CHECK: # %bb.0: # %entry 4020; CHECK-NEXT: stdx r5, r3, r4 4021; CHECK-NEXT: blr 4022entry: 4023 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 4024 %conv = sext i8 %str to i64 4025 store atomic i64 %conv, ptr %add.ptr monotonic, align 8 4026 ret void 4027} 4028 4029; Function Attrs: nofree norecurse nounwind uwtable willreturn 4030define dso_local void @st_or1_int8_t_uint64_t(i64 %ptr, i8 zeroext %off, i8 signext %str) { 4031; CHECK-LABEL: st_or1_int8_t_uint64_t: 4032; CHECK: # %bb.0: # %entry 4033; CHECK-NEXT: or r3, r4, r3 4034; CHECK-NEXT: std r5, 0(r3) 4035; CHECK-NEXT: blr 4036entry: 4037 %conv = zext i8 %off to i64 4038 %or = or i64 %conv, %ptr 4039 %0 = inttoptr i64 %or to ptr 4040 %conv1 = sext i8 %str to i64 4041 store atomic i64 %conv1, ptr %0 monotonic, align 8 4042 ret void 4043} 4044 4045; Function Attrs: nofree norecurse nounwind uwtable willreturn 4046define dso_local void @st_not_disjoint16_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 4047; CHECK-LABEL: st_not_disjoint16_int8_t_uint64_t: 4048; CHECK: # %bb.0: # %entry 4049; CHECK-NEXT: ori r3, r3, 6 4050; CHECK-NEXT: std r4, 0(r3) 4051; CHECK-NEXT: blr 4052entry: 4053 %or = or i64 %ptr, 6 4054 %0 = inttoptr i64 %or to ptr 4055 %conv = sext i8 %str to i64 4056 store atomic i64 %conv, ptr %0 monotonic, align 8 4057 ret void 4058} 4059 4060; Function Attrs: nofree norecurse nounwind uwtable willreturn 4061define dso_local void @st_disjoint_align16_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 4062; CHECK-LABEL: st_disjoint_align16_int8_t_uint64_t: 4063; CHECK: # %bb.0: # %entry 4064; CHECK-NEXT: rldicr r3, r3, 0, 51 4065; CHECK-NEXT: std r4, 24(r3) 4066; CHECK-NEXT: blr 4067entry: 4068 %and = and i64 %ptr, -4096 4069 %or = or i64 %and, 24 4070 %0 = inttoptr i64 %or to ptr 4071 %conv = sext i8 %str to i64 4072 store atomic i64 %conv, ptr %0 monotonic, align 8 4073 ret void 4074} 4075 4076; Function Attrs: nofree norecurse nounwind uwtable willreturn 4077define dso_local void @st_not_disjoint32_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 4078; CHECK-LABEL: st_not_disjoint32_int8_t_uint64_t: 4079; CHECK: # %bb.0: # %entry 4080; CHECK-NEXT: ori r3, r3, 34463 4081; CHECK-NEXT: oris r3, r3, 1 4082; CHECK-NEXT: std r4, 0(r3) 4083; CHECK-NEXT: blr 4084entry: 4085 %or = or i64 %ptr, 99999 4086 %0 = inttoptr i64 %or to ptr 4087 %conv = sext i8 %str to i64 4088 store atomic i64 %conv, ptr %0 monotonic, align 8 4089 ret void 4090} 4091 4092; Function Attrs: nofree norecurse nounwind uwtable willreturn 4093define dso_local void @st_disjoint_align32_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 4094; CHECK-P10-LABEL: st_disjoint_align32_int8_t_uint64_t: 4095; CHECK-P10: # %bb.0: # %entry 4096; CHECK-P10-NEXT: lis r5, -15264 4097; CHECK-P10-NEXT: and r3, r3, r5 4098; CHECK-P10-NEXT: pstd r4, 999990000(r3), 0 4099; CHECK-P10-NEXT: blr 4100; 4101; CHECK-PREP10-LABEL: st_disjoint_align32_int8_t_uint64_t: 4102; CHECK-PREP10: # %bb.0: # %entry 4103; CHECK-PREP10-NEXT: lis r5, -15264 4104; CHECK-PREP10-NEXT: and r3, r3, r5 4105; CHECK-PREP10-NEXT: lis r5, 15258 4106; CHECK-PREP10-NEXT: ori r5, r5, 41712 4107; CHECK-PREP10-NEXT: stdx r4, r3, r5 4108; CHECK-PREP10-NEXT: blr 4109entry: 4110 %and = and i64 %ptr, -1000341504 4111 %or = or i64 %and, 999990000 4112 %0 = inttoptr i64 %or to ptr 4113 %conv = sext i8 %str to i64 4114 store atomic i64 %conv, ptr %0 monotonic, align 16 4115 ret void 4116} 4117 4118; Function Attrs: nofree norecurse nounwind uwtable willreturn 4119define dso_local void @st_not_disjoint64_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 4120; CHECK-P10-LABEL: st_not_disjoint64_int8_t_uint64_t: 4121; CHECK-P10: # %bb.0: # %entry 4122; CHECK-P10-NEXT: pli r5, 232 4123; CHECK-P10-NEXT: pli r6, 3567587329 4124; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 4125; CHECK-P10-NEXT: or r3, r3, r6 4126; CHECK-P10-NEXT: std r4, 0(r3) 4127; CHECK-P10-NEXT: blr 4128; 4129; CHECK-PREP10-LABEL: st_not_disjoint64_int8_t_uint64_t: 4130; CHECK-PREP10: # %bb.0: # %entry 4131; CHECK-PREP10-NEXT: li r5, 29 4132; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 4133; CHECK-PREP10-NEXT: oris r5, r5, 54437 4134; CHECK-PREP10-NEXT: ori r5, r5, 4097 4135; CHECK-PREP10-NEXT: or r3, r3, r5 4136; CHECK-PREP10-NEXT: std r4, 0(r3) 4137; CHECK-PREP10-NEXT: blr 4138entry: 4139 %or = or i64 %ptr, 1000000000001 4140 %0 = inttoptr i64 %or to ptr 4141 %conv = sext i8 %str to i64 4142 store atomic i64 %conv, ptr %0 monotonic, align 8 4143 ret void 4144} 4145 4146; Function Attrs: nofree norecurse nounwind uwtable willreturn 4147define dso_local void @st_disjoint_align64_int8_t_uint64_t(i64 %ptr, i8 signext %str) { 4148; CHECK-P10-LABEL: st_disjoint_align64_int8_t_uint64_t: 4149; CHECK-P10: # %bb.0: # %entry 4150; CHECK-P10-NEXT: pli r5, 244140625 4151; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 4152; CHECK-P10-NEXT: rldic r5, r5, 12, 24 4153; CHECK-P10-NEXT: stdx r4, r3, r5 4154; CHECK-P10-NEXT: blr 4155; 4156; CHECK-PREP10-LABEL: st_disjoint_align64_int8_t_uint64_t: 4157; CHECK-PREP10: # %bb.0: # %entry 4158; CHECK-PREP10-NEXT: lis r5, 3725 4159; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 4160; CHECK-PREP10-NEXT: ori r5, r5, 19025 4161; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 4162; CHECK-PREP10-NEXT: stdx r4, r3, r5 4163; CHECK-PREP10-NEXT: blr 4164entry: 4165 %and = and i64 %ptr, -1099511627776 4166 %or = or i64 %and, 1000000000000 4167 %0 = inttoptr i64 %or to ptr 4168 %conv = sext i8 %str to i64 4169 store atomic i64 %conv, ptr %0 monotonic, align 4096 4170 ret void 4171} 4172 4173; Function Attrs: nofree norecurse nounwind uwtable willreturn 4174define dso_local void @st_cst_align16_int8_t_uint64_t(i8 signext %str) { 4175; CHECK-LABEL: st_cst_align16_int8_t_uint64_t: 4176; CHECK: # %bb.0: # %entry 4177; CHECK-NEXT: std r3, 4080(0) 4178; CHECK-NEXT: blr 4179entry: 4180 %conv = sext i8 %str to i64 4181 store atomic i64 %conv, ptr inttoptr (i64 4080 to ptr) monotonic, align 16 4182 ret void 4183} 4184 4185; Function Attrs: nofree norecurse nounwind uwtable willreturn 4186define dso_local void @st_cst_align32_int8_t_uint64_t(i8 signext %str) { 4187; CHECK-LABEL: st_cst_align32_int8_t_uint64_t: 4188; CHECK: # %bb.0: # %entry 4189; CHECK-NEXT: lis r4, 153 4190; CHECK-NEXT: std r3, -27108(r4) 4191; CHECK-NEXT: blr 4192entry: 4193 %conv = sext i8 %str to i64 4194 store atomic i64 %conv, ptr inttoptr (i64 9999900 to ptr) monotonic, align 8 4195 ret void 4196} 4197 4198; Function Attrs: nofree norecurse nounwind uwtable willreturn 4199define dso_local void @st_cst_align64_int8_t_uint64_t(i8 signext %str) { 4200; CHECK-P10-LABEL: st_cst_align64_int8_t_uint64_t: 4201; CHECK-P10: # %bb.0: # %entry 4202; CHECK-P10-NEXT: pli r4, 244140625 4203; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4204; CHECK-P10-NEXT: std r3, 0(r4) 4205; CHECK-P10-NEXT: blr 4206; 4207; CHECK-PREP10-LABEL: st_cst_align64_int8_t_uint64_t: 4208; CHECK-PREP10: # %bb.0: # %entry 4209; CHECK-PREP10-NEXT: lis r4, 3725 4210; CHECK-PREP10-NEXT: ori r4, r4, 19025 4211; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 4212; CHECK-PREP10-NEXT: std r3, 0(r4) 4213; CHECK-PREP10-NEXT: blr 4214entry: 4215 %conv = sext i8 %str to i64 4216 store atomic i64 %conv, ptr inttoptr (i64 1000000000000 to ptr) monotonic, align 4096 4217 ret void 4218} 4219