1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 3; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 4; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10,CHECK-LE,CHECK-P10-LE 5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 6; RUN: -mcpu=pwr10 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 7; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-P10,CHECK-BE,CHECK-P10-BE 8; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 9; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 10; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P9,CHECK-LE,CHECK-P9-LE 11; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 12; RUN: -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 13; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P9,CHECK-BE,CHECK-P9-BE 14; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \ 15; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 16; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P8,CHECK-LE,CHECK-P8-LE 17; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \ 18; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr \ 19; RUN: < %s | FileCheck %s --check-prefixes=CHECK,CHECK-PREP10,CHECK-P8,CHECK-BE,CHECK-P8-BE 20 21; Function Attrs: norecurse nounwind readonly uwtable willreturn 22define dso_local signext i16 @ld_0_int16_t_int8_t(i64 %ptr) { 23; CHECK-LABEL: ld_0_int16_t_int8_t: 24; CHECK: # %bb.0: # %entry 25; CHECK-NEXT: lbz r3, 0(r3) 26; CHECK-NEXT: extsb r3, r3 27; CHECK-NEXT: blr 28entry: 29 %0 = inttoptr i64 %ptr to ptr 30 %1 = load i8, ptr %0, align 1 31 %conv = sext i8 %1 to i16 32 ret i16 %conv 33} 34 35; Function Attrs: norecurse nounwind readonly uwtable willreturn 36define dso_local signext i16 @ld_align16_int16_t_int8_t(ptr nocapture readonly %ptr) { 37; CHECK-LABEL: ld_align16_int16_t_int8_t: 38; CHECK: # %bb.0: # %entry 39; CHECK-NEXT: lbz r3, 8(r3) 40; CHECK-NEXT: extsb r3, r3 41; CHECK-NEXT: blr 42entry: 43 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 44 %0 = load i8, ptr %add.ptr, align 1 45 %conv = sext i8 %0 to i16 46 ret i16 %conv 47} 48 49; Function Attrs: norecurse nounwind readonly uwtable willreturn 50define dso_local signext i16 @ld_align32_int16_t_int8_t(ptr nocapture readonly %ptr) { 51; CHECK-P10-LABEL: ld_align32_int16_t_int8_t: 52; CHECK-P10: # %bb.0: # %entry 53; CHECK-P10-NEXT: plbz r3, 99999000(r3), 0 54; CHECK-P10-NEXT: extsb r3, r3 55; CHECK-P10-NEXT: blr 56; 57; CHECK-PREP10-LABEL: ld_align32_int16_t_int8_t: 58; CHECK-PREP10: # %bb.0: # %entry 59; CHECK-PREP10-NEXT: lis r4, 1525 60; CHECK-PREP10-NEXT: ori r4, r4, 56600 61; CHECK-PREP10-NEXT: lbzx r3, r3, r4 62; CHECK-PREP10-NEXT: extsb r3, r3 63; CHECK-PREP10-NEXT: blr 64entry: 65 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 66 %0 = load i8, ptr %add.ptr, align 1 67 %conv = sext i8 %0 to i16 68 ret i16 %conv 69} 70 71; Function Attrs: norecurse nounwind readonly uwtable willreturn 72define dso_local signext i16 @ld_align64_int16_t_int8_t(ptr nocapture readonly %ptr) { 73; CHECK-P10-LABEL: ld_align64_int16_t_int8_t: 74; CHECK-P10: # %bb.0: # %entry 75; CHECK-P10-NEXT: pli r4, 244140625 76; CHECK-P10-NEXT: rldic r4, r4, 12, 24 77; CHECK-P10-NEXT: lbzx r3, r3, r4 78; CHECK-P10-NEXT: extsb r3, r3 79; CHECK-P10-NEXT: blr 80; 81; CHECK-PREP10-LABEL: ld_align64_int16_t_int8_t: 82; CHECK-PREP10: # %bb.0: # %entry 83; CHECK-PREP10-NEXT: lis r4, 3725 84; CHECK-PREP10-NEXT: ori r4, r4, 19025 85; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 86; CHECK-PREP10-NEXT: lbzx r3, r3, r4 87; CHECK-PREP10-NEXT: extsb r3, r3 88; CHECK-PREP10-NEXT: blr 89entry: 90 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 91 %0 = load i8, ptr %add.ptr, align 1 92 %conv = sext i8 %0 to i16 93 ret i16 %conv 94} 95 96; Function Attrs: norecurse nounwind readonly uwtable willreturn 97define dso_local signext i16 @ld_reg_int16_t_int8_t(ptr nocapture readonly %ptr, i64 %off) { 98; CHECK-LABEL: ld_reg_int16_t_int8_t: 99; CHECK: # %bb.0: # %entry 100; CHECK-NEXT: lbzx r3, r3, r4 101; CHECK-NEXT: extsb r3, r3 102; CHECK-NEXT: blr 103entry: 104 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 105 %0 = load i8, ptr %add.ptr, align 1 106 %conv = sext i8 %0 to i16 107 ret i16 %conv 108} 109 110; Function Attrs: norecurse nounwind readonly uwtable willreturn 111define dso_local signext i16 @ld_or_int16_t_int8_t(i64 %ptr, i8 zeroext %off) { 112; CHECK-LABEL: ld_or_int16_t_int8_t: 113; CHECK: # %bb.0: # %entry 114; CHECK-NEXT: or r3, r4, r3 115; CHECK-NEXT: lbz r3, 0(r3) 116; CHECK-NEXT: extsb r3, r3 117; CHECK-NEXT: blr 118entry: 119 %conv = zext i8 %off to i64 120 %or = or i64 %conv, %ptr 121 %0 = inttoptr i64 %or to ptr 122 %1 = load i8, ptr %0, align 1 123 %conv1 = sext i8 %1 to i16 124 ret i16 %conv1 125} 126 127; Function Attrs: norecurse nounwind readonly uwtable willreturn 128define dso_local signext i16 @ld_not_disjoint16_int16_t_int8_t(i64 %ptr) { 129; CHECK-LABEL: ld_not_disjoint16_int16_t_int8_t: 130; CHECK: # %bb.0: # %entry 131; CHECK-NEXT: ori r3, r3, 6 132; CHECK-NEXT: lbz r3, 0(r3) 133; CHECK-NEXT: extsb r3, r3 134; CHECK-NEXT: blr 135entry: 136 %or = or i64 %ptr, 6 137 %0 = inttoptr i64 %or to ptr 138 %1 = load i8, ptr %0, align 1 139 %conv = sext i8 %1 to i16 140 ret i16 %conv 141} 142 143; Function Attrs: norecurse nounwind readonly uwtable willreturn 144define dso_local signext i16 @ld_disjoint_align16_int16_t_int8_t(i64 %ptr) { 145; CHECK-LABEL: ld_disjoint_align16_int16_t_int8_t: 146; CHECK: # %bb.0: # %entry 147; CHECK-NEXT: rldicr r3, r3, 0, 51 148; CHECK-NEXT: lbz r3, 24(r3) 149; CHECK-NEXT: extsb r3, r3 150; CHECK-NEXT: blr 151entry: 152 %and = and i64 %ptr, -4096 153 %or = or i64 %and, 24 154 %0 = inttoptr i64 %or to ptr 155 %1 = load i8, ptr %0, align 8 156 %conv = sext i8 %1 to i16 157 ret i16 %conv 158} 159 160; Function Attrs: norecurse nounwind readonly uwtable willreturn 161define dso_local signext i16 @ld_not_disjoint32_int16_t_int8_t(i64 %ptr) { 162; CHECK-LABEL: ld_not_disjoint32_int16_t_int8_t: 163; CHECK: # %bb.0: # %entry 164; CHECK-NEXT: ori r3, r3, 34463 165; CHECK-NEXT: oris r3, r3, 1 166; CHECK-NEXT: lbz r3, 0(r3) 167; CHECK-NEXT: extsb r3, r3 168; CHECK-NEXT: blr 169entry: 170 %or = or i64 %ptr, 99999 171 %0 = inttoptr i64 %or to ptr 172 %1 = load i8, ptr %0, align 1 173 %conv = sext i8 %1 to i16 174 ret i16 %conv 175} 176 177; Function Attrs: norecurse nounwind readonly uwtable willreturn 178define dso_local signext i16 @ld_disjoint_align32_int16_t_int8_t(i64 %ptr) { 179; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_int8_t: 180; CHECK-P10: # %bb.0: # %entry 181; CHECK-P10-NEXT: lis r4, -15264 182; CHECK-P10-NEXT: and r3, r3, r4 183; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0 184; CHECK-P10-NEXT: extsb r3, r3 185; CHECK-P10-NEXT: blr 186; 187; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_int8_t: 188; CHECK-PREP10: # %bb.0: # %entry 189; CHECK-PREP10-NEXT: lis r4, -15264 190; CHECK-PREP10-NEXT: and r3, r3, r4 191; CHECK-PREP10-NEXT: lis r4, 15258 192; CHECK-PREP10-NEXT: ori r4, r4, 41712 193; CHECK-PREP10-NEXT: lbzx r3, r3, r4 194; CHECK-PREP10-NEXT: extsb r3, r3 195; CHECK-PREP10-NEXT: blr 196entry: 197 %and = and i64 %ptr, -1000341504 198 %or = or i64 %and, 999990000 199 %0 = inttoptr i64 %or to ptr 200 %1 = load i8, ptr %0, align 16 201 %conv = sext i8 %1 to i16 202 ret i16 %conv 203} 204 205; Function Attrs: norecurse nounwind readonly uwtable willreturn 206define dso_local signext i16 @ld_not_disjoint64_int16_t_int8_t(i64 %ptr) { 207; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_int8_t: 208; CHECK-P10: # %bb.0: # %entry 209; CHECK-P10-NEXT: pli r4, 232 210; CHECK-P10-NEXT: pli r5, 3567587329 211; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 212; CHECK-P10-NEXT: or r3, r3, r5 213; CHECK-P10-NEXT: lbz r3, 0(r3) 214; CHECK-P10-NEXT: extsb r3, r3 215; CHECK-P10-NEXT: blr 216; 217; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_int8_t: 218; CHECK-PREP10: # %bb.0: # %entry 219; CHECK-PREP10-NEXT: li r4, 29 220; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 221; CHECK-PREP10-NEXT: oris r4, r4, 54437 222; CHECK-PREP10-NEXT: ori r4, r4, 4097 223; CHECK-PREP10-NEXT: or r3, r3, r4 224; CHECK-PREP10-NEXT: lbz r3, 0(r3) 225; CHECK-PREP10-NEXT: extsb r3, r3 226; CHECK-PREP10-NEXT: blr 227entry: 228 %or = or i64 %ptr, 1000000000001 229 %0 = inttoptr i64 %or to ptr 230 %1 = load i8, ptr %0, align 1 231 %conv = sext i8 %1 to i16 232 ret i16 %conv 233} 234 235; Function Attrs: norecurse nounwind readonly uwtable willreturn 236define dso_local signext i16 @ld_disjoint_align64_int16_t_int8_t(i64 %ptr) { 237; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_int8_t: 238; CHECK-P10: # %bb.0: # %entry 239; CHECK-P10-NEXT: pli r4, 244140625 240; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 241; CHECK-P10-NEXT: rldic r4, r4, 12, 24 242; CHECK-P10-NEXT: lbzx r3, r3, r4 243; CHECK-P10-NEXT: extsb r3, r3 244; CHECK-P10-NEXT: blr 245; 246; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_int8_t: 247; CHECK-PREP10: # %bb.0: # %entry 248; CHECK-PREP10-NEXT: lis r4, 3725 249; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 250; CHECK-PREP10-NEXT: ori r4, r4, 19025 251; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 252; CHECK-PREP10-NEXT: lbzx r3, r3, r4 253; CHECK-PREP10-NEXT: extsb r3, r3 254; CHECK-PREP10-NEXT: blr 255entry: 256 %and = and i64 %ptr, -1099511627776 257 %or = or i64 %and, 1000000000000 258 %0 = inttoptr i64 %or to ptr 259 %1 = load i8, ptr %0, align 4096 260 %conv = sext i8 %1 to i16 261 ret i16 %conv 262} 263 264; Function Attrs: norecurse nounwind readonly uwtable willreturn 265define dso_local signext i16 @ld_cst_align16_int16_t_int8_t() { 266; CHECK-LABEL: ld_cst_align16_int16_t_int8_t: 267; CHECK: # %bb.0: # %entry 268; CHECK-NEXT: lbz r3, 4080(0) 269; CHECK-NEXT: extsb r3, r3 270; CHECK-NEXT: blr 271entry: 272 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16 273 %conv = sext i8 %0 to i16 274 ret i16 %conv 275} 276 277; Function Attrs: norecurse nounwind readonly uwtable willreturn 278define dso_local signext i16 @ld_cst_align32_int16_t_int8_t() { 279; CHECK-LABEL: ld_cst_align32_int16_t_int8_t: 280; CHECK: # %bb.0: # %entry 281; CHECK-NEXT: lis r3, 153 282; CHECK-NEXT: lbz r3, -27108(r3) 283; CHECK-NEXT: extsb r3, r3 284; CHECK-NEXT: blr 285entry: 286 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4 287 %conv = sext i8 %0 to i16 288 ret i16 %conv 289} 290 291; Function Attrs: norecurse nounwind readonly uwtable willreturn 292define dso_local signext i16 @ld_cst_align64_int16_t_int8_t() { 293; CHECK-P10-LABEL: ld_cst_align64_int16_t_int8_t: 294; CHECK-P10: # %bb.0: # %entry 295; CHECK-P10-NEXT: pli r3, 244140625 296; CHECK-P10-NEXT: rldic r3, r3, 12, 24 297; CHECK-P10-NEXT: lbz r3, 0(r3) 298; CHECK-P10-NEXT: extsb r3, r3 299; CHECK-P10-NEXT: blr 300; 301; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_int8_t: 302; CHECK-PREP10: # %bb.0: # %entry 303; CHECK-PREP10-NEXT: lis r3, 3725 304; CHECK-PREP10-NEXT: ori r3, r3, 19025 305; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 306; CHECK-PREP10-NEXT: lbz r3, 0(r3) 307; CHECK-PREP10-NEXT: extsb r3, r3 308; CHECK-PREP10-NEXT: blr 309entry: 310 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096 311 %conv = sext i8 %0 to i16 312 ret i16 %conv 313} 314 315; Function Attrs: norecurse nounwind readonly uwtable willreturn 316define dso_local signext i16 @ld_0_int16_t_uint16_t(i64 %ptr) { 317; CHECK-LABEL: ld_0_int16_t_uint16_t: 318; CHECK: # %bb.0: # %entry 319; CHECK-NEXT: lha r3, 0(r3) 320; CHECK-NEXT: blr 321entry: 322 %0 = inttoptr i64 %ptr to ptr 323 %1 = load i16, ptr %0, align 2 324 ret i16 %1 325} 326 327; Function Attrs: norecurse nounwind readonly uwtable willreturn 328define dso_local signext i16 @ld_align16_int16_t_uint16_t(ptr nocapture readonly %ptr) { 329; CHECK-LABEL: ld_align16_int16_t_uint16_t: 330; CHECK: # %bb.0: # %entry 331; CHECK-NEXT: lha r3, 8(r3) 332; CHECK-NEXT: blr 333entry: 334 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 335 %0 = load i16, ptr %add.ptr, align 2 336 ret i16 %0 337} 338 339; Function Attrs: norecurse nounwind readonly uwtable willreturn 340define dso_local signext i16 @ld_align32_int16_t_uint16_t(ptr nocapture readonly %ptr) { 341; CHECK-P10-LABEL: ld_align32_int16_t_uint16_t: 342; CHECK-P10: # %bb.0: # %entry 343; CHECK-P10-NEXT: plha r3, 99999000(r3), 0 344; CHECK-P10-NEXT: blr 345; 346; CHECK-PREP10-LABEL: ld_align32_int16_t_uint16_t: 347; CHECK-PREP10: # %bb.0: # %entry 348; CHECK-PREP10-NEXT: lis r4, 1525 349; CHECK-PREP10-NEXT: ori r4, r4, 56600 350; CHECK-PREP10-NEXT: lhax r3, r3, r4 351; CHECK-PREP10-NEXT: blr 352entry: 353 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 354 %0 = load i16, ptr %add.ptr, align 2 355 ret i16 %0 356} 357 358; Function Attrs: norecurse nounwind readonly uwtable willreturn 359define dso_local signext i16 @ld_align64_int16_t_uint16_t(ptr nocapture readonly %ptr) { 360; CHECK-P10-LABEL: ld_align64_int16_t_uint16_t: 361; CHECK-P10: # %bb.0: # %entry 362; CHECK-P10-NEXT: pli r4, 244140625 363; CHECK-P10-NEXT: rldic r4, r4, 12, 24 364; CHECK-P10-NEXT: lhax r3, r3, r4 365; CHECK-P10-NEXT: blr 366; 367; CHECK-PREP10-LABEL: ld_align64_int16_t_uint16_t: 368; CHECK-PREP10: # %bb.0: # %entry 369; CHECK-PREP10-NEXT: lis r4, 3725 370; CHECK-PREP10-NEXT: ori r4, r4, 19025 371; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 372; CHECK-PREP10-NEXT: lhax r3, r3, r4 373; CHECK-PREP10-NEXT: blr 374entry: 375 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 376 %0 = load i16, ptr %add.ptr, align 2 377 ret i16 %0 378} 379 380; Function Attrs: norecurse nounwind readonly uwtable willreturn 381define dso_local signext i16 @ld_reg_int16_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) { 382; CHECK-LABEL: ld_reg_int16_t_uint16_t: 383; CHECK: # %bb.0: # %entry 384; CHECK-NEXT: lhax r3, r3, r4 385; CHECK-NEXT: blr 386entry: 387 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 388 %0 = load i16, ptr %add.ptr, align 2 389 ret i16 %0 390} 391 392; Function Attrs: norecurse nounwind readonly uwtable willreturn 393define dso_local signext i16 @ld_or_int16_t_uint16_t(i64 %ptr, i8 zeroext %off) { 394; CHECK-LABEL: ld_or_int16_t_uint16_t: 395; CHECK: # %bb.0: # %entry 396; CHECK-NEXT: or r3, r4, r3 397; CHECK-NEXT: lha r3, 0(r3) 398; CHECK-NEXT: blr 399entry: 400 %conv = zext i8 %off to i64 401 %or = or i64 %conv, %ptr 402 %0 = inttoptr i64 %or to ptr 403 %1 = load i16, ptr %0, align 2 404 ret i16 %1 405} 406 407; Function Attrs: norecurse nounwind readonly uwtable willreturn 408define dso_local signext i16 @ld_not_disjoint16_int16_t_uint16_t(i64 %ptr) { 409; CHECK-LABEL: ld_not_disjoint16_int16_t_uint16_t: 410; CHECK: # %bb.0: # %entry 411; CHECK-NEXT: ori r3, r3, 6 412; CHECK-NEXT: lha r3, 0(r3) 413; CHECK-NEXT: blr 414entry: 415 %or = or i64 %ptr, 6 416 %0 = inttoptr i64 %or to ptr 417 %1 = load i16, ptr %0, align 2 418 ret i16 %1 419} 420 421; Function Attrs: norecurse nounwind readonly uwtable willreturn 422define dso_local signext i16 @ld_disjoint_align16_int16_t_uint16_t(i64 %ptr) { 423; CHECK-LABEL: ld_disjoint_align16_int16_t_uint16_t: 424; CHECK: # %bb.0: # %entry 425; CHECK-NEXT: rldicr r3, r3, 0, 51 426; CHECK-NEXT: lha r3, 24(r3) 427; CHECK-NEXT: blr 428entry: 429 %and = and i64 %ptr, -4096 430 %or = or i64 %and, 24 431 %0 = inttoptr i64 %or to ptr 432 %1 = load i16, ptr %0, align 8 433 ret i16 %1 434} 435 436; Function Attrs: norecurse nounwind readonly uwtable willreturn 437define dso_local signext i16 @ld_not_disjoint32_int16_t_uint16_t(i64 %ptr) { 438; CHECK-LABEL: ld_not_disjoint32_int16_t_uint16_t: 439; CHECK: # %bb.0: # %entry 440; CHECK-NEXT: ori r3, r3, 34463 441; CHECK-NEXT: oris r3, r3, 1 442; CHECK-NEXT: lha r3, 0(r3) 443; CHECK-NEXT: blr 444entry: 445 %or = or i64 %ptr, 99999 446 %0 = inttoptr i64 %or to ptr 447 %1 = load i16, ptr %0, align 2 448 ret i16 %1 449} 450 451; Function Attrs: norecurse nounwind readonly uwtable willreturn 452define dso_local signext i16 @ld_disjoint_align32_int16_t_uint16_t(i64 %ptr) { 453; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_uint16_t: 454; CHECK-P10: # %bb.0: # %entry 455; CHECK-P10-NEXT: lis r4, -15264 456; CHECK-P10-NEXT: and r3, r3, r4 457; CHECK-P10-NEXT: plha r3, 999990000(r3), 0 458; CHECK-P10-NEXT: blr 459; 460; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_uint16_t: 461; CHECK-PREP10: # %bb.0: # %entry 462; CHECK-PREP10-NEXT: lis r4, -15264 463; CHECK-PREP10-NEXT: and r3, r3, r4 464; CHECK-PREP10-NEXT: lis r4, 15258 465; CHECK-PREP10-NEXT: ori r4, r4, 41712 466; CHECK-PREP10-NEXT: lhax r3, r3, r4 467; CHECK-PREP10-NEXT: blr 468entry: 469 %and = and i64 %ptr, -1000341504 470 %or = or i64 %and, 999990000 471 %0 = inttoptr i64 %or to ptr 472 %1 = load i16, ptr %0, align 16 473 ret i16 %1 474} 475 476; Function Attrs: norecurse nounwind readonly uwtable willreturn 477define dso_local signext i16 @ld_not_disjoint64_int16_t_uint16_t(i64 %ptr) { 478; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_uint16_t: 479; CHECK-P10: # %bb.0: # %entry 480; CHECK-P10-NEXT: pli r4, 232 481; CHECK-P10-NEXT: pli r5, 3567587329 482; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 483; CHECK-P10-NEXT: or r3, r3, r5 484; CHECK-P10-NEXT: lha r3, 0(r3) 485; CHECK-P10-NEXT: blr 486; 487; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_uint16_t: 488; CHECK-PREP10: # %bb.0: # %entry 489; CHECK-PREP10-NEXT: li r4, 29 490; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 491; CHECK-PREP10-NEXT: oris r4, r4, 54437 492; CHECK-PREP10-NEXT: ori r4, r4, 4097 493; CHECK-PREP10-NEXT: or r3, r3, r4 494; CHECK-PREP10-NEXT: lha r3, 0(r3) 495; CHECK-PREP10-NEXT: blr 496entry: 497 %or = or i64 %ptr, 1000000000001 498 %0 = inttoptr i64 %or to ptr 499 %1 = load i16, ptr %0, align 2 500 ret i16 %1 501} 502 503; Function Attrs: norecurse nounwind readonly uwtable willreturn 504define dso_local signext i16 @ld_disjoint_align64_int16_t_uint16_t(i64 %ptr) { 505; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_uint16_t: 506; CHECK-P10: # %bb.0: # %entry 507; CHECK-P10-NEXT: pli r4, 244140625 508; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 509; CHECK-P10-NEXT: rldic r4, r4, 12, 24 510; CHECK-P10-NEXT: lhax r3, r3, r4 511; CHECK-P10-NEXT: blr 512; 513; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_uint16_t: 514; CHECK-PREP10: # %bb.0: # %entry 515; CHECK-PREP10-NEXT: lis r4, 3725 516; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 517; CHECK-PREP10-NEXT: ori r4, r4, 19025 518; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 519; CHECK-PREP10-NEXT: lhax r3, r3, r4 520; CHECK-PREP10-NEXT: blr 521entry: 522 %and = and i64 %ptr, -1099511627776 523 %or = or i64 %and, 1000000000000 524 %0 = inttoptr i64 %or to ptr 525 %1 = load i16, ptr %0, align 4096 526 ret i16 %1 527} 528 529; Function Attrs: norecurse nounwind readonly uwtable willreturn 530define dso_local signext i16 @ld_cst_align16_int16_t_uint16_t() { 531; CHECK-LABEL: ld_cst_align16_int16_t_uint16_t: 532; CHECK: # %bb.0: # %entry 533; CHECK-NEXT: lha r3, 4080(0) 534; CHECK-NEXT: blr 535entry: 536 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16 537 ret i16 %0 538} 539 540; Function Attrs: norecurse nounwind readonly uwtable willreturn 541define dso_local signext i16 @ld_cst_align32_int16_t_uint16_t() { 542; CHECK-LABEL: ld_cst_align32_int16_t_uint16_t: 543; CHECK: # %bb.0: # %entry 544; CHECK-NEXT: lis r3, 153 545; CHECK-NEXT: lha r3, -27108(r3) 546; CHECK-NEXT: blr 547entry: 548 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4 549 ret i16 %0 550} 551 552; Function Attrs: norecurse nounwind readonly uwtable willreturn 553define dso_local signext i16 @ld_cst_align64_int16_t_uint16_t() { 554; CHECK-P10-LABEL: ld_cst_align64_int16_t_uint16_t: 555; CHECK-P10: # %bb.0: # %entry 556; CHECK-P10-NEXT: pli r3, 244140625 557; CHECK-P10-NEXT: rldic r3, r3, 12, 24 558; CHECK-P10-NEXT: lha r3, 0(r3) 559; CHECK-P10-NEXT: blr 560; 561; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_uint16_t: 562; CHECK-PREP10: # %bb.0: # %entry 563; CHECK-PREP10-NEXT: lis r3, 3725 564; CHECK-PREP10-NEXT: ori r3, r3, 19025 565; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 566; CHECK-PREP10-NEXT: lha r3, 0(r3) 567; CHECK-PREP10-NEXT: blr 568entry: 569 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096 570 ret i16 %0 571} 572 573; Function Attrs: norecurse nounwind readonly uwtable willreturn 574define dso_local signext i16 @ld_0_int16_t_uint32_t(i64 %ptr) { 575; CHECK-LE-LABEL: ld_0_int16_t_uint32_t: 576; CHECK-LE: # %bb.0: # %entry 577; CHECK-LE-NEXT: lha r3, 0(r3) 578; CHECK-LE-NEXT: blr 579; 580; CHECK-BE-LABEL: ld_0_int16_t_uint32_t: 581; CHECK-BE: # %bb.0: # %entry 582; CHECK-BE-NEXT: lha r3, 2(r3) 583; CHECK-BE-NEXT: blr 584entry: 585 %0 = inttoptr i64 %ptr to ptr 586 %1 = load i32, ptr %0, align 4 587 %conv = trunc i32 %1 to i16 588 ret i16 %conv 589} 590 591; Function Attrs: norecurse nounwind readonly uwtable willreturn 592define dso_local signext i16 @ld_align16_int16_t_uint32_t(ptr nocapture readonly %ptr) { 593; CHECK-LE-LABEL: ld_align16_int16_t_uint32_t: 594; CHECK-LE: # %bb.0: # %entry 595; CHECK-LE-NEXT: lha r3, 8(r3) 596; CHECK-LE-NEXT: blr 597; 598; CHECK-BE-LABEL: ld_align16_int16_t_uint32_t: 599; CHECK-BE: # %bb.0: # %entry 600; CHECK-BE-NEXT: lha r3, 10(r3) 601; CHECK-BE-NEXT: blr 602entry: 603 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 604 %0 = load i32, ptr %add.ptr, align 4 605 %conv = trunc i32 %0 to i16 606 ret i16 %conv 607} 608 609; Function Attrs: norecurse nounwind readonly uwtable willreturn 610define dso_local signext i16 @ld_align32_int16_t_uint32_t(ptr nocapture readonly %ptr) { 611; CHECK-P10-LE-LABEL: ld_align32_int16_t_uint32_t: 612; CHECK-P10-LE: # %bb.0: # %entry 613; CHECK-P10-LE-NEXT: plha r3, 99999000(r3), 0 614; CHECK-P10-LE-NEXT: blr 615; 616; CHECK-P10-BE-LABEL: ld_align32_int16_t_uint32_t: 617; CHECK-P10-BE: # %bb.0: # %entry 618; CHECK-P10-BE-NEXT: plha r3, 99999002(r3), 0 619; CHECK-P10-BE-NEXT: blr 620; 621; CHECK-P9-LE-LABEL: ld_align32_int16_t_uint32_t: 622; CHECK-P9-LE: # %bb.0: # %entry 623; CHECK-P9-LE-NEXT: lis r4, 1525 624; CHECK-P9-LE-NEXT: ori r4, r4, 56600 625; CHECK-P9-LE-NEXT: lhax r3, r3, r4 626; CHECK-P9-LE-NEXT: blr 627; 628; CHECK-P9-BE-LABEL: ld_align32_int16_t_uint32_t: 629; CHECK-P9-BE: # %bb.0: # %entry 630; CHECK-P9-BE-NEXT: lis r4, 1525 631; CHECK-P9-BE-NEXT: ori r4, r4, 56602 632; CHECK-P9-BE-NEXT: lhax r3, r3, r4 633; CHECK-P9-BE-NEXT: blr 634; 635; CHECK-P8-LE-LABEL: ld_align32_int16_t_uint32_t: 636; CHECK-P8-LE: # %bb.0: # %entry 637; CHECK-P8-LE-NEXT: lis r4, 1525 638; CHECK-P8-LE-NEXT: ori r4, r4, 56600 639; CHECK-P8-LE-NEXT: lhax r3, r3, r4 640; CHECK-P8-LE-NEXT: blr 641; 642; CHECK-P8-BE-LABEL: ld_align32_int16_t_uint32_t: 643; CHECK-P8-BE: # %bb.0: # %entry 644; CHECK-P8-BE-NEXT: lis r4, 1525 645; CHECK-P8-BE-NEXT: ori r4, r4, 56602 646; CHECK-P8-BE-NEXT: lhax r3, r3, r4 647; CHECK-P8-BE-NEXT: blr 648entry: 649 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 650 %0 = load i32, ptr %add.ptr, align 4 651 %conv = trunc i32 %0 to i16 652 ret i16 %conv 653} 654 655; Function Attrs: norecurse nounwind readonly uwtable willreturn 656define dso_local signext i16 @ld_align64_int16_t_uint32_t(ptr nocapture readonly %ptr) { 657; CHECK-P10-LE-LABEL: ld_align64_int16_t_uint32_t: 658; CHECK-P10-LE: # %bb.0: # %entry 659; CHECK-P10-LE-NEXT: pli r4, 244140625 660; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 661; CHECK-P10-LE-NEXT: lhax r3, r3, r4 662; CHECK-P10-LE-NEXT: blr 663; 664; CHECK-P10-BE-LABEL: ld_align64_int16_t_uint32_t: 665; CHECK-P10-BE: # %bb.0: # %entry 666; CHECK-P10-BE-NEXT: pli r4, 232 667; CHECK-P10-BE-NEXT: pli r5, 3567587330 668; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 669; CHECK-P10-BE-NEXT: lhax r3, r3, r5 670; CHECK-P10-BE-NEXT: blr 671; 672; CHECK-P9-LE-LABEL: ld_align64_int16_t_uint32_t: 673; CHECK-P9-LE: # %bb.0: # %entry 674; CHECK-P9-LE-NEXT: lis r4, 3725 675; CHECK-P9-LE-NEXT: ori r4, r4, 19025 676; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 677; CHECK-P9-LE-NEXT: lhax r3, r3, r4 678; CHECK-P9-LE-NEXT: blr 679; 680; CHECK-P9-BE-LABEL: ld_align64_int16_t_uint32_t: 681; CHECK-P9-BE: # %bb.0: # %entry 682; CHECK-P9-BE-NEXT: li r4, 29 683; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 684; CHECK-P9-BE-NEXT: oris r4, r4, 54437 685; CHECK-P9-BE-NEXT: ori r4, r4, 4098 686; CHECK-P9-BE-NEXT: lhax r3, r3, r4 687; CHECK-P9-BE-NEXT: blr 688; 689; CHECK-P8-LE-LABEL: ld_align64_int16_t_uint32_t: 690; CHECK-P8-LE: # %bb.0: # %entry 691; CHECK-P8-LE-NEXT: lis r4, 3725 692; CHECK-P8-LE-NEXT: ori r4, r4, 19025 693; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 694; CHECK-P8-LE-NEXT: lhax r3, r3, r4 695; CHECK-P8-LE-NEXT: blr 696; 697; CHECK-P8-BE-LABEL: ld_align64_int16_t_uint32_t: 698; CHECK-P8-BE: # %bb.0: # %entry 699; CHECK-P8-BE-NEXT: li r4, 29 700; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 701; CHECK-P8-BE-NEXT: oris r4, r4, 54437 702; CHECK-P8-BE-NEXT: ori r4, r4, 4098 703; CHECK-P8-BE-NEXT: lhax r3, r3, r4 704; CHECK-P8-BE-NEXT: blr 705entry: 706 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 707 %0 = load i32, ptr %add.ptr, align 4 708 %conv = trunc i32 %0 to i16 709 ret i16 %conv 710} 711 712; Function Attrs: norecurse nounwind readonly uwtable willreturn 713define dso_local signext i16 @ld_reg_int16_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) { 714; CHECK-LE-LABEL: ld_reg_int16_t_uint32_t: 715; CHECK-LE: # %bb.0: # %entry 716; CHECK-LE-NEXT: lhax r3, r3, r4 717; CHECK-LE-NEXT: blr 718; 719; CHECK-BE-LABEL: ld_reg_int16_t_uint32_t: 720; CHECK-BE: # %bb.0: # %entry 721; CHECK-BE-NEXT: add r3, r3, r4 722; CHECK-BE-NEXT: lha r3, 2(r3) 723; CHECK-BE-NEXT: blr 724entry: 725 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 726 %0 = load i32, ptr %add.ptr, align 4 727 %conv = trunc i32 %0 to i16 728 ret i16 %conv 729} 730 731; Function Attrs: norecurse nounwind readonly uwtable willreturn 732define dso_local signext i16 @ld_or_int16_t_uint32_t(i64 %ptr, i8 zeroext %off) { 733; CHECK-LE-LABEL: ld_or_int16_t_uint32_t: 734; CHECK-LE: # %bb.0: # %entry 735; CHECK-LE-NEXT: or r3, r4, r3 736; CHECK-LE-NEXT: lha r3, 0(r3) 737; CHECK-LE-NEXT: blr 738; 739; CHECK-BE-LABEL: ld_or_int16_t_uint32_t: 740; CHECK-BE: # %bb.0: # %entry 741; CHECK-BE-NEXT: or r3, r4, r3 742; CHECK-BE-NEXT: lha r3, 2(r3) 743; CHECK-BE-NEXT: blr 744entry: 745 %conv = zext i8 %off to i64 746 %or = or i64 %conv, %ptr 747 %0 = inttoptr i64 %or to ptr 748 %1 = load i32, ptr %0, align 4 749 %conv1 = trunc i32 %1 to i16 750 ret i16 %conv1 751} 752 753; Function Attrs: norecurse nounwind readonly uwtable willreturn 754define dso_local signext i16 @ld_not_disjoint16_int16_t_uint32_t(i64 %ptr) { 755; CHECK-LE-LABEL: ld_not_disjoint16_int16_t_uint32_t: 756; CHECK-LE: # %bb.0: # %entry 757; CHECK-LE-NEXT: ori r3, r3, 6 758; CHECK-LE-NEXT: lha r3, 0(r3) 759; CHECK-LE-NEXT: blr 760; 761; CHECK-BE-LABEL: ld_not_disjoint16_int16_t_uint32_t: 762; CHECK-BE: # %bb.0: # %entry 763; CHECK-BE-NEXT: ori r3, r3, 6 764; CHECK-BE-NEXT: lha r3, 2(r3) 765; CHECK-BE-NEXT: blr 766entry: 767 %or = or i64 %ptr, 6 768 %0 = inttoptr i64 %or to ptr 769 %1 = load i32, ptr %0, align 4 770 %conv = trunc i32 %1 to i16 771 ret i16 %conv 772} 773 774; Function Attrs: norecurse nounwind readonly uwtable willreturn 775define dso_local signext i16 @ld_disjoint_align16_int16_t_uint32_t(i64 %ptr) { 776; CHECK-LE-LABEL: ld_disjoint_align16_int16_t_uint32_t: 777; CHECK-LE: # %bb.0: # %entry 778; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 779; CHECK-LE-NEXT: lha r3, 24(r3) 780; CHECK-LE-NEXT: blr 781; 782; CHECK-BE-LABEL: ld_disjoint_align16_int16_t_uint32_t: 783; CHECK-BE: # %bb.0: # %entry 784; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 785; CHECK-BE-NEXT: lha r3, 26(r3) 786; CHECK-BE-NEXT: blr 787entry: 788 %and = and i64 %ptr, -4096 789 %or = or i64 %and, 24 790 %0 = inttoptr i64 %or to ptr 791 %1 = load i32, ptr %0, align 8 792 %conv = trunc i32 %1 to i16 793 ret i16 %conv 794} 795 796; Function Attrs: norecurse nounwind readonly uwtable willreturn 797define dso_local signext i16 @ld_not_disjoint32_int16_t_uint32_t(i64 %ptr) { 798; CHECK-LE-LABEL: ld_not_disjoint32_int16_t_uint32_t: 799; CHECK-LE: # %bb.0: # %entry 800; CHECK-LE-NEXT: ori r3, r3, 34463 801; CHECK-LE-NEXT: oris r3, r3, 1 802; CHECK-LE-NEXT: lha r3, 0(r3) 803; CHECK-LE-NEXT: blr 804; 805; CHECK-BE-LABEL: ld_not_disjoint32_int16_t_uint32_t: 806; CHECK-BE: # %bb.0: # %entry 807; CHECK-BE-NEXT: ori r3, r3, 34463 808; CHECK-BE-NEXT: oris r3, r3, 1 809; CHECK-BE-NEXT: lha r3, 2(r3) 810; CHECK-BE-NEXT: blr 811entry: 812 %or = or i64 %ptr, 99999 813 %0 = inttoptr i64 %or to ptr 814 %1 = load i32, ptr %0, align 4 815 %conv = trunc i32 %1 to i16 816 ret i16 %conv 817} 818 819; Function Attrs: norecurse nounwind readonly uwtable willreturn 820define dso_local signext i16 @ld_disjoint_align32_int16_t_uint32_t(i64 %ptr) { 821; CHECK-P10-LE-LABEL: ld_disjoint_align32_int16_t_uint32_t: 822; CHECK-P10-LE: # %bb.0: # %entry 823; CHECK-P10-LE-NEXT: lis r4, -15264 824; CHECK-P10-LE-NEXT: and r3, r3, r4 825; CHECK-P10-LE-NEXT: plha r3, 999990000(r3), 0 826; CHECK-P10-LE-NEXT: blr 827; 828; CHECK-P10-BE-LABEL: ld_disjoint_align32_int16_t_uint32_t: 829; CHECK-P10-BE: # %bb.0: # %entry 830; CHECK-P10-BE-NEXT: lis r4, -15264 831; CHECK-P10-BE-NEXT: and r3, r3, r4 832; CHECK-P10-BE-NEXT: plha r3, 999990002(r3), 0 833; CHECK-P10-BE-NEXT: blr 834; 835; CHECK-P9-LE-LABEL: ld_disjoint_align32_int16_t_uint32_t: 836; CHECK-P9-LE: # %bb.0: # %entry 837; CHECK-P9-LE-NEXT: lis r4, -15264 838; CHECK-P9-LE-NEXT: and r3, r3, r4 839; CHECK-P9-LE-NEXT: lis r4, 15258 840; CHECK-P9-LE-NEXT: ori r4, r4, 41712 841; CHECK-P9-LE-NEXT: lhax r3, r3, r4 842; CHECK-P9-LE-NEXT: blr 843; 844; CHECK-P9-BE-LABEL: ld_disjoint_align32_int16_t_uint32_t: 845; CHECK-P9-BE: # %bb.0: # %entry 846; CHECK-P9-BE-NEXT: lis r4, -15264 847; CHECK-P9-BE-NEXT: and r3, r3, r4 848; CHECK-P9-BE-NEXT: lis r4, 15258 849; CHECK-P9-BE-NEXT: ori r4, r4, 41714 850; CHECK-P9-BE-NEXT: lhax r3, r3, r4 851; CHECK-P9-BE-NEXT: blr 852; 853; CHECK-P8-LE-LABEL: ld_disjoint_align32_int16_t_uint32_t: 854; CHECK-P8-LE: # %bb.0: # %entry 855; CHECK-P8-LE-NEXT: lis r4, -15264 856; CHECK-P8-LE-NEXT: and r3, r3, r4 857; CHECK-P8-LE-NEXT: lis r4, 15258 858; CHECK-P8-LE-NEXT: ori r4, r4, 41712 859; CHECK-P8-LE-NEXT: lhax r3, r3, r4 860; CHECK-P8-LE-NEXT: blr 861; 862; CHECK-P8-BE-LABEL: ld_disjoint_align32_int16_t_uint32_t: 863; CHECK-P8-BE: # %bb.0: # %entry 864; CHECK-P8-BE-NEXT: lis r4, -15264 865; CHECK-P8-BE-NEXT: and r3, r3, r4 866; CHECK-P8-BE-NEXT: lis r4, 15258 867; CHECK-P8-BE-NEXT: ori r4, r4, 41714 868; CHECK-P8-BE-NEXT: lhax r3, r3, r4 869; CHECK-P8-BE-NEXT: blr 870entry: 871 %and = and i64 %ptr, -1000341504 872 %or = or i64 %and, 999990000 873 %0 = inttoptr i64 %or to ptr 874 %1 = load i32, ptr %0, align 16 875 %conv = trunc i32 %1 to i16 876 ret i16 %conv 877} 878 879; Function Attrs: norecurse nounwind readonly uwtable willreturn 880define dso_local signext i16 @ld_not_disjoint64_int16_t_uint32_t(i64 %ptr) { 881; CHECK-P10-LE-LABEL: ld_not_disjoint64_int16_t_uint32_t: 882; CHECK-P10-LE: # %bb.0: # %entry 883; CHECK-P10-LE-NEXT: pli r4, 232 884; CHECK-P10-LE-NEXT: pli r5, 3567587329 885; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 886; CHECK-P10-LE-NEXT: or r3, r3, r5 887; CHECK-P10-LE-NEXT: lha r3, 0(r3) 888; CHECK-P10-LE-NEXT: blr 889; 890; CHECK-P10-BE-LABEL: ld_not_disjoint64_int16_t_uint32_t: 891; CHECK-P10-BE: # %bb.0: # %entry 892; CHECK-P10-BE-NEXT: pli r4, 232 893; CHECK-P10-BE-NEXT: pli r5, 3567587329 894; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 895; CHECK-P10-BE-NEXT: or r3, r3, r5 896; CHECK-P10-BE-NEXT: lha r3, 2(r3) 897; CHECK-P10-BE-NEXT: blr 898; 899; CHECK-P9-LE-LABEL: ld_not_disjoint64_int16_t_uint32_t: 900; CHECK-P9-LE: # %bb.0: # %entry 901; CHECK-P9-LE-NEXT: li r4, 29 902; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 903; CHECK-P9-LE-NEXT: oris r4, r4, 54437 904; CHECK-P9-LE-NEXT: ori r4, r4, 4097 905; CHECK-P9-LE-NEXT: or r3, r3, r4 906; CHECK-P9-LE-NEXT: lha r3, 0(r3) 907; CHECK-P9-LE-NEXT: blr 908; 909; CHECK-P9-BE-LABEL: ld_not_disjoint64_int16_t_uint32_t: 910; CHECK-P9-BE: # %bb.0: # %entry 911; CHECK-P9-BE-NEXT: li r4, 29 912; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 913; CHECK-P9-BE-NEXT: oris r4, r4, 54437 914; CHECK-P9-BE-NEXT: ori r4, r4, 4097 915; CHECK-P9-BE-NEXT: or r3, r3, r4 916; CHECK-P9-BE-NEXT: lha r3, 2(r3) 917; CHECK-P9-BE-NEXT: blr 918; 919; CHECK-P8-LE-LABEL: ld_not_disjoint64_int16_t_uint32_t: 920; CHECK-P8-LE: # %bb.0: # %entry 921; CHECK-P8-LE-NEXT: li r4, 29 922; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 923; CHECK-P8-LE-NEXT: oris r4, r4, 54437 924; CHECK-P8-LE-NEXT: ori r4, r4, 4097 925; CHECK-P8-LE-NEXT: or r3, r3, r4 926; CHECK-P8-LE-NEXT: lha r3, 0(r3) 927; CHECK-P8-LE-NEXT: blr 928; 929; CHECK-P8-BE-LABEL: ld_not_disjoint64_int16_t_uint32_t: 930; CHECK-P8-BE: # %bb.0: # %entry 931; CHECK-P8-BE-NEXT: li r4, 29 932; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 933; CHECK-P8-BE-NEXT: oris r4, r4, 54437 934; CHECK-P8-BE-NEXT: ori r4, r4, 4097 935; CHECK-P8-BE-NEXT: or r3, r3, r4 936; CHECK-P8-BE-NEXT: lha r3, 2(r3) 937; CHECK-P8-BE-NEXT: blr 938entry: 939 %or = or i64 %ptr, 1000000000001 940 %0 = inttoptr i64 %or to ptr 941 %1 = load i32, ptr %0, align 4 942 %conv = trunc i32 %1 to i16 943 ret i16 %conv 944} 945 946; Function Attrs: norecurse nounwind readonly uwtable willreturn 947define dso_local signext i16 @ld_disjoint_align64_int16_t_uint32_t(i64 %ptr) { 948; CHECK-P10-LE-LABEL: ld_disjoint_align64_int16_t_uint32_t: 949; CHECK-P10-LE: # %bb.0: # %entry 950; CHECK-P10-LE-NEXT: pli r4, 244140625 951; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 952; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 953; CHECK-P10-LE-NEXT: lhax r3, r3, r4 954; CHECK-P10-LE-NEXT: blr 955; 956; CHECK-P10-BE-LABEL: ld_disjoint_align64_int16_t_uint32_t: 957; CHECK-P10-BE: # %bb.0: # %entry 958; CHECK-P10-BE-NEXT: pli r4, 232 959; CHECK-P10-BE-NEXT: pli r5, 3567587330 960; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 961; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 962; CHECK-P10-BE-NEXT: lhax r3, r3, r5 963; CHECK-P10-BE-NEXT: blr 964; 965; CHECK-P9-LE-LABEL: ld_disjoint_align64_int16_t_uint32_t: 966; CHECK-P9-LE: # %bb.0: # %entry 967; CHECK-P9-LE-NEXT: lis r4, 3725 968; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 969; CHECK-P9-LE-NEXT: ori r4, r4, 19025 970; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 971; CHECK-P9-LE-NEXT: lhax r3, r3, r4 972; CHECK-P9-LE-NEXT: blr 973; 974; CHECK-P9-BE-LABEL: ld_disjoint_align64_int16_t_uint32_t: 975; CHECK-P9-BE: # %bb.0: # %entry 976; CHECK-P9-BE-NEXT: li r4, 29 977; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 978; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 979; CHECK-P9-BE-NEXT: oris r4, r4, 54437 980; CHECK-P9-BE-NEXT: ori r4, r4, 4098 981; CHECK-P9-BE-NEXT: lhax r3, r3, r4 982; CHECK-P9-BE-NEXT: blr 983; 984; CHECK-P8-LE-LABEL: ld_disjoint_align64_int16_t_uint32_t: 985; CHECK-P8-LE: # %bb.0: # %entry 986; CHECK-P8-LE-NEXT: lis r4, 3725 987; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 988; CHECK-P8-LE-NEXT: ori r4, r4, 19025 989; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 990; CHECK-P8-LE-NEXT: lhax r3, r3, r4 991; CHECK-P8-LE-NEXT: blr 992; 993; CHECK-P8-BE-LABEL: ld_disjoint_align64_int16_t_uint32_t: 994; CHECK-P8-BE: # %bb.0: # %entry 995; CHECK-P8-BE-NEXT: li r4, 29 996; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 997; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 998; CHECK-P8-BE-NEXT: oris r4, r4, 54437 999; CHECK-P8-BE-NEXT: ori r4, r4, 4098 1000; CHECK-P8-BE-NEXT: lhax r3, r3, r4 1001; CHECK-P8-BE-NEXT: blr 1002entry: 1003 %and = and i64 %ptr, -1099511627776 1004 %or = or i64 %and, 1000000000000 1005 %0 = inttoptr i64 %or to ptr 1006 %1 = load i32, ptr %0, align 4096 1007 %conv = trunc i32 %1 to i16 1008 ret i16 %conv 1009} 1010 1011; Function Attrs: norecurse nounwind readonly uwtable willreturn 1012define dso_local signext i16 @ld_cst_align16_int16_t_uint32_t() { 1013; CHECK-LE-LABEL: ld_cst_align16_int16_t_uint32_t: 1014; CHECK-LE: # %bb.0: # %entry 1015; CHECK-LE-NEXT: lha r3, 4080(0) 1016; CHECK-LE-NEXT: blr 1017; 1018; CHECK-BE-LABEL: ld_cst_align16_int16_t_uint32_t: 1019; CHECK-BE: # %bb.0: # %entry 1020; CHECK-BE-NEXT: lha r3, 4082(0) 1021; CHECK-BE-NEXT: blr 1022entry: 1023 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 16 1024 %conv = trunc i32 %0 to i16 1025 ret i16 %conv 1026} 1027 1028; Function Attrs: norecurse nounwind readonly uwtable willreturn 1029define dso_local signext i16 @ld_cst_align32_int16_t_uint32_t() { 1030; CHECK-LE-LABEL: ld_cst_align32_int16_t_uint32_t: 1031; CHECK-LE: # %bb.0: # %entry 1032; CHECK-LE-NEXT: lis r3, 153 1033; CHECK-LE-NEXT: lha r3, -27108(r3) 1034; CHECK-LE-NEXT: blr 1035; 1036; CHECK-BE-LABEL: ld_cst_align32_int16_t_uint32_t: 1037; CHECK-BE: # %bb.0: # %entry 1038; CHECK-BE-NEXT: lis r3, 153 1039; CHECK-BE-NEXT: lha r3, -27106(r3) 1040; CHECK-BE-NEXT: blr 1041entry: 1042 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 4 1043 %conv = trunc i32 %0 to i16 1044 ret i16 %conv 1045} 1046 1047; Function Attrs: norecurse nounwind readonly uwtable willreturn 1048define dso_local signext i16 @ld_cst_align64_int16_t_uint32_t() { 1049; CHECK-P10-LE-LABEL: ld_cst_align64_int16_t_uint32_t: 1050; CHECK-P10-LE: # %bb.0: # %entry 1051; CHECK-P10-LE-NEXT: pli r3, 244140625 1052; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 1053; CHECK-P10-LE-NEXT: lha r3, 0(r3) 1054; CHECK-P10-LE-NEXT: blr 1055; 1056; CHECK-P10-BE-LABEL: ld_cst_align64_int16_t_uint32_t: 1057; CHECK-P10-BE: # %bb.0: # %entry 1058; CHECK-P10-BE-NEXT: pli r3, 232 1059; CHECK-P10-BE-NEXT: pli r4, 3567587330 1060; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 1061; CHECK-P10-BE-NEXT: lha r3, 0(r4) 1062; CHECK-P10-BE-NEXT: blr 1063; 1064; CHECK-P9-LE-LABEL: ld_cst_align64_int16_t_uint32_t: 1065; CHECK-P9-LE: # %bb.0: # %entry 1066; CHECK-P9-LE-NEXT: lis r3, 3725 1067; CHECK-P9-LE-NEXT: ori r3, r3, 19025 1068; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 1069; CHECK-P9-LE-NEXT: lha r3, 0(r3) 1070; CHECK-P9-LE-NEXT: blr 1071; 1072; CHECK-P9-BE-LABEL: ld_cst_align64_int16_t_uint32_t: 1073; CHECK-P9-BE: # %bb.0: # %entry 1074; CHECK-P9-BE-NEXT: li r3, 29 1075; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 1076; CHECK-P9-BE-NEXT: oris r3, r3, 54437 1077; CHECK-P9-BE-NEXT: ori r3, r3, 4098 1078; CHECK-P9-BE-NEXT: lha r3, 0(r3) 1079; CHECK-P9-BE-NEXT: blr 1080; 1081; CHECK-P8-LE-LABEL: ld_cst_align64_int16_t_uint32_t: 1082; CHECK-P8-LE: # %bb.0: # %entry 1083; CHECK-P8-LE-NEXT: lis r3, 3725 1084; CHECK-P8-LE-NEXT: ori r3, r3, 19025 1085; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 1086; CHECK-P8-LE-NEXT: lha r3, 0(r3) 1087; CHECK-P8-LE-NEXT: blr 1088; 1089; CHECK-P8-BE-LABEL: ld_cst_align64_int16_t_uint32_t: 1090; CHECK-P8-BE: # %bb.0: # %entry 1091; CHECK-P8-BE-NEXT: li r3, 29 1092; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 1093; CHECK-P8-BE-NEXT: oris r3, r3, 54437 1094; CHECK-P8-BE-NEXT: ori r3, r3, 4098 1095; CHECK-P8-BE-NEXT: lha r3, 0(r3) 1096; CHECK-P8-BE-NEXT: blr 1097entry: 1098 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 4096 1099 %conv = trunc i32 %0 to i16 1100 ret i16 %conv 1101} 1102 1103; Function Attrs: norecurse nounwind readonly uwtable willreturn 1104define dso_local signext i16 @ld_0_int16_t_uint64_t(i64 %ptr) { 1105; CHECK-LE-LABEL: ld_0_int16_t_uint64_t: 1106; CHECK-LE: # %bb.0: # %entry 1107; CHECK-LE-NEXT: lha r3, 0(r3) 1108; CHECK-LE-NEXT: blr 1109; 1110; CHECK-BE-LABEL: ld_0_int16_t_uint64_t: 1111; CHECK-BE: # %bb.0: # %entry 1112; CHECK-BE-NEXT: lha r3, 6(r3) 1113; CHECK-BE-NEXT: blr 1114entry: 1115 %0 = inttoptr i64 %ptr to ptr 1116 %1 = load i64, ptr %0, align 8 1117 %conv = trunc i64 %1 to i16 1118 ret i16 %conv 1119} 1120 1121; Function Attrs: norecurse nounwind readonly uwtable willreturn 1122define dso_local signext i16 @ld_align16_int16_t_uint64_t(ptr nocapture readonly %ptr) { 1123; CHECK-LE-LABEL: ld_align16_int16_t_uint64_t: 1124; CHECK-LE: # %bb.0: # %entry 1125; CHECK-LE-NEXT: lha r3, 8(r3) 1126; CHECK-LE-NEXT: blr 1127; 1128; CHECK-BE-LABEL: ld_align16_int16_t_uint64_t: 1129; CHECK-BE: # %bb.0: # %entry 1130; CHECK-BE-NEXT: lha r3, 14(r3) 1131; CHECK-BE-NEXT: blr 1132entry: 1133 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 1134 %0 = load i64, ptr %add.ptr, align 8 1135 %conv = trunc i64 %0 to i16 1136 ret i16 %conv 1137} 1138 1139; Function Attrs: norecurse nounwind readonly uwtable willreturn 1140define dso_local signext i16 @ld_align32_int16_t_uint64_t(ptr nocapture readonly %ptr) { 1141; CHECK-P10-LE-LABEL: ld_align32_int16_t_uint64_t: 1142; CHECK-P10-LE: # %bb.0: # %entry 1143; CHECK-P10-LE-NEXT: plha r3, 99999000(r3), 0 1144; CHECK-P10-LE-NEXT: blr 1145; 1146; CHECK-P10-BE-LABEL: ld_align32_int16_t_uint64_t: 1147; CHECK-P10-BE: # %bb.0: # %entry 1148; CHECK-P10-BE-NEXT: plha r3, 99999006(r3), 0 1149; CHECK-P10-BE-NEXT: blr 1150; 1151; CHECK-P9-LE-LABEL: ld_align32_int16_t_uint64_t: 1152; CHECK-P9-LE: # %bb.0: # %entry 1153; CHECK-P9-LE-NEXT: lis r4, 1525 1154; CHECK-P9-LE-NEXT: ori r4, r4, 56600 1155; CHECK-P9-LE-NEXT: lhax r3, r3, r4 1156; CHECK-P9-LE-NEXT: blr 1157; 1158; CHECK-P9-BE-LABEL: ld_align32_int16_t_uint64_t: 1159; CHECK-P9-BE: # %bb.0: # %entry 1160; CHECK-P9-BE-NEXT: lis r4, 1525 1161; CHECK-P9-BE-NEXT: ori r4, r4, 56606 1162; CHECK-P9-BE-NEXT: lhax r3, r3, r4 1163; CHECK-P9-BE-NEXT: blr 1164; 1165; CHECK-P8-LE-LABEL: ld_align32_int16_t_uint64_t: 1166; CHECK-P8-LE: # %bb.0: # %entry 1167; CHECK-P8-LE-NEXT: lis r4, 1525 1168; CHECK-P8-LE-NEXT: ori r4, r4, 56600 1169; CHECK-P8-LE-NEXT: lhax r3, r3, r4 1170; CHECK-P8-LE-NEXT: blr 1171; 1172; CHECK-P8-BE-LABEL: ld_align32_int16_t_uint64_t: 1173; CHECK-P8-BE: # %bb.0: # %entry 1174; CHECK-P8-BE-NEXT: lis r4, 1525 1175; CHECK-P8-BE-NEXT: ori r4, r4, 56606 1176; CHECK-P8-BE-NEXT: lhax r3, r3, r4 1177; CHECK-P8-BE-NEXT: blr 1178entry: 1179 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 1180 %0 = load i64, ptr %add.ptr, align 8 1181 %conv = trunc i64 %0 to i16 1182 ret i16 %conv 1183} 1184 1185; Function Attrs: norecurse nounwind readonly uwtable willreturn 1186define dso_local signext i16 @ld_align64_int16_t_uint64_t(ptr nocapture readonly %ptr) { 1187; CHECK-P10-LE-LABEL: ld_align64_int16_t_uint64_t: 1188; CHECK-P10-LE: # %bb.0: # %entry 1189; CHECK-P10-LE-NEXT: pli r4, 244140625 1190; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 1191; CHECK-P10-LE-NEXT: lhax r3, r3, r4 1192; CHECK-P10-LE-NEXT: blr 1193; 1194; CHECK-P10-BE-LABEL: ld_align64_int16_t_uint64_t: 1195; CHECK-P10-BE: # %bb.0: # %entry 1196; CHECK-P10-BE-NEXT: pli r4, 232 1197; CHECK-P10-BE-NEXT: pli r5, 3567587334 1198; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 1199; CHECK-P10-BE-NEXT: lhax r3, r3, r5 1200; CHECK-P10-BE-NEXT: blr 1201; 1202; CHECK-P9-LE-LABEL: ld_align64_int16_t_uint64_t: 1203; CHECK-P9-LE: # %bb.0: # %entry 1204; CHECK-P9-LE-NEXT: lis r4, 3725 1205; CHECK-P9-LE-NEXT: ori r4, r4, 19025 1206; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 1207; CHECK-P9-LE-NEXT: lhax r3, r3, r4 1208; CHECK-P9-LE-NEXT: blr 1209; 1210; CHECK-P9-BE-LABEL: ld_align64_int16_t_uint64_t: 1211; CHECK-P9-BE: # %bb.0: # %entry 1212; CHECK-P9-BE-NEXT: li r4, 29 1213; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1214; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1215; CHECK-P9-BE-NEXT: ori r4, r4, 4102 1216; CHECK-P9-BE-NEXT: lhax r3, r3, r4 1217; CHECK-P9-BE-NEXT: blr 1218; 1219; CHECK-P8-LE-LABEL: ld_align64_int16_t_uint64_t: 1220; CHECK-P8-LE: # %bb.0: # %entry 1221; CHECK-P8-LE-NEXT: lis r4, 3725 1222; CHECK-P8-LE-NEXT: ori r4, r4, 19025 1223; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 1224; CHECK-P8-LE-NEXT: lhax r3, r3, r4 1225; CHECK-P8-LE-NEXT: blr 1226; 1227; CHECK-P8-BE-LABEL: ld_align64_int16_t_uint64_t: 1228; CHECK-P8-BE: # %bb.0: # %entry 1229; CHECK-P8-BE-NEXT: li r4, 29 1230; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1231; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1232; CHECK-P8-BE-NEXT: ori r4, r4, 4102 1233; CHECK-P8-BE-NEXT: lhax r3, r3, r4 1234; CHECK-P8-BE-NEXT: blr 1235entry: 1236 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 1237 %0 = load i64, ptr %add.ptr, align 8 1238 %conv = trunc i64 %0 to i16 1239 ret i16 %conv 1240} 1241 1242; Function Attrs: norecurse nounwind readonly uwtable willreturn 1243define dso_local signext i16 @ld_reg_int16_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) { 1244; CHECK-LE-LABEL: ld_reg_int16_t_uint64_t: 1245; CHECK-LE: # %bb.0: # %entry 1246; CHECK-LE-NEXT: lhax r3, r3, r4 1247; CHECK-LE-NEXT: blr 1248; 1249; CHECK-BE-LABEL: ld_reg_int16_t_uint64_t: 1250; CHECK-BE: # %bb.0: # %entry 1251; CHECK-BE-NEXT: add r3, r3, r4 1252; CHECK-BE-NEXT: lha r3, 6(r3) 1253; CHECK-BE-NEXT: blr 1254entry: 1255 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 1256 %0 = load i64, ptr %add.ptr, align 8 1257 %conv = trunc i64 %0 to i16 1258 ret i16 %conv 1259} 1260 1261; Function Attrs: norecurse nounwind readonly uwtable willreturn 1262define dso_local signext i16 @ld_or_int16_t_uint64_t(i64 %ptr, i8 zeroext %off) { 1263; CHECK-LE-LABEL: ld_or_int16_t_uint64_t: 1264; CHECK-LE: # %bb.0: # %entry 1265; CHECK-LE-NEXT: or r3, r4, r3 1266; CHECK-LE-NEXT: lha r3, 0(r3) 1267; CHECK-LE-NEXT: blr 1268; 1269; CHECK-BE-LABEL: ld_or_int16_t_uint64_t: 1270; CHECK-BE: # %bb.0: # %entry 1271; CHECK-BE-NEXT: or r3, r4, r3 1272; CHECK-BE-NEXT: lha r3, 6(r3) 1273; CHECK-BE-NEXT: blr 1274entry: 1275 %conv = zext i8 %off to i64 1276 %or = or i64 %conv, %ptr 1277 %0 = inttoptr i64 %or to ptr 1278 %1 = load i64, ptr %0, align 8 1279 %conv1 = trunc i64 %1 to i16 1280 ret i16 %conv1 1281} 1282 1283; Function Attrs: norecurse nounwind readonly uwtable willreturn 1284define dso_local signext i16 @ld_not_disjoint16_int16_t_uint64_t(i64 %ptr) { 1285; CHECK-LE-LABEL: ld_not_disjoint16_int16_t_uint64_t: 1286; CHECK-LE: # %bb.0: # %entry 1287; CHECK-LE-NEXT: ori r3, r3, 6 1288; CHECK-LE-NEXT: lha r3, 0(r3) 1289; CHECK-LE-NEXT: blr 1290; 1291; CHECK-BE-LABEL: ld_not_disjoint16_int16_t_uint64_t: 1292; CHECK-BE: # %bb.0: # %entry 1293; CHECK-BE-NEXT: ori r3, r3, 6 1294; CHECK-BE-NEXT: lha r3, 6(r3) 1295; CHECK-BE-NEXT: blr 1296entry: 1297 %or = or i64 %ptr, 6 1298 %0 = inttoptr i64 %or to ptr 1299 %1 = load i64, ptr %0, align 8 1300 %conv = trunc i64 %1 to i16 1301 ret i16 %conv 1302} 1303 1304; Function Attrs: norecurse nounwind readonly uwtable willreturn 1305define dso_local signext i16 @ld_disjoint_align16_int16_t_uint64_t(i64 %ptr) { 1306; CHECK-LE-LABEL: ld_disjoint_align16_int16_t_uint64_t: 1307; CHECK-LE: # %bb.0: # %entry 1308; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 1309; CHECK-LE-NEXT: lha r3, 24(r3) 1310; CHECK-LE-NEXT: blr 1311; 1312; CHECK-BE-LABEL: ld_disjoint_align16_int16_t_uint64_t: 1313; CHECK-BE: # %bb.0: # %entry 1314; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 1315; CHECK-BE-NEXT: lha r3, 30(r3) 1316; CHECK-BE-NEXT: blr 1317entry: 1318 %and = and i64 %ptr, -4096 1319 %or = or i64 %and, 24 1320 %0 = inttoptr i64 %or to ptr 1321 %1 = load i64, ptr %0, align 8 1322 %conv = trunc i64 %1 to i16 1323 ret i16 %conv 1324} 1325 1326; Function Attrs: norecurse nounwind readonly uwtable willreturn 1327define dso_local signext i16 @ld_not_disjoint32_int16_t_uint64_t(i64 %ptr) { 1328; CHECK-LE-LABEL: ld_not_disjoint32_int16_t_uint64_t: 1329; CHECK-LE: # %bb.0: # %entry 1330; CHECK-LE-NEXT: ori r3, r3, 34463 1331; CHECK-LE-NEXT: oris r3, r3, 1 1332; CHECK-LE-NEXT: lha r3, 0(r3) 1333; CHECK-LE-NEXT: blr 1334; 1335; CHECK-BE-LABEL: ld_not_disjoint32_int16_t_uint64_t: 1336; CHECK-BE: # %bb.0: # %entry 1337; CHECK-BE-NEXT: ori r3, r3, 34463 1338; CHECK-BE-NEXT: oris r3, r3, 1 1339; CHECK-BE-NEXT: lha r3, 6(r3) 1340; CHECK-BE-NEXT: blr 1341entry: 1342 %or = or i64 %ptr, 99999 1343 %0 = inttoptr i64 %or to ptr 1344 %1 = load i64, ptr %0, align 8 1345 %conv = trunc i64 %1 to i16 1346 ret i16 %conv 1347} 1348 1349; Function Attrs: norecurse nounwind readonly uwtable willreturn 1350define dso_local signext i16 @ld_disjoint_align32_int16_t_uint64_t(i64 %ptr) { 1351; CHECK-P10-LE-LABEL: ld_disjoint_align32_int16_t_uint64_t: 1352; CHECK-P10-LE: # %bb.0: # %entry 1353; CHECK-P10-LE-NEXT: lis r4, -15264 1354; CHECK-P10-LE-NEXT: and r3, r3, r4 1355; CHECK-P10-LE-NEXT: plha r3, 999990000(r3), 0 1356; CHECK-P10-LE-NEXT: blr 1357; 1358; CHECK-P10-BE-LABEL: ld_disjoint_align32_int16_t_uint64_t: 1359; CHECK-P10-BE: # %bb.0: # %entry 1360; CHECK-P10-BE-NEXT: lis r4, -15264 1361; CHECK-P10-BE-NEXT: and r3, r3, r4 1362; CHECK-P10-BE-NEXT: plha r3, 999990006(r3), 0 1363; CHECK-P10-BE-NEXT: blr 1364; 1365; CHECK-P9-LE-LABEL: ld_disjoint_align32_int16_t_uint64_t: 1366; CHECK-P9-LE: # %bb.0: # %entry 1367; CHECK-P9-LE-NEXT: lis r4, -15264 1368; CHECK-P9-LE-NEXT: and r3, r3, r4 1369; CHECK-P9-LE-NEXT: lis r4, 15258 1370; CHECK-P9-LE-NEXT: ori r4, r4, 41712 1371; CHECK-P9-LE-NEXT: lhax r3, r3, r4 1372; CHECK-P9-LE-NEXT: blr 1373; 1374; CHECK-P9-BE-LABEL: ld_disjoint_align32_int16_t_uint64_t: 1375; CHECK-P9-BE: # %bb.0: # %entry 1376; CHECK-P9-BE-NEXT: lis r4, -15264 1377; CHECK-P9-BE-NEXT: and r3, r3, r4 1378; CHECK-P9-BE-NEXT: lis r4, 15258 1379; CHECK-P9-BE-NEXT: ori r4, r4, 41718 1380; CHECK-P9-BE-NEXT: lhax r3, r3, r4 1381; CHECK-P9-BE-NEXT: blr 1382; 1383; CHECK-P8-LE-LABEL: ld_disjoint_align32_int16_t_uint64_t: 1384; CHECK-P8-LE: # %bb.0: # %entry 1385; CHECK-P8-LE-NEXT: lis r4, -15264 1386; CHECK-P8-LE-NEXT: and r3, r3, r4 1387; CHECK-P8-LE-NEXT: lis r4, 15258 1388; CHECK-P8-LE-NEXT: ori r4, r4, 41712 1389; CHECK-P8-LE-NEXT: lhax r3, r3, r4 1390; CHECK-P8-LE-NEXT: blr 1391; 1392; CHECK-P8-BE-LABEL: ld_disjoint_align32_int16_t_uint64_t: 1393; CHECK-P8-BE: # %bb.0: # %entry 1394; CHECK-P8-BE-NEXT: lis r4, -15264 1395; CHECK-P8-BE-NEXT: and r3, r3, r4 1396; CHECK-P8-BE-NEXT: lis r4, 15258 1397; CHECK-P8-BE-NEXT: ori r4, r4, 41718 1398; CHECK-P8-BE-NEXT: lhax r3, r3, r4 1399; CHECK-P8-BE-NEXT: blr 1400entry: 1401 %and = and i64 %ptr, -1000341504 1402 %or = or i64 %and, 999990000 1403 %0 = inttoptr i64 %or to ptr 1404 %1 = load i64, ptr %0, align 16 1405 %conv = trunc i64 %1 to i16 1406 ret i16 %conv 1407} 1408 1409; Function Attrs: norecurse nounwind readonly uwtable willreturn 1410define dso_local signext i16 @ld_not_disjoint64_int16_t_uint64_t(i64 %ptr) { 1411; CHECK-P10-LE-LABEL: ld_not_disjoint64_int16_t_uint64_t: 1412; CHECK-P10-LE: # %bb.0: # %entry 1413; CHECK-P10-LE-NEXT: pli r4, 232 1414; CHECK-P10-LE-NEXT: pli r5, 3567587329 1415; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 1416; CHECK-P10-LE-NEXT: or r3, r3, r5 1417; CHECK-P10-LE-NEXT: lha r3, 0(r3) 1418; CHECK-P10-LE-NEXT: blr 1419; 1420; CHECK-P10-BE-LABEL: ld_not_disjoint64_int16_t_uint64_t: 1421; CHECK-P10-BE: # %bb.0: # %entry 1422; CHECK-P10-BE-NEXT: pli r4, 232 1423; CHECK-P10-BE-NEXT: pli r5, 3567587329 1424; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 1425; CHECK-P10-BE-NEXT: or r3, r3, r5 1426; CHECK-P10-BE-NEXT: lha r3, 6(r3) 1427; CHECK-P10-BE-NEXT: blr 1428; 1429; CHECK-P9-LE-LABEL: ld_not_disjoint64_int16_t_uint64_t: 1430; CHECK-P9-LE: # %bb.0: # %entry 1431; CHECK-P9-LE-NEXT: li r4, 29 1432; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 1433; CHECK-P9-LE-NEXT: oris r4, r4, 54437 1434; CHECK-P9-LE-NEXT: ori r4, r4, 4097 1435; CHECK-P9-LE-NEXT: or r3, r3, r4 1436; CHECK-P9-LE-NEXT: lha r3, 0(r3) 1437; CHECK-P9-LE-NEXT: blr 1438; 1439; CHECK-P9-BE-LABEL: ld_not_disjoint64_int16_t_uint64_t: 1440; CHECK-P9-BE: # %bb.0: # %entry 1441; CHECK-P9-BE-NEXT: li r4, 29 1442; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1443; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1444; CHECK-P9-BE-NEXT: ori r4, r4, 4097 1445; CHECK-P9-BE-NEXT: or r3, r3, r4 1446; CHECK-P9-BE-NEXT: lha r3, 6(r3) 1447; CHECK-P9-BE-NEXT: blr 1448; 1449; CHECK-P8-LE-LABEL: ld_not_disjoint64_int16_t_uint64_t: 1450; CHECK-P8-LE: # %bb.0: # %entry 1451; CHECK-P8-LE-NEXT: li r4, 29 1452; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 1453; CHECK-P8-LE-NEXT: oris r4, r4, 54437 1454; CHECK-P8-LE-NEXT: ori r4, r4, 4097 1455; CHECK-P8-LE-NEXT: or r3, r3, r4 1456; CHECK-P8-LE-NEXT: lha r3, 0(r3) 1457; CHECK-P8-LE-NEXT: blr 1458; 1459; CHECK-P8-BE-LABEL: ld_not_disjoint64_int16_t_uint64_t: 1460; CHECK-P8-BE: # %bb.0: # %entry 1461; CHECK-P8-BE-NEXT: li r4, 29 1462; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1463; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1464; CHECK-P8-BE-NEXT: ori r4, r4, 4097 1465; CHECK-P8-BE-NEXT: or r3, r3, r4 1466; CHECK-P8-BE-NEXT: lha r3, 6(r3) 1467; CHECK-P8-BE-NEXT: blr 1468entry: 1469 %or = or i64 %ptr, 1000000000001 1470 %0 = inttoptr i64 %or to ptr 1471 %1 = load i64, ptr %0, align 8 1472 %conv = trunc i64 %1 to i16 1473 ret i16 %conv 1474} 1475 1476; Function Attrs: norecurse nounwind readonly uwtable willreturn 1477define dso_local signext i16 @ld_disjoint_align64_int16_t_uint64_t(i64 %ptr) { 1478; CHECK-P10-LE-LABEL: ld_disjoint_align64_int16_t_uint64_t: 1479; CHECK-P10-LE: # %bb.0: # %entry 1480; CHECK-P10-LE-NEXT: pli r4, 244140625 1481; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 1482; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 1483; CHECK-P10-LE-NEXT: lhax r3, r3, r4 1484; CHECK-P10-LE-NEXT: blr 1485; 1486; CHECK-P10-BE-LABEL: ld_disjoint_align64_int16_t_uint64_t: 1487; CHECK-P10-BE: # %bb.0: # %entry 1488; CHECK-P10-BE-NEXT: pli r4, 232 1489; CHECK-P10-BE-NEXT: pli r5, 3567587334 1490; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 1491; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 1492; CHECK-P10-BE-NEXT: lhax r3, r3, r5 1493; CHECK-P10-BE-NEXT: blr 1494; 1495; CHECK-P9-LE-LABEL: ld_disjoint_align64_int16_t_uint64_t: 1496; CHECK-P9-LE: # %bb.0: # %entry 1497; CHECK-P9-LE-NEXT: lis r4, 3725 1498; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 1499; CHECK-P9-LE-NEXT: ori r4, r4, 19025 1500; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 1501; CHECK-P9-LE-NEXT: lhax r3, r3, r4 1502; CHECK-P9-LE-NEXT: blr 1503; 1504; CHECK-P9-BE-LABEL: ld_disjoint_align64_int16_t_uint64_t: 1505; CHECK-P9-BE: # %bb.0: # %entry 1506; CHECK-P9-BE-NEXT: li r4, 29 1507; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 1508; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 1509; CHECK-P9-BE-NEXT: oris r4, r4, 54437 1510; CHECK-P9-BE-NEXT: ori r4, r4, 4102 1511; CHECK-P9-BE-NEXT: lhax r3, r3, r4 1512; CHECK-P9-BE-NEXT: blr 1513; 1514; CHECK-P8-LE-LABEL: ld_disjoint_align64_int16_t_uint64_t: 1515; CHECK-P8-LE: # %bb.0: # %entry 1516; CHECK-P8-LE-NEXT: lis r4, 3725 1517; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 1518; CHECK-P8-LE-NEXT: ori r4, r4, 19025 1519; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 1520; CHECK-P8-LE-NEXT: lhax r3, r3, r4 1521; CHECK-P8-LE-NEXT: blr 1522; 1523; CHECK-P8-BE-LABEL: ld_disjoint_align64_int16_t_uint64_t: 1524; CHECK-P8-BE: # %bb.0: # %entry 1525; CHECK-P8-BE-NEXT: li r4, 29 1526; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 1527; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 1528; CHECK-P8-BE-NEXT: oris r4, r4, 54437 1529; CHECK-P8-BE-NEXT: ori r4, r4, 4102 1530; CHECK-P8-BE-NEXT: lhax r3, r3, r4 1531; CHECK-P8-BE-NEXT: blr 1532entry: 1533 %and = and i64 %ptr, -1099511627776 1534 %or = or i64 %and, 1000000000000 1535 %0 = inttoptr i64 %or to ptr 1536 %1 = load i64, ptr %0, align 4096 1537 %conv = trunc i64 %1 to i16 1538 ret i16 %conv 1539} 1540 1541; Function Attrs: norecurse nounwind readonly uwtable willreturn 1542define dso_local signext i16 @ld_cst_align16_int16_t_uint64_t() { 1543; CHECK-LE-LABEL: ld_cst_align16_int16_t_uint64_t: 1544; CHECK-LE: # %bb.0: # %entry 1545; CHECK-LE-NEXT: lha r3, 4080(0) 1546; CHECK-LE-NEXT: blr 1547; 1548; CHECK-BE-LABEL: ld_cst_align16_int16_t_uint64_t: 1549; CHECK-BE: # %bb.0: # %entry 1550; CHECK-BE-NEXT: lha r3, 4086(0) 1551; CHECK-BE-NEXT: blr 1552entry: 1553 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 16 1554 %conv = trunc i64 %0 to i16 1555 ret i16 %conv 1556} 1557 1558; Function Attrs: norecurse nounwind readonly uwtable willreturn 1559define dso_local signext i16 @ld_cst_align32_int16_t_uint64_t() { 1560; CHECK-LE-LABEL: ld_cst_align32_int16_t_uint64_t: 1561; CHECK-LE: # %bb.0: # %entry 1562; CHECK-LE-NEXT: lis r3, 153 1563; CHECK-LE-NEXT: lha r3, -27108(r3) 1564; CHECK-LE-NEXT: blr 1565; 1566; CHECK-BE-LABEL: ld_cst_align32_int16_t_uint64_t: 1567; CHECK-BE: # %bb.0: # %entry 1568; CHECK-BE-NEXT: lis r3, 153 1569; CHECK-BE-NEXT: lha r3, -27102(r3) 1570; CHECK-BE-NEXT: blr 1571entry: 1572 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 8 1573 %conv = trunc i64 %0 to i16 1574 ret i16 %conv 1575} 1576 1577; Function Attrs: norecurse nounwind readonly uwtable willreturn 1578define dso_local signext i16 @ld_cst_align64_int16_t_uint64_t() { 1579; CHECK-P10-LE-LABEL: ld_cst_align64_int16_t_uint64_t: 1580; CHECK-P10-LE: # %bb.0: # %entry 1581; CHECK-P10-LE-NEXT: pli r3, 244140625 1582; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 1583; CHECK-P10-LE-NEXT: lha r3, 0(r3) 1584; CHECK-P10-LE-NEXT: blr 1585; 1586; CHECK-P10-BE-LABEL: ld_cst_align64_int16_t_uint64_t: 1587; CHECK-P10-BE: # %bb.0: # %entry 1588; CHECK-P10-BE-NEXT: pli r3, 232 1589; CHECK-P10-BE-NEXT: pli r4, 3567587334 1590; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 1591; CHECK-P10-BE-NEXT: lha r3, 0(r4) 1592; CHECK-P10-BE-NEXT: blr 1593; 1594; CHECK-P9-LE-LABEL: ld_cst_align64_int16_t_uint64_t: 1595; CHECK-P9-LE: # %bb.0: # %entry 1596; CHECK-P9-LE-NEXT: lis r3, 3725 1597; CHECK-P9-LE-NEXT: ori r3, r3, 19025 1598; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 1599; CHECK-P9-LE-NEXT: lha r3, 0(r3) 1600; CHECK-P9-LE-NEXT: blr 1601; 1602; CHECK-P9-BE-LABEL: ld_cst_align64_int16_t_uint64_t: 1603; CHECK-P9-BE: # %bb.0: # %entry 1604; CHECK-P9-BE-NEXT: li r3, 29 1605; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 1606; CHECK-P9-BE-NEXT: oris r3, r3, 54437 1607; CHECK-P9-BE-NEXT: ori r3, r3, 4102 1608; CHECK-P9-BE-NEXT: lha r3, 0(r3) 1609; CHECK-P9-BE-NEXT: blr 1610; 1611; CHECK-P8-LE-LABEL: ld_cst_align64_int16_t_uint64_t: 1612; CHECK-P8-LE: # %bb.0: # %entry 1613; CHECK-P8-LE-NEXT: lis r3, 3725 1614; CHECK-P8-LE-NEXT: ori r3, r3, 19025 1615; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 1616; CHECK-P8-LE-NEXT: lha r3, 0(r3) 1617; CHECK-P8-LE-NEXT: blr 1618; 1619; CHECK-P8-BE-LABEL: ld_cst_align64_int16_t_uint64_t: 1620; CHECK-P8-BE: # %bb.0: # %entry 1621; CHECK-P8-BE-NEXT: li r3, 29 1622; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 1623; CHECK-P8-BE-NEXT: oris r3, r3, 54437 1624; CHECK-P8-BE-NEXT: ori r3, r3, 4102 1625; CHECK-P8-BE-NEXT: lha r3, 0(r3) 1626; CHECK-P8-BE-NEXT: blr 1627entry: 1628 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 4096 1629 %conv = trunc i64 %0 to i16 1630 ret i16 %conv 1631} 1632 1633; Function Attrs: norecurse nounwind readonly uwtable willreturn 1634define dso_local signext i16 @ld_0_int16_t_float(i64 %ptr) { 1635; CHECK-LABEL: ld_0_int16_t_float: 1636; CHECK: # %bb.0: # %entry 1637; CHECK-NEXT: lfs f0, 0(r3) 1638; CHECK-NEXT: xscvdpsxws f0, f0 1639; CHECK-NEXT: mffprwz r3, f0 1640; CHECK-NEXT: extsw r3, r3 1641; CHECK-NEXT: blr 1642entry: 1643 %0 = inttoptr i64 %ptr to ptr 1644 %1 = load float, ptr %0, align 4 1645 %conv = fptosi float %1 to i16 1646 ret i16 %conv 1647} 1648 1649; Function Attrs: norecurse nounwind readonly uwtable willreturn 1650define dso_local signext i16 @ld_align16_int16_t_float(ptr nocapture readonly %ptr) { 1651; CHECK-LABEL: ld_align16_int16_t_float: 1652; CHECK: # %bb.0: # %entry 1653; CHECK-NEXT: lfs f0, 8(r3) 1654; CHECK-NEXT: xscvdpsxws f0, f0 1655; CHECK-NEXT: mffprwz r3, f0 1656; CHECK-NEXT: extsw r3, r3 1657; CHECK-NEXT: blr 1658entry: 1659 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 1660 %0 = load float, ptr %add.ptr, align 4 1661 %conv = fptosi float %0 to i16 1662 ret i16 %conv 1663} 1664 1665; Function Attrs: norecurse nounwind readonly uwtable willreturn 1666define dso_local signext i16 @ld_align32_int16_t_float(ptr nocapture readonly %ptr) { 1667; CHECK-P10-LABEL: ld_align32_int16_t_float: 1668; CHECK-P10: # %bb.0: # %entry 1669; CHECK-P10-NEXT: plfs f0, 99999000(r3), 0 1670; CHECK-P10-NEXT: xscvdpsxws f0, f0 1671; CHECK-P10-NEXT: mffprwz r3, f0 1672; CHECK-P10-NEXT: extsw r3, r3 1673; CHECK-P10-NEXT: blr 1674; 1675; CHECK-PREP10-LABEL: ld_align32_int16_t_float: 1676; CHECK-PREP10: # %bb.0: # %entry 1677; CHECK-PREP10-NEXT: lis r4, 1525 1678; CHECK-PREP10-NEXT: ori r4, r4, 56600 1679; CHECK-PREP10-NEXT: lfsx f0, r3, r4 1680; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 1681; CHECK-PREP10-NEXT: mffprwz r3, f0 1682; CHECK-PREP10-NEXT: extsw r3, r3 1683; CHECK-PREP10-NEXT: blr 1684entry: 1685 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 1686 %0 = load float, ptr %add.ptr, align 4 1687 %conv = fptosi float %0 to i16 1688 ret i16 %conv 1689} 1690 1691; Function Attrs: norecurse nounwind readonly uwtable willreturn 1692define dso_local signext i16 @ld_align64_int16_t_float(ptr nocapture readonly %ptr) { 1693; CHECK-P10-LABEL: ld_align64_int16_t_float: 1694; CHECK-P10: # %bb.0: # %entry 1695; CHECK-P10-NEXT: pli r4, 244140625 1696; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1697; CHECK-P10-NEXT: lfsx f0, r3, r4 1698; CHECK-P10-NEXT: xscvdpsxws f0, f0 1699; CHECK-P10-NEXT: mffprwz r3, f0 1700; CHECK-P10-NEXT: extsw r3, r3 1701; CHECK-P10-NEXT: blr 1702; 1703; CHECK-PREP10-LABEL: ld_align64_int16_t_float: 1704; CHECK-PREP10: # %bb.0: # %entry 1705; CHECK-PREP10-NEXT: lis r4, 3725 1706; CHECK-PREP10-NEXT: ori r4, r4, 19025 1707; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1708; CHECK-PREP10-NEXT: lfsx f0, r3, r4 1709; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 1710; CHECK-PREP10-NEXT: mffprwz r3, f0 1711; CHECK-PREP10-NEXT: extsw r3, r3 1712; CHECK-PREP10-NEXT: blr 1713entry: 1714 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 1715 %0 = load float, ptr %add.ptr, align 4 1716 %conv = fptosi float %0 to i16 1717 ret i16 %conv 1718} 1719 1720; Function Attrs: norecurse nounwind readonly uwtable willreturn 1721define dso_local signext i16 @ld_reg_int16_t_float(ptr nocapture readonly %ptr, i64 %off) { 1722; CHECK-LABEL: ld_reg_int16_t_float: 1723; CHECK: # %bb.0: # %entry 1724; CHECK-NEXT: lfsx f0, r3, r4 1725; CHECK-NEXT: xscvdpsxws f0, f0 1726; CHECK-NEXT: mffprwz r3, f0 1727; CHECK-NEXT: extsw r3, r3 1728; CHECK-NEXT: blr 1729entry: 1730 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 1731 %0 = load float, ptr %add.ptr, align 4 1732 %conv = fptosi float %0 to i16 1733 ret i16 %conv 1734} 1735 1736; Function Attrs: norecurse nounwind readonly uwtable willreturn 1737define dso_local signext i16 @ld_or_int16_t_float(i64 %ptr, i8 zeroext %off) { 1738; CHECK-LABEL: ld_or_int16_t_float: 1739; CHECK: # %bb.0: # %entry 1740; CHECK-NEXT: or r3, r4, r3 1741; CHECK-NEXT: lfs f0, 0(r3) 1742; CHECK-NEXT: xscvdpsxws f0, f0 1743; CHECK-NEXT: mffprwz r3, f0 1744; CHECK-NEXT: extsw r3, r3 1745; CHECK-NEXT: blr 1746entry: 1747 %conv = zext i8 %off to i64 1748 %or = or i64 %conv, %ptr 1749 %0 = inttoptr i64 %or to ptr 1750 %1 = load float, ptr %0, align 4 1751 %conv1 = fptosi float %1 to i16 1752 ret i16 %conv1 1753} 1754 1755; Function Attrs: norecurse nounwind readonly uwtable willreturn 1756define dso_local signext i16 @ld_not_disjoint16_int16_t_float(i64 %ptr) { 1757; CHECK-LABEL: ld_not_disjoint16_int16_t_float: 1758; CHECK: # %bb.0: # %entry 1759; CHECK-NEXT: ori r3, r3, 6 1760; CHECK-NEXT: lfs f0, 0(r3) 1761; CHECK-NEXT: xscvdpsxws f0, f0 1762; CHECK-NEXT: mffprwz r3, f0 1763; CHECK-NEXT: extsw r3, r3 1764; CHECK-NEXT: blr 1765entry: 1766 %or = or i64 %ptr, 6 1767 %0 = inttoptr i64 %or to ptr 1768 %1 = load float, ptr %0, align 4 1769 %conv = fptosi float %1 to i16 1770 ret i16 %conv 1771} 1772 1773; Function Attrs: norecurse nounwind readonly uwtable willreturn 1774define dso_local signext i16 @ld_disjoint_align16_int16_t_float(i64 %ptr) { 1775; CHECK-LABEL: ld_disjoint_align16_int16_t_float: 1776; CHECK: # %bb.0: # %entry 1777; CHECK-NEXT: rldicr r3, r3, 0, 51 1778; CHECK-NEXT: lfs f0, 24(r3) 1779; CHECK-NEXT: xscvdpsxws f0, f0 1780; CHECK-NEXT: mffprwz r3, f0 1781; CHECK-NEXT: extsw r3, r3 1782; CHECK-NEXT: blr 1783entry: 1784 %and = and i64 %ptr, -4096 1785 %or = or i64 %and, 24 1786 %0 = inttoptr i64 %or to ptr 1787 %1 = load float, ptr %0, align 8 1788 %conv = fptosi float %1 to i16 1789 ret i16 %conv 1790} 1791 1792; Function Attrs: norecurse nounwind readonly uwtable willreturn 1793define dso_local signext i16 @ld_not_disjoint32_int16_t_float(i64 %ptr) { 1794; CHECK-LABEL: ld_not_disjoint32_int16_t_float: 1795; CHECK: # %bb.0: # %entry 1796; CHECK-NEXT: ori r3, r3, 34463 1797; CHECK-NEXT: oris r3, r3, 1 1798; CHECK-NEXT: lfs f0, 0(r3) 1799; CHECK-NEXT: xscvdpsxws f0, f0 1800; CHECK-NEXT: mffprwz r3, f0 1801; CHECK-NEXT: extsw r3, r3 1802; CHECK-NEXT: blr 1803entry: 1804 %or = or i64 %ptr, 99999 1805 %0 = inttoptr i64 %or to ptr 1806 %1 = load float, ptr %0, align 4 1807 %conv = fptosi float %1 to i16 1808 ret i16 %conv 1809} 1810 1811; Function Attrs: norecurse nounwind readonly uwtable willreturn 1812define dso_local signext i16 @ld_disjoint_align32_int16_t_float(i64 %ptr) { 1813; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_float: 1814; CHECK-P10: # %bb.0: # %entry 1815; CHECK-P10-NEXT: lis r4, -15264 1816; CHECK-P10-NEXT: and r3, r3, r4 1817; CHECK-P10-NEXT: plfs f0, 999990000(r3), 0 1818; CHECK-P10-NEXT: xscvdpsxws f0, f0 1819; CHECK-P10-NEXT: mffprwz r3, f0 1820; CHECK-P10-NEXT: extsw r3, r3 1821; CHECK-P10-NEXT: blr 1822; 1823; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_float: 1824; CHECK-PREP10: # %bb.0: # %entry 1825; CHECK-PREP10-NEXT: lis r4, -15264 1826; CHECK-PREP10-NEXT: and r3, r3, r4 1827; CHECK-PREP10-NEXT: lis r4, 15258 1828; CHECK-PREP10-NEXT: ori r4, r4, 41712 1829; CHECK-PREP10-NEXT: lfsx f0, r3, r4 1830; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 1831; CHECK-PREP10-NEXT: mffprwz r3, f0 1832; CHECK-PREP10-NEXT: extsw r3, r3 1833; CHECK-PREP10-NEXT: blr 1834entry: 1835 %and = and i64 %ptr, -1000341504 1836 %or = or i64 %and, 999990000 1837 %0 = inttoptr i64 %or to ptr 1838 %1 = load float, ptr %0, align 16 1839 %conv = fptosi float %1 to i16 1840 ret i16 %conv 1841} 1842 1843; Function Attrs: norecurse nounwind readonly uwtable willreturn 1844define dso_local signext i16 @ld_not_disjoint64_int16_t_float(i64 %ptr) { 1845; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_float: 1846; CHECK-P10: # %bb.0: # %entry 1847; CHECK-P10-NEXT: pli r4, 232 1848; CHECK-P10-NEXT: pli r5, 3567587329 1849; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 1850; CHECK-P10-NEXT: or r3, r3, r5 1851; CHECK-P10-NEXT: lfs f0, 0(r3) 1852; CHECK-P10-NEXT: xscvdpsxws f0, f0 1853; CHECK-P10-NEXT: mffprwz r3, f0 1854; CHECK-P10-NEXT: extsw r3, r3 1855; CHECK-P10-NEXT: blr 1856; 1857; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_float: 1858; CHECK-PREP10: # %bb.0: # %entry 1859; CHECK-PREP10-NEXT: li r4, 29 1860; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 1861; CHECK-PREP10-NEXT: oris r4, r4, 54437 1862; CHECK-PREP10-NEXT: ori r4, r4, 4097 1863; CHECK-PREP10-NEXT: or r3, r3, r4 1864; CHECK-PREP10-NEXT: lfs f0, 0(r3) 1865; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 1866; CHECK-PREP10-NEXT: mffprwz r3, f0 1867; CHECK-PREP10-NEXT: extsw r3, r3 1868; CHECK-PREP10-NEXT: blr 1869entry: 1870 %or = or i64 %ptr, 1000000000001 1871 %0 = inttoptr i64 %or to ptr 1872 %1 = load float, ptr %0, align 4 1873 %conv = fptosi float %1 to i16 1874 ret i16 %conv 1875} 1876 1877 1878; Function Attrs: norecurse nounwind readonly uwtable willreturn 1879define dso_local signext i16 @ld_disjoint_align64_int16_t_float(i64 %ptr) { 1880; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_float: 1881; CHECK-P10: # %bb.0: # %entry 1882; CHECK-P10-NEXT: pli r4, 244140625 1883; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 1884; CHECK-P10-NEXT: rldic r4, r4, 12, 24 1885; CHECK-P10-NEXT: lfsx f0, r3, r4 1886; CHECK-P10-NEXT: xscvdpsxws f0, f0 1887; CHECK-P10-NEXT: mffprwz r3, f0 1888; CHECK-P10-NEXT: extsw r3, r3 1889; CHECK-P10-NEXT: blr 1890; 1891; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_float: 1892; CHECK-PREP10: # %bb.0: # %entry 1893; CHECK-PREP10-NEXT: lis r4, 3725 1894; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 1895; CHECK-PREP10-NEXT: ori r4, r4, 19025 1896; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 1897; CHECK-PREP10-NEXT: lfsx f0, r3, r4 1898; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 1899; CHECK-PREP10-NEXT: mffprwz r3, f0 1900; CHECK-PREP10-NEXT: extsw r3, r3 1901; CHECK-PREP10-NEXT: blr 1902entry: 1903 %and = and i64 %ptr, -1099511627776 1904 %or = or i64 %and, 1000000000000 1905 %0 = inttoptr i64 %or to ptr 1906 %1 = load float, ptr %0, align 4096 1907 %conv = fptosi float %1 to i16 1908 ret i16 %conv 1909} 1910 1911; Function Attrs: norecurse nounwind readonly uwtable willreturn 1912define dso_local signext i16 @ld_cst_align16_int16_t_float() { 1913; CHECK-LABEL: ld_cst_align16_int16_t_float: 1914; CHECK: # %bb.0: # %entry 1915; CHECK-NEXT: lfs f0, 4080(0) 1916; CHECK-NEXT: xscvdpsxws f0, f0 1917; CHECK-NEXT: mffprwz r3, f0 1918; CHECK-NEXT: extsw r3, r3 1919; CHECK-NEXT: blr 1920entry: 1921 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 16 1922 %conv = fptosi float %0 to i16 1923 ret i16 %conv 1924} 1925 1926; Function Attrs: norecurse nounwind readonly uwtable willreturn 1927define dso_local signext i16 @ld_cst_align32_int16_t_float() { 1928; CHECK-LABEL: ld_cst_align32_int16_t_float: 1929; CHECK: # %bb.0: # %entry 1930; CHECK-NEXT: lis r3, 153 1931; CHECK-NEXT: lfs f0, -27108(r3) 1932; CHECK-NEXT: xscvdpsxws f0, f0 1933; CHECK-NEXT: mffprwz r3, f0 1934; CHECK-NEXT: extsw r3, r3 1935; CHECK-NEXT: blr 1936entry: 1937 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 4 1938 %conv = fptosi float %0 to i16 1939 ret i16 %conv 1940} 1941 1942; Function Attrs: norecurse nounwind readonly uwtable willreturn 1943define dso_local signext i16 @ld_cst_align64_int16_t_float() { 1944; CHECK-P10-LABEL: ld_cst_align64_int16_t_float: 1945; CHECK-P10: # %bb.0: # %entry 1946; CHECK-P10-NEXT: pli r3, 244140625 1947; CHECK-P10-NEXT: rldic r3, r3, 12, 24 1948; CHECK-P10-NEXT: lfs f0, 0(r3) 1949; CHECK-P10-NEXT: xscvdpsxws f0, f0 1950; CHECK-P10-NEXT: mffprwz r3, f0 1951; CHECK-P10-NEXT: extsw r3, r3 1952; CHECK-P10-NEXT: blr 1953; 1954; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_float: 1955; CHECK-PREP10: # %bb.0: # %entry 1956; CHECK-PREP10-NEXT: lis r3, 3725 1957; CHECK-PREP10-NEXT: ori r3, r3, 19025 1958; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 1959; CHECK-PREP10-NEXT: lfs f0, 0(r3) 1960; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 1961; CHECK-PREP10-NEXT: mffprwz r3, f0 1962; CHECK-PREP10-NEXT: extsw r3, r3 1963; CHECK-PREP10-NEXT: blr 1964entry: 1965 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 4096 1966 %conv = fptosi float %0 to i16 1967 ret i16 %conv 1968} 1969 1970; Function Attrs: norecurse nounwind readonly uwtable willreturn 1971define dso_local signext i16 @ld_0_int16_t_double(i64 %ptr) { 1972; CHECK-LABEL: ld_0_int16_t_double: 1973; CHECK: # %bb.0: # %entry 1974; CHECK-NEXT: lfd f0, 0(r3) 1975; CHECK-NEXT: xscvdpsxws f0, f0 1976; CHECK-NEXT: mffprwz r3, f0 1977; CHECK-NEXT: extsw r3, r3 1978; CHECK-NEXT: blr 1979entry: 1980 %0 = inttoptr i64 %ptr to ptr 1981 %1 = load double, ptr %0, align 8 1982 %conv = fptosi double %1 to i16 1983 ret i16 %conv 1984} 1985 1986; Function Attrs: norecurse nounwind readonly uwtable willreturn 1987define dso_local signext i16 @ld_align16_int16_t_double(ptr nocapture readonly %ptr) { 1988; CHECK-LABEL: ld_align16_int16_t_double: 1989; CHECK: # %bb.0: # %entry 1990; CHECK-NEXT: lfd f0, 8(r3) 1991; CHECK-NEXT: xscvdpsxws f0, f0 1992; CHECK-NEXT: mffprwz r3, f0 1993; CHECK-NEXT: extsw r3, r3 1994; CHECK-NEXT: blr 1995entry: 1996 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 1997 %0 = load double, ptr %add.ptr, align 8 1998 %conv = fptosi double %0 to i16 1999 ret i16 %conv 2000} 2001 2002; Function Attrs: norecurse nounwind readonly uwtable willreturn 2003define dso_local signext i16 @ld_align32_int16_t_double(ptr nocapture readonly %ptr) { 2004; CHECK-P10-LABEL: ld_align32_int16_t_double: 2005; CHECK-P10: # %bb.0: # %entry 2006; CHECK-P10-NEXT: plfd f0, 99999000(r3), 0 2007; CHECK-P10-NEXT: xscvdpsxws f0, f0 2008; CHECK-P10-NEXT: mffprwz r3, f0 2009; CHECK-P10-NEXT: extsw r3, r3 2010; CHECK-P10-NEXT: blr 2011; 2012; CHECK-PREP10-LABEL: ld_align32_int16_t_double: 2013; CHECK-PREP10: # %bb.0: # %entry 2014; CHECK-PREP10-NEXT: lis r4, 1525 2015; CHECK-PREP10-NEXT: ori r4, r4, 56600 2016; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2017; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2018; CHECK-PREP10-NEXT: mffprwz r3, f0 2019; CHECK-PREP10-NEXT: extsw r3, r3 2020; CHECK-PREP10-NEXT: blr 2021entry: 2022 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2023 %0 = load double, ptr %add.ptr, align 8 2024 %conv = fptosi double %0 to i16 2025 ret i16 %conv 2026} 2027 2028; Function Attrs: norecurse nounwind readonly uwtable willreturn 2029define dso_local signext i16 @ld_align64_int16_t_double(ptr nocapture readonly %ptr) { 2030; CHECK-P10-LABEL: ld_align64_int16_t_double: 2031; CHECK-P10: # %bb.0: # %entry 2032; CHECK-P10-NEXT: pli r4, 244140625 2033; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2034; CHECK-P10-NEXT: lfdx f0, r3, r4 2035; CHECK-P10-NEXT: xscvdpsxws f0, f0 2036; CHECK-P10-NEXT: mffprwz r3, f0 2037; CHECK-P10-NEXT: extsw r3, r3 2038; CHECK-P10-NEXT: blr 2039; 2040; CHECK-PREP10-LABEL: ld_align64_int16_t_double: 2041; CHECK-PREP10: # %bb.0: # %entry 2042; CHECK-PREP10-NEXT: lis r4, 3725 2043; CHECK-PREP10-NEXT: ori r4, r4, 19025 2044; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2045; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2046; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2047; CHECK-PREP10-NEXT: mffprwz r3, f0 2048; CHECK-PREP10-NEXT: extsw r3, r3 2049; CHECK-PREP10-NEXT: blr 2050entry: 2051 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2052 %0 = load double, ptr %add.ptr, align 8 2053 %conv = fptosi double %0 to i16 2054 ret i16 %conv 2055} 2056 2057; Function Attrs: norecurse nounwind readonly uwtable willreturn 2058define dso_local signext i16 @ld_reg_int16_t_double(ptr nocapture readonly %ptr, i64 %off) { 2059; CHECK-LABEL: ld_reg_int16_t_double: 2060; CHECK: # %bb.0: # %entry 2061; CHECK-NEXT: lfdx f0, r3, r4 2062; CHECK-NEXT: xscvdpsxws f0, f0 2063; CHECK-NEXT: mffprwz r3, f0 2064; CHECK-NEXT: extsw r3, r3 2065; CHECK-NEXT: blr 2066entry: 2067 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2068 %0 = load double, ptr %add.ptr, align 8 2069 %conv = fptosi double %0 to i16 2070 ret i16 %conv 2071} 2072 2073; Function Attrs: norecurse nounwind readonly uwtable willreturn 2074define dso_local signext i16 @ld_or_int16_t_double(i64 %ptr, i8 zeroext %off) { 2075; CHECK-LABEL: ld_or_int16_t_double: 2076; CHECK: # %bb.0: # %entry 2077; CHECK-NEXT: or r3, r4, r3 2078; CHECK-NEXT: lfd f0, 0(r3) 2079; CHECK-NEXT: xscvdpsxws f0, f0 2080; CHECK-NEXT: mffprwz r3, f0 2081; CHECK-NEXT: extsw r3, r3 2082; CHECK-NEXT: blr 2083entry: 2084 %conv = zext i8 %off to i64 2085 %or = or i64 %conv, %ptr 2086 %0 = inttoptr i64 %or to ptr 2087 %1 = load double, ptr %0, align 8 2088 %conv1 = fptosi double %1 to i16 2089 ret i16 %conv1 2090} 2091 2092; Function Attrs: norecurse nounwind readonly uwtable willreturn 2093define dso_local signext i16 @ld_not_disjoint16_int16_t_double(i64 %ptr) { 2094; CHECK-LABEL: ld_not_disjoint16_int16_t_double: 2095; CHECK: # %bb.0: # %entry 2096; CHECK-NEXT: ori r3, r3, 6 2097; CHECK-NEXT: lfd f0, 0(r3) 2098; CHECK-NEXT: xscvdpsxws f0, f0 2099; CHECK-NEXT: mffprwz r3, f0 2100; CHECK-NEXT: extsw r3, r3 2101; CHECK-NEXT: blr 2102entry: 2103 %or = or i64 %ptr, 6 2104 %0 = inttoptr i64 %or to ptr 2105 %1 = load double, ptr %0, align 8 2106 %conv = fptosi double %1 to i16 2107 ret i16 %conv 2108} 2109 2110; Function Attrs: norecurse nounwind readonly uwtable willreturn 2111define dso_local signext i16 @ld_disjoint_align16_int16_t_double(i64 %ptr) { 2112; CHECK-LABEL: ld_disjoint_align16_int16_t_double: 2113; CHECK: # %bb.0: # %entry 2114; CHECK-NEXT: rldicr r3, r3, 0, 51 2115; CHECK-NEXT: lfd f0, 24(r3) 2116; CHECK-NEXT: xscvdpsxws f0, f0 2117; CHECK-NEXT: mffprwz r3, f0 2118; CHECK-NEXT: extsw r3, r3 2119; CHECK-NEXT: blr 2120entry: 2121 %and = and i64 %ptr, -4096 2122 %or = or i64 %and, 24 2123 %0 = inttoptr i64 %or to ptr 2124 %1 = load double, ptr %0, align 8 2125 %conv = fptosi double %1 to i16 2126 ret i16 %conv 2127} 2128 2129; Function Attrs: norecurse nounwind readonly uwtable willreturn 2130define dso_local signext i16 @ld_not_disjoint32_int16_t_double(i64 %ptr) { 2131; CHECK-LABEL: ld_not_disjoint32_int16_t_double: 2132; CHECK: # %bb.0: # %entry 2133; CHECK-NEXT: ori r3, r3, 34463 2134; CHECK-NEXT: oris r3, r3, 1 2135; CHECK-NEXT: lfd f0, 0(r3) 2136; CHECK-NEXT: xscvdpsxws f0, f0 2137; CHECK-NEXT: mffprwz r3, f0 2138; CHECK-NEXT: extsw r3, r3 2139; CHECK-NEXT: blr 2140entry: 2141 %or = or i64 %ptr, 99999 2142 %0 = inttoptr i64 %or to ptr 2143 %1 = load double, ptr %0, align 8 2144 %conv = fptosi double %1 to i16 2145 ret i16 %conv 2146} 2147 2148; Function Attrs: norecurse nounwind readonly uwtable willreturn 2149define dso_local signext i16 @ld_disjoint_align32_int16_t_double(i64 %ptr) { 2150; CHECK-P10-LABEL: ld_disjoint_align32_int16_t_double: 2151; CHECK-P10: # %bb.0: # %entry 2152; CHECK-P10-NEXT: lis r4, -15264 2153; CHECK-P10-NEXT: and r3, r3, r4 2154; CHECK-P10-NEXT: plfd f0, 999990000(r3), 0 2155; CHECK-P10-NEXT: xscvdpsxws f0, f0 2156; CHECK-P10-NEXT: mffprwz r3, f0 2157; CHECK-P10-NEXT: extsw r3, r3 2158; CHECK-P10-NEXT: blr 2159; 2160; CHECK-PREP10-LABEL: ld_disjoint_align32_int16_t_double: 2161; CHECK-PREP10: # %bb.0: # %entry 2162; CHECK-PREP10-NEXT: lis r4, -15264 2163; CHECK-PREP10-NEXT: and r3, r3, r4 2164; CHECK-PREP10-NEXT: lis r4, 15258 2165; CHECK-PREP10-NEXT: ori r4, r4, 41712 2166; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2167; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2168; CHECK-PREP10-NEXT: mffprwz r3, f0 2169; CHECK-PREP10-NEXT: extsw r3, r3 2170; CHECK-PREP10-NEXT: blr 2171entry: 2172 %and = and i64 %ptr, -1000341504 2173 %or = or i64 %and, 999990000 2174 %0 = inttoptr i64 %or to ptr 2175 %1 = load double, ptr %0, align 16 2176 %conv = fptosi double %1 to i16 2177 ret i16 %conv 2178} 2179 2180; Function Attrs: norecurse nounwind readonly uwtable willreturn 2181define dso_local signext i16 @ld_not_disjoint64_int16_t_double(i64 %ptr) { 2182; CHECK-P10-LABEL: ld_not_disjoint64_int16_t_double: 2183; CHECK-P10: # %bb.0: # %entry 2184; CHECK-P10-NEXT: pli r4, 232 2185; CHECK-P10-NEXT: pli r5, 3567587329 2186; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2187; CHECK-P10-NEXT: or r3, r3, r5 2188; CHECK-P10-NEXT: lfd f0, 0(r3) 2189; CHECK-P10-NEXT: xscvdpsxws f0, f0 2190; CHECK-P10-NEXT: mffprwz r3, f0 2191; CHECK-P10-NEXT: extsw r3, r3 2192; CHECK-P10-NEXT: blr 2193; 2194; CHECK-PREP10-LABEL: ld_not_disjoint64_int16_t_double: 2195; CHECK-PREP10: # %bb.0: # %entry 2196; CHECK-PREP10-NEXT: li r4, 29 2197; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2198; CHECK-PREP10-NEXT: oris r4, r4, 54437 2199; CHECK-PREP10-NEXT: ori r4, r4, 4097 2200; CHECK-PREP10-NEXT: or r3, r3, r4 2201; CHECK-PREP10-NEXT: lfd f0, 0(r3) 2202; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2203; CHECK-PREP10-NEXT: mffprwz r3, f0 2204; CHECK-PREP10-NEXT: extsw r3, r3 2205; CHECK-PREP10-NEXT: blr 2206entry: 2207 %or = or i64 %ptr, 1000000000001 2208 %0 = inttoptr i64 %or to ptr 2209 %1 = load double, ptr %0, align 8 2210 %conv = fptosi double %1 to i16 2211 ret i16 %conv 2212} 2213 2214; Function Attrs: norecurse nounwind readonly uwtable willreturn 2215define dso_local signext i16 @ld_disjoint_align64_int16_t_double(i64 %ptr) { 2216; CHECK-P10-LABEL: ld_disjoint_align64_int16_t_double: 2217; CHECK-P10: # %bb.0: # %entry 2218; CHECK-P10-NEXT: pli r4, 244140625 2219; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2220; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2221; CHECK-P10-NEXT: lfdx f0, r3, r4 2222; CHECK-P10-NEXT: xscvdpsxws f0, f0 2223; CHECK-P10-NEXT: mffprwz r3, f0 2224; CHECK-P10-NEXT: extsw r3, r3 2225; CHECK-P10-NEXT: blr 2226; 2227; CHECK-PREP10-LABEL: ld_disjoint_align64_int16_t_double: 2228; CHECK-PREP10: # %bb.0: # %entry 2229; CHECK-PREP10-NEXT: lis r4, 3725 2230; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2231; CHECK-PREP10-NEXT: ori r4, r4, 19025 2232; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2233; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2234; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2235; CHECK-PREP10-NEXT: mffprwz r3, f0 2236; CHECK-PREP10-NEXT: extsw r3, r3 2237; CHECK-PREP10-NEXT: blr 2238entry: 2239 %and = and i64 %ptr, -1099511627776 2240 %or = or i64 %and, 1000000000000 2241 %0 = inttoptr i64 %or to ptr 2242 %1 = load double, ptr %0, align 4096 2243 %conv = fptosi double %1 to i16 2244 ret i16 %conv 2245} 2246 2247; Function Attrs: norecurse nounwind readonly uwtable willreturn 2248define dso_local signext i16 @ld_cst_align16_int16_t_double() { 2249; CHECK-LABEL: ld_cst_align16_int16_t_double: 2250; CHECK: # %bb.0: # %entry 2251; CHECK-NEXT: lfd f0, 4080(0) 2252; CHECK-NEXT: xscvdpsxws f0, f0 2253; CHECK-NEXT: mffprwz r3, f0 2254; CHECK-NEXT: extsw r3, r3 2255; CHECK-NEXT: blr 2256entry: 2257 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 16 2258 %conv = fptosi double %0 to i16 2259 ret i16 %conv 2260} 2261 2262; Function Attrs: norecurse nounwind readonly uwtable willreturn 2263define dso_local signext i16 @ld_cst_align32_int16_t_double() { 2264; CHECK-LABEL: ld_cst_align32_int16_t_double: 2265; CHECK: # %bb.0: # %entry 2266; CHECK-NEXT: lis r3, 153 2267; CHECK-NEXT: lfd f0, -27108(r3) 2268; CHECK-NEXT: xscvdpsxws f0, f0 2269; CHECK-NEXT: mffprwz r3, f0 2270; CHECK-NEXT: extsw r3, r3 2271; CHECK-NEXT: blr 2272entry: 2273 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 8 2274 %conv = fptosi double %0 to i16 2275 ret i16 %conv 2276} 2277 2278; Function Attrs: norecurse nounwind readonly uwtable willreturn 2279define dso_local signext i16 @ld_cst_align64_int16_t_double() { 2280; CHECK-P10-LABEL: ld_cst_align64_int16_t_double: 2281; CHECK-P10: # %bb.0: # %entry 2282; CHECK-P10-NEXT: pli r3, 244140625 2283; CHECK-P10-NEXT: rldic r3, r3, 12, 24 2284; CHECK-P10-NEXT: lfd f0, 0(r3) 2285; CHECK-P10-NEXT: xscvdpsxws f0, f0 2286; CHECK-P10-NEXT: mffprwz r3, f0 2287; CHECK-P10-NEXT: extsw r3, r3 2288; CHECK-P10-NEXT: blr 2289; 2290; CHECK-PREP10-LABEL: ld_cst_align64_int16_t_double: 2291; CHECK-PREP10: # %bb.0: # %entry 2292; CHECK-PREP10-NEXT: lis r3, 3725 2293; CHECK-PREP10-NEXT: ori r3, r3, 19025 2294; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 2295; CHECK-PREP10-NEXT: lfd f0, 0(r3) 2296; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 2297; CHECK-PREP10-NEXT: mffprwz r3, f0 2298; CHECK-PREP10-NEXT: extsw r3, r3 2299; CHECK-PREP10-NEXT: blr 2300entry: 2301 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 4096 2302 %conv = fptosi double %0 to i16 2303 ret i16 %conv 2304} 2305 2306; Function Attrs: norecurse nounwind readonly uwtable willreturn 2307define dso_local zeroext i16 @ld_0_uint16_t_uint8_t(i64 %ptr) { 2308; CHECK-LABEL: ld_0_uint16_t_uint8_t: 2309; CHECK: # %bb.0: # %entry 2310; CHECK-NEXT: lbz r3, 0(r3) 2311; CHECK-NEXT: blr 2312entry: 2313 %0 = inttoptr i64 %ptr to ptr 2314 %1 = load i8, ptr %0, align 1 2315 %conv = zext i8 %1 to i16 2316 ret i16 %conv 2317} 2318 2319; Function Attrs: norecurse nounwind readonly uwtable willreturn 2320define dso_local zeroext i16 @ld_align16_uint16_t_uint8_t(ptr nocapture readonly %ptr) { 2321; CHECK-LABEL: ld_align16_uint16_t_uint8_t: 2322; CHECK: # %bb.0: # %entry 2323; CHECK-NEXT: lbz r3, 8(r3) 2324; CHECK-NEXT: blr 2325entry: 2326 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2327 %0 = load i8, ptr %add.ptr, align 1 2328 %conv = zext i8 %0 to i16 2329 ret i16 %conv 2330} 2331 2332; Function Attrs: norecurse nounwind readonly uwtable willreturn 2333define dso_local zeroext i16 @ld_align32_uint16_t_uint8_t(ptr nocapture readonly %ptr) { 2334; CHECK-P10-LABEL: ld_align32_uint16_t_uint8_t: 2335; CHECK-P10: # %bb.0: # %entry 2336; CHECK-P10-NEXT: plbz r3, 99999000(r3), 0 2337; CHECK-P10-NEXT: blr 2338; 2339; CHECK-PREP10-LABEL: ld_align32_uint16_t_uint8_t: 2340; CHECK-PREP10: # %bb.0: # %entry 2341; CHECK-PREP10-NEXT: lis r4, 1525 2342; CHECK-PREP10-NEXT: ori r4, r4, 56600 2343; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2344; CHECK-PREP10-NEXT: blr 2345entry: 2346 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2347 %0 = load i8, ptr %add.ptr, align 1 2348 %conv = zext i8 %0 to i16 2349 ret i16 %conv 2350} 2351 2352; Function Attrs: norecurse nounwind readonly uwtable willreturn 2353define dso_local zeroext i16 @ld_align64_uint16_t_uint8_t(ptr nocapture readonly %ptr) { 2354; CHECK-P10-LABEL: ld_align64_uint16_t_uint8_t: 2355; CHECK-P10: # %bb.0: # %entry 2356; CHECK-P10-NEXT: pli r4, 244140625 2357; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2358; CHECK-P10-NEXT: lbzx r3, r3, r4 2359; CHECK-P10-NEXT: blr 2360; 2361; CHECK-PREP10-LABEL: ld_align64_uint16_t_uint8_t: 2362; CHECK-PREP10: # %bb.0: # %entry 2363; CHECK-PREP10-NEXT: lis r4, 3725 2364; CHECK-PREP10-NEXT: ori r4, r4, 19025 2365; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2366; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2367; CHECK-PREP10-NEXT: blr 2368entry: 2369 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2370 %0 = load i8, ptr %add.ptr, align 1 2371 %conv = zext i8 %0 to i16 2372 ret i16 %conv 2373} 2374 2375; Function Attrs: norecurse nounwind readonly uwtable willreturn 2376define dso_local zeroext i16 @ld_reg_uint16_t_uint8_t(ptr nocapture readonly %ptr, i64 %off) { 2377; CHECK-LABEL: ld_reg_uint16_t_uint8_t: 2378; CHECK: # %bb.0: # %entry 2379; CHECK-NEXT: lbzx r3, r3, r4 2380; CHECK-NEXT: blr 2381entry: 2382 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2383 %0 = load i8, ptr %add.ptr, align 1 2384 %conv = zext i8 %0 to i16 2385 ret i16 %conv 2386} 2387 2388; Function Attrs: norecurse nounwind readonly uwtable willreturn 2389define dso_local zeroext i16 @ld_or_uint16_t_uint8_t(i64 %ptr, i8 zeroext %off) { 2390; CHECK-LABEL: ld_or_uint16_t_uint8_t: 2391; CHECK: # %bb.0: # %entry 2392; CHECK-NEXT: or r3, r4, r3 2393; CHECK-NEXT: lbz r3, 0(r3) 2394; CHECK-NEXT: blr 2395entry: 2396 %conv = zext i8 %off to i64 2397 %or = or i64 %conv, %ptr 2398 %0 = inttoptr i64 %or to ptr 2399 %1 = load i8, ptr %0, align 1 2400 %conv1 = zext i8 %1 to i16 2401 ret i16 %conv1 2402} 2403 2404; Function Attrs: norecurse nounwind readonly uwtable willreturn 2405define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint8_t(i64 %ptr) { 2406; CHECK-LABEL: ld_not_disjoint16_uint16_t_uint8_t: 2407; CHECK: # %bb.0: # %entry 2408; CHECK-NEXT: ori r3, r3, 6 2409; CHECK-NEXT: lbz r3, 0(r3) 2410; CHECK-NEXT: blr 2411entry: 2412 %or = or i64 %ptr, 6 2413 %0 = inttoptr i64 %or to ptr 2414 %1 = load i8, ptr %0, align 1 2415 %conv = zext i8 %1 to i16 2416 ret i16 %conv 2417} 2418 2419; Function Attrs: norecurse nounwind readonly uwtable willreturn 2420define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint8_t(i64 %ptr) { 2421; CHECK-LABEL: ld_disjoint_align16_uint16_t_uint8_t: 2422; CHECK: # %bb.0: # %entry 2423; CHECK-NEXT: rldicr r3, r3, 0, 51 2424; CHECK-NEXT: lbz r3, 24(r3) 2425; CHECK-NEXT: blr 2426entry: 2427 %and = and i64 %ptr, -4096 2428 %or = or i64 %and, 24 2429 %0 = inttoptr i64 %or to ptr 2430 %1 = load i8, ptr %0, align 8 2431 %conv = zext i8 %1 to i16 2432 ret i16 %conv 2433} 2434 2435; Function Attrs: norecurse nounwind readonly uwtable willreturn 2436define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint8_t(i64 %ptr) { 2437; CHECK-LABEL: ld_not_disjoint32_uint16_t_uint8_t: 2438; CHECK: # %bb.0: # %entry 2439; CHECK-NEXT: ori r3, r3, 34463 2440; CHECK-NEXT: oris r3, r3, 1 2441; CHECK-NEXT: lbz r3, 0(r3) 2442; CHECK-NEXT: blr 2443entry: 2444 %or = or i64 %ptr, 99999 2445 %0 = inttoptr i64 %or to ptr 2446 %1 = load i8, ptr %0, align 1 2447 %conv = zext i8 %1 to i16 2448 ret i16 %conv 2449} 2450 2451; Function Attrs: norecurse nounwind readonly uwtable willreturn 2452define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint8_t(i64 %ptr) { 2453; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_uint8_t: 2454; CHECK-P10: # %bb.0: # %entry 2455; CHECK-P10-NEXT: lis r4, -15264 2456; CHECK-P10-NEXT: and r3, r3, r4 2457; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0 2458; CHECK-P10-NEXT: blr 2459; 2460; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_uint8_t: 2461; CHECK-PREP10: # %bb.0: # %entry 2462; CHECK-PREP10-NEXT: lis r4, -15264 2463; CHECK-PREP10-NEXT: and r3, r3, r4 2464; CHECK-PREP10-NEXT: lis r4, 15258 2465; CHECK-PREP10-NEXT: ori r4, r4, 41712 2466; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2467; CHECK-PREP10-NEXT: blr 2468entry: 2469 %and = and i64 %ptr, -1000341504 2470 %or = or i64 %and, 999990000 2471 %0 = inttoptr i64 %or to ptr 2472 %1 = load i8, ptr %0, align 16 2473 %conv = zext i8 %1 to i16 2474 ret i16 %conv 2475} 2476 2477; Function Attrs: norecurse nounwind readonly uwtable willreturn 2478define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint8_t(i64 %ptr) { 2479; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_uint8_t: 2480; CHECK-P10: # %bb.0: # %entry 2481; CHECK-P10-NEXT: pli r4, 232 2482; CHECK-P10-NEXT: pli r5, 3567587329 2483; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2484; CHECK-P10-NEXT: or r3, r3, r5 2485; CHECK-P10-NEXT: lbz r3, 0(r3) 2486; CHECK-P10-NEXT: blr 2487; 2488; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_uint8_t: 2489; CHECK-PREP10: # %bb.0: # %entry 2490; CHECK-PREP10-NEXT: li r4, 29 2491; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2492; CHECK-PREP10-NEXT: oris r4, r4, 54437 2493; CHECK-PREP10-NEXT: ori r4, r4, 4097 2494; CHECK-PREP10-NEXT: or r3, r3, r4 2495; CHECK-PREP10-NEXT: lbz r3, 0(r3) 2496; CHECK-PREP10-NEXT: blr 2497entry: 2498 %or = or i64 %ptr, 1000000000001 2499 %0 = inttoptr i64 %or to ptr 2500 %1 = load i8, ptr %0, align 1 2501 %conv = zext i8 %1 to i16 2502 ret i16 %conv 2503} 2504 2505; Function Attrs: norecurse nounwind readonly uwtable willreturn 2506define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint8_t(i64 %ptr) { 2507; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_uint8_t: 2508; CHECK-P10: # %bb.0: # %entry 2509; CHECK-P10-NEXT: pli r4, 244140625 2510; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2511; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2512; CHECK-P10-NEXT: lbzx r3, r3, r4 2513; CHECK-P10-NEXT: blr 2514; 2515; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_uint8_t: 2516; CHECK-PREP10: # %bb.0: # %entry 2517; CHECK-PREP10-NEXT: lis r4, 3725 2518; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2519; CHECK-PREP10-NEXT: ori r4, r4, 19025 2520; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2521; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2522; CHECK-PREP10-NEXT: blr 2523entry: 2524 %and = and i64 %ptr, -1099511627776 2525 %or = or i64 %and, 1000000000000 2526 %0 = inttoptr i64 %or to ptr 2527 %1 = load i8, ptr %0, align 4096 2528 %conv = zext i8 %1 to i16 2529 ret i16 %conv 2530} 2531 2532; Function Attrs: norecurse nounwind readonly uwtable willreturn 2533define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint8_t() { 2534; CHECK-LABEL: ld_cst_align16_uint16_t_uint8_t: 2535; CHECK: # %bb.0: # %entry 2536; CHECK-NEXT: lbz r3, 4080(0) 2537; CHECK-NEXT: blr 2538entry: 2539 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16 2540 %conv = zext i8 %0 to i16 2541 ret i16 %conv 2542} 2543 2544; Function Attrs: norecurse nounwind readonly uwtable willreturn 2545define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint8_t() { 2546; CHECK-LABEL: ld_cst_align32_uint16_t_uint8_t: 2547; CHECK: # %bb.0: # %entry 2548; CHECK-NEXT: lis r3, 153 2549; CHECK-NEXT: lbz r3, -27108(r3) 2550; CHECK-NEXT: blr 2551entry: 2552 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4 2553 %conv = zext i8 %0 to i16 2554 ret i16 %conv 2555} 2556 2557; Function Attrs: norecurse nounwind readonly uwtable willreturn 2558define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint8_t() { 2559; CHECK-P10-LABEL: ld_cst_align64_uint16_t_uint8_t: 2560; CHECK-P10: # %bb.0: # %entry 2561; CHECK-P10-NEXT: pli r3, 244140625 2562; CHECK-P10-NEXT: rldic r3, r3, 12, 24 2563; CHECK-P10-NEXT: lbz r3, 0(r3) 2564; CHECK-P10-NEXT: blr 2565; 2566; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_uint8_t: 2567; CHECK-PREP10: # %bb.0: # %entry 2568; CHECK-PREP10-NEXT: lis r3, 3725 2569; CHECK-PREP10-NEXT: ori r3, r3, 19025 2570; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 2571; CHECK-PREP10-NEXT: lbz r3, 0(r3) 2572; CHECK-PREP10-NEXT: blr 2573entry: 2574 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096 2575 %conv = zext i8 %0 to i16 2576 ret i16 %conv 2577} 2578 2579; Function Attrs: norecurse nounwind readonly uwtable willreturn 2580define dso_local zeroext i16 @ld_0_uint16_t_int8_t(i64 %ptr) { 2581; CHECK-LABEL: ld_0_uint16_t_int8_t: 2582; CHECK: # %bb.0: # %entry 2583; CHECK-NEXT: lbz r3, 0(r3) 2584; CHECK-NEXT: extsb r3, r3 2585; CHECK-NEXT: clrldi r3, r3, 48 2586; CHECK-NEXT: blr 2587entry: 2588 %0 = inttoptr i64 %ptr to ptr 2589 %1 = load i8, ptr %0, align 1 2590 %conv = sext i8 %1 to i16 2591 ret i16 %conv 2592} 2593 2594; Function Attrs: norecurse nounwind readonly uwtable willreturn 2595define dso_local zeroext i16 @ld_align16_uint16_t_int8_t(ptr nocapture readonly %ptr) { 2596; CHECK-LABEL: ld_align16_uint16_t_int8_t: 2597; CHECK: # %bb.0: # %entry 2598; CHECK-NEXT: lbz r3, 8(r3) 2599; CHECK-NEXT: extsb r3, r3 2600; CHECK-NEXT: clrldi r3, r3, 48 2601; CHECK-NEXT: blr 2602entry: 2603 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2604 %0 = load i8, ptr %add.ptr, align 1 2605 %conv = sext i8 %0 to i16 2606 ret i16 %conv 2607} 2608 2609; Function Attrs: norecurse nounwind readonly uwtable willreturn 2610define dso_local zeroext i16 @ld_align32_uint16_t_int8_t(ptr nocapture readonly %ptr) { 2611; CHECK-P10-LABEL: ld_align32_uint16_t_int8_t: 2612; CHECK-P10: # %bb.0: # %entry 2613; CHECK-P10-NEXT: plbz r3, 99999000(r3), 0 2614; CHECK-P10-NEXT: extsb r3, r3 2615; CHECK-P10-NEXT: clrldi r3, r3, 48 2616; CHECK-P10-NEXT: blr 2617; 2618; CHECK-PREP10-LABEL: ld_align32_uint16_t_int8_t: 2619; CHECK-PREP10: # %bb.0: # %entry 2620; CHECK-PREP10-NEXT: lis r4, 1525 2621; CHECK-PREP10-NEXT: ori r4, r4, 56600 2622; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2623; CHECK-PREP10-NEXT: extsb r3, r3 2624; CHECK-PREP10-NEXT: clrldi r3, r3, 48 2625; CHECK-PREP10-NEXT: blr 2626entry: 2627 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2628 %0 = load i8, ptr %add.ptr, align 1 2629 %conv = sext i8 %0 to i16 2630 ret i16 %conv 2631} 2632 2633; Function Attrs: norecurse nounwind readonly uwtable willreturn 2634define dso_local zeroext i16 @ld_align64_uint16_t_int8_t(ptr nocapture readonly %ptr) { 2635; CHECK-P10-LABEL: ld_align64_uint16_t_int8_t: 2636; CHECK-P10: # %bb.0: # %entry 2637; CHECK-P10-NEXT: pli r4, 244140625 2638; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2639; CHECK-P10-NEXT: lbzx r3, r3, r4 2640; CHECK-P10-NEXT: extsb r3, r3 2641; CHECK-P10-NEXT: clrldi r3, r3, 48 2642; CHECK-P10-NEXT: blr 2643; 2644; CHECK-PREP10-LABEL: ld_align64_uint16_t_int8_t: 2645; CHECK-PREP10: # %bb.0: # %entry 2646; CHECK-PREP10-NEXT: lis r4, 3725 2647; CHECK-PREP10-NEXT: ori r4, r4, 19025 2648; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2649; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2650; CHECK-PREP10-NEXT: extsb r3, r3 2651; CHECK-PREP10-NEXT: clrldi r3, r3, 48 2652; CHECK-PREP10-NEXT: blr 2653entry: 2654 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2655 %0 = load i8, ptr %add.ptr, align 1 2656 %conv = sext i8 %0 to i16 2657 ret i16 %conv 2658} 2659 2660; Function Attrs: norecurse nounwind readonly uwtable willreturn 2661define dso_local zeroext i16 @ld_reg_uint16_t_int8_t(ptr nocapture readonly %ptr, i64 %off) { 2662; CHECK-LABEL: ld_reg_uint16_t_int8_t: 2663; CHECK: # %bb.0: # %entry 2664; CHECK-NEXT: lbzx r3, r3, r4 2665; CHECK-NEXT: extsb r3, r3 2666; CHECK-NEXT: clrldi r3, r3, 48 2667; CHECK-NEXT: blr 2668entry: 2669 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2670 %0 = load i8, ptr %add.ptr, align 1 2671 %conv = sext i8 %0 to i16 2672 ret i16 %conv 2673} 2674 2675; Function Attrs: norecurse nounwind readonly uwtable willreturn 2676define dso_local zeroext i16 @ld_or_uint16_t_int8_t(i64 %ptr, i8 zeroext %off) { 2677; CHECK-LABEL: ld_or_uint16_t_int8_t: 2678; CHECK: # %bb.0: # %entry 2679; CHECK-NEXT: or r3, r4, r3 2680; CHECK-NEXT: lbz r3, 0(r3) 2681; CHECK-NEXT: extsb r3, r3 2682; CHECK-NEXT: clrldi r3, r3, 48 2683; CHECK-NEXT: blr 2684entry: 2685 %conv = zext i8 %off to i64 2686 %or = or i64 %conv, %ptr 2687 %0 = inttoptr i64 %or to ptr 2688 %1 = load i8, ptr %0, align 1 2689 %conv1 = sext i8 %1 to i16 2690 ret i16 %conv1 2691} 2692 2693; Function Attrs: norecurse nounwind readonly uwtable willreturn 2694define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_int8_t(i64 %ptr) { 2695; CHECK-LABEL: ld_not_disjoint16_uint16_t_int8_t: 2696; CHECK: # %bb.0: # %entry 2697; CHECK-NEXT: ori r3, r3, 6 2698; CHECK-NEXT: lbz r3, 0(r3) 2699; CHECK-NEXT: extsb r3, r3 2700; CHECK-NEXT: clrldi r3, r3, 48 2701; CHECK-NEXT: blr 2702entry: 2703 %or = or i64 %ptr, 6 2704 %0 = inttoptr i64 %or to ptr 2705 %1 = load i8, ptr %0, align 1 2706 %conv = sext i8 %1 to i16 2707 ret i16 %conv 2708} 2709 2710; Function Attrs: norecurse nounwind readonly uwtable willreturn 2711define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_int8_t(i64 %ptr) { 2712; CHECK-LABEL: ld_disjoint_align16_uint16_t_int8_t: 2713; CHECK: # %bb.0: # %entry 2714; CHECK-NEXT: rldicr r3, r3, 0, 51 2715; CHECK-NEXT: lbz r3, 24(r3) 2716; CHECK-NEXT: extsb r3, r3 2717; CHECK-NEXT: clrldi r3, r3, 48 2718; CHECK-NEXT: blr 2719entry: 2720 %and = and i64 %ptr, -4096 2721 %or = or i64 %and, 24 2722 %0 = inttoptr i64 %or to ptr 2723 %1 = load i8, ptr %0, align 8 2724 %conv = sext i8 %1 to i16 2725 ret i16 %conv 2726} 2727 2728; Function Attrs: norecurse nounwind readonly uwtable willreturn 2729define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_int8_t(i64 %ptr) { 2730; CHECK-LABEL: ld_not_disjoint32_uint16_t_int8_t: 2731; CHECK: # %bb.0: # %entry 2732; CHECK-NEXT: ori r3, r3, 34463 2733; CHECK-NEXT: oris r3, r3, 1 2734; CHECK-NEXT: lbz r3, 0(r3) 2735; CHECK-NEXT: extsb r3, r3 2736; CHECK-NEXT: clrldi r3, r3, 48 2737; CHECK-NEXT: blr 2738entry: 2739 %or = or i64 %ptr, 99999 2740 %0 = inttoptr i64 %or to ptr 2741 %1 = load i8, ptr %0, align 1 2742 %conv = sext i8 %1 to i16 2743 ret i16 %conv 2744} 2745 2746; Function Attrs: norecurse nounwind readonly uwtable willreturn 2747define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_int8_t(i64 %ptr) { 2748; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_int8_t: 2749; CHECK-P10: # %bb.0: # %entry 2750; CHECK-P10-NEXT: lis r4, -15264 2751; CHECK-P10-NEXT: and r3, r3, r4 2752; CHECK-P10-NEXT: plbz r3, 999990000(r3), 0 2753; CHECK-P10-NEXT: extsb r3, r3 2754; CHECK-P10-NEXT: clrldi r3, r3, 48 2755; CHECK-P10-NEXT: blr 2756; 2757; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_int8_t: 2758; CHECK-PREP10: # %bb.0: # %entry 2759; CHECK-PREP10-NEXT: lis r4, -15264 2760; CHECK-PREP10-NEXT: and r3, r3, r4 2761; CHECK-PREP10-NEXT: lis r4, 15258 2762; CHECK-PREP10-NEXT: ori r4, r4, 41712 2763; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2764; CHECK-PREP10-NEXT: extsb r3, r3 2765; CHECK-PREP10-NEXT: clrldi r3, r3, 48 2766; CHECK-PREP10-NEXT: blr 2767entry: 2768 %and = and i64 %ptr, -1000341504 2769 %or = or i64 %and, 999990000 2770 %0 = inttoptr i64 %or to ptr 2771 %1 = load i8, ptr %0, align 16 2772 %conv = sext i8 %1 to i16 2773 ret i16 %conv 2774} 2775 2776; Function Attrs: norecurse nounwind readonly uwtable willreturn 2777define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_int8_t(i64 %ptr) { 2778; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_int8_t: 2779; CHECK-P10: # %bb.0: # %entry 2780; CHECK-P10-NEXT: pli r4, 232 2781; CHECK-P10-NEXT: pli r5, 3567587329 2782; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2783; CHECK-P10-NEXT: or r3, r3, r5 2784; CHECK-P10-NEXT: lbz r3, 0(r3) 2785; CHECK-P10-NEXT: extsb r3, r3 2786; CHECK-P10-NEXT: clrldi r3, r3, 48 2787; CHECK-P10-NEXT: blr 2788; 2789; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_int8_t: 2790; CHECK-PREP10: # %bb.0: # %entry 2791; CHECK-PREP10-NEXT: li r4, 29 2792; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 2793; CHECK-PREP10-NEXT: oris r4, r4, 54437 2794; CHECK-PREP10-NEXT: ori r4, r4, 4097 2795; CHECK-PREP10-NEXT: or r3, r3, r4 2796; CHECK-PREP10-NEXT: lbz r3, 0(r3) 2797; CHECK-PREP10-NEXT: extsb r3, r3 2798; CHECK-PREP10-NEXT: clrldi r3, r3, 48 2799; CHECK-PREP10-NEXT: blr 2800entry: 2801 %or = or i64 %ptr, 1000000000001 2802 %0 = inttoptr i64 %or to ptr 2803 %1 = load i8, ptr %0, align 1 2804 %conv = sext i8 %1 to i16 2805 ret i16 %conv 2806} 2807 2808; Function Attrs: norecurse nounwind readonly uwtable willreturn 2809define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_int8_t(i64 %ptr) { 2810; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_int8_t: 2811; CHECK-P10: # %bb.0: # %entry 2812; CHECK-P10-NEXT: pli r4, 244140625 2813; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2814; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2815; CHECK-P10-NEXT: lbzx r3, r3, r4 2816; CHECK-P10-NEXT: extsb r3, r3 2817; CHECK-P10-NEXT: clrldi r3, r3, 48 2818; CHECK-P10-NEXT: blr 2819; 2820; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_int8_t: 2821; CHECK-PREP10: # %bb.0: # %entry 2822; CHECK-PREP10-NEXT: lis r4, 3725 2823; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2824; CHECK-PREP10-NEXT: ori r4, r4, 19025 2825; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2826; CHECK-PREP10-NEXT: lbzx r3, r3, r4 2827; CHECK-PREP10-NEXT: extsb r3, r3 2828; CHECK-PREP10-NEXT: clrldi r3, r3, 48 2829; CHECK-PREP10-NEXT: blr 2830entry: 2831 %and = and i64 %ptr, -1099511627776 2832 %or = or i64 %and, 1000000000000 2833 %0 = inttoptr i64 %or to ptr 2834 %1 = load i8, ptr %0, align 4096 2835 %conv = sext i8 %1 to i16 2836 ret i16 %conv 2837} 2838 2839; Function Attrs: norecurse nounwind readonly uwtable willreturn 2840define dso_local zeroext i16 @ld_cst_align16_uint16_t_int8_t() { 2841; CHECK-LABEL: ld_cst_align16_uint16_t_int8_t: 2842; CHECK: # %bb.0: # %entry 2843; CHECK-NEXT: lbz r3, 4080(0) 2844; CHECK-NEXT: extsb r3, r3 2845; CHECK-NEXT: clrldi r3, r3, 48 2846; CHECK-NEXT: blr 2847entry: 2848 %0 = load i8, ptr inttoptr (i64 4080 to ptr), align 16 2849 %conv = sext i8 %0 to i16 2850 ret i16 %conv 2851} 2852 2853; Function Attrs: norecurse nounwind readonly uwtable willreturn 2854define dso_local zeroext i16 @ld_cst_align32_uint16_t_int8_t() { 2855; CHECK-LABEL: ld_cst_align32_uint16_t_int8_t: 2856; CHECK: # %bb.0: # %entry 2857; CHECK-NEXT: lis r3, 153 2858; CHECK-NEXT: lbz r3, -27108(r3) 2859; CHECK-NEXT: extsb r3, r3 2860; CHECK-NEXT: clrldi r3, r3, 48 2861; CHECK-NEXT: blr 2862entry: 2863 %0 = load i8, ptr inttoptr (i64 9999900 to ptr), align 4 2864 %conv = sext i8 %0 to i16 2865 ret i16 %conv 2866} 2867 2868; Function Attrs: norecurse nounwind readonly uwtable willreturn 2869define dso_local zeroext i16 @ld_cst_align64_uint16_t_int8_t() { 2870; CHECK-P10-LABEL: ld_cst_align64_uint16_t_int8_t: 2871; CHECK-P10: # %bb.0: # %entry 2872; CHECK-P10-NEXT: pli r3, 244140625 2873; CHECK-P10-NEXT: rldic r3, r3, 12, 24 2874; CHECK-P10-NEXT: lbz r3, 0(r3) 2875; CHECK-P10-NEXT: extsb r3, r3 2876; CHECK-P10-NEXT: clrldi r3, r3, 48 2877; CHECK-P10-NEXT: blr 2878; 2879; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_int8_t: 2880; CHECK-PREP10: # %bb.0: # %entry 2881; CHECK-PREP10-NEXT: lis r3, 3725 2882; CHECK-PREP10-NEXT: ori r3, r3, 19025 2883; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 2884; CHECK-PREP10-NEXT: lbz r3, 0(r3) 2885; CHECK-PREP10-NEXT: extsb r3, r3 2886; CHECK-PREP10-NEXT: clrldi r3, r3, 48 2887; CHECK-PREP10-NEXT: blr 2888entry: 2889 %0 = load i8, ptr inttoptr (i64 1000000000000 to ptr), align 4096 2890 %conv = sext i8 %0 to i16 2891 ret i16 %conv 2892} 2893 2894; Function Attrs: norecurse nounwind readonly uwtable willreturn 2895define dso_local zeroext i16 @ld_0_uint16_t_uint16_t(i64 %ptr) { 2896; CHECK-LABEL: ld_0_uint16_t_uint16_t: 2897; CHECK: # %bb.0: # %entry 2898; CHECK-NEXT: lhz r3, 0(r3) 2899; CHECK-NEXT: blr 2900entry: 2901 %0 = inttoptr i64 %ptr to ptr 2902 %1 = load i16, ptr %0, align 2 2903 ret i16 %1 2904} 2905 2906; Function Attrs: norecurse nounwind readonly uwtable willreturn 2907define dso_local zeroext i16 @ld_align16_uint16_t_uint16_t(ptr nocapture readonly %ptr) { 2908; CHECK-LABEL: ld_align16_uint16_t_uint16_t: 2909; CHECK: # %bb.0: # %entry 2910; CHECK-NEXT: lhz r3, 8(r3) 2911; CHECK-NEXT: blr 2912entry: 2913 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 2914 %0 = load i16, ptr %add.ptr, align 2 2915 ret i16 %0 2916} 2917 2918; Function Attrs: norecurse nounwind readonly uwtable willreturn 2919define dso_local zeroext i16 @ld_align32_uint16_t_uint16_t(ptr nocapture readonly %ptr) { 2920; CHECK-P10-LABEL: ld_align32_uint16_t_uint16_t: 2921; CHECK-P10: # %bb.0: # %entry 2922; CHECK-P10-NEXT: plhz r3, 99999000(r3), 0 2923; CHECK-P10-NEXT: blr 2924; 2925; CHECK-PREP10-LABEL: ld_align32_uint16_t_uint16_t: 2926; CHECK-PREP10: # %bb.0: # %entry 2927; CHECK-PREP10-NEXT: lis r4, 1525 2928; CHECK-PREP10-NEXT: ori r4, r4, 56600 2929; CHECK-PREP10-NEXT: lhzx r3, r3, r4 2930; CHECK-PREP10-NEXT: blr 2931entry: 2932 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 2933 %0 = load i16, ptr %add.ptr, align 2 2934 ret i16 %0 2935} 2936 2937; Function Attrs: norecurse nounwind readonly uwtable willreturn 2938define dso_local zeroext i16 @ld_align64_uint16_t_uint16_t(ptr nocapture readonly %ptr) { 2939; CHECK-P10-LABEL: ld_align64_uint16_t_uint16_t: 2940; CHECK-P10: # %bb.0: # %entry 2941; CHECK-P10-NEXT: pli r4, 244140625 2942; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2943; CHECK-P10-NEXT: lhzx r3, r3, r4 2944; CHECK-P10-NEXT: blr 2945; 2946; CHECK-PREP10-LABEL: ld_align64_uint16_t_uint16_t: 2947; CHECK-PREP10: # %bb.0: # %entry 2948; CHECK-PREP10-NEXT: lis r4, 3725 2949; CHECK-PREP10-NEXT: ori r4, r4, 19025 2950; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2951; CHECK-PREP10-NEXT: lhzx r3, r3, r4 2952; CHECK-PREP10-NEXT: blr 2953entry: 2954 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 2955 %0 = load i16, ptr %add.ptr, align 2 2956 ret i16 %0 2957} 2958 2959; Function Attrs: norecurse nounwind readonly uwtable willreturn 2960define dso_local zeroext i16 @ld_reg_uint16_t_uint16_t(ptr nocapture readonly %ptr, i64 %off) { 2961; CHECK-LABEL: ld_reg_uint16_t_uint16_t: 2962; CHECK: # %bb.0: # %entry 2963; CHECK-NEXT: lhzx r3, r3, r4 2964; CHECK-NEXT: blr 2965entry: 2966 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 2967 %0 = load i16, ptr %add.ptr, align 2 2968 ret i16 %0 2969} 2970 2971; Function Attrs: norecurse nounwind readonly uwtable willreturn 2972define dso_local zeroext i16 @ld_or_uint16_t_uint16_t(i64 %ptr, i8 zeroext %off) { 2973; CHECK-LABEL: ld_or_uint16_t_uint16_t: 2974; CHECK: # %bb.0: # %entry 2975; CHECK-NEXT: or r3, r4, r3 2976; CHECK-NEXT: lhz r3, 0(r3) 2977; CHECK-NEXT: blr 2978entry: 2979 %conv = zext i8 %off to i64 2980 %or = or i64 %conv, %ptr 2981 %0 = inttoptr i64 %or to ptr 2982 %1 = load i16, ptr %0, align 2 2983 ret i16 %1 2984} 2985 2986; Function Attrs: norecurse nounwind readonly uwtable willreturn 2987define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint16_t(i64 %ptr) { 2988; CHECK-LABEL: ld_not_disjoint16_uint16_t_uint16_t: 2989; CHECK: # %bb.0: # %entry 2990; CHECK-NEXT: ori r3, r3, 6 2991; CHECK-NEXT: lhz r3, 0(r3) 2992; CHECK-NEXT: blr 2993entry: 2994 %or = or i64 %ptr, 6 2995 %0 = inttoptr i64 %or to ptr 2996 %1 = load i16, ptr %0, align 2 2997 ret i16 %1 2998} 2999 3000; Function Attrs: norecurse nounwind readonly uwtable willreturn 3001define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint16_t(i64 %ptr) { 3002; CHECK-LABEL: ld_disjoint_align16_uint16_t_uint16_t: 3003; CHECK: # %bb.0: # %entry 3004; CHECK-NEXT: rldicr r3, r3, 0, 51 3005; CHECK-NEXT: lhz r3, 24(r3) 3006; CHECK-NEXT: blr 3007entry: 3008 %and = and i64 %ptr, -4096 3009 %or = or i64 %and, 24 3010 %0 = inttoptr i64 %or to ptr 3011 %1 = load i16, ptr %0, align 8 3012 ret i16 %1 3013} 3014 3015; Function Attrs: norecurse nounwind readonly uwtable willreturn 3016define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint16_t(i64 %ptr) { 3017; CHECK-LABEL: ld_not_disjoint32_uint16_t_uint16_t: 3018; CHECK: # %bb.0: # %entry 3019; CHECK-NEXT: ori r3, r3, 34463 3020; CHECK-NEXT: oris r3, r3, 1 3021; CHECK-NEXT: lhz r3, 0(r3) 3022; CHECK-NEXT: blr 3023entry: 3024 %or = or i64 %ptr, 99999 3025 %0 = inttoptr i64 %or to ptr 3026 %1 = load i16, ptr %0, align 2 3027 ret i16 %1 3028} 3029 3030; Function Attrs: norecurse nounwind readonly uwtable willreturn 3031define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint16_t(i64 %ptr) { 3032; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_uint16_t: 3033; CHECK-P10: # %bb.0: # %entry 3034; CHECK-P10-NEXT: lis r4, -15264 3035; CHECK-P10-NEXT: and r3, r3, r4 3036; CHECK-P10-NEXT: plhz r3, 999990000(r3), 0 3037; CHECK-P10-NEXT: blr 3038; 3039; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_uint16_t: 3040; CHECK-PREP10: # %bb.0: # %entry 3041; CHECK-PREP10-NEXT: lis r4, -15264 3042; CHECK-PREP10-NEXT: and r3, r3, r4 3043; CHECK-PREP10-NEXT: lis r4, 15258 3044; CHECK-PREP10-NEXT: ori r4, r4, 41712 3045; CHECK-PREP10-NEXT: lhzx r3, r3, r4 3046; CHECK-PREP10-NEXT: blr 3047entry: 3048 %and = and i64 %ptr, -1000341504 3049 %or = or i64 %and, 999990000 3050 %0 = inttoptr i64 %or to ptr 3051 %1 = load i16, ptr %0, align 16 3052 ret i16 %1 3053} 3054 3055; Function Attrs: norecurse nounwind readonly uwtable willreturn 3056define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint16_t(i64 %ptr) { 3057; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_uint16_t: 3058; CHECK-P10: # %bb.0: # %entry 3059; CHECK-P10-NEXT: pli r4, 232 3060; CHECK-P10-NEXT: pli r5, 3567587329 3061; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 3062; CHECK-P10-NEXT: or r3, r3, r5 3063; CHECK-P10-NEXT: lhz r3, 0(r3) 3064; CHECK-P10-NEXT: blr 3065; 3066; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_uint16_t: 3067; CHECK-PREP10: # %bb.0: # %entry 3068; CHECK-PREP10-NEXT: li r4, 29 3069; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 3070; CHECK-PREP10-NEXT: oris r4, r4, 54437 3071; CHECK-PREP10-NEXT: ori r4, r4, 4097 3072; CHECK-PREP10-NEXT: or r3, r3, r4 3073; CHECK-PREP10-NEXT: lhz r3, 0(r3) 3074; CHECK-PREP10-NEXT: blr 3075entry: 3076 %or = or i64 %ptr, 1000000000001 3077 %0 = inttoptr i64 %or to ptr 3078 %1 = load i16, ptr %0, align 2 3079 ret i16 %1 3080} 3081 3082; Function Attrs: norecurse nounwind readonly uwtable willreturn 3083define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint16_t(i64 %ptr) { 3084; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_uint16_t: 3085; CHECK-P10: # %bb.0: # %entry 3086; CHECK-P10-NEXT: pli r4, 244140625 3087; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 3088; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3089; CHECK-P10-NEXT: lhzx r3, r3, r4 3090; CHECK-P10-NEXT: blr 3091; 3092; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_uint16_t: 3093; CHECK-PREP10: # %bb.0: # %entry 3094; CHECK-PREP10-NEXT: lis r4, 3725 3095; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 3096; CHECK-PREP10-NEXT: ori r4, r4, 19025 3097; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3098; CHECK-PREP10-NEXT: lhzx r3, r3, r4 3099; CHECK-PREP10-NEXT: blr 3100entry: 3101 %and = and i64 %ptr, -1099511627776 3102 %or = or i64 %and, 1000000000000 3103 %0 = inttoptr i64 %or to ptr 3104 %1 = load i16, ptr %0, align 4096 3105 ret i16 %1 3106} 3107 3108; Function Attrs: norecurse nounwind readonly uwtable willreturn 3109define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint16_t() { 3110; CHECK-LABEL: ld_cst_align16_uint16_t_uint16_t: 3111; CHECK: # %bb.0: # %entry 3112; CHECK-NEXT: lhz r3, 4080(0) 3113; CHECK-NEXT: blr 3114entry: 3115 %0 = load i16, ptr inttoptr (i64 4080 to ptr), align 16 3116 ret i16 %0 3117} 3118 3119; Function Attrs: norecurse nounwind readonly uwtable willreturn 3120define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint16_t() { 3121; CHECK-LABEL: ld_cst_align32_uint16_t_uint16_t: 3122; CHECK: # %bb.0: # %entry 3123; CHECK-NEXT: lis r3, 153 3124; CHECK-NEXT: lhz r3, -27108(r3) 3125; CHECK-NEXT: blr 3126entry: 3127 %0 = load i16, ptr inttoptr (i64 9999900 to ptr), align 4 3128 ret i16 %0 3129} 3130 3131; Function Attrs: norecurse nounwind readonly uwtable willreturn 3132define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint16_t() { 3133; CHECK-P10-LABEL: ld_cst_align64_uint16_t_uint16_t: 3134; CHECK-P10: # %bb.0: # %entry 3135; CHECK-P10-NEXT: pli r3, 244140625 3136; CHECK-P10-NEXT: rldic r3, r3, 12, 24 3137; CHECK-P10-NEXT: lhz r3, 0(r3) 3138; CHECK-P10-NEXT: blr 3139; 3140; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_uint16_t: 3141; CHECK-PREP10: # %bb.0: # %entry 3142; CHECK-PREP10-NEXT: lis r3, 3725 3143; CHECK-PREP10-NEXT: ori r3, r3, 19025 3144; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 3145; CHECK-PREP10-NEXT: lhz r3, 0(r3) 3146; CHECK-PREP10-NEXT: blr 3147entry: 3148 %0 = load i16, ptr inttoptr (i64 1000000000000 to ptr), align 4096 3149 ret i16 %0 3150} 3151 3152; Function Attrs: norecurse nounwind readonly uwtable willreturn 3153define dso_local zeroext i16 @ld_0_uint16_t_uint32_t(i64 %ptr) { 3154; CHECK-LE-LABEL: ld_0_uint16_t_uint32_t: 3155; CHECK-LE: # %bb.0: # %entry 3156; CHECK-LE-NEXT: lhz r3, 0(r3) 3157; CHECK-LE-NEXT: blr 3158; 3159; CHECK-BE-LABEL: ld_0_uint16_t_uint32_t: 3160; CHECK-BE: # %bb.0: # %entry 3161; CHECK-BE-NEXT: lhz r3, 2(r3) 3162; CHECK-BE-NEXT: blr 3163entry: 3164 %0 = inttoptr i64 %ptr to ptr 3165 %1 = load i32, ptr %0, align 4 3166 %conv = trunc i32 %1 to i16 3167 ret i16 %conv 3168} 3169 3170; Function Attrs: norecurse nounwind readonly uwtable willreturn 3171define dso_local zeroext i16 @ld_align16_uint16_t_uint32_t(ptr nocapture readonly %ptr) { 3172; CHECK-LE-LABEL: ld_align16_uint16_t_uint32_t: 3173; CHECK-LE: # %bb.0: # %entry 3174; CHECK-LE-NEXT: lhz r3, 8(r3) 3175; CHECK-LE-NEXT: blr 3176; 3177; CHECK-BE-LABEL: ld_align16_uint16_t_uint32_t: 3178; CHECK-BE: # %bb.0: # %entry 3179; CHECK-BE-NEXT: lhz r3, 10(r3) 3180; CHECK-BE-NEXT: blr 3181entry: 3182 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 3183 %0 = load i32, ptr %add.ptr, align 4 3184 %conv = trunc i32 %0 to i16 3185 ret i16 %conv 3186} 3187 3188; Function Attrs: norecurse nounwind readonly uwtable willreturn 3189define dso_local zeroext i16 @ld_align32_uint16_t_uint32_t(ptr nocapture readonly %ptr) { 3190; CHECK-P10-LE-LABEL: ld_align32_uint16_t_uint32_t: 3191; CHECK-P10-LE: # %bb.0: # %entry 3192; CHECK-P10-LE-NEXT: plhz r3, 99999000(r3), 0 3193; CHECK-P10-LE-NEXT: blr 3194; 3195; CHECK-P10-BE-LABEL: ld_align32_uint16_t_uint32_t: 3196; CHECK-P10-BE: # %bb.0: # %entry 3197; CHECK-P10-BE-NEXT: plhz r3, 99999002(r3), 0 3198; CHECK-P10-BE-NEXT: blr 3199; 3200; CHECK-P9-LE-LABEL: ld_align32_uint16_t_uint32_t: 3201; CHECK-P9-LE: # %bb.0: # %entry 3202; CHECK-P9-LE-NEXT: lis r4, 1525 3203; CHECK-P9-LE-NEXT: ori r4, r4, 56600 3204; CHECK-P9-LE-NEXT: lhzx r3, r3, r4 3205; CHECK-P9-LE-NEXT: blr 3206; 3207; CHECK-P9-BE-LABEL: ld_align32_uint16_t_uint32_t: 3208; CHECK-P9-BE: # %bb.0: # %entry 3209; CHECK-P9-BE-NEXT: lis r4, 1525 3210; CHECK-P9-BE-NEXT: ori r4, r4, 56602 3211; CHECK-P9-BE-NEXT: lhzx r3, r3, r4 3212; CHECK-P9-BE-NEXT: blr 3213; 3214; CHECK-P8-LE-LABEL: ld_align32_uint16_t_uint32_t: 3215; CHECK-P8-LE: # %bb.0: # %entry 3216; CHECK-P8-LE-NEXT: lis r4, 1525 3217; CHECK-P8-LE-NEXT: ori r4, r4, 56600 3218; CHECK-P8-LE-NEXT: lhzx r3, r3, r4 3219; CHECK-P8-LE-NEXT: blr 3220; 3221; CHECK-P8-BE-LABEL: ld_align32_uint16_t_uint32_t: 3222; CHECK-P8-BE: # %bb.0: # %entry 3223; CHECK-P8-BE-NEXT: lis r4, 1525 3224; CHECK-P8-BE-NEXT: ori r4, r4, 56602 3225; CHECK-P8-BE-NEXT: lhzx r3, r3, r4 3226; CHECK-P8-BE-NEXT: blr 3227entry: 3228 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 3229 %0 = load i32, ptr %add.ptr, align 4 3230 %conv = trunc i32 %0 to i16 3231 ret i16 %conv 3232} 3233 3234; Function Attrs: norecurse nounwind readonly uwtable willreturn 3235define dso_local zeroext i16 @ld_align64_uint16_t_uint32_t(ptr nocapture readonly %ptr) { 3236; CHECK-P10-LE-LABEL: ld_align64_uint16_t_uint32_t: 3237; CHECK-P10-LE: # %bb.0: # %entry 3238; CHECK-P10-LE-NEXT: pli r4, 244140625 3239; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 3240; CHECK-P10-LE-NEXT: lhzx r3, r3, r4 3241; CHECK-P10-LE-NEXT: blr 3242; 3243; CHECK-P10-BE-LABEL: ld_align64_uint16_t_uint32_t: 3244; CHECK-P10-BE: # %bb.0: # %entry 3245; CHECK-P10-BE-NEXT: pli r4, 232 3246; CHECK-P10-BE-NEXT: pli r5, 3567587330 3247; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3248; CHECK-P10-BE-NEXT: lhzx r3, r3, r5 3249; CHECK-P10-BE-NEXT: blr 3250; 3251; CHECK-P9-LE-LABEL: ld_align64_uint16_t_uint32_t: 3252; CHECK-P9-LE: # %bb.0: # %entry 3253; CHECK-P9-LE-NEXT: lis r4, 3725 3254; CHECK-P9-LE-NEXT: ori r4, r4, 19025 3255; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 3256; CHECK-P9-LE-NEXT: lhzx r3, r3, r4 3257; CHECK-P9-LE-NEXT: blr 3258; 3259; CHECK-P9-BE-LABEL: ld_align64_uint16_t_uint32_t: 3260; CHECK-P9-BE: # %bb.0: # %entry 3261; CHECK-P9-BE-NEXT: li r4, 29 3262; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3263; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3264; CHECK-P9-BE-NEXT: ori r4, r4, 4098 3265; CHECK-P9-BE-NEXT: lhzx r3, r3, r4 3266; CHECK-P9-BE-NEXT: blr 3267; 3268; CHECK-P8-LE-LABEL: ld_align64_uint16_t_uint32_t: 3269; CHECK-P8-LE: # %bb.0: # %entry 3270; CHECK-P8-LE-NEXT: lis r4, 3725 3271; CHECK-P8-LE-NEXT: ori r4, r4, 19025 3272; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 3273; CHECK-P8-LE-NEXT: lhzx r3, r3, r4 3274; CHECK-P8-LE-NEXT: blr 3275; 3276; CHECK-P8-BE-LABEL: ld_align64_uint16_t_uint32_t: 3277; CHECK-P8-BE: # %bb.0: # %entry 3278; CHECK-P8-BE-NEXT: li r4, 29 3279; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3280; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3281; CHECK-P8-BE-NEXT: ori r4, r4, 4098 3282; CHECK-P8-BE-NEXT: lhzx r3, r3, r4 3283; CHECK-P8-BE-NEXT: blr 3284entry: 3285 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 3286 %0 = load i32, ptr %add.ptr, align 4 3287 %conv = trunc i32 %0 to i16 3288 ret i16 %conv 3289} 3290 3291; Function Attrs: norecurse nounwind readonly uwtable willreturn 3292define dso_local zeroext i16 @ld_reg_uint16_t_uint32_t(ptr nocapture readonly %ptr, i64 %off) { 3293; CHECK-LE-LABEL: ld_reg_uint16_t_uint32_t: 3294; CHECK-LE: # %bb.0: # %entry 3295; CHECK-LE-NEXT: lhzx r3, r3, r4 3296; CHECK-LE-NEXT: blr 3297; 3298; CHECK-BE-LABEL: ld_reg_uint16_t_uint32_t: 3299; CHECK-BE: # %bb.0: # %entry 3300; CHECK-BE-NEXT: add r3, r3, r4 3301; CHECK-BE-NEXT: lhz r3, 2(r3) 3302; CHECK-BE-NEXT: blr 3303entry: 3304 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 3305 %0 = load i32, ptr %add.ptr, align 4 3306 %conv = trunc i32 %0 to i16 3307 ret i16 %conv 3308} 3309 3310; Function Attrs: norecurse nounwind readonly uwtable willreturn 3311define dso_local zeroext i16 @ld_or_uint16_t_uint32_t(i64 %ptr, i8 zeroext %off) { 3312; CHECK-LE-LABEL: ld_or_uint16_t_uint32_t: 3313; CHECK-LE: # %bb.0: # %entry 3314; CHECK-LE-NEXT: or r3, r4, r3 3315; CHECK-LE-NEXT: lhz r3, 0(r3) 3316; CHECK-LE-NEXT: blr 3317; 3318; CHECK-BE-LABEL: ld_or_uint16_t_uint32_t: 3319; CHECK-BE: # %bb.0: # %entry 3320; CHECK-BE-NEXT: or r3, r4, r3 3321; CHECK-BE-NEXT: lhz r3, 2(r3) 3322; CHECK-BE-NEXT: blr 3323entry: 3324 %conv = zext i8 %off to i64 3325 %or = or i64 %conv, %ptr 3326 %0 = inttoptr i64 %or to ptr 3327 %1 = load i32, ptr %0, align 4 3328 %conv1 = trunc i32 %1 to i16 3329 ret i16 %conv1 3330} 3331 3332; Function Attrs: norecurse nounwind readonly uwtable willreturn 3333define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint32_t(i64 %ptr) { 3334; CHECK-LE-LABEL: ld_not_disjoint16_uint16_t_uint32_t: 3335; CHECK-LE: # %bb.0: # %entry 3336; CHECK-LE-NEXT: ori r3, r3, 6 3337; CHECK-LE-NEXT: lhz r3, 0(r3) 3338; CHECK-LE-NEXT: blr 3339; 3340; CHECK-BE-LABEL: ld_not_disjoint16_uint16_t_uint32_t: 3341; CHECK-BE: # %bb.0: # %entry 3342; CHECK-BE-NEXT: ori r3, r3, 6 3343; CHECK-BE-NEXT: lhz r3, 2(r3) 3344; CHECK-BE-NEXT: blr 3345entry: 3346 %or = or i64 %ptr, 6 3347 %0 = inttoptr i64 %or to ptr 3348 %1 = load i32, ptr %0, align 4 3349 %conv = trunc i32 %1 to i16 3350 ret i16 %conv 3351} 3352 3353; Function Attrs: norecurse nounwind readonly uwtable willreturn 3354define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint32_t(i64 %ptr) { 3355; CHECK-LE-LABEL: ld_disjoint_align16_uint16_t_uint32_t: 3356; CHECK-LE: # %bb.0: # %entry 3357; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 3358; CHECK-LE-NEXT: lhz r3, 24(r3) 3359; CHECK-LE-NEXT: blr 3360; 3361; CHECK-BE-LABEL: ld_disjoint_align16_uint16_t_uint32_t: 3362; CHECK-BE: # %bb.0: # %entry 3363; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 3364; CHECK-BE-NEXT: lhz r3, 26(r3) 3365; CHECK-BE-NEXT: blr 3366entry: 3367 %and = and i64 %ptr, -4096 3368 %or = or i64 %and, 24 3369 %0 = inttoptr i64 %or to ptr 3370 %1 = load i32, ptr %0, align 8 3371 %conv = trunc i32 %1 to i16 3372 ret i16 %conv 3373} 3374 3375; Function Attrs: norecurse nounwind readonly uwtable willreturn 3376define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint32_t(i64 %ptr) { 3377; CHECK-LE-LABEL: ld_not_disjoint32_uint16_t_uint32_t: 3378; CHECK-LE: # %bb.0: # %entry 3379; CHECK-LE-NEXT: ori r3, r3, 34463 3380; CHECK-LE-NEXT: oris r3, r3, 1 3381; CHECK-LE-NEXT: lhz r3, 0(r3) 3382; CHECK-LE-NEXT: blr 3383; 3384; CHECK-BE-LABEL: ld_not_disjoint32_uint16_t_uint32_t: 3385; CHECK-BE: # %bb.0: # %entry 3386; CHECK-BE-NEXT: ori r3, r3, 34463 3387; CHECK-BE-NEXT: oris r3, r3, 1 3388; CHECK-BE-NEXT: lhz r3, 2(r3) 3389; CHECK-BE-NEXT: blr 3390entry: 3391 %or = or i64 %ptr, 99999 3392 %0 = inttoptr i64 %or to ptr 3393 %1 = load i32, ptr %0, align 4 3394 %conv = trunc i32 %1 to i16 3395 ret i16 %conv 3396} 3397 3398; Function Attrs: norecurse nounwind readonly uwtable willreturn 3399define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint32_t(i64 %ptr) { 3400; CHECK-P10-LE-LABEL: ld_disjoint_align32_uint16_t_uint32_t: 3401; CHECK-P10-LE: # %bb.0: # %entry 3402; CHECK-P10-LE-NEXT: lis r4, -15264 3403; CHECK-P10-LE-NEXT: and r3, r3, r4 3404; CHECK-P10-LE-NEXT: plhz r3, 999990000(r3), 0 3405; CHECK-P10-LE-NEXT: blr 3406; 3407; CHECK-P10-BE-LABEL: ld_disjoint_align32_uint16_t_uint32_t: 3408; CHECK-P10-BE: # %bb.0: # %entry 3409; CHECK-P10-BE-NEXT: lis r4, -15264 3410; CHECK-P10-BE-NEXT: and r3, r3, r4 3411; CHECK-P10-BE-NEXT: plhz r3, 999990002(r3), 0 3412; CHECK-P10-BE-NEXT: blr 3413; 3414; CHECK-P9-LE-LABEL: ld_disjoint_align32_uint16_t_uint32_t: 3415; CHECK-P9-LE: # %bb.0: # %entry 3416; CHECK-P9-LE-NEXT: lis r4, -15264 3417; CHECK-P9-LE-NEXT: and r3, r3, r4 3418; CHECK-P9-LE-NEXT: lis r4, 15258 3419; CHECK-P9-LE-NEXT: ori r4, r4, 41712 3420; CHECK-P9-LE-NEXT: lhzx r3, r3, r4 3421; CHECK-P9-LE-NEXT: blr 3422; 3423; CHECK-P9-BE-LABEL: ld_disjoint_align32_uint16_t_uint32_t: 3424; CHECK-P9-BE: # %bb.0: # %entry 3425; CHECK-P9-BE-NEXT: lis r4, -15264 3426; CHECK-P9-BE-NEXT: and r3, r3, r4 3427; CHECK-P9-BE-NEXT: lis r4, 15258 3428; CHECK-P9-BE-NEXT: ori r4, r4, 41714 3429; CHECK-P9-BE-NEXT: lhzx r3, r3, r4 3430; CHECK-P9-BE-NEXT: blr 3431; 3432; CHECK-P8-LE-LABEL: ld_disjoint_align32_uint16_t_uint32_t: 3433; CHECK-P8-LE: # %bb.0: # %entry 3434; CHECK-P8-LE-NEXT: lis r4, -15264 3435; CHECK-P8-LE-NEXT: and r3, r3, r4 3436; CHECK-P8-LE-NEXT: lis r4, 15258 3437; CHECK-P8-LE-NEXT: ori r4, r4, 41712 3438; CHECK-P8-LE-NEXT: lhzx r3, r3, r4 3439; CHECK-P8-LE-NEXT: blr 3440; 3441; CHECK-P8-BE-LABEL: ld_disjoint_align32_uint16_t_uint32_t: 3442; CHECK-P8-BE: # %bb.0: # %entry 3443; CHECK-P8-BE-NEXT: lis r4, -15264 3444; CHECK-P8-BE-NEXT: and r3, r3, r4 3445; CHECK-P8-BE-NEXT: lis r4, 15258 3446; CHECK-P8-BE-NEXT: ori r4, r4, 41714 3447; CHECK-P8-BE-NEXT: lhzx r3, r3, r4 3448; CHECK-P8-BE-NEXT: blr 3449entry: 3450 %and = and i64 %ptr, -1000341504 3451 %or = or i64 %and, 999990000 3452 %0 = inttoptr i64 %or to ptr 3453 %1 = load i32, ptr %0, align 16 3454 %conv = trunc i32 %1 to i16 3455 ret i16 %conv 3456} 3457 3458; Function Attrs: norecurse nounwind readonly uwtable willreturn 3459define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint32_t(i64 %ptr) { 3460; CHECK-P10-LE-LABEL: ld_not_disjoint64_uint16_t_uint32_t: 3461; CHECK-P10-LE: # %bb.0: # %entry 3462; CHECK-P10-LE-NEXT: pli r4, 232 3463; CHECK-P10-LE-NEXT: pli r5, 3567587329 3464; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 3465; CHECK-P10-LE-NEXT: or r3, r3, r5 3466; CHECK-P10-LE-NEXT: lhz r3, 0(r3) 3467; CHECK-P10-LE-NEXT: blr 3468; 3469; CHECK-P10-BE-LABEL: ld_not_disjoint64_uint16_t_uint32_t: 3470; CHECK-P10-BE: # %bb.0: # %entry 3471; CHECK-P10-BE-NEXT: pli r4, 232 3472; CHECK-P10-BE-NEXT: pli r5, 3567587329 3473; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3474; CHECK-P10-BE-NEXT: or r3, r3, r5 3475; CHECK-P10-BE-NEXT: lhz r3, 2(r3) 3476; CHECK-P10-BE-NEXT: blr 3477; 3478; CHECK-P9-LE-LABEL: ld_not_disjoint64_uint16_t_uint32_t: 3479; CHECK-P9-LE: # %bb.0: # %entry 3480; CHECK-P9-LE-NEXT: li r4, 29 3481; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 3482; CHECK-P9-LE-NEXT: oris r4, r4, 54437 3483; CHECK-P9-LE-NEXT: ori r4, r4, 4097 3484; CHECK-P9-LE-NEXT: or r3, r3, r4 3485; CHECK-P9-LE-NEXT: lhz r3, 0(r3) 3486; CHECK-P9-LE-NEXT: blr 3487; 3488; CHECK-P9-BE-LABEL: ld_not_disjoint64_uint16_t_uint32_t: 3489; CHECK-P9-BE: # %bb.0: # %entry 3490; CHECK-P9-BE-NEXT: li r4, 29 3491; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3492; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3493; CHECK-P9-BE-NEXT: ori r4, r4, 4097 3494; CHECK-P9-BE-NEXT: or r3, r3, r4 3495; CHECK-P9-BE-NEXT: lhz r3, 2(r3) 3496; CHECK-P9-BE-NEXT: blr 3497; 3498; CHECK-P8-LE-LABEL: ld_not_disjoint64_uint16_t_uint32_t: 3499; CHECK-P8-LE: # %bb.0: # %entry 3500; CHECK-P8-LE-NEXT: li r4, 29 3501; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 3502; CHECK-P8-LE-NEXT: oris r4, r4, 54437 3503; CHECK-P8-LE-NEXT: ori r4, r4, 4097 3504; CHECK-P8-LE-NEXT: or r3, r3, r4 3505; CHECK-P8-LE-NEXT: lhz r3, 0(r3) 3506; CHECK-P8-LE-NEXT: blr 3507; 3508; CHECK-P8-BE-LABEL: ld_not_disjoint64_uint16_t_uint32_t: 3509; CHECK-P8-BE: # %bb.0: # %entry 3510; CHECK-P8-BE-NEXT: li r4, 29 3511; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3512; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3513; CHECK-P8-BE-NEXT: ori r4, r4, 4097 3514; CHECK-P8-BE-NEXT: or r3, r3, r4 3515; CHECK-P8-BE-NEXT: lhz r3, 2(r3) 3516; CHECK-P8-BE-NEXT: blr 3517entry: 3518 %or = or i64 %ptr, 1000000000001 3519 %0 = inttoptr i64 %or to ptr 3520 %1 = load i32, ptr %0, align 4 3521 %conv = trunc i32 %1 to i16 3522 ret i16 %conv 3523} 3524 3525; Function Attrs: norecurse nounwind readonly uwtable willreturn 3526define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint32_t(i64 %ptr) { 3527; CHECK-P10-LE-LABEL: ld_disjoint_align64_uint16_t_uint32_t: 3528; CHECK-P10-LE: # %bb.0: # %entry 3529; CHECK-P10-LE-NEXT: pli r4, 244140625 3530; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 3531; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 3532; CHECK-P10-LE-NEXT: lhzx r3, r3, r4 3533; CHECK-P10-LE-NEXT: blr 3534; 3535; CHECK-P10-BE-LABEL: ld_disjoint_align64_uint16_t_uint32_t: 3536; CHECK-P10-BE: # %bb.0: # %entry 3537; CHECK-P10-BE-NEXT: pli r4, 232 3538; CHECK-P10-BE-NEXT: pli r5, 3567587330 3539; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 3540; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3541; CHECK-P10-BE-NEXT: lhzx r3, r3, r5 3542; CHECK-P10-BE-NEXT: blr 3543; 3544; CHECK-P9-LE-LABEL: ld_disjoint_align64_uint16_t_uint32_t: 3545; CHECK-P9-LE: # %bb.0: # %entry 3546; CHECK-P9-LE-NEXT: lis r4, 3725 3547; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 3548; CHECK-P9-LE-NEXT: ori r4, r4, 19025 3549; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 3550; CHECK-P9-LE-NEXT: lhzx r3, r3, r4 3551; CHECK-P9-LE-NEXT: blr 3552; 3553; CHECK-P9-BE-LABEL: ld_disjoint_align64_uint16_t_uint32_t: 3554; CHECK-P9-BE: # %bb.0: # %entry 3555; CHECK-P9-BE-NEXT: li r4, 29 3556; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 3557; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3558; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3559; CHECK-P9-BE-NEXT: ori r4, r4, 4098 3560; CHECK-P9-BE-NEXT: lhzx r3, r3, r4 3561; CHECK-P9-BE-NEXT: blr 3562; 3563; CHECK-P8-LE-LABEL: ld_disjoint_align64_uint16_t_uint32_t: 3564; CHECK-P8-LE: # %bb.0: # %entry 3565; CHECK-P8-LE-NEXT: lis r4, 3725 3566; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 3567; CHECK-P8-LE-NEXT: ori r4, r4, 19025 3568; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 3569; CHECK-P8-LE-NEXT: lhzx r3, r3, r4 3570; CHECK-P8-LE-NEXT: blr 3571; 3572; CHECK-P8-BE-LABEL: ld_disjoint_align64_uint16_t_uint32_t: 3573; CHECK-P8-BE: # %bb.0: # %entry 3574; CHECK-P8-BE-NEXT: li r4, 29 3575; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 3576; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3577; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3578; CHECK-P8-BE-NEXT: ori r4, r4, 4098 3579; CHECK-P8-BE-NEXT: lhzx r3, r3, r4 3580; CHECK-P8-BE-NEXT: blr 3581entry: 3582 %and = and i64 %ptr, -1099511627776 3583 %or = or i64 %and, 1000000000000 3584 %0 = inttoptr i64 %or to ptr 3585 %1 = load i32, ptr %0, align 4096 3586 %conv = trunc i32 %1 to i16 3587 ret i16 %conv 3588} 3589 3590; Function Attrs: norecurse nounwind readonly uwtable willreturn 3591define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint32_t() { 3592; CHECK-LE-LABEL: ld_cst_align16_uint16_t_uint32_t: 3593; CHECK-LE: # %bb.0: # %entry 3594; CHECK-LE-NEXT: lhz r3, 4080(0) 3595; CHECK-LE-NEXT: blr 3596; 3597; CHECK-BE-LABEL: ld_cst_align16_uint16_t_uint32_t: 3598; CHECK-BE: # %bb.0: # %entry 3599; CHECK-BE-NEXT: lhz r3, 4082(0) 3600; CHECK-BE-NEXT: blr 3601entry: 3602 %0 = load i32, ptr inttoptr (i64 4080 to ptr), align 16 3603 %conv = trunc i32 %0 to i16 3604 ret i16 %conv 3605} 3606 3607; Function Attrs: norecurse nounwind readonly uwtable willreturn 3608define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint32_t() { 3609; CHECK-LE-LABEL: ld_cst_align32_uint16_t_uint32_t: 3610; CHECK-LE: # %bb.0: # %entry 3611; CHECK-LE-NEXT: lis r3, 153 3612; CHECK-LE-NEXT: lhz r3, -27108(r3) 3613; CHECK-LE-NEXT: blr 3614; 3615; CHECK-BE-LABEL: ld_cst_align32_uint16_t_uint32_t: 3616; CHECK-BE: # %bb.0: # %entry 3617; CHECK-BE-NEXT: lis r3, 153 3618; CHECK-BE-NEXT: lhz r3, -27106(r3) 3619; CHECK-BE-NEXT: blr 3620entry: 3621 %0 = load i32, ptr inttoptr (i64 9999900 to ptr), align 4 3622 %conv = trunc i32 %0 to i16 3623 ret i16 %conv 3624} 3625 3626; Function Attrs: norecurse nounwind readonly uwtable willreturn 3627define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint32_t() { 3628; CHECK-P10-LE-LABEL: ld_cst_align64_uint16_t_uint32_t: 3629; CHECK-P10-LE: # %bb.0: # %entry 3630; CHECK-P10-LE-NEXT: pli r3, 244140625 3631; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 3632; CHECK-P10-LE-NEXT: lhz r3, 0(r3) 3633; CHECK-P10-LE-NEXT: blr 3634; 3635; CHECK-P10-BE-LABEL: ld_cst_align64_uint16_t_uint32_t: 3636; CHECK-P10-BE: # %bb.0: # %entry 3637; CHECK-P10-BE-NEXT: pli r3, 232 3638; CHECK-P10-BE-NEXT: pli r4, 3567587330 3639; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 3640; CHECK-P10-BE-NEXT: lhz r3, 0(r4) 3641; CHECK-P10-BE-NEXT: blr 3642; 3643; CHECK-P9-LE-LABEL: ld_cst_align64_uint16_t_uint32_t: 3644; CHECK-P9-LE: # %bb.0: # %entry 3645; CHECK-P9-LE-NEXT: lis r3, 3725 3646; CHECK-P9-LE-NEXT: ori r3, r3, 19025 3647; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 3648; CHECK-P9-LE-NEXT: lhz r3, 0(r3) 3649; CHECK-P9-LE-NEXT: blr 3650; 3651; CHECK-P9-BE-LABEL: ld_cst_align64_uint16_t_uint32_t: 3652; CHECK-P9-BE: # %bb.0: # %entry 3653; CHECK-P9-BE-NEXT: li r3, 29 3654; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 3655; CHECK-P9-BE-NEXT: oris r3, r3, 54437 3656; CHECK-P9-BE-NEXT: ori r3, r3, 4098 3657; CHECK-P9-BE-NEXT: lhz r3, 0(r3) 3658; CHECK-P9-BE-NEXT: blr 3659; 3660; CHECK-P8-LE-LABEL: ld_cst_align64_uint16_t_uint32_t: 3661; CHECK-P8-LE: # %bb.0: # %entry 3662; CHECK-P8-LE-NEXT: lis r3, 3725 3663; CHECK-P8-LE-NEXT: ori r3, r3, 19025 3664; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 3665; CHECK-P8-LE-NEXT: lhz r3, 0(r3) 3666; CHECK-P8-LE-NEXT: blr 3667; 3668; CHECK-P8-BE-LABEL: ld_cst_align64_uint16_t_uint32_t: 3669; CHECK-P8-BE: # %bb.0: # %entry 3670; CHECK-P8-BE-NEXT: li r3, 29 3671; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 3672; CHECK-P8-BE-NEXT: oris r3, r3, 54437 3673; CHECK-P8-BE-NEXT: ori r3, r3, 4098 3674; CHECK-P8-BE-NEXT: lhz r3, 0(r3) 3675; CHECK-P8-BE-NEXT: blr 3676entry: 3677 %0 = load i32, ptr inttoptr (i64 1000000000000 to ptr), align 4096 3678 %conv = trunc i32 %0 to i16 3679 ret i16 %conv 3680} 3681 3682; Function Attrs: norecurse nounwind readonly uwtable willreturn 3683define dso_local zeroext i16 @ld_0_uint16_t_uint64_t(i64 %ptr) { 3684; CHECK-LE-LABEL: ld_0_uint16_t_uint64_t: 3685; CHECK-LE: # %bb.0: # %entry 3686; CHECK-LE-NEXT: lhz r3, 0(r3) 3687; CHECK-LE-NEXT: blr 3688; 3689; CHECK-BE-LABEL: ld_0_uint16_t_uint64_t: 3690; CHECK-BE: # %bb.0: # %entry 3691; CHECK-BE-NEXT: lhz r3, 6(r3) 3692; CHECK-BE-NEXT: blr 3693entry: 3694 %0 = inttoptr i64 %ptr to ptr 3695 %1 = load i64, ptr %0, align 8 3696 %conv = trunc i64 %1 to i16 3697 ret i16 %conv 3698} 3699 3700; Function Attrs: norecurse nounwind readonly uwtable willreturn 3701define dso_local zeroext i16 @ld_align16_uint16_t_uint64_t(ptr nocapture readonly %ptr) { 3702; CHECK-LE-LABEL: ld_align16_uint16_t_uint64_t: 3703; CHECK-LE: # %bb.0: # %entry 3704; CHECK-LE-NEXT: lhz r3, 8(r3) 3705; CHECK-LE-NEXT: blr 3706; 3707; CHECK-BE-LABEL: ld_align16_uint16_t_uint64_t: 3708; CHECK-BE: # %bb.0: # %entry 3709; CHECK-BE-NEXT: lhz r3, 14(r3) 3710; CHECK-BE-NEXT: blr 3711entry: 3712 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 3713 %0 = load i64, ptr %add.ptr, align 8 3714 %conv = trunc i64 %0 to i16 3715 ret i16 %conv 3716} 3717 3718; Function Attrs: norecurse nounwind readonly uwtable willreturn 3719define dso_local zeroext i16 @ld_align32_uint16_t_uint64_t(ptr nocapture readonly %ptr) { 3720; CHECK-P10-LE-LABEL: ld_align32_uint16_t_uint64_t: 3721; CHECK-P10-LE: # %bb.0: # %entry 3722; CHECK-P10-LE-NEXT: plhz r3, 99999000(r3), 0 3723; CHECK-P10-LE-NEXT: blr 3724; 3725; CHECK-P10-BE-LABEL: ld_align32_uint16_t_uint64_t: 3726; CHECK-P10-BE: # %bb.0: # %entry 3727; CHECK-P10-BE-NEXT: plhz r3, 99999006(r3), 0 3728; CHECK-P10-BE-NEXT: blr 3729; 3730; CHECK-P9-LE-LABEL: ld_align32_uint16_t_uint64_t: 3731; CHECK-P9-LE: # %bb.0: # %entry 3732; CHECK-P9-LE-NEXT: lis r4, 1525 3733; CHECK-P9-LE-NEXT: ori r4, r4, 56600 3734; CHECK-P9-LE-NEXT: lhzx r3, r3, r4 3735; CHECK-P9-LE-NEXT: blr 3736; 3737; CHECK-P9-BE-LABEL: ld_align32_uint16_t_uint64_t: 3738; CHECK-P9-BE: # %bb.0: # %entry 3739; CHECK-P9-BE-NEXT: lis r4, 1525 3740; CHECK-P9-BE-NEXT: ori r4, r4, 56606 3741; CHECK-P9-BE-NEXT: lhzx r3, r3, r4 3742; CHECK-P9-BE-NEXT: blr 3743; 3744; CHECK-P8-LE-LABEL: ld_align32_uint16_t_uint64_t: 3745; CHECK-P8-LE: # %bb.0: # %entry 3746; CHECK-P8-LE-NEXT: lis r4, 1525 3747; CHECK-P8-LE-NEXT: ori r4, r4, 56600 3748; CHECK-P8-LE-NEXT: lhzx r3, r3, r4 3749; CHECK-P8-LE-NEXT: blr 3750; 3751; CHECK-P8-BE-LABEL: ld_align32_uint16_t_uint64_t: 3752; CHECK-P8-BE: # %bb.0: # %entry 3753; CHECK-P8-BE-NEXT: lis r4, 1525 3754; CHECK-P8-BE-NEXT: ori r4, r4, 56606 3755; CHECK-P8-BE-NEXT: lhzx r3, r3, r4 3756; CHECK-P8-BE-NEXT: blr 3757entry: 3758 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 3759 %0 = load i64, ptr %add.ptr, align 8 3760 %conv = trunc i64 %0 to i16 3761 ret i16 %conv 3762} 3763 3764; Function Attrs: norecurse nounwind readonly uwtable willreturn 3765define dso_local zeroext i16 @ld_align64_uint16_t_uint64_t(ptr nocapture readonly %ptr) { 3766; CHECK-P10-LE-LABEL: ld_align64_uint16_t_uint64_t: 3767; CHECK-P10-LE: # %bb.0: # %entry 3768; CHECK-P10-LE-NEXT: pli r4, 244140625 3769; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 3770; CHECK-P10-LE-NEXT: lhzx r3, r3, r4 3771; CHECK-P10-LE-NEXT: blr 3772; 3773; CHECK-P10-BE-LABEL: ld_align64_uint16_t_uint64_t: 3774; CHECK-P10-BE: # %bb.0: # %entry 3775; CHECK-P10-BE-NEXT: pli r4, 232 3776; CHECK-P10-BE-NEXT: pli r5, 3567587334 3777; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 3778; CHECK-P10-BE-NEXT: lhzx r3, r3, r5 3779; CHECK-P10-BE-NEXT: blr 3780; 3781; CHECK-P9-LE-LABEL: ld_align64_uint16_t_uint64_t: 3782; CHECK-P9-LE: # %bb.0: # %entry 3783; CHECK-P9-LE-NEXT: lis r4, 3725 3784; CHECK-P9-LE-NEXT: ori r4, r4, 19025 3785; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 3786; CHECK-P9-LE-NEXT: lhzx r3, r3, r4 3787; CHECK-P9-LE-NEXT: blr 3788; 3789; CHECK-P9-BE-LABEL: ld_align64_uint16_t_uint64_t: 3790; CHECK-P9-BE: # %bb.0: # %entry 3791; CHECK-P9-BE-NEXT: li r4, 29 3792; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 3793; CHECK-P9-BE-NEXT: oris r4, r4, 54437 3794; CHECK-P9-BE-NEXT: ori r4, r4, 4102 3795; CHECK-P9-BE-NEXT: lhzx r3, r3, r4 3796; CHECK-P9-BE-NEXT: blr 3797; 3798; CHECK-P8-LE-LABEL: ld_align64_uint16_t_uint64_t: 3799; CHECK-P8-LE: # %bb.0: # %entry 3800; CHECK-P8-LE-NEXT: lis r4, 3725 3801; CHECK-P8-LE-NEXT: ori r4, r4, 19025 3802; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 3803; CHECK-P8-LE-NEXT: lhzx r3, r3, r4 3804; CHECK-P8-LE-NEXT: blr 3805; 3806; CHECK-P8-BE-LABEL: ld_align64_uint16_t_uint64_t: 3807; CHECK-P8-BE: # %bb.0: # %entry 3808; CHECK-P8-BE-NEXT: li r4, 29 3809; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 3810; CHECK-P8-BE-NEXT: oris r4, r4, 54437 3811; CHECK-P8-BE-NEXT: ori r4, r4, 4102 3812; CHECK-P8-BE-NEXT: lhzx r3, r3, r4 3813; CHECK-P8-BE-NEXT: blr 3814entry: 3815 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 3816 %0 = load i64, ptr %add.ptr, align 8 3817 %conv = trunc i64 %0 to i16 3818 ret i16 %conv 3819} 3820 3821; Function Attrs: norecurse nounwind readonly uwtable willreturn 3822define dso_local zeroext i16 @ld_reg_uint16_t_uint64_t(ptr nocapture readonly %ptr, i64 %off) { 3823; CHECK-LE-LABEL: ld_reg_uint16_t_uint64_t: 3824; CHECK-LE: # %bb.0: # %entry 3825; CHECK-LE-NEXT: lhzx r3, r3, r4 3826; CHECK-LE-NEXT: blr 3827; 3828; CHECK-BE-LABEL: ld_reg_uint16_t_uint64_t: 3829; CHECK-BE: # %bb.0: # %entry 3830; CHECK-BE-NEXT: add r3, r3, r4 3831; CHECK-BE-NEXT: lhz r3, 6(r3) 3832; CHECK-BE-NEXT: blr 3833entry: 3834 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 3835 %0 = load i64, ptr %add.ptr, align 8 3836 %conv = trunc i64 %0 to i16 3837 ret i16 %conv 3838} 3839 3840; Function Attrs: norecurse nounwind readonly uwtable willreturn 3841define dso_local zeroext i16 @ld_or_uint16_t_uint64_t(i64 %ptr, i8 zeroext %off) { 3842; CHECK-LE-LABEL: ld_or_uint16_t_uint64_t: 3843; CHECK-LE: # %bb.0: # %entry 3844; CHECK-LE-NEXT: or r3, r4, r3 3845; CHECK-LE-NEXT: lhz r3, 0(r3) 3846; CHECK-LE-NEXT: blr 3847; 3848; CHECK-BE-LABEL: ld_or_uint16_t_uint64_t: 3849; CHECK-BE: # %bb.0: # %entry 3850; CHECK-BE-NEXT: or r3, r4, r3 3851; CHECK-BE-NEXT: lhz r3, 6(r3) 3852; CHECK-BE-NEXT: blr 3853entry: 3854 %conv = zext i8 %off to i64 3855 %or = or i64 %conv, %ptr 3856 %0 = inttoptr i64 %or to ptr 3857 %1 = load i64, ptr %0, align 8 3858 %conv1 = trunc i64 %1 to i16 3859 ret i16 %conv1 3860} 3861 3862; Function Attrs: norecurse nounwind readonly uwtable willreturn 3863define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_uint64_t(i64 %ptr) { 3864; CHECK-LE-LABEL: ld_not_disjoint16_uint16_t_uint64_t: 3865; CHECK-LE: # %bb.0: # %entry 3866; CHECK-LE-NEXT: ori r3, r3, 6 3867; CHECK-LE-NEXT: lhz r3, 0(r3) 3868; CHECK-LE-NEXT: blr 3869; 3870; CHECK-BE-LABEL: ld_not_disjoint16_uint16_t_uint64_t: 3871; CHECK-BE: # %bb.0: # %entry 3872; CHECK-BE-NEXT: ori r3, r3, 6 3873; CHECK-BE-NEXT: lhz r3, 6(r3) 3874; CHECK-BE-NEXT: blr 3875entry: 3876 %or = or i64 %ptr, 6 3877 %0 = inttoptr i64 %or to ptr 3878 %1 = load i64, ptr %0, align 8 3879 %conv = trunc i64 %1 to i16 3880 ret i16 %conv 3881} 3882 3883; Function Attrs: norecurse nounwind readonly uwtable willreturn 3884define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_uint64_t(i64 %ptr) { 3885; CHECK-LE-LABEL: ld_disjoint_align16_uint16_t_uint64_t: 3886; CHECK-LE: # %bb.0: # %entry 3887; CHECK-LE-NEXT: rldicr r3, r3, 0, 51 3888; CHECK-LE-NEXT: lhz r3, 24(r3) 3889; CHECK-LE-NEXT: blr 3890; 3891; CHECK-BE-LABEL: ld_disjoint_align16_uint16_t_uint64_t: 3892; CHECK-BE: # %bb.0: # %entry 3893; CHECK-BE-NEXT: rldicr r3, r3, 0, 51 3894; CHECK-BE-NEXT: lhz r3, 30(r3) 3895; CHECK-BE-NEXT: blr 3896entry: 3897 %and = and i64 %ptr, -4096 3898 %or = or i64 %and, 24 3899 %0 = inttoptr i64 %or to ptr 3900 %1 = load i64, ptr %0, align 8 3901 %conv = trunc i64 %1 to i16 3902 ret i16 %conv 3903} 3904 3905; Function Attrs: norecurse nounwind readonly uwtable willreturn 3906define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_uint64_t(i64 %ptr) { 3907; CHECK-LE-LABEL: ld_not_disjoint32_uint16_t_uint64_t: 3908; CHECK-LE: # %bb.0: # %entry 3909; CHECK-LE-NEXT: ori r3, r3, 34463 3910; CHECK-LE-NEXT: oris r3, r3, 1 3911; CHECK-LE-NEXT: lhz r3, 0(r3) 3912; CHECK-LE-NEXT: blr 3913; 3914; CHECK-BE-LABEL: ld_not_disjoint32_uint16_t_uint64_t: 3915; CHECK-BE: # %bb.0: # %entry 3916; CHECK-BE-NEXT: ori r3, r3, 34463 3917; CHECK-BE-NEXT: oris r3, r3, 1 3918; CHECK-BE-NEXT: lhz r3, 6(r3) 3919; CHECK-BE-NEXT: blr 3920entry: 3921 %or = or i64 %ptr, 99999 3922 %0 = inttoptr i64 %or to ptr 3923 %1 = load i64, ptr %0, align 8 3924 %conv = trunc i64 %1 to i16 3925 ret i16 %conv 3926} 3927 3928; Function Attrs: norecurse nounwind readonly uwtable willreturn 3929define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_uint64_t(i64 %ptr) { 3930; CHECK-P10-LE-LABEL: ld_disjoint_align32_uint16_t_uint64_t: 3931; CHECK-P10-LE: # %bb.0: # %entry 3932; CHECK-P10-LE-NEXT: lis r4, -15264 3933; CHECK-P10-LE-NEXT: and r3, r3, r4 3934; CHECK-P10-LE-NEXT: plhz r3, 999990000(r3), 0 3935; CHECK-P10-LE-NEXT: blr 3936; 3937; CHECK-P10-BE-LABEL: ld_disjoint_align32_uint16_t_uint64_t: 3938; CHECK-P10-BE: # %bb.0: # %entry 3939; CHECK-P10-BE-NEXT: lis r4, -15264 3940; CHECK-P10-BE-NEXT: and r3, r3, r4 3941; CHECK-P10-BE-NEXT: plhz r3, 999990006(r3), 0 3942; CHECK-P10-BE-NEXT: blr 3943; 3944; CHECK-P9-LE-LABEL: ld_disjoint_align32_uint16_t_uint64_t: 3945; CHECK-P9-LE: # %bb.0: # %entry 3946; CHECK-P9-LE-NEXT: lis r4, -15264 3947; CHECK-P9-LE-NEXT: and r3, r3, r4 3948; CHECK-P9-LE-NEXT: lis r4, 15258 3949; CHECK-P9-LE-NEXT: ori r4, r4, 41712 3950; CHECK-P9-LE-NEXT: lhzx r3, r3, r4 3951; CHECK-P9-LE-NEXT: blr 3952; 3953; CHECK-P9-BE-LABEL: ld_disjoint_align32_uint16_t_uint64_t: 3954; CHECK-P9-BE: # %bb.0: # %entry 3955; CHECK-P9-BE-NEXT: lis r4, -15264 3956; CHECK-P9-BE-NEXT: and r3, r3, r4 3957; CHECK-P9-BE-NEXT: lis r4, 15258 3958; CHECK-P9-BE-NEXT: ori r4, r4, 41718 3959; CHECK-P9-BE-NEXT: lhzx r3, r3, r4 3960; CHECK-P9-BE-NEXT: blr 3961; 3962; CHECK-P8-LE-LABEL: ld_disjoint_align32_uint16_t_uint64_t: 3963; CHECK-P8-LE: # %bb.0: # %entry 3964; CHECK-P8-LE-NEXT: lis r4, -15264 3965; CHECK-P8-LE-NEXT: and r3, r3, r4 3966; CHECK-P8-LE-NEXT: lis r4, 15258 3967; CHECK-P8-LE-NEXT: ori r4, r4, 41712 3968; CHECK-P8-LE-NEXT: lhzx r3, r3, r4 3969; CHECK-P8-LE-NEXT: blr 3970; 3971; CHECK-P8-BE-LABEL: ld_disjoint_align32_uint16_t_uint64_t: 3972; CHECK-P8-BE: # %bb.0: # %entry 3973; CHECK-P8-BE-NEXT: lis r4, -15264 3974; CHECK-P8-BE-NEXT: and r3, r3, r4 3975; CHECK-P8-BE-NEXT: lis r4, 15258 3976; CHECK-P8-BE-NEXT: ori r4, r4, 41718 3977; CHECK-P8-BE-NEXT: lhzx r3, r3, r4 3978; CHECK-P8-BE-NEXT: blr 3979entry: 3980 %and = and i64 %ptr, -1000341504 3981 %or = or i64 %and, 999990000 3982 %0 = inttoptr i64 %or to ptr 3983 %1 = load i64, ptr %0, align 16 3984 %conv = trunc i64 %1 to i16 3985 ret i16 %conv 3986} 3987 3988; Function Attrs: norecurse nounwind readonly uwtable willreturn 3989define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_uint64_t(i64 %ptr) { 3990; CHECK-P10-LE-LABEL: ld_not_disjoint64_uint16_t_uint64_t: 3991; CHECK-P10-LE: # %bb.0: # %entry 3992; CHECK-P10-LE-NEXT: pli r4, 232 3993; CHECK-P10-LE-NEXT: pli r5, 3567587329 3994; CHECK-P10-LE-NEXT: rldimi r5, r4, 32, 0 3995; CHECK-P10-LE-NEXT: or r3, r3, r5 3996; CHECK-P10-LE-NEXT: lhz r3, 0(r3) 3997; CHECK-P10-LE-NEXT: blr 3998; 3999; CHECK-P10-BE-LABEL: ld_not_disjoint64_uint16_t_uint64_t: 4000; CHECK-P10-BE: # %bb.0: # %entry 4001; CHECK-P10-BE-NEXT: pli r4, 232 4002; CHECK-P10-BE-NEXT: pli r5, 3567587329 4003; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4004; CHECK-P10-BE-NEXT: or r3, r3, r5 4005; CHECK-P10-BE-NEXT: lhz r3, 6(r3) 4006; CHECK-P10-BE-NEXT: blr 4007; 4008; CHECK-P9-LE-LABEL: ld_not_disjoint64_uint16_t_uint64_t: 4009; CHECK-P9-LE: # %bb.0: # %entry 4010; CHECK-P9-LE-NEXT: li r4, 29 4011; CHECK-P9-LE-NEXT: rldic r4, r4, 35, 24 4012; CHECK-P9-LE-NEXT: oris r4, r4, 54437 4013; CHECK-P9-LE-NEXT: ori r4, r4, 4097 4014; CHECK-P9-LE-NEXT: or r3, r3, r4 4015; CHECK-P9-LE-NEXT: lhz r3, 0(r3) 4016; CHECK-P9-LE-NEXT: blr 4017; 4018; CHECK-P9-BE-LABEL: ld_not_disjoint64_uint16_t_uint64_t: 4019; CHECK-P9-BE: # %bb.0: # %entry 4020; CHECK-P9-BE-NEXT: li r4, 29 4021; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4022; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4023; CHECK-P9-BE-NEXT: ori r4, r4, 4097 4024; CHECK-P9-BE-NEXT: or r3, r3, r4 4025; CHECK-P9-BE-NEXT: lhz r3, 6(r3) 4026; CHECK-P9-BE-NEXT: blr 4027; 4028; CHECK-P8-LE-LABEL: ld_not_disjoint64_uint16_t_uint64_t: 4029; CHECK-P8-LE: # %bb.0: # %entry 4030; CHECK-P8-LE-NEXT: li r4, 29 4031; CHECK-P8-LE-NEXT: rldic r4, r4, 35, 24 4032; CHECK-P8-LE-NEXT: oris r4, r4, 54437 4033; CHECK-P8-LE-NEXT: ori r4, r4, 4097 4034; CHECK-P8-LE-NEXT: or r3, r3, r4 4035; CHECK-P8-LE-NEXT: lhz r3, 0(r3) 4036; CHECK-P8-LE-NEXT: blr 4037; 4038; CHECK-P8-BE-LABEL: ld_not_disjoint64_uint16_t_uint64_t: 4039; CHECK-P8-BE: # %bb.0: # %entry 4040; CHECK-P8-BE-NEXT: li r4, 29 4041; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4042; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4043; CHECK-P8-BE-NEXT: ori r4, r4, 4097 4044; CHECK-P8-BE-NEXT: or r3, r3, r4 4045; CHECK-P8-BE-NEXT: lhz r3, 6(r3) 4046; CHECK-P8-BE-NEXT: blr 4047entry: 4048 %or = or i64 %ptr, 1000000000001 4049 %0 = inttoptr i64 %or to ptr 4050 %1 = load i64, ptr %0, align 8 4051 %conv = trunc i64 %1 to i16 4052 ret i16 %conv 4053} 4054 4055; Function Attrs: norecurse nounwind readonly uwtable willreturn 4056define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_uint64_t(i64 %ptr) { 4057; CHECK-P10-LE-LABEL: ld_disjoint_align64_uint16_t_uint64_t: 4058; CHECK-P10-LE: # %bb.0: # %entry 4059; CHECK-P10-LE-NEXT: pli r4, 244140625 4060; CHECK-P10-LE-NEXT: rldicr r3, r3, 0, 23 4061; CHECK-P10-LE-NEXT: rldic r4, r4, 12, 24 4062; CHECK-P10-LE-NEXT: lhzx r3, r3, r4 4063; CHECK-P10-LE-NEXT: blr 4064; 4065; CHECK-P10-BE-LABEL: ld_disjoint_align64_uint16_t_uint64_t: 4066; CHECK-P10-BE: # %bb.0: # %entry 4067; CHECK-P10-BE-NEXT: pli r4, 232 4068; CHECK-P10-BE-NEXT: pli r5, 3567587334 4069; CHECK-P10-BE-NEXT: rldicr r3, r3, 0, 23 4070; CHECK-P10-BE-NEXT: rldimi r5, r4, 32, 0 4071; CHECK-P10-BE-NEXT: lhzx r3, r3, r5 4072; CHECK-P10-BE-NEXT: blr 4073; 4074; CHECK-P9-LE-LABEL: ld_disjoint_align64_uint16_t_uint64_t: 4075; CHECK-P9-LE: # %bb.0: # %entry 4076; CHECK-P9-LE-NEXT: lis r4, 3725 4077; CHECK-P9-LE-NEXT: rldicr r3, r3, 0, 23 4078; CHECK-P9-LE-NEXT: ori r4, r4, 19025 4079; CHECK-P9-LE-NEXT: rldic r4, r4, 12, 24 4080; CHECK-P9-LE-NEXT: lhzx r3, r3, r4 4081; CHECK-P9-LE-NEXT: blr 4082; 4083; CHECK-P9-BE-LABEL: ld_disjoint_align64_uint16_t_uint64_t: 4084; CHECK-P9-BE: # %bb.0: # %entry 4085; CHECK-P9-BE-NEXT: li r4, 29 4086; CHECK-P9-BE-NEXT: rldicr r3, r3, 0, 23 4087; CHECK-P9-BE-NEXT: rldic r4, r4, 35, 24 4088; CHECK-P9-BE-NEXT: oris r4, r4, 54437 4089; CHECK-P9-BE-NEXT: ori r4, r4, 4102 4090; CHECK-P9-BE-NEXT: lhzx r3, r3, r4 4091; CHECK-P9-BE-NEXT: blr 4092; 4093; CHECK-P8-LE-LABEL: ld_disjoint_align64_uint16_t_uint64_t: 4094; CHECK-P8-LE: # %bb.0: # %entry 4095; CHECK-P8-LE-NEXT: lis r4, 3725 4096; CHECK-P8-LE-NEXT: rldicr r3, r3, 0, 23 4097; CHECK-P8-LE-NEXT: ori r4, r4, 19025 4098; CHECK-P8-LE-NEXT: rldic r4, r4, 12, 24 4099; CHECK-P8-LE-NEXT: lhzx r3, r3, r4 4100; CHECK-P8-LE-NEXT: blr 4101; 4102; CHECK-P8-BE-LABEL: ld_disjoint_align64_uint16_t_uint64_t: 4103; CHECK-P8-BE: # %bb.0: # %entry 4104; CHECK-P8-BE-NEXT: li r4, 29 4105; CHECK-P8-BE-NEXT: rldicr r3, r3, 0, 23 4106; CHECK-P8-BE-NEXT: rldic r4, r4, 35, 24 4107; CHECK-P8-BE-NEXT: oris r4, r4, 54437 4108; CHECK-P8-BE-NEXT: ori r4, r4, 4102 4109; CHECK-P8-BE-NEXT: lhzx r3, r3, r4 4110; CHECK-P8-BE-NEXT: blr 4111entry: 4112 %and = and i64 %ptr, -1099511627776 4113 %or = or i64 %and, 1000000000000 4114 %0 = inttoptr i64 %or to ptr 4115 %1 = load i64, ptr %0, align 4096 4116 %conv = trunc i64 %1 to i16 4117 ret i16 %conv 4118} 4119 4120; Function Attrs: norecurse nounwind readonly uwtable willreturn 4121define dso_local zeroext i16 @ld_cst_align16_uint16_t_uint64_t() { 4122; CHECK-LE-LABEL: ld_cst_align16_uint16_t_uint64_t: 4123; CHECK-LE: # %bb.0: # %entry 4124; CHECK-LE-NEXT: lhz r3, 4080(0) 4125; CHECK-LE-NEXT: blr 4126; 4127; CHECK-BE-LABEL: ld_cst_align16_uint16_t_uint64_t: 4128; CHECK-BE: # %bb.0: # %entry 4129; CHECK-BE-NEXT: lhz r3, 4086(0) 4130; CHECK-BE-NEXT: blr 4131entry: 4132 %0 = load i64, ptr inttoptr (i64 4080 to ptr), align 16 4133 %conv = trunc i64 %0 to i16 4134 ret i16 %conv 4135} 4136 4137; Function Attrs: norecurse nounwind readonly uwtable willreturn 4138define dso_local zeroext i16 @ld_cst_align32_uint16_t_uint64_t() { 4139; CHECK-LE-LABEL: ld_cst_align32_uint16_t_uint64_t: 4140; CHECK-LE: # %bb.0: # %entry 4141; CHECK-LE-NEXT: lis r3, 153 4142; CHECK-LE-NEXT: lhz r3, -27108(r3) 4143; CHECK-LE-NEXT: blr 4144; 4145; CHECK-BE-LABEL: ld_cst_align32_uint16_t_uint64_t: 4146; CHECK-BE: # %bb.0: # %entry 4147; CHECK-BE-NEXT: lis r3, 153 4148; CHECK-BE-NEXT: lhz r3, -27102(r3) 4149; CHECK-BE-NEXT: blr 4150entry: 4151 %0 = load i64, ptr inttoptr (i64 9999900 to ptr), align 8 4152 %conv = trunc i64 %0 to i16 4153 ret i16 %conv 4154} 4155 4156; Function Attrs: norecurse nounwind readonly uwtable willreturn 4157define dso_local zeroext i16 @ld_cst_align64_uint16_t_uint64_t() { 4158; CHECK-P10-LE-LABEL: ld_cst_align64_uint16_t_uint64_t: 4159; CHECK-P10-LE: # %bb.0: # %entry 4160; CHECK-P10-LE-NEXT: pli r3, 244140625 4161; CHECK-P10-LE-NEXT: rldic r3, r3, 12, 24 4162; CHECK-P10-LE-NEXT: lhz r3, 0(r3) 4163; CHECK-P10-LE-NEXT: blr 4164; 4165; CHECK-P10-BE-LABEL: ld_cst_align64_uint16_t_uint64_t: 4166; CHECK-P10-BE: # %bb.0: # %entry 4167; CHECK-P10-BE-NEXT: pli r3, 232 4168; CHECK-P10-BE-NEXT: pli r4, 3567587334 4169; CHECK-P10-BE-NEXT: rldimi r4, r3, 32, 0 4170; CHECK-P10-BE-NEXT: lhz r3, 0(r4) 4171; CHECK-P10-BE-NEXT: blr 4172; 4173; CHECK-P9-LE-LABEL: ld_cst_align64_uint16_t_uint64_t: 4174; CHECK-P9-LE: # %bb.0: # %entry 4175; CHECK-P9-LE-NEXT: lis r3, 3725 4176; CHECK-P9-LE-NEXT: ori r3, r3, 19025 4177; CHECK-P9-LE-NEXT: rldic r3, r3, 12, 24 4178; CHECK-P9-LE-NEXT: lhz r3, 0(r3) 4179; CHECK-P9-LE-NEXT: blr 4180; 4181; CHECK-P9-BE-LABEL: ld_cst_align64_uint16_t_uint64_t: 4182; CHECK-P9-BE: # %bb.0: # %entry 4183; CHECK-P9-BE-NEXT: li r3, 29 4184; CHECK-P9-BE-NEXT: rldic r3, r3, 35, 24 4185; CHECK-P9-BE-NEXT: oris r3, r3, 54437 4186; CHECK-P9-BE-NEXT: ori r3, r3, 4102 4187; CHECK-P9-BE-NEXT: lhz r3, 0(r3) 4188; CHECK-P9-BE-NEXT: blr 4189; 4190; CHECK-P8-LE-LABEL: ld_cst_align64_uint16_t_uint64_t: 4191; CHECK-P8-LE: # %bb.0: # %entry 4192; CHECK-P8-LE-NEXT: lis r3, 3725 4193; CHECK-P8-LE-NEXT: ori r3, r3, 19025 4194; CHECK-P8-LE-NEXT: rldic r3, r3, 12, 24 4195; CHECK-P8-LE-NEXT: lhz r3, 0(r3) 4196; CHECK-P8-LE-NEXT: blr 4197; 4198; CHECK-P8-BE-LABEL: ld_cst_align64_uint16_t_uint64_t: 4199; CHECK-P8-BE: # %bb.0: # %entry 4200; CHECK-P8-BE-NEXT: li r3, 29 4201; CHECK-P8-BE-NEXT: rldic r3, r3, 35, 24 4202; CHECK-P8-BE-NEXT: oris r3, r3, 54437 4203; CHECK-P8-BE-NEXT: ori r3, r3, 4102 4204; CHECK-P8-BE-NEXT: lhz r3, 0(r3) 4205; CHECK-P8-BE-NEXT: blr 4206entry: 4207 %0 = load i64, ptr inttoptr (i64 1000000000000 to ptr), align 4096 4208 %conv = trunc i64 %0 to i16 4209 ret i16 %conv 4210} 4211 4212; Function Attrs: norecurse nounwind readonly uwtable willreturn 4213define dso_local zeroext i16 @ld_align16_uint16_t_float(ptr nocapture readonly %ptr) { 4214; CHECK-LABEL: ld_align16_uint16_t_float: 4215; CHECK: # %bb.0: # %entry 4216; CHECK-NEXT: lfs f0, 8(r3) 4217; CHECK-NEXT: xscvdpsxws f0, f0 4218; CHECK-NEXT: mffprwz r3, f0 4219; CHECK-NEXT: blr 4220entry: 4221 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 4222 %0 = load float, ptr %add.ptr, align 4 4223 %conv = fptoui float %0 to i16 4224 ret i16 %conv 4225} 4226 4227; Function Attrs: norecurse nounwind readonly uwtable willreturn 4228define dso_local zeroext i16 @ld_align32_uint16_t_float(ptr nocapture readonly %ptr) { 4229; CHECK-P10-LABEL: ld_align32_uint16_t_float: 4230; CHECK-P10: # %bb.0: # %entry 4231; CHECK-P10-NEXT: plfs f0, 99999000(r3), 0 4232; CHECK-P10-NEXT: xscvdpsxws f0, f0 4233; CHECK-P10-NEXT: mffprwz r3, f0 4234; CHECK-P10-NEXT: blr 4235; 4236; CHECK-PREP10-LABEL: ld_align32_uint16_t_float: 4237; CHECK-PREP10: # %bb.0: # %entry 4238; CHECK-PREP10-NEXT: lis r4, 1525 4239; CHECK-PREP10-NEXT: ori r4, r4, 56600 4240; CHECK-PREP10-NEXT: lfsx f0, r3, r4 4241; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4242; CHECK-PREP10-NEXT: mffprwz r3, f0 4243; CHECK-PREP10-NEXT: blr 4244entry: 4245 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 4246 %0 = load float, ptr %add.ptr, align 4 4247 %conv = fptoui float %0 to i16 4248 ret i16 %conv 4249} 4250 4251; Function Attrs: norecurse nounwind readonly uwtable willreturn 4252define dso_local zeroext i16 @ld_align64_uint16_t_float(ptr nocapture readonly %ptr) { 4253; CHECK-P10-LABEL: ld_align64_uint16_t_float: 4254; CHECK-P10: # %bb.0: # %entry 4255; CHECK-P10-NEXT: pli r4, 244140625 4256; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4257; CHECK-P10-NEXT: lfsx f0, r3, r4 4258; CHECK-P10-NEXT: xscvdpsxws f0, f0 4259; CHECK-P10-NEXT: mffprwz r3, f0 4260; CHECK-P10-NEXT: blr 4261; 4262; CHECK-PREP10-LABEL: ld_align64_uint16_t_float: 4263; CHECK-PREP10: # %bb.0: # %entry 4264; CHECK-PREP10-NEXT: lis r4, 3725 4265; CHECK-PREP10-NEXT: ori r4, r4, 19025 4266; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 4267; CHECK-PREP10-NEXT: lfsx f0, r3, r4 4268; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4269; CHECK-PREP10-NEXT: mffprwz r3, f0 4270; CHECK-PREP10-NEXT: blr 4271entry: 4272 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 4273 %0 = load float, ptr %add.ptr, align 4 4274 %conv = fptoui float %0 to i16 4275 ret i16 %conv 4276} 4277 4278; Function Attrs: norecurse nounwind readonly uwtable willreturn 4279define dso_local zeroext i16 @ld_reg_uint16_t_float(ptr nocapture readonly %ptr, i64 %off) { 4280; CHECK-LABEL: ld_reg_uint16_t_float: 4281; CHECK: # %bb.0: # %entry 4282; CHECK-NEXT: lfsx f0, r3, r4 4283; CHECK-NEXT: xscvdpsxws f0, f0 4284; CHECK-NEXT: mffprwz r3, f0 4285; CHECK-NEXT: blr 4286entry: 4287 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 4288 %0 = load float, ptr %add.ptr, align 4 4289 %conv = fptoui float %0 to i16 4290 ret i16 %conv 4291} 4292 4293; Function Attrs: norecurse nounwind readonly uwtable willreturn 4294define dso_local zeroext i16 @ld_or_uint16_t_float(i64 %ptr, i8 zeroext %off) { 4295; CHECK-LABEL: ld_or_uint16_t_float: 4296; CHECK: # %bb.0: # %entry 4297; CHECK-NEXT: or r3, r4, r3 4298; CHECK-NEXT: lfs f0, 0(r3) 4299; CHECK-NEXT: xscvdpsxws f0, f0 4300; CHECK-NEXT: mffprwz r3, f0 4301; CHECK-NEXT: blr 4302entry: 4303 %conv = zext i8 %off to i64 4304 %or = or i64 %conv, %ptr 4305 %0 = inttoptr i64 %or to ptr 4306 %1 = load float, ptr %0, align 4 4307 %conv1 = fptoui float %1 to i16 4308 ret i16 %conv1 4309} 4310 4311; Function Attrs: norecurse nounwind readonly uwtable willreturn 4312define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_float(i64 %ptr) { 4313; CHECK-LABEL: ld_not_disjoint16_uint16_t_float: 4314; CHECK: # %bb.0: # %entry 4315; CHECK-NEXT: ori r3, r3, 6 4316; CHECK-NEXT: lfs f0, 0(r3) 4317; CHECK-NEXT: xscvdpsxws f0, f0 4318; CHECK-NEXT: mffprwz r3, f0 4319; CHECK-NEXT: blr 4320entry: 4321 %or = or i64 %ptr, 6 4322 %0 = inttoptr i64 %or to ptr 4323 %1 = load float, ptr %0, align 4 4324 %conv = fptoui float %1 to i16 4325 ret i16 %conv 4326} 4327 4328; Function Attrs: norecurse nounwind readonly uwtable willreturn 4329define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_float(i64 %ptr) { 4330; CHECK-LABEL: ld_disjoint_align16_uint16_t_float: 4331; CHECK: # %bb.0: # %entry 4332; CHECK-NEXT: rldicr r3, r3, 0, 51 4333; CHECK-NEXT: lfs f0, 24(r3) 4334; CHECK-NEXT: xscvdpsxws f0, f0 4335; CHECK-NEXT: mffprwz r3, f0 4336; CHECK-NEXT: blr 4337entry: 4338 %and = and i64 %ptr, -4096 4339 %or = or i64 %and, 24 4340 %0 = inttoptr i64 %or to ptr 4341 %1 = load float, ptr %0, align 8 4342 %conv = fptoui float %1 to i16 4343 ret i16 %conv 4344} 4345 4346; Function Attrs: norecurse nounwind readonly uwtable willreturn 4347define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_float(i64 %ptr) { 4348; CHECK-LABEL: ld_not_disjoint32_uint16_t_float: 4349; CHECK: # %bb.0: # %entry 4350; CHECK-NEXT: ori r3, r3, 34463 4351; CHECK-NEXT: oris r3, r3, 1 4352; CHECK-NEXT: lfs f0, 0(r3) 4353; CHECK-NEXT: xscvdpsxws f0, f0 4354; CHECK-NEXT: mffprwz r3, f0 4355; CHECK-NEXT: blr 4356entry: 4357 %or = or i64 %ptr, 99999 4358 %0 = inttoptr i64 %or to ptr 4359 %1 = load float, ptr %0, align 4 4360 %conv = fptoui float %1 to i16 4361 ret i16 %conv 4362} 4363 4364; Function Attrs: norecurse nounwind readonly uwtable willreturn 4365define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_float(i64 %ptr) { 4366; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_float: 4367; CHECK-P10: # %bb.0: # %entry 4368; CHECK-P10-NEXT: lis r4, -15264 4369; CHECK-P10-NEXT: and r3, r3, r4 4370; CHECK-P10-NEXT: plfs f0, 999990000(r3), 0 4371; CHECK-P10-NEXT: xscvdpsxws f0, f0 4372; CHECK-P10-NEXT: mffprwz r3, f0 4373; CHECK-P10-NEXT: blr 4374; 4375; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_float: 4376; CHECK-PREP10: # %bb.0: # %entry 4377; CHECK-PREP10-NEXT: lis r4, -15264 4378; CHECK-PREP10-NEXT: and r3, r3, r4 4379; CHECK-PREP10-NEXT: lis r4, 15258 4380; CHECK-PREP10-NEXT: ori r4, r4, 41712 4381; CHECK-PREP10-NEXT: lfsx f0, r3, r4 4382; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4383; CHECK-PREP10-NEXT: mffprwz r3, f0 4384; CHECK-PREP10-NEXT: blr 4385entry: 4386 %and = and i64 %ptr, -1000341504 4387 %or = or i64 %and, 999990000 4388 %0 = inttoptr i64 %or to ptr 4389 %1 = load float, ptr %0, align 16 4390 %conv = fptoui float %1 to i16 4391 ret i16 %conv 4392} 4393 4394; Function Attrs: norecurse nounwind readonly uwtable willreturn 4395define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_float(i64 %ptr) { 4396; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_float: 4397; CHECK-P10: # %bb.0: # %entry 4398; CHECK-P10-NEXT: pli r4, 232 4399; CHECK-P10-NEXT: pli r5, 3567587329 4400; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 4401; CHECK-P10-NEXT: or r3, r3, r5 4402; CHECK-P10-NEXT: lfs f0, 0(r3) 4403; CHECK-P10-NEXT: xscvdpsxws f0, f0 4404; CHECK-P10-NEXT: mffprwz r3, f0 4405; CHECK-P10-NEXT: blr 4406; 4407; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_float: 4408; CHECK-PREP10: # %bb.0: # %entry 4409; CHECK-PREP10-NEXT: li r4, 29 4410; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 4411; CHECK-PREP10-NEXT: oris r4, r4, 54437 4412; CHECK-PREP10-NEXT: ori r4, r4, 4097 4413; CHECK-PREP10-NEXT: or r3, r3, r4 4414; CHECK-PREP10-NEXT: lfs f0, 0(r3) 4415; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4416; CHECK-PREP10-NEXT: mffprwz r3, f0 4417; CHECK-PREP10-NEXT: blr 4418entry: 4419 %or = or i64 %ptr, 1000000000001 4420 %0 = inttoptr i64 %or to ptr 4421 %1 = load float, ptr %0, align 4 4422 %conv = fptoui float %1 to i16 4423 ret i16 %conv 4424} 4425 4426; Function Attrs: norecurse nounwind readonly uwtable willreturn 4427define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_float(i64 %ptr) { 4428; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_float: 4429; CHECK-P10: # %bb.0: # %entry 4430; CHECK-P10-NEXT: pli r4, 244140625 4431; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 4432; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4433; CHECK-P10-NEXT: lfsx f0, r3, r4 4434; CHECK-P10-NEXT: xscvdpsxws f0, f0 4435; CHECK-P10-NEXT: mffprwz r3, f0 4436; CHECK-P10-NEXT: blr 4437; 4438; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_float: 4439; CHECK-PREP10: # %bb.0: # %entry 4440; CHECK-PREP10-NEXT: lis r4, 3725 4441; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 4442; CHECK-PREP10-NEXT: ori r4, r4, 19025 4443; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 4444; CHECK-PREP10-NEXT: lfsx f0, r3, r4 4445; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4446; CHECK-PREP10-NEXT: mffprwz r3, f0 4447; CHECK-PREP10-NEXT: blr 4448entry: 4449 %and = and i64 %ptr, -1099511627776 4450 %or = or i64 %and, 1000000000000 4451 %0 = inttoptr i64 %or to ptr 4452 %1 = load float, ptr %0, align 4096 4453 %conv = fptoui float %1 to i16 4454 ret i16 %conv 4455} 4456 4457; Function Attrs: norecurse nounwind readonly uwtable willreturn 4458define dso_local zeroext i16 @ld_cst_align16_uint16_t_float() { 4459; CHECK-LABEL: ld_cst_align16_uint16_t_float: 4460; CHECK: # %bb.0: # %entry 4461; CHECK-NEXT: lfs f0, 4080(0) 4462; CHECK-NEXT: xscvdpsxws f0, f0 4463; CHECK-NEXT: mffprwz r3, f0 4464; CHECK-NEXT: blr 4465entry: 4466 %0 = load float, ptr inttoptr (i64 4080 to ptr), align 16 4467 %conv = fptoui float %0 to i16 4468 ret i16 %conv 4469} 4470 4471; Function Attrs: norecurse nounwind readonly uwtable willreturn 4472define dso_local zeroext i16 @ld_cst_align32_uint16_t_float() { 4473; CHECK-LABEL: ld_cst_align32_uint16_t_float: 4474; CHECK: # %bb.0: # %entry 4475; CHECK-NEXT: lis r3, 153 4476; CHECK-NEXT: lfs f0, -27108(r3) 4477; CHECK-NEXT: xscvdpsxws f0, f0 4478; CHECK-NEXT: mffprwz r3, f0 4479; CHECK-NEXT: blr 4480entry: 4481 %0 = load float, ptr inttoptr (i64 9999900 to ptr), align 4 4482 %conv = fptoui float %0 to i16 4483 ret i16 %conv 4484} 4485 4486; Function Attrs: norecurse nounwind readonly uwtable willreturn 4487define dso_local zeroext i16 @ld_cst_align64_uint16_t_float() { 4488; CHECK-P10-LABEL: ld_cst_align64_uint16_t_float: 4489; CHECK-P10: # %bb.0: # %entry 4490; CHECK-P10-NEXT: pli r3, 244140625 4491; CHECK-P10-NEXT: rldic r3, r3, 12, 24 4492; CHECK-P10-NEXT: lfs f0, 0(r3) 4493; CHECK-P10-NEXT: xscvdpsxws f0, f0 4494; CHECK-P10-NEXT: mffprwz r3, f0 4495; CHECK-P10-NEXT: blr 4496; 4497; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_float: 4498; CHECK-PREP10: # %bb.0: # %entry 4499; CHECK-PREP10-NEXT: lis r3, 3725 4500; CHECK-PREP10-NEXT: ori r3, r3, 19025 4501; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 4502; CHECK-PREP10-NEXT: lfs f0, 0(r3) 4503; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4504; CHECK-PREP10-NEXT: mffprwz r3, f0 4505; CHECK-PREP10-NEXT: blr 4506entry: 4507 %0 = load float, ptr inttoptr (i64 1000000000000 to ptr), align 4096 4508 %conv = fptoui float %0 to i16 4509 ret i16 %conv 4510} 4511 4512; Function Attrs: norecurse nounwind readonly uwtable willreturn 4513define dso_local zeroext i16 @ld_0_uint16_t_double(i64 %ptr) { 4514; CHECK-LABEL: ld_0_uint16_t_double: 4515; CHECK: # %bb.0: # %entry 4516; CHECK-NEXT: lfd f0, 0(r3) 4517; CHECK-NEXT: xscvdpsxws f0, f0 4518; CHECK-NEXT: mffprwz r3, f0 4519; CHECK-NEXT: blr 4520entry: 4521 %0 = inttoptr i64 %ptr to ptr 4522 %1 = load double, ptr %0, align 8 4523 %conv = fptoui double %1 to i16 4524 ret i16 %conv 4525} 4526 4527; Function Attrs: norecurse nounwind readonly uwtable willreturn 4528define dso_local zeroext i16 @ld_align16_uint16_t_double(ptr nocapture readonly %ptr) { 4529; CHECK-LABEL: ld_align16_uint16_t_double: 4530; CHECK: # %bb.0: # %entry 4531; CHECK-NEXT: lfd f0, 8(r3) 4532; CHECK-NEXT: xscvdpsxws f0, f0 4533; CHECK-NEXT: mffprwz r3, f0 4534; CHECK-NEXT: blr 4535entry: 4536 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 4537 %0 = load double, ptr %add.ptr, align 8 4538 %conv = fptoui double %0 to i16 4539 ret i16 %conv 4540} 4541 4542; Function Attrs: norecurse nounwind readonly uwtable willreturn 4543define dso_local zeroext i16 @ld_align32_uint16_t_double(ptr nocapture readonly %ptr) { 4544; CHECK-P10-LABEL: ld_align32_uint16_t_double: 4545; CHECK-P10: # %bb.0: # %entry 4546; CHECK-P10-NEXT: plfd f0, 99999000(r3), 0 4547; CHECK-P10-NEXT: xscvdpsxws f0, f0 4548; CHECK-P10-NEXT: mffprwz r3, f0 4549; CHECK-P10-NEXT: blr 4550; 4551; CHECK-PREP10-LABEL: ld_align32_uint16_t_double: 4552; CHECK-PREP10: # %bb.0: # %entry 4553; CHECK-PREP10-NEXT: lis r4, 1525 4554; CHECK-PREP10-NEXT: ori r4, r4, 56600 4555; CHECK-PREP10-NEXT: lfdx f0, r3, r4 4556; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4557; CHECK-PREP10-NEXT: mffprwz r3, f0 4558; CHECK-PREP10-NEXT: blr 4559entry: 4560 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 4561 %0 = load double, ptr %add.ptr, align 8 4562 %conv = fptoui double %0 to i16 4563 ret i16 %conv 4564} 4565 4566; Function Attrs: norecurse nounwind readonly uwtable willreturn 4567define dso_local zeroext i16 @ld_align64_uint16_t_double(ptr nocapture readonly %ptr) { 4568; CHECK-P10-LABEL: ld_align64_uint16_t_double: 4569; CHECK-P10: # %bb.0: # %entry 4570; CHECK-P10-NEXT: pli r4, 244140625 4571; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4572; CHECK-P10-NEXT: lfdx f0, r3, r4 4573; CHECK-P10-NEXT: xscvdpsxws f0, f0 4574; CHECK-P10-NEXT: mffprwz r3, f0 4575; CHECK-P10-NEXT: blr 4576; 4577; CHECK-PREP10-LABEL: ld_align64_uint16_t_double: 4578; CHECK-PREP10: # %bb.0: # %entry 4579; CHECK-PREP10-NEXT: lis r4, 3725 4580; CHECK-PREP10-NEXT: ori r4, r4, 19025 4581; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 4582; CHECK-PREP10-NEXT: lfdx f0, r3, r4 4583; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4584; CHECK-PREP10-NEXT: mffprwz r3, f0 4585; CHECK-PREP10-NEXT: blr 4586entry: 4587 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 4588 %0 = load double, ptr %add.ptr, align 8 4589 %conv = fptoui double %0 to i16 4590 ret i16 %conv 4591} 4592 4593; Function Attrs: norecurse nounwind readonly uwtable willreturn 4594define dso_local zeroext i16 @ld_reg_uint16_t_double(ptr nocapture readonly %ptr, i64 %off) { 4595; CHECK-LABEL: ld_reg_uint16_t_double: 4596; CHECK: # %bb.0: # %entry 4597; CHECK-NEXT: lfdx f0, r3, r4 4598; CHECK-NEXT: xscvdpsxws f0, f0 4599; CHECK-NEXT: mffprwz r3, f0 4600; CHECK-NEXT: blr 4601entry: 4602 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 4603 %0 = load double, ptr %add.ptr, align 8 4604 %conv = fptoui double %0 to i16 4605 ret i16 %conv 4606} 4607 4608; Function Attrs: norecurse nounwind readonly uwtable willreturn 4609define dso_local zeroext i16 @ld_or_uint16_t_double(i64 %ptr, i8 zeroext %off) { 4610; CHECK-LABEL: ld_or_uint16_t_double: 4611; CHECK: # %bb.0: # %entry 4612; CHECK-NEXT: or r3, r4, r3 4613; CHECK-NEXT: lfd f0, 0(r3) 4614; CHECK-NEXT: xscvdpsxws f0, f0 4615; CHECK-NEXT: mffprwz r3, f0 4616; CHECK-NEXT: blr 4617entry: 4618 %conv = zext i8 %off to i64 4619 %or = or i64 %conv, %ptr 4620 %0 = inttoptr i64 %or to ptr 4621 %1 = load double, ptr %0, align 8 4622 %conv1 = fptoui double %1 to i16 4623 ret i16 %conv1 4624} 4625 4626; Function Attrs: norecurse nounwind readonly uwtable willreturn 4627define dso_local zeroext i16 @ld_not_disjoint16_uint16_t_double(i64 %ptr) { 4628; CHECK-LABEL: ld_not_disjoint16_uint16_t_double: 4629; CHECK: # %bb.0: # %entry 4630; CHECK-NEXT: ori r3, r3, 6 4631; CHECK-NEXT: lfd f0, 0(r3) 4632; CHECK-NEXT: xscvdpsxws f0, f0 4633; CHECK-NEXT: mffprwz r3, f0 4634; CHECK-NEXT: blr 4635entry: 4636 %or = or i64 %ptr, 6 4637 %0 = inttoptr i64 %or to ptr 4638 %1 = load double, ptr %0, align 8 4639 %conv = fptoui double %1 to i16 4640 ret i16 %conv 4641} 4642 4643; Function Attrs: norecurse nounwind readonly uwtable willreturn 4644define dso_local zeroext i16 @ld_disjoint_align16_uint16_t_double(i64 %ptr) { 4645; CHECK-LABEL: ld_disjoint_align16_uint16_t_double: 4646; CHECK: # %bb.0: # %entry 4647; CHECK-NEXT: rldicr r3, r3, 0, 51 4648; CHECK-NEXT: lfd f0, 24(r3) 4649; CHECK-NEXT: xscvdpsxws f0, f0 4650; CHECK-NEXT: mffprwz r3, f0 4651; CHECK-NEXT: blr 4652entry: 4653 %and = and i64 %ptr, -4096 4654 %or = or i64 %and, 24 4655 %0 = inttoptr i64 %or to ptr 4656 %1 = load double, ptr %0, align 8 4657 %conv = fptoui double %1 to i16 4658 ret i16 %conv 4659} 4660 4661; Function Attrs: norecurse nounwind readonly uwtable willreturn 4662define dso_local zeroext i16 @ld_not_disjoint32_uint16_t_double(i64 %ptr) { 4663; CHECK-LABEL: ld_not_disjoint32_uint16_t_double: 4664; CHECK: # %bb.0: # %entry 4665; CHECK-NEXT: ori r3, r3, 34463 4666; CHECK-NEXT: oris r3, r3, 1 4667; CHECK-NEXT: lfd f0, 0(r3) 4668; CHECK-NEXT: xscvdpsxws f0, f0 4669; CHECK-NEXT: mffprwz r3, f0 4670; CHECK-NEXT: blr 4671entry: 4672 %or = or i64 %ptr, 99999 4673 %0 = inttoptr i64 %or to ptr 4674 %1 = load double, ptr %0, align 8 4675 %conv = fptoui double %1 to i16 4676 ret i16 %conv 4677} 4678 4679; Function Attrs: norecurse nounwind readonly uwtable willreturn 4680define dso_local zeroext i16 @ld_disjoint_align32_uint16_t_double(i64 %ptr) { 4681; CHECK-P10-LABEL: ld_disjoint_align32_uint16_t_double: 4682; CHECK-P10: # %bb.0: # %entry 4683; CHECK-P10-NEXT: lis r4, -15264 4684; CHECK-P10-NEXT: and r3, r3, r4 4685; CHECK-P10-NEXT: plfd f0, 999990000(r3), 0 4686; CHECK-P10-NEXT: xscvdpsxws f0, f0 4687; CHECK-P10-NEXT: mffprwz r3, f0 4688; CHECK-P10-NEXT: blr 4689; 4690; CHECK-PREP10-LABEL: ld_disjoint_align32_uint16_t_double: 4691; CHECK-PREP10: # %bb.0: # %entry 4692; CHECK-PREP10-NEXT: lis r4, -15264 4693; CHECK-PREP10-NEXT: and r3, r3, r4 4694; CHECK-PREP10-NEXT: lis r4, 15258 4695; CHECK-PREP10-NEXT: ori r4, r4, 41712 4696; CHECK-PREP10-NEXT: lfdx f0, r3, r4 4697; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4698; CHECK-PREP10-NEXT: mffprwz r3, f0 4699; CHECK-PREP10-NEXT: blr 4700entry: 4701 %and = and i64 %ptr, -1000341504 4702 %or = or i64 %and, 999990000 4703 %0 = inttoptr i64 %or to ptr 4704 %1 = load double, ptr %0, align 16 4705 %conv = fptoui double %1 to i16 4706 ret i16 %conv 4707} 4708 4709; Function Attrs: norecurse nounwind readonly uwtable willreturn 4710define dso_local zeroext i16 @ld_not_disjoint64_uint16_t_double(i64 %ptr) { 4711; CHECK-P10-LABEL: ld_not_disjoint64_uint16_t_double: 4712; CHECK-P10: # %bb.0: # %entry 4713; CHECK-P10-NEXT: pli r4, 232 4714; CHECK-P10-NEXT: pli r5, 3567587329 4715; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 4716; CHECK-P10-NEXT: or r3, r3, r5 4717; CHECK-P10-NEXT: lfd f0, 0(r3) 4718; CHECK-P10-NEXT: xscvdpsxws f0, f0 4719; CHECK-P10-NEXT: mffprwz r3, f0 4720; CHECK-P10-NEXT: blr 4721; 4722; CHECK-PREP10-LABEL: ld_not_disjoint64_uint16_t_double: 4723; CHECK-PREP10: # %bb.0: # %entry 4724; CHECK-PREP10-NEXT: li r4, 29 4725; CHECK-PREP10-NEXT: rldic r4, r4, 35, 24 4726; CHECK-PREP10-NEXT: oris r4, r4, 54437 4727; CHECK-PREP10-NEXT: ori r4, r4, 4097 4728; CHECK-PREP10-NEXT: or r3, r3, r4 4729; CHECK-PREP10-NEXT: lfd f0, 0(r3) 4730; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4731; CHECK-PREP10-NEXT: mffprwz r3, f0 4732; CHECK-PREP10-NEXT: blr 4733entry: 4734 %or = or i64 %ptr, 1000000000001 4735 %0 = inttoptr i64 %or to ptr 4736 %1 = load double, ptr %0, align 8 4737 %conv = fptoui double %1 to i16 4738 ret i16 %conv 4739} 4740 4741; Function Attrs: norecurse nounwind readonly uwtable willreturn 4742define dso_local zeroext i16 @ld_disjoint_align64_uint16_t_double(i64 %ptr) { 4743; CHECK-P10-LABEL: ld_disjoint_align64_uint16_t_double: 4744; CHECK-P10: # %bb.0: # %entry 4745; CHECK-P10-NEXT: pli r4, 244140625 4746; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 4747; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4748; CHECK-P10-NEXT: lfdx f0, r3, r4 4749; CHECK-P10-NEXT: xscvdpsxws f0, f0 4750; CHECK-P10-NEXT: mffprwz r3, f0 4751; CHECK-P10-NEXT: blr 4752; 4753; CHECK-PREP10-LABEL: ld_disjoint_align64_uint16_t_double: 4754; CHECK-PREP10: # %bb.0: # %entry 4755; CHECK-PREP10-NEXT: lis r4, 3725 4756; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 4757; CHECK-PREP10-NEXT: ori r4, r4, 19025 4758; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 4759; CHECK-PREP10-NEXT: lfdx f0, r3, r4 4760; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4761; CHECK-PREP10-NEXT: mffprwz r3, f0 4762; CHECK-PREP10-NEXT: blr 4763entry: 4764 %and = and i64 %ptr, -1099511627776 4765 %or = or i64 %and, 1000000000000 4766 %0 = inttoptr i64 %or to ptr 4767 %1 = load double, ptr %0, align 4096 4768 %conv = fptoui double %1 to i16 4769 ret i16 %conv 4770} 4771 4772; Function Attrs: norecurse nounwind readonly uwtable willreturn 4773define dso_local zeroext i16 @ld_cst_align16_uint16_t_double() { 4774; CHECK-LABEL: ld_cst_align16_uint16_t_double: 4775; CHECK: # %bb.0: # %entry 4776; CHECK-NEXT: lfd f0, 4080(0) 4777; CHECK-NEXT: xscvdpsxws f0, f0 4778; CHECK-NEXT: mffprwz r3, f0 4779; CHECK-NEXT: blr 4780entry: 4781 %0 = load double, ptr inttoptr (i64 4080 to ptr), align 16 4782 %conv = fptoui double %0 to i16 4783 ret i16 %conv 4784} 4785 4786; Function Attrs: norecurse nounwind readonly uwtable willreturn 4787define dso_local zeroext i16 @ld_cst_align32_uint16_t_double() { 4788; CHECK-LABEL: ld_cst_align32_uint16_t_double: 4789; CHECK: # %bb.0: # %entry 4790; CHECK-NEXT: lis r3, 153 4791; CHECK-NEXT: lfd f0, -27108(r3) 4792; CHECK-NEXT: xscvdpsxws f0, f0 4793; CHECK-NEXT: mffprwz r3, f0 4794; CHECK-NEXT: blr 4795entry: 4796 %0 = load double, ptr inttoptr (i64 9999900 to ptr), align 8 4797 %conv = fptoui double %0 to i16 4798 ret i16 %conv 4799} 4800 4801; Function Attrs: norecurse nounwind readonly uwtable willreturn 4802define dso_local zeroext i16 @ld_cst_align64_uint16_t_double() { 4803; CHECK-P10-LABEL: ld_cst_align64_uint16_t_double: 4804; CHECK-P10: # %bb.0: # %entry 4805; CHECK-P10-NEXT: pli r3, 244140625 4806; CHECK-P10-NEXT: rldic r3, r3, 12, 24 4807; CHECK-P10-NEXT: lfd f0, 0(r3) 4808; CHECK-P10-NEXT: xscvdpsxws f0, f0 4809; CHECK-P10-NEXT: mffprwz r3, f0 4810; CHECK-P10-NEXT: blr 4811; 4812; CHECK-PREP10-LABEL: ld_cst_align64_uint16_t_double: 4813; CHECK-PREP10: # %bb.0: # %entry 4814; CHECK-PREP10-NEXT: lis r3, 3725 4815; CHECK-PREP10-NEXT: ori r3, r3, 19025 4816; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 4817; CHECK-PREP10-NEXT: lfd f0, 0(r3) 4818; CHECK-PREP10-NEXT: xscvdpsxws f0, f0 4819; CHECK-PREP10-NEXT: mffprwz r3, f0 4820; CHECK-PREP10-NEXT: blr 4821entry: 4822 %0 = load double, ptr inttoptr (i64 1000000000000 to ptr), align 4096 4823 %conv = fptoui double %0 to i16 4824 ret i16 %conv 4825} 4826 4827; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4828define dso_local void @st_0_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) { 4829; CHECK-LABEL: st_0_uint16_t_uint8_t: 4830; CHECK: # %bb.0: # %entry 4831; CHECK-NEXT: stb r4, 0(r3) 4832; CHECK-NEXT: blr 4833entry: 4834 %conv = trunc i16 %str to i8 4835 %0 = inttoptr i64 %ptr to ptr 4836 store i8 %conv, ptr %0, align 1 4837 ret void 4838} 4839 4840; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4841define dso_local void @st_align16_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) { 4842; CHECK-LABEL: st_align16_uint16_t_uint8_t: 4843; CHECK: # %bb.0: # %entry 4844; CHECK-NEXT: stb r4, 8(r3) 4845; CHECK-NEXT: blr 4846entry: 4847 %conv = trunc i16 %str to i8 4848 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 4849 store i8 %conv, ptr %add.ptr, align 1 4850 ret void 4851} 4852 4853; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4854define dso_local void @st_align32_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) { 4855; CHECK-P10-LABEL: st_align32_uint16_t_uint8_t: 4856; CHECK-P10: # %bb.0: # %entry 4857; CHECK-P10-NEXT: pstb r4, 99999000(r3), 0 4858; CHECK-P10-NEXT: blr 4859; 4860; CHECK-PREP10-LABEL: st_align32_uint16_t_uint8_t: 4861; CHECK-PREP10: # %bb.0: # %entry 4862; CHECK-PREP10-NEXT: lis r5, 1525 4863; CHECK-PREP10-NEXT: ori r5, r5, 56600 4864; CHECK-PREP10-NEXT: stbx r4, r3, r5 4865; CHECK-PREP10-NEXT: blr 4866entry: 4867 %conv = trunc i16 %str to i8 4868 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 4869 store i8 %conv, ptr %add.ptr, align 1 4870 ret void 4871} 4872 4873; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4874define dso_local void @st_align64_uint16_t_uint8_t(ptr nocapture %ptr, i16 zeroext %str) { 4875; CHECK-P10-LABEL: st_align64_uint16_t_uint8_t: 4876; CHECK-P10: # %bb.0: # %entry 4877; CHECK-P10-NEXT: pli r5, 244140625 4878; CHECK-P10-NEXT: rldic r5, r5, 12, 24 4879; CHECK-P10-NEXT: stbx r4, r3, r5 4880; CHECK-P10-NEXT: blr 4881; 4882; CHECK-PREP10-LABEL: st_align64_uint16_t_uint8_t: 4883; CHECK-PREP10: # %bb.0: # %entry 4884; CHECK-PREP10-NEXT: lis r5, 3725 4885; CHECK-PREP10-NEXT: ori r5, r5, 19025 4886; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 4887; CHECK-PREP10-NEXT: stbx r4, r3, r5 4888; CHECK-PREP10-NEXT: blr 4889entry: 4890 %conv = trunc i16 %str to i8 4891 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 4892 store i8 %conv, ptr %add.ptr, align 1 4893 ret void 4894} 4895 4896; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4897define dso_local void @st_reg_uint16_t_uint8_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) { 4898; CHECK-LABEL: st_reg_uint16_t_uint8_t: 4899; CHECK: # %bb.0: # %entry 4900; CHECK-NEXT: stbx r5, r3, r4 4901; CHECK-NEXT: blr 4902entry: 4903 %conv = trunc i16 %str to i8 4904 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 4905 store i8 %conv, ptr %add.ptr, align 1 4906 ret void 4907} 4908 4909; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4910define dso_local void @st_or1_uint16_t_uint8_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) { 4911; CHECK-LABEL: st_or1_uint16_t_uint8_t: 4912; CHECK: # %bb.0: # %entry 4913; CHECK-NEXT: or r3, r4, r3 4914; CHECK-NEXT: stb r5, 0(r3) 4915; CHECK-NEXT: blr 4916entry: 4917 %conv = trunc i16 %str to i8 4918 %conv1 = zext i8 %off to i64 4919 %or = or i64 %conv1, %ptr 4920 %0 = inttoptr i64 %or to ptr 4921 store i8 %conv, ptr %0, align 1 4922 ret void 4923} 4924 4925; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4926define dso_local void @st_not_disjoint16_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) { 4927; CHECK-LABEL: st_not_disjoint16_uint16_t_uint8_t: 4928; CHECK: # %bb.0: # %entry 4929; CHECK-NEXT: ori r3, r3, 6 4930; CHECK-NEXT: stb r4, 0(r3) 4931; CHECK-NEXT: blr 4932entry: 4933 %conv = trunc i16 %str to i8 4934 %or = or i64 %ptr, 6 4935 %0 = inttoptr i64 %or to ptr 4936 store i8 %conv, ptr %0, align 1 4937 ret void 4938} 4939 4940; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4941define dso_local void @st_disjoint_align16_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) { 4942; CHECK-LABEL: st_disjoint_align16_uint16_t_uint8_t: 4943; CHECK: # %bb.0: # %entry 4944; CHECK-NEXT: rldicr r3, r3, 0, 51 4945; CHECK-NEXT: stb r4, 24(r3) 4946; CHECK-NEXT: blr 4947entry: 4948 %and = and i64 %ptr, -4096 4949 %conv = trunc i16 %str to i8 4950 %or = or i64 %and, 24 4951 %0 = inttoptr i64 %or to ptr 4952 store i8 %conv, ptr %0, align 8 4953 ret void 4954} 4955 4956; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4957define dso_local void @st_not_disjoint32_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) { 4958; CHECK-LABEL: st_not_disjoint32_uint16_t_uint8_t: 4959; CHECK: # %bb.0: # %entry 4960; CHECK-NEXT: ori r3, r3, 34463 4961; CHECK-NEXT: oris r3, r3, 1 4962; CHECK-NEXT: stb r4, 0(r3) 4963; CHECK-NEXT: blr 4964entry: 4965 %conv = trunc i16 %str to i8 4966 %or = or i64 %ptr, 99999 4967 %0 = inttoptr i64 %or to ptr 4968 store i8 %conv, ptr %0, align 1 4969 ret void 4970} 4971 4972; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4973define dso_local void @st_disjoint_align32_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) { 4974; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint8_t: 4975; CHECK-P10: # %bb.0: # %entry 4976; CHECK-P10-NEXT: lis r5, -15264 4977; CHECK-P10-NEXT: and r3, r3, r5 4978; CHECK-P10-NEXT: pstb r4, 999990000(r3), 0 4979; CHECK-P10-NEXT: blr 4980; 4981; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint8_t: 4982; CHECK-PREP10: # %bb.0: # %entry 4983; CHECK-PREP10-NEXT: lis r5, -15264 4984; CHECK-PREP10-NEXT: and r3, r3, r5 4985; CHECK-PREP10-NEXT: lis r5, 15258 4986; CHECK-PREP10-NEXT: ori r5, r5, 41712 4987; CHECK-PREP10-NEXT: stbx r4, r3, r5 4988; CHECK-PREP10-NEXT: blr 4989entry: 4990 %and = and i64 %ptr, -1000341504 4991 %conv = trunc i16 %str to i8 4992 %or = or i64 %and, 999990000 4993 %0 = inttoptr i64 %or to ptr 4994 store i8 %conv, ptr %0, align 16 4995 ret void 4996} 4997 4998; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4999define dso_local void @st_not_disjoint64_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) { 5000; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint8_t: 5001; CHECK-P10: # %bb.0: # %entry 5002; CHECK-P10-NEXT: pli r5, 232 5003; CHECK-P10-NEXT: pli r6, 3567587329 5004; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 5005; CHECK-P10-NEXT: or r3, r3, r6 5006; CHECK-P10-NEXT: stb r4, 0(r3) 5007; CHECK-P10-NEXT: blr 5008; 5009; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint8_t: 5010; CHECK-PREP10: # %bb.0: # %entry 5011; CHECK-PREP10-NEXT: li r5, 29 5012; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 5013; CHECK-PREP10-NEXT: oris r5, r5, 54437 5014; CHECK-PREP10-NEXT: ori r5, r5, 4097 5015; CHECK-PREP10-NEXT: or r3, r3, r5 5016; CHECK-PREP10-NEXT: stb r4, 0(r3) 5017; CHECK-PREP10-NEXT: blr 5018entry: 5019 %conv = trunc i16 %str to i8 5020 %or = or i64 %ptr, 1000000000001 5021 %0 = inttoptr i64 %or to ptr 5022 store i8 %conv, ptr %0, align 1 5023 ret void 5024} 5025 5026; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5027define dso_local void @st_disjoint_align64_uint16_t_uint8_t(i64 %ptr, i16 zeroext %str) { 5028; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint8_t: 5029; CHECK-P10: # %bb.0: # %entry 5030; CHECK-P10-NEXT: pli r5, 244140625 5031; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5032; CHECK-P10-NEXT: rldic r5, r5, 12, 24 5033; CHECK-P10-NEXT: stbx r4, r3, r5 5034; CHECK-P10-NEXT: blr 5035; 5036; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint8_t: 5037; CHECK-PREP10: # %bb.0: # %entry 5038; CHECK-PREP10-NEXT: lis r5, 3725 5039; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5040; CHECK-PREP10-NEXT: ori r5, r5, 19025 5041; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 5042; CHECK-PREP10-NEXT: stbx r4, r3, r5 5043; CHECK-PREP10-NEXT: blr 5044entry: 5045 %and = and i64 %ptr, -1099511627776 5046 %conv = trunc i16 %str to i8 5047 %or = or i64 %and, 1000000000000 5048 %0 = inttoptr i64 %or to ptr 5049 store i8 %conv, ptr %0, align 4096 5050 ret void 5051} 5052 5053; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5054define dso_local void @st_cst_align16_uint16_t_uint8_t(i16 zeroext %str) { 5055; CHECK-LABEL: st_cst_align16_uint16_t_uint8_t: 5056; CHECK: # %bb.0: # %entry 5057; CHECK-NEXT: stb r3, 4080(0) 5058; CHECK-NEXT: blr 5059entry: 5060 %conv = trunc i16 %str to i8 5061 store i8 %conv, ptr inttoptr (i64 4080 to ptr), align 16 5062 ret void 5063} 5064 5065; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5066define dso_local void @st_cst_align32_uint16_t_uint8_t(i16 zeroext %str) { 5067; CHECK-LABEL: st_cst_align32_uint16_t_uint8_t: 5068; CHECK: # %bb.0: # %entry 5069; CHECK-NEXT: lis r4, 153 5070; CHECK-NEXT: stb r3, -27108(r4) 5071; CHECK-NEXT: blr 5072entry: 5073 %conv = trunc i16 %str to i8 5074 store i8 %conv, ptr inttoptr (i64 9999900 to ptr), align 4 5075 ret void 5076} 5077 5078; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5079define dso_local void @st_cst_align64_uint16_t_uint8_t(i16 zeroext %str) { 5080; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint8_t: 5081; CHECK-P10: # %bb.0: # %entry 5082; CHECK-P10-NEXT: pli r4, 244140625 5083; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5084; CHECK-P10-NEXT: stb r3, 0(r4) 5085; CHECK-P10-NEXT: blr 5086; 5087; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint8_t: 5088; CHECK-PREP10: # %bb.0: # %entry 5089; CHECK-PREP10-NEXT: lis r4, 3725 5090; CHECK-PREP10-NEXT: ori r4, r4, 19025 5091; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5092; CHECK-PREP10-NEXT: stb r3, 0(r4) 5093; CHECK-PREP10-NEXT: blr 5094entry: 5095 %conv = trunc i16 %str to i8 5096 store i8 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 5097 ret void 5098} 5099 5100; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5101define dso_local void @st_0_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) { 5102; CHECK-LABEL: st_0_uint16_t_uint16_t: 5103; CHECK: # %bb.0: # %entry 5104; CHECK-NEXT: sth r4, 0(r3) 5105; CHECK-NEXT: blr 5106entry: 5107 %0 = inttoptr i64 %ptr to ptr 5108 store i16 %str, ptr %0, align 2 5109 ret void 5110} 5111 5112; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5113define dso_local void @st_align16_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) { 5114; CHECK-LABEL: st_align16_uint16_t_uint16_t: 5115; CHECK: # %bb.0: # %entry 5116; CHECK-NEXT: sth r4, 8(r3) 5117; CHECK-NEXT: blr 5118entry: 5119 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 5120 store i16 %str, ptr %add.ptr, align 2 5121 ret void 5122} 5123 5124; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5125define dso_local void @st_align32_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) { 5126; CHECK-P10-LABEL: st_align32_uint16_t_uint16_t: 5127; CHECK-P10: # %bb.0: # %entry 5128; CHECK-P10-NEXT: psth r4, 99999000(r3), 0 5129; CHECK-P10-NEXT: blr 5130; 5131; CHECK-PREP10-LABEL: st_align32_uint16_t_uint16_t: 5132; CHECK-PREP10: # %bb.0: # %entry 5133; CHECK-PREP10-NEXT: lis r5, 1525 5134; CHECK-PREP10-NEXT: ori r5, r5, 56600 5135; CHECK-PREP10-NEXT: sthx r4, r3, r5 5136; CHECK-PREP10-NEXT: blr 5137entry: 5138 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 5139 store i16 %str, ptr %add.ptr, align 2 5140 ret void 5141} 5142 5143; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5144define dso_local void @st_align64_uint16_t_uint16_t(ptr nocapture %ptr, i16 zeroext %str) { 5145; CHECK-P10-LABEL: st_align64_uint16_t_uint16_t: 5146; CHECK-P10: # %bb.0: # %entry 5147; CHECK-P10-NEXT: pli r5, 244140625 5148; CHECK-P10-NEXT: rldic r5, r5, 12, 24 5149; CHECK-P10-NEXT: sthx r4, r3, r5 5150; CHECK-P10-NEXT: blr 5151; 5152; CHECK-PREP10-LABEL: st_align64_uint16_t_uint16_t: 5153; CHECK-PREP10: # %bb.0: # %entry 5154; CHECK-PREP10-NEXT: lis r5, 3725 5155; CHECK-PREP10-NEXT: ori r5, r5, 19025 5156; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 5157; CHECK-PREP10-NEXT: sthx r4, r3, r5 5158; CHECK-PREP10-NEXT: blr 5159entry: 5160 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 5161 store i16 %str, ptr %add.ptr, align 2 5162 ret void 5163} 5164 5165; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5166define dso_local void @st_reg_uint16_t_uint16_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) { 5167; CHECK-LABEL: st_reg_uint16_t_uint16_t: 5168; CHECK: # %bb.0: # %entry 5169; CHECK-NEXT: sthx r5, r3, r4 5170; CHECK-NEXT: blr 5171entry: 5172 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 5173 store i16 %str, ptr %add.ptr, align 2 5174 ret void 5175} 5176 5177; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5178define dso_local void @st_or1_uint16_t_uint16_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) { 5179; CHECK-LABEL: st_or1_uint16_t_uint16_t: 5180; CHECK: # %bb.0: # %entry 5181; CHECK-NEXT: or r3, r4, r3 5182; CHECK-NEXT: sth r5, 0(r3) 5183; CHECK-NEXT: blr 5184entry: 5185 %conv = zext i8 %off to i64 5186 %or = or i64 %conv, %ptr 5187 %0 = inttoptr i64 %or to ptr 5188 store i16 %str, ptr %0, align 2 5189 ret void 5190} 5191 5192; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5193define dso_local void @st_not_disjoint16_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) { 5194; CHECK-LABEL: st_not_disjoint16_uint16_t_uint16_t: 5195; CHECK: # %bb.0: # %entry 5196; CHECK-NEXT: ori r3, r3, 6 5197; CHECK-NEXT: sth r4, 0(r3) 5198; CHECK-NEXT: blr 5199entry: 5200 %or = or i64 %ptr, 6 5201 %0 = inttoptr i64 %or to ptr 5202 store i16 %str, ptr %0, align 2 5203 ret void 5204} 5205 5206; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5207define dso_local void @st_disjoint_align16_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) { 5208; CHECK-LABEL: st_disjoint_align16_uint16_t_uint16_t: 5209; CHECK: # %bb.0: # %entry 5210; CHECK-NEXT: rldicr r3, r3, 0, 51 5211; CHECK-NEXT: sth r4, 24(r3) 5212; CHECK-NEXT: blr 5213entry: 5214 %and = and i64 %ptr, -4096 5215 %or = or i64 %and, 24 5216 %0 = inttoptr i64 %or to ptr 5217 store i16 %str, ptr %0, align 8 5218 ret void 5219} 5220 5221; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5222define dso_local void @st_not_disjoint32_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) { 5223; CHECK-LABEL: st_not_disjoint32_uint16_t_uint16_t: 5224; CHECK: # %bb.0: # %entry 5225; CHECK-NEXT: ori r3, r3, 34463 5226; CHECK-NEXT: oris r3, r3, 1 5227; CHECK-NEXT: sth r4, 0(r3) 5228; CHECK-NEXT: blr 5229entry: 5230 %or = or i64 %ptr, 99999 5231 %0 = inttoptr i64 %or to ptr 5232 store i16 %str, ptr %0, align 2 5233 ret void 5234} 5235 5236; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5237define dso_local void @st_disjoint_align32_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) { 5238; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint16_t: 5239; CHECK-P10: # %bb.0: # %entry 5240; CHECK-P10-NEXT: lis r5, -15264 5241; CHECK-P10-NEXT: and r3, r3, r5 5242; CHECK-P10-NEXT: psth r4, 999990000(r3), 0 5243; CHECK-P10-NEXT: blr 5244; 5245; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint16_t: 5246; CHECK-PREP10: # %bb.0: # %entry 5247; CHECK-PREP10-NEXT: lis r5, -15264 5248; CHECK-PREP10-NEXT: and r3, r3, r5 5249; CHECK-PREP10-NEXT: lis r5, 15258 5250; CHECK-PREP10-NEXT: ori r5, r5, 41712 5251; CHECK-PREP10-NEXT: sthx r4, r3, r5 5252; CHECK-PREP10-NEXT: blr 5253entry: 5254 %and = and i64 %ptr, -1000341504 5255 %or = or i64 %and, 999990000 5256 %0 = inttoptr i64 %or to ptr 5257 store i16 %str, ptr %0, align 16 5258 ret void 5259} 5260 5261; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5262define dso_local void @st_not_disjoint64_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) { 5263; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint16_t: 5264; CHECK-P10: # %bb.0: # %entry 5265; CHECK-P10-NEXT: pli r5, 232 5266; CHECK-P10-NEXT: pli r6, 3567587329 5267; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 5268; CHECK-P10-NEXT: or r3, r3, r6 5269; CHECK-P10-NEXT: sth r4, 0(r3) 5270; CHECK-P10-NEXT: blr 5271; 5272; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint16_t: 5273; CHECK-PREP10: # %bb.0: # %entry 5274; CHECK-PREP10-NEXT: li r5, 29 5275; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 5276; CHECK-PREP10-NEXT: oris r5, r5, 54437 5277; CHECK-PREP10-NEXT: ori r5, r5, 4097 5278; CHECK-PREP10-NEXT: or r3, r3, r5 5279; CHECK-PREP10-NEXT: sth r4, 0(r3) 5280; CHECK-PREP10-NEXT: blr 5281entry: 5282 %or = or i64 %ptr, 1000000000001 5283 %0 = inttoptr i64 %or to ptr 5284 store i16 %str, ptr %0, align 2 5285 ret void 5286} 5287 5288; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5289define dso_local void @st_disjoint_align64_uint16_t_uint16_t(i64 %ptr, i16 zeroext %str) { 5290; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint16_t: 5291; CHECK-P10: # %bb.0: # %entry 5292; CHECK-P10-NEXT: pli r5, 244140625 5293; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5294; CHECK-P10-NEXT: rldic r5, r5, 12, 24 5295; CHECK-P10-NEXT: sthx r4, r3, r5 5296; CHECK-P10-NEXT: blr 5297; 5298; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint16_t: 5299; CHECK-PREP10: # %bb.0: # %entry 5300; CHECK-PREP10-NEXT: lis r5, 3725 5301; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5302; CHECK-PREP10-NEXT: ori r5, r5, 19025 5303; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 5304; CHECK-PREP10-NEXT: sthx r4, r3, r5 5305; CHECK-PREP10-NEXT: blr 5306entry: 5307 %and = and i64 %ptr, -1099511627776 5308 %or = or i64 %and, 1000000000000 5309 %0 = inttoptr i64 %or to ptr 5310 store i16 %str, ptr %0, align 4096 5311 ret void 5312} 5313 5314; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5315define dso_local void @st_cst_align16_uint16_t_uint16_t(i16 zeroext %str) { 5316; CHECK-LABEL: st_cst_align16_uint16_t_uint16_t: 5317; CHECK: # %bb.0: # %entry 5318; CHECK-NEXT: sth r3, 4080(0) 5319; CHECK-NEXT: blr 5320entry: 5321 store i16 %str, ptr inttoptr (i64 4080 to ptr), align 16 5322 ret void 5323} 5324 5325; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5326define dso_local void @st_cst_align32_uint16_t_uint16_t(i16 zeroext %str) { 5327; CHECK-LABEL: st_cst_align32_uint16_t_uint16_t: 5328; CHECK: # %bb.0: # %entry 5329; CHECK-NEXT: lis r4, 153 5330; CHECK-NEXT: sth r3, -27108(r4) 5331; CHECK-NEXT: blr 5332entry: 5333 store i16 %str, ptr inttoptr (i64 9999900 to ptr), align 4 5334 ret void 5335} 5336 5337; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5338define dso_local void @st_cst_align64_uint16_t_uint16_t(i16 zeroext %str) { 5339; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint16_t: 5340; CHECK-P10: # %bb.0: # %entry 5341; CHECK-P10-NEXT: pli r4, 244140625 5342; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5343; CHECK-P10-NEXT: sth r3, 0(r4) 5344; CHECK-P10-NEXT: blr 5345; 5346; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint16_t: 5347; CHECK-PREP10: # %bb.0: # %entry 5348; CHECK-PREP10-NEXT: lis r4, 3725 5349; CHECK-PREP10-NEXT: ori r4, r4, 19025 5350; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5351; CHECK-PREP10-NEXT: sth r3, 0(r4) 5352; CHECK-PREP10-NEXT: blr 5353entry: 5354 store i16 %str, ptr inttoptr (i64 1000000000000 to ptr), align 4096 5355 ret void 5356} 5357 5358; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5359define dso_local void @st_0_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) { 5360; CHECK-LABEL: st_0_uint16_t_uint32_t: 5361; CHECK: # %bb.0: # %entry 5362; CHECK-NEXT: stw r4, 0(r3) 5363; CHECK-NEXT: blr 5364entry: 5365 %conv = zext i16 %str to i32 5366 %0 = inttoptr i64 %ptr to ptr 5367 store i32 %conv, ptr %0, align 4 5368 ret void 5369} 5370 5371; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5372define dso_local void @st_align16_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) { 5373; CHECK-LABEL: st_align16_uint16_t_uint32_t: 5374; CHECK: # %bb.0: # %entry 5375; CHECK-NEXT: stw r4, 8(r3) 5376; CHECK-NEXT: blr 5377entry: 5378 %conv = zext i16 %str to i32 5379 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 5380 store i32 %conv, ptr %add.ptr, align 4 5381 ret void 5382} 5383 5384; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5385define dso_local void @st_align32_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) { 5386; CHECK-P10-LABEL: st_align32_uint16_t_uint32_t: 5387; CHECK-P10: # %bb.0: # %entry 5388; CHECK-P10-NEXT: pstw r4, 99999000(r3), 0 5389; CHECK-P10-NEXT: blr 5390; 5391; CHECK-PREP10-LABEL: st_align32_uint16_t_uint32_t: 5392; CHECK-PREP10: # %bb.0: # %entry 5393; CHECK-PREP10-NEXT: lis r5, 1525 5394; CHECK-PREP10-NEXT: ori r5, r5, 56600 5395; CHECK-PREP10-NEXT: stwx r4, r3, r5 5396; CHECK-PREP10-NEXT: blr 5397entry: 5398 %conv = zext i16 %str to i32 5399 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 5400 store i32 %conv, ptr %add.ptr, align 4 5401 ret void 5402} 5403 5404; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5405define dso_local void @st_align64_uint16_t_uint32_t(ptr nocapture %ptr, i16 zeroext %str) { 5406; CHECK-P10-LABEL: st_align64_uint16_t_uint32_t: 5407; CHECK-P10: # %bb.0: # %entry 5408; CHECK-P10-NEXT: pli r5, 244140625 5409; CHECK-P10-NEXT: rldic r5, r5, 12, 24 5410; CHECK-P10-NEXT: stwx r4, r3, r5 5411; CHECK-P10-NEXT: blr 5412; 5413; CHECK-PREP10-LABEL: st_align64_uint16_t_uint32_t: 5414; CHECK-PREP10: # %bb.0: # %entry 5415; CHECK-PREP10-NEXT: lis r5, 3725 5416; CHECK-PREP10-NEXT: ori r5, r5, 19025 5417; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 5418; CHECK-PREP10-NEXT: stwx r4, r3, r5 5419; CHECK-PREP10-NEXT: blr 5420entry: 5421 %conv = zext i16 %str to i32 5422 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 5423 store i32 %conv, ptr %add.ptr, align 4 5424 ret void 5425} 5426 5427; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5428define dso_local void @st_reg_uint16_t_uint32_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) { 5429; CHECK-LABEL: st_reg_uint16_t_uint32_t: 5430; CHECK: # %bb.0: # %entry 5431; CHECK-NEXT: stwx r5, r3, r4 5432; CHECK-NEXT: blr 5433entry: 5434 %conv = zext i16 %str to i32 5435 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 5436 store i32 %conv, ptr %add.ptr, align 4 5437 ret void 5438} 5439 5440; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5441define dso_local void @st_or1_uint16_t_uint32_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) { 5442; CHECK-LABEL: st_or1_uint16_t_uint32_t: 5443; CHECK: # %bb.0: # %entry 5444; CHECK-NEXT: or r3, r4, r3 5445; CHECK-NEXT: stw r5, 0(r3) 5446; CHECK-NEXT: blr 5447entry: 5448 %conv = zext i16 %str to i32 5449 %conv1 = zext i8 %off to i64 5450 %or = or i64 %conv1, %ptr 5451 %0 = inttoptr i64 %or to ptr 5452 store i32 %conv, ptr %0, align 4 5453 ret void 5454} 5455 5456; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5457define dso_local void @st_not_disjoint16_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) { 5458; CHECK-LABEL: st_not_disjoint16_uint16_t_uint32_t: 5459; CHECK: # %bb.0: # %entry 5460; CHECK-NEXT: ori r3, r3, 6 5461; CHECK-NEXT: stw r4, 0(r3) 5462; CHECK-NEXT: blr 5463entry: 5464 %conv = zext i16 %str to i32 5465 %or = or i64 %ptr, 6 5466 %0 = inttoptr i64 %or to ptr 5467 store i32 %conv, ptr %0, align 4 5468 ret void 5469} 5470 5471; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5472define dso_local void @st_disjoint_align16_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) { 5473; CHECK-LABEL: st_disjoint_align16_uint16_t_uint32_t: 5474; CHECK: # %bb.0: # %entry 5475; CHECK-NEXT: rldicr r3, r3, 0, 51 5476; CHECK-NEXT: stw r4, 24(r3) 5477; CHECK-NEXT: blr 5478entry: 5479 %and = and i64 %ptr, -4096 5480 %conv = zext i16 %str to i32 5481 %or = or i64 %and, 24 5482 %0 = inttoptr i64 %or to ptr 5483 store i32 %conv, ptr %0, align 8 5484 ret void 5485} 5486 5487; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5488define dso_local void @st_not_disjoint32_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) { 5489; CHECK-LABEL: st_not_disjoint32_uint16_t_uint32_t: 5490; CHECK: # %bb.0: # %entry 5491; CHECK-NEXT: ori r3, r3, 34463 5492; CHECK-NEXT: oris r3, r3, 1 5493; CHECK-NEXT: stw r4, 0(r3) 5494; CHECK-NEXT: blr 5495entry: 5496 %conv = zext i16 %str to i32 5497 %or = or i64 %ptr, 99999 5498 %0 = inttoptr i64 %or to ptr 5499 store i32 %conv, ptr %0, align 4 5500 ret void 5501} 5502 5503; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5504define dso_local void @st_disjoint_align32_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) { 5505; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint32_t: 5506; CHECK-P10: # %bb.0: # %entry 5507; CHECK-P10-NEXT: lis r5, -15264 5508; CHECK-P10-NEXT: and r3, r3, r5 5509; CHECK-P10-NEXT: pstw r4, 999990000(r3), 0 5510; CHECK-P10-NEXT: blr 5511; 5512; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint32_t: 5513; CHECK-PREP10: # %bb.0: # %entry 5514; CHECK-PREP10-NEXT: lis r5, -15264 5515; CHECK-PREP10-NEXT: and r3, r3, r5 5516; CHECK-PREP10-NEXT: lis r5, 15258 5517; CHECK-PREP10-NEXT: ori r5, r5, 41712 5518; CHECK-PREP10-NEXT: stwx r4, r3, r5 5519; CHECK-PREP10-NEXT: blr 5520entry: 5521 %and = and i64 %ptr, -1000341504 5522 %conv = zext i16 %str to i32 5523 %or = or i64 %and, 999990000 5524 %0 = inttoptr i64 %or to ptr 5525 store i32 %conv, ptr %0, align 16 5526 ret void 5527} 5528 5529; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5530define dso_local void @st_not_disjoint64_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) { 5531; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint32_t: 5532; CHECK-P10: # %bb.0: # %entry 5533; CHECK-P10-NEXT: pli r5, 232 5534; CHECK-P10-NEXT: pli r6, 3567587329 5535; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 5536; CHECK-P10-NEXT: or r3, r3, r6 5537; CHECK-P10-NEXT: stw r4, 0(r3) 5538; CHECK-P10-NEXT: blr 5539; 5540; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint32_t: 5541; CHECK-PREP10: # %bb.0: # %entry 5542; CHECK-PREP10-NEXT: li r5, 29 5543; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 5544; CHECK-PREP10-NEXT: oris r5, r5, 54437 5545; CHECK-PREP10-NEXT: ori r5, r5, 4097 5546; CHECK-PREP10-NEXT: or r3, r3, r5 5547; CHECK-PREP10-NEXT: stw r4, 0(r3) 5548; CHECK-PREP10-NEXT: blr 5549entry: 5550 %conv = zext i16 %str to i32 5551 %or = or i64 %ptr, 1000000000001 5552 %0 = inttoptr i64 %or to ptr 5553 store i32 %conv, ptr %0, align 4 5554 ret void 5555} 5556 5557; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5558define dso_local void @st_disjoint_align64_uint16_t_uint32_t(i64 %ptr, i16 zeroext %str) { 5559; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint32_t: 5560; CHECK-P10: # %bb.0: # %entry 5561; CHECK-P10-NEXT: pli r5, 244140625 5562; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5563; CHECK-P10-NEXT: rldic r5, r5, 12, 24 5564; CHECK-P10-NEXT: stwx r4, r3, r5 5565; CHECK-P10-NEXT: blr 5566; 5567; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint32_t: 5568; CHECK-PREP10: # %bb.0: # %entry 5569; CHECK-PREP10-NEXT: lis r5, 3725 5570; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5571; CHECK-PREP10-NEXT: ori r5, r5, 19025 5572; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 5573; CHECK-PREP10-NEXT: stwx r4, r3, r5 5574; CHECK-PREP10-NEXT: blr 5575entry: 5576 %and = and i64 %ptr, -1099511627776 5577 %conv = zext i16 %str to i32 5578 %or = or i64 %and, 1000000000000 5579 %0 = inttoptr i64 %or to ptr 5580 store i32 %conv, ptr %0, align 4096 5581 ret void 5582} 5583 5584; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5585define dso_local void @st_cst_align16_uint16_t_uint32_t(i16 zeroext %str) { 5586; CHECK-LABEL: st_cst_align16_uint16_t_uint32_t: 5587; CHECK: # %bb.0: # %entry 5588; CHECK-NEXT: stw r3, 4080(0) 5589; CHECK-NEXT: blr 5590entry: 5591 %conv = zext i16 %str to i32 5592 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 16 5593 ret void 5594} 5595 5596; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5597define dso_local void @st_cst_align32_uint16_t_uint32_t(i16 zeroext %str) { 5598; CHECK-LABEL: st_cst_align32_uint16_t_uint32_t: 5599; CHECK: # %bb.0: # %entry 5600; CHECK-NEXT: lis r4, 153 5601; CHECK-NEXT: stw r3, -27108(r4) 5602; CHECK-NEXT: blr 5603entry: 5604 %conv = zext i16 %str to i32 5605 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 4 5606 ret void 5607} 5608 5609; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5610define dso_local void @st_cst_align64_uint16_t_uint32_t(i16 zeroext %str) { 5611; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint32_t: 5612; CHECK-P10: # %bb.0: # %entry 5613; CHECK-P10-NEXT: pli r4, 244140625 5614; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5615; CHECK-P10-NEXT: stw r3, 0(r4) 5616; CHECK-P10-NEXT: blr 5617; 5618; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint32_t: 5619; CHECK-PREP10: # %bb.0: # %entry 5620; CHECK-PREP10-NEXT: lis r4, 3725 5621; CHECK-PREP10-NEXT: ori r4, r4, 19025 5622; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5623; CHECK-PREP10-NEXT: stw r3, 0(r4) 5624; CHECK-PREP10-NEXT: blr 5625entry: 5626 %conv = zext i16 %str to i32 5627 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 5628 ret void 5629} 5630 5631; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5632define dso_local void @st_0_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) { 5633; CHECK-LABEL: st_0_uint16_t_uint64_t: 5634; CHECK: # %bb.0: # %entry 5635; CHECK-NEXT: std r4, 0(r3) 5636; CHECK-NEXT: blr 5637entry: 5638 %conv = zext i16 %str to i64 5639 %0 = inttoptr i64 %ptr to ptr 5640 store i64 %conv, ptr %0, align 8 5641 ret void 5642} 5643 5644; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5645define dso_local void @st_align16_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) { 5646; CHECK-LABEL: st_align16_uint16_t_uint64_t: 5647; CHECK: # %bb.0: # %entry 5648; CHECK-NEXT: std r4, 8(r3) 5649; CHECK-NEXT: blr 5650entry: 5651 %conv = zext i16 %str to i64 5652 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 5653 store i64 %conv, ptr %add.ptr, align 8 5654 ret void 5655} 5656 5657; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5658define dso_local void @st_align32_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) { 5659; CHECK-P10-LABEL: st_align32_uint16_t_uint64_t: 5660; CHECK-P10: # %bb.0: # %entry 5661; CHECK-P10-NEXT: pstd r4, 99999000(r3), 0 5662; CHECK-P10-NEXT: blr 5663; 5664; CHECK-PREP10-LABEL: st_align32_uint16_t_uint64_t: 5665; CHECK-PREP10: # %bb.0: # %entry 5666; CHECK-PREP10-NEXT: lis r5, 1525 5667; CHECK-PREP10-NEXT: ori r5, r5, 56600 5668; CHECK-PREP10-NEXT: stdx r4, r3, r5 5669; CHECK-PREP10-NEXT: blr 5670entry: 5671 %conv = zext i16 %str to i64 5672 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 5673 store i64 %conv, ptr %add.ptr, align 8 5674 ret void 5675} 5676 5677; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5678define dso_local void @st_align64_uint16_t_uint64_t(ptr nocapture %ptr, i16 zeroext %str) { 5679; CHECK-P10-LABEL: st_align64_uint16_t_uint64_t: 5680; CHECK-P10: # %bb.0: # %entry 5681; CHECK-P10-NEXT: pli r5, 244140625 5682; CHECK-P10-NEXT: rldic r5, r5, 12, 24 5683; CHECK-P10-NEXT: stdx r4, r3, r5 5684; CHECK-P10-NEXT: blr 5685; 5686; CHECK-PREP10-LABEL: st_align64_uint16_t_uint64_t: 5687; CHECK-PREP10: # %bb.0: # %entry 5688; CHECK-PREP10-NEXT: lis r5, 3725 5689; CHECK-PREP10-NEXT: ori r5, r5, 19025 5690; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 5691; CHECK-PREP10-NEXT: stdx r4, r3, r5 5692; CHECK-PREP10-NEXT: blr 5693entry: 5694 %conv = zext i16 %str to i64 5695 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 5696 store i64 %conv, ptr %add.ptr, align 8 5697 ret void 5698} 5699 5700; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5701define dso_local void @st_reg_uint16_t_uint64_t(ptr nocapture %ptr, i64 %off, i16 zeroext %str) { 5702; CHECK-LABEL: st_reg_uint16_t_uint64_t: 5703; CHECK: # %bb.0: # %entry 5704; CHECK-NEXT: stdx r5, r3, r4 5705; CHECK-NEXT: blr 5706entry: 5707 %conv = zext i16 %str to i64 5708 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 5709 store i64 %conv, ptr %add.ptr, align 8 5710 ret void 5711} 5712 5713; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5714define dso_local void @st_or1_uint16_t_uint64_t(i64 %ptr, i8 zeroext %off, i16 zeroext %str) { 5715; CHECK-LABEL: st_or1_uint16_t_uint64_t: 5716; CHECK: # %bb.0: # %entry 5717; CHECK-NEXT: or r3, r4, r3 5718; CHECK-NEXT: std r5, 0(r3) 5719; CHECK-NEXT: blr 5720entry: 5721 %conv = zext i16 %str to i64 5722 %conv1 = zext i8 %off to i64 5723 %or = or i64 %conv1, %ptr 5724 %0 = inttoptr i64 %or to ptr 5725 store i64 %conv, ptr %0, align 8 5726 ret void 5727} 5728 5729; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5730define dso_local void @st_not_disjoint16_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) { 5731; CHECK-LABEL: st_not_disjoint16_uint16_t_uint64_t: 5732; CHECK: # %bb.0: # %entry 5733; CHECK-NEXT: ori r3, r3, 6 5734; CHECK-NEXT: std r4, 0(r3) 5735; CHECK-NEXT: blr 5736entry: 5737 %conv = zext i16 %str to i64 5738 %or = or i64 %ptr, 6 5739 %0 = inttoptr i64 %or to ptr 5740 store i64 %conv, ptr %0, align 8 5741 ret void 5742} 5743 5744; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5745define dso_local void @st_disjoint_align16_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) { 5746; CHECK-LABEL: st_disjoint_align16_uint16_t_uint64_t: 5747; CHECK: # %bb.0: # %entry 5748; CHECK-NEXT: rldicr r3, r3, 0, 51 5749; CHECK-NEXT: std r4, 24(r3) 5750; CHECK-NEXT: blr 5751entry: 5752 %and = and i64 %ptr, -4096 5753 %conv = zext i16 %str to i64 5754 %or = or i64 %and, 24 5755 %0 = inttoptr i64 %or to ptr 5756 store i64 %conv, ptr %0, align 8 5757 ret void 5758} 5759 5760; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5761define dso_local void @st_not_disjoint32_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) { 5762; CHECK-LABEL: st_not_disjoint32_uint16_t_uint64_t: 5763; CHECK: # %bb.0: # %entry 5764; CHECK-NEXT: ori r3, r3, 34463 5765; CHECK-NEXT: oris r3, r3, 1 5766; CHECK-NEXT: std r4, 0(r3) 5767; CHECK-NEXT: blr 5768entry: 5769 %conv = zext i16 %str to i64 5770 %or = or i64 %ptr, 99999 5771 %0 = inttoptr i64 %or to ptr 5772 store i64 %conv, ptr %0, align 8 5773 ret void 5774} 5775 5776; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5777define dso_local void @st_disjoint_align32_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) { 5778; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_uint64_t: 5779; CHECK-P10: # %bb.0: # %entry 5780; CHECK-P10-NEXT: lis r5, -15264 5781; CHECK-P10-NEXT: and r3, r3, r5 5782; CHECK-P10-NEXT: pstd r4, 999990000(r3), 0 5783; CHECK-P10-NEXT: blr 5784; 5785; CHECK-PREP10-LABEL: st_disjoint_align32_uint16_t_uint64_t: 5786; CHECK-PREP10: # %bb.0: # %entry 5787; CHECK-PREP10-NEXT: lis r5, -15264 5788; CHECK-PREP10-NEXT: and r3, r3, r5 5789; CHECK-PREP10-NEXT: lis r5, 15258 5790; CHECK-PREP10-NEXT: ori r5, r5, 41712 5791; CHECK-PREP10-NEXT: stdx r4, r3, r5 5792; CHECK-PREP10-NEXT: blr 5793entry: 5794 %and = and i64 %ptr, -1000341504 5795 %conv = zext i16 %str to i64 5796 %or = or i64 %and, 999990000 5797 %0 = inttoptr i64 %or to ptr 5798 store i64 %conv, ptr %0, align 16 5799 ret void 5800} 5801 5802; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5803define dso_local void @st_not_disjoint64_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) { 5804; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_uint64_t: 5805; CHECK-P10: # %bb.0: # %entry 5806; CHECK-P10-NEXT: pli r5, 232 5807; CHECK-P10-NEXT: pli r6, 3567587329 5808; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 5809; CHECK-P10-NEXT: or r3, r3, r6 5810; CHECK-P10-NEXT: std r4, 0(r3) 5811; CHECK-P10-NEXT: blr 5812; 5813; CHECK-PREP10-LABEL: st_not_disjoint64_uint16_t_uint64_t: 5814; CHECK-PREP10: # %bb.0: # %entry 5815; CHECK-PREP10-NEXT: li r5, 29 5816; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 5817; CHECK-PREP10-NEXT: oris r5, r5, 54437 5818; CHECK-PREP10-NEXT: ori r5, r5, 4097 5819; CHECK-PREP10-NEXT: or r3, r3, r5 5820; CHECK-PREP10-NEXT: std r4, 0(r3) 5821; CHECK-PREP10-NEXT: blr 5822entry: 5823 %conv = zext i16 %str to i64 5824 %or = or i64 %ptr, 1000000000001 5825 %0 = inttoptr i64 %or to ptr 5826 store i64 %conv, ptr %0, align 8 5827 ret void 5828} 5829 5830; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5831define dso_local void @st_disjoint_align64_uint16_t_uint64_t(i64 %ptr, i16 zeroext %str) { 5832; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_uint64_t: 5833; CHECK-P10: # %bb.0: # %entry 5834; CHECK-P10-NEXT: pli r5, 244140625 5835; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5836; CHECK-P10-NEXT: rldic r5, r5, 12, 24 5837; CHECK-P10-NEXT: stdx r4, r3, r5 5838; CHECK-P10-NEXT: blr 5839; 5840; CHECK-PREP10-LABEL: st_disjoint_align64_uint16_t_uint64_t: 5841; CHECK-PREP10: # %bb.0: # %entry 5842; CHECK-PREP10-NEXT: lis r5, 3725 5843; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5844; CHECK-PREP10-NEXT: ori r5, r5, 19025 5845; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 5846; CHECK-PREP10-NEXT: stdx r4, r3, r5 5847; CHECK-PREP10-NEXT: blr 5848entry: 5849 %and = and i64 %ptr, -1099511627776 5850 %conv = zext i16 %str to i64 5851 %or = or i64 %and, 1000000000000 5852 %0 = inttoptr i64 %or to ptr 5853 store i64 %conv, ptr %0, align 4096 5854 ret void 5855} 5856 5857; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5858define dso_local void @st_cst_align16_uint16_t_uint64_t(i16 zeroext %str) { 5859; CHECK-LABEL: st_cst_align16_uint16_t_uint64_t: 5860; CHECK: # %bb.0: # %entry 5861; CHECK-NEXT: std r3, 4080(0) 5862; CHECK-NEXT: blr 5863entry: 5864 %conv = zext i16 %str to i64 5865 store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 16 5866 ret void 5867} 5868 5869; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5870define dso_local void @st_cst_align32_uint16_t_uint64_t(i16 zeroext %str) { 5871; CHECK-LABEL: st_cst_align32_uint16_t_uint64_t: 5872; CHECK: # %bb.0: # %entry 5873; CHECK-NEXT: lis r4, 153 5874; CHECK-NEXT: std r3, -27108(r4) 5875; CHECK-NEXT: blr 5876entry: 5877 %conv = zext i16 %str to i64 5878 store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 8 5879 ret void 5880} 5881 5882; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5883define dso_local void @st_cst_align64_uint16_t_uint64_t(i16 zeroext %str) { 5884; CHECK-P10-LABEL: st_cst_align64_uint16_t_uint64_t: 5885; CHECK-P10: # %bb.0: # %entry 5886; CHECK-P10-NEXT: pli r4, 244140625 5887; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5888; CHECK-P10-NEXT: std r3, 0(r4) 5889; CHECK-P10-NEXT: blr 5890; 5891; CHECK-PREP10-LABEL: st_cst_align64_uint16_t_uint64_t: 5892; CHECK-PREP10: # %bb.0: # %entry 5893; CHECK-PREP10-NEXT: lis r4, 3725 5894; CHECK-PREP10-NEXT: ori r4, r4, 19025 5895; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5896; CHECK-PREP10-NEXT: std r3, 0(r4) 5897; CHECK-PREP10-NEXT: blr 5898entry: 5899 %conv = zext i16 %str to i64 5900 store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 5901 ret void 5902} 5903 5904; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5905define dso_local void @st_0_uint16_t_float(i64 %ptr, i16 zeroext %str) { 5906; CHECK-LABEL: st_0_uint16_t_float: 5907; CHECK: # %bb.0: # %entry 5908; CHECK-NEXT: mtfprwz f0, r4 5909; CHECK-NEXT: xscvuxdsp f0, f0 5910; CHECK-NEXT: stfs f0, 0(r3) 5911; CHECK-NEXT: blr 5912entry: 5913 %conv = uitofp i16 %str to float 5914 %0 = inttoptr i64 %ptr to ptr 5915 store float %conv, ptr %0, align 4 5916 ret void 5917} 5918 5919; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5920define dso_local void @st_align16_uint16_t_float(ptr nocapture %ptr, i16 zeroext %str) { 5921; CHECK-LABEL: st_align16_uint16_t_float: 5922; CHECK: # %bb.0: # %entry 5923; CHECK-NEXT: mtfprwz f0, r4 5924; CHECK-NEXT: xscvuxdsp f0, f0 5925; CHECK-NEXT: stfs f0, 8(r3) 5926; CHECK-NEXT: blr 5927entry: 5928 %conv = uitofp i16 %str to float 5929 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 5930 store float %conv, ptr %add.ptr, align 4 5931 ret void 5932} 5933 5934; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5935define dso_local void @st_align32_uint16_t_float(ptr nocapture %ptr, i16 zeroext %str) { 5936; CHECK-P10-LABEL: st_align32_uint16_t_float: 5937; CHECK-P10: # %bb.0: # %entry 5938; CHECK-P10-NEXT: mtfprwz f0, r4 5939; CHECK-P10-NEXT: xscvuxdsp f0, f0 5940; CHECK-P10-NEXT: pstfs f0, 99999000(r3), 0 5941; CHECK-P10-NEXT: blr 5942; 5943; CHECK-P9-LABEL: st_align32_uint16_t_float: 5944; CHECK-P9: # %bb.0: # %entry 5945; CHECK-P9-NEXT: mtfprwz f0, r4 5946; CHECK-P9-NEXT: lis r4, 1525 5947; CHECK-P9-NEXT: xscvuxdsp f0, f0 5948; CHECK-P9-NEXT: ori r4, r4, 56600 5949; CHECK-P9-NEXT: stfsx f0, r3, r4 5950; CHECK-P9-NEXT: blr 5951; 5952; CHECK-P8-LABEL: st_align32_uint16_t_float: 5953; CHECK-P8: # %bb.0: # %entry 5954; CHECK-P8-NEXT: mtfprwz f0, r4 5955; CHECK-P8-NEXT: lis r4, 1525 5956; CHECK-P8-NEXT: ori r4, r4, 56600 5957; CHECK-P8-NEXT: xscvuxdsp f0, f0 5958; CHECK-P8-NEXT: stfsx f0, r3, r4 5959; CHECK-P8-NEXT: blr 5960entry: 5961 %conv = uitofp i16 %str to float 5962 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 5963 store float %conv, ptr %add.ptr, align 4 5964 ret void 5965} 5966 5967; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5968define dso_local void @st_align64_uint16_t_float(ptr nocapture %ptr, i16 zeroext %str) { 5969; CHECK-P10-LABEL: st_align64_uint16_t_float: 5970; CHECK-P10: # %bb.0: # %entry 5971; CHECK-P10-NEXT: mtfprwz f0, r4 5972; CHECK-P10-NEXT: pli r4, 244140625 5973; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5974; CHECK-P10-NEXT: xscvuxdsp f0, f0 5975; CHECK-P10-NEXT: stfsx f0, r3, r4 5976; CHECK-P10-NEXT: blr 5977; 5978; CHECK-P9-LABEL: st_align64_uint16_t_float: 5979; CHECK-P9: # %bb.0: # %entry 5980; CHECK-P9-NEXT: mtfprwz f0, r4 5981; CHECK-P9-NEXT: lis r4, 3725 5982; CHECK-P9-NEXT: xscvuxdsp f0, f0 5983; CHECK-P9-NEXT: ori r4, r4, 19025 5984; CHECK-P9-NEXT: rldic r4, r4, 12, 24 5985; CHECK-P9-NEXT: stfsx f0, r3, r4 5986; CHECK-P9-NEXT: blr 5987; 5988; CHECK-P8-LABEL: st_align64_uint16_t_float: 5989; CHECK-P8: # %bb.0: # %entry 5990; CHECK-P8-NEXT: mtfprwz f0, r4 5991; CHECK-P8-NEXT: lis r4, 3725 5992; CHECK-P8-NEXT: ori r4, r4, 19025 5993; CHECK-P8-NEXT: rldic r4, r4, 12, 24 5994; CHECK-P8-NEXT: xscvuxdsp f0, f0 5995; CHECK-P8-NEXT: stfsx f0, r3, r4 5996; CHECK-P8-NEXT: blr 5997entry: 5998 %conv = uitofp i16 %str to float 5999 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 6000 store float %conv, ptr %add.ptr, align 4 6001 ret void 6002} 6003 6004; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6005define dso_local void @st_reg_uint16_t_float(ptr nocapture %ptr, i64 %off, i16 zeroext %str) { 6006; CHECK-LABEL: st_reg_uint16_t_float: 6007; CHECK: # %bb.0: # %entry 6008; CHECK-NEXT: mtfprwz f0, r5 6009; CHECK-NEXT: xscvuxdsp f0, f0 6010; CHECK-NEXT: stfsx f0, r3, r4 6011; CHECK-NEXT: blr 6012entry: 6013 %conv = uitofp i16 %str to float 6014 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 6015 store float %conv, ptr %add.ptr, align 4 6016 ret void 6017} 6018 6019; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6020define dso_local void @st_or1_uint16_t_float(i64 %ptr, i8 zeroext %off, i16 zeroext %str) { 6021; CHECK-LABEL: st_or1_uint16_t_float: 6022; CHECK: # %bb.0: # %entry 6023; CHECK-NEXT: mtfprwz f0, r5 6024; CHECK-NEXT: or r3, r4, r3 6025; CHECK-NEXT: xscvuxdsp f0, f0 6026; CHECK-NEXT: stfs f0, 0(r3) 6027; CHECK-NEXT: blr 6028entry: 6029 %conv = uitofp i16 %str to float 6030 %conv1 = zext i8 %off to i64 6031 %or = or i64 %conv1, %ptr 6032 %0 = inttoptr i64 %or to ptr 6033 store float %conv, ptr %0, align 4 6034 ret void 6035} 6036 6037; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6038define dso_local void @st_not_disjoint16_uint16_t_float(i64 %ptr, i16 zeroext %str) { 6039; CHECK-LABEL: st_not_disjoint16_uint16_t_float: 6040; CHECK: # %bb.0: # %entry 6041; CHECK-NEXT: mtfprwz f0, r4 6042; CHECK-NEXT: ori r3, r3, 6 6043; CHECK-NEXT: xscvuxdsp f0, f0 6044; CHECK-NEXT: stfs f0, 0(r3) 6045; CHECK-NEXT: blr 6046entry: 6047 %conv = uitofp i16 %str to float 6048 %or = or i64 %ptr, 6 6049 %0 = inttoptr i64 %or to ptr 6050 store float %conv, ptr %0, align 4 6051 ret void 6052} 6053 6054; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6055define dso_local void @st_disjoint_align16_uint16_t_float(i64 %ptr, i16 zeroext %str) { 6056; CHECK-LABEL: st_disjoint_align16_uint16_t_float: 6057; CHECK: # %bb.0: # %entry 6058; CHECK-NEXT: mtfprwz f0, r4 6059; CHECK-NEXT: rldicr r3, r3, 0, 51 6060; CHECK-NEXT: xscvuxdsp f0, f0 6061; CHECK-NEXT: stfs f0, 24(r3) 6062; CHECK-NEXT: blr 6063entry: 6064 %and = and i64 %ptr, -4096 6065 %conv = uitofp i16 %str to float 6066 %or = or i64 %and, 24 6067 %0 = inttoptr i64 %or to ptr 6068 store float %conv, ptr %0, align 8 6069 ret void 6070} 6071 6072; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6073define dso_local void @st_not_disjoint32_uint16_t_float(i64 %ptr, i16 zeroext %str) { 6074; CHECK-P10-LABEL: st_not_disjoint32_uint16_t_float: 6075; CHECK-P10: # %bb.0: # %entry 6076; CHECK-P10-NEXT: mtfprwz f0, r4 6077; CHECK-P10-NEXT: ori r3, r3, 34463 6078; CHECK-P10-NEXT: oris r3, r3, 1 6079; CHECK-P10-NEXT: xscvuxdsp f0, f0 6080; CHECK-P10-NEXT: stfs f0, 0(r3) 6081; CHECK-P10-NEXT: blr 6082; 6083; CHECK-P9-LABEL: st_not_disjoint32_uint16_t_float: 6084; CHECK-P9: # %bb.0: # %entry 6085; CHECK-P9-NEXT: mtfprwz f0, r4 6086; CHECK-P9-NEXT: ori r3, r3, 34463 6087; CHECK-P9-NEXT: xscvuxdsp f0, f0 6088; CHECK-P9-NEXT: oris r3, r3, 1 6089; CHECK-P9-NEXT: stfs f0, 0(r3) 6090; CHECK-P9-NEXT: blr 6091; 6092; CHECK-P8-LABEL: st_not_disjoint32_uint16_t_float: 6093; CHECK-P8: # %bb.0: # %entry 6094; CHECK-P8-NEXT: mtfprwz f0, r4 6095; CHECK-P8-NEXT: ori r3, r3, 34463 6096; CHECK-P8-NEXT: oris r3, r3, 1 6097; CHECK-P8-NEXT: xscvuxdsp f0, f0 6098; CHECK-P8-NEXT: stfs f0, 0(r3) 6099; CHECK-P8-NEXT: blr 6100entry: 6101 %conv = uitofp i16 %str to float 6102 %or = or i64 %ptr, 99999 6103 %0 = inttoptr i64 %or to ptr 6104 store float %conv, ptr %0, align 4 6105 ret void 6106} 6107 6108; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6109define dso_local void @st_disjoint_align32_uint16_t_float(i64 %ptr, i16 zeroext %str) { 6110; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_float: 6111; CHECK-P10: # %bb.0: # %entry 6112; CHECK-P10-NEXT: mtfprwz f0, r4 6113; CHECK-P10-NEXT: lis r5, -15264 6114; CHECK-P10-NEXT: and r3, r3, r5 6115; CHECK-P10-NEXT: xscvuxdsp f0, f0 6116; CHECK-P10-NEXT: pstfs f0, 999990000(r3), 0 6117; CHECK-P10-NEXT: blr 6118; 6119; CHECK-P9-LABEL: st_disjoint_align32_uint16_t_float: 6120; CHECK-P9: # %bb.0: # %entry 6121; CHECK-P9-NEXT: mtfprwz f0, r4 6122; CHECK-P9-NEXT: lis r5, -15264 6123; CHECK-P9-NEXT: lis r4, 15258 6124; CHECK-P9-NEXT: xscvuxdsp f0, f0 6125; CHECK-P9-NEXT: and r3, r3, r5 6126; CHECK-P9-NEXT: ori r4, r4, 41712 6127; CHECK-P9-NEXT: stfsx f0, r3, r4 6128; CHECK-P9-NEXT: blr 6129; 6130; CHECK-P8-LABEL: st_disjoint_align32_uint16_t_float: 6131; CHECK-P8: # %bb.0: # %entry 6132; CHECK-P8-NEXT: mtfprwz f0, r4 6133; CHECK-P8-NEXT: lis r5, -15264 6134; CHECK-P8-NEXT: lis r4, 15258 6135; CHECK-P8-NEXT: and r3, r3, r5 6136; CHECK-P8-NEXT: ori r4, r4, 41712 6137; CHECK-P8-NEXT: xscvuxdsp f0, f0 6138; CHECK-P8-NEXT: stfsx f0, r3, r4 6139; CHECK-P8-NEXT: blr 6140entry: 6141 %and = and i64 %ptr, -1000341504 6142 %conv = uitofp i16 %str to float 6143 %or = or i64 %and, 999990000 6144 %0 = inttoptr i64 %or to ptr 6145 store float %conv, ptr %0, align 16 6146 ret void 6147} 6148 6149; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6150define dso_local void @st_not_disjoint64_uint16_t_float(i64 %ptr, i16 zeroext %str) { 6151; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_float: 6152; CHECK-P10: # %bb.0: # %entry 6153; CHECK-P10-NEXT: mtfprwz f0, r4 6154; CHECK-P10-NEXT: pli r4, 232 6155; CHECK-P10-NEXT: pli r5, 3567587329 6156; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 6157; CHECK-P10-NEXT: xscvuxdsp f0, f0 6158; CHECK-P10-NEXT: or r3, r3, r5 6159; CHECK-P10-NEXT: stfs f0, 0(r3) 6160; CHECK-P10-NEXT: blr 6161; 6162; CHECK-P9-LABEL: st_not_disjoint64_uint16_t_float: 6163; CHECK-P9: # %bb.0: # %entry 6164; CHECK-P9-NEXT: mtfprwz f0, r4 6165; CHECK-P9-NEXT: li r4, 29 6166; CHECK-P9-NEXT: rldic r4, r4, 35, 24 6167; CHECK-P9-NEXT: xscvuxdsp f0, f0 6168; CHECK-P9-NEXT: oris r4, r4, 54437 6169; CHECK-P9-NEXT: ori r4, r4, 4097 6170; CHECK-P9-NEXT: or r3, r3, r4 6171; CHECK-P9-NEXT: stfs f0, 0(r3) 6172; CHECK-P9-NEXT: blr 6173; 6174; CHECK-P8-LABEL: st_not_disjoint64_uint16_t_float: 6175; CHECK-P8: # %bb.0: # %entry 6176; CHECK-P8-NEXT: mtfprwz f0, r4 6177; CHECK-P8-NEXT: li r4, 29 6178; CHECK-P8-NEXT: rldic r4, r4, 35, 24 6179; CHECK-P8-NEXT: oris r4, r4, 54437 6180; CHECK-P8-NEXT: xscvuxdsp f0, f0 6181; CHECK-P8-NEXT: ori r4, r4, 4097 6182; CHECK-P8-NEXT: or r3, r3, r4 6183; CHECK-P8-NEXT: stfs f0, 0(r3) 6184; CHECK-P8-NEXT: blr 6185entry: 6186 %conv = uitofp i16 %str to float 6187 %or = or i64 %ptr, 1000000000001 6188 %0 = inttoptr i64 %or to ptr 6189 store float %conv, ptr %0, align 4 6190 ret void 6191} 6192 6193; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6194define dso_local void @st_disjoint_align64_uint16_t_float(i64 %ptr, i16 zeroext %str) { 6195; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_float: 6196; CHECK-P10: # %bb.0: # %entry 6197; CHECK-P10-NEXT: mtfprwz f0, r4 6198; CHECK-P10-NEXT: pli r4, 244140625 6199; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 6200; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6201; CHECK-P10-NEXT: xscvuxdsp f0, f0 6202; CHECK-P10-NEXT: stfsx f0, r3, r4 6203; CHECK-P10-NEXT: blr 6204; 6205; CHECK-P9-LABEL: st_disjoint_align64_uint16_t_float: 6206; CHECK-P9: # %bb.0: # %entry 6207; CHECK-P9-NEXT: mtfprwz f0, r4 6208; CHECK-P9-NEXT: lis r4, 3725 6209; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 6210; CHECK-P9-NEXT: xscvuxdsp f0, f0 6211; CHECK-P9-NEXT: ori r4, r4, 19025 6212; CHECK-P9-NEXT: rldic r4, r4, 12, 24 6213; CHECK-P9-NEXT: stfsx f0, r3, r4 6214; CHECK-P9-NEXT: blr 6215; 6216; CHECK-P8-LABEL: st_disjoint_align64_uint16_t_float: 6217; CHECK-P8: # %bb.0: # %entry 6218; CHECK-P8-NEXT: mtfprwz f0, r4 6219; CHECK-P8-NEXT: lis r4, 3725 6220; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 6221; CHECK-P8-NEXT: ori r4, r4, 19025 6222; CHECK-P8-NEXT: rldic r4, r4, 12, 24 6223; CHECK-P8-NEXT: xscvuxdsp f0, f0 6224; CHECK-P8-NEXT: stfsx f0, r3, r4 6225; CHECK-P8-NEXT: blr 6226entry: 6227 %and = and i64 %ptr, -1099511627776 6228 %conv = uitofp i16 %str to float 6229 %or = or i64 %and, 1000000000000 6230 %0 = inttoptr i64 %or to ptr 6231 store float %conv, ptr %0, align 4096 6232 ret void 6233} 6234 6235; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6236define dso_local void @st_cst_align16_uint16_t_float(i16 zeroext %str) { 6237; CHECK-LABEL: st_cst_align16_uint16_t_float: 6238; CHECK: # %bb.0: # %entry 6239; CHECK-NEXT: mtfprwz f0, r3 6240; CHECK-NEXT: xscvuxdsp f0, f0 6241; CHECK-NEXT: stfs f0, 4080(0) 6242; CHECK-NEXT: blr 6243entry: 6244 %conv = uitofp i16 %str to float 6245 store float %conv, ptr inttoptr (i64 4080 to ptr), align 16 6246 ret void 6247} 6248 6249; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6250define dso_local void @st_cst_align32_uint16_t_float(i16 zeroext %str) { 6251; CHECK-LABEL: st_cst_align32_uint16_t_float: 6252; CHECK: # %bb.0: # %entry 6253; CHECK-NEXT: mtfprwz f0, r3 6254; CHECK-NEXT: lis r3, 153 6255; CHECK-NEXT: xscvuxdsp f0, f0 6256; CHECK-NEXT: stfs f0, -27108(r3) 6257; CHECK-NEXT: blr 6258entry: 6259 %conv = uitofp i16 %str to float 6260 store float %conv, ptr inttoptr (i64 9999900 to ptr), align 4 6261 ret void 6262} 6263 6264; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6265define dso_local void @st_cst_align64_uint16_t_float(i16 zeroext %str) { 6266; CHECK-P10-LABEL: st_cst_align64_uint16_t_float: 6267; CHECK-P10: # %bb.0: # %entry 6268; CHECK-P10-NEXT: mtfprwz f0, r3 6269; CHECK-P10-NEXT: pli r3, 244140625 6270; CHECK-P10-NEXT: rldic r3, r3, 12, 24 6271; CHECK-P10-NEXT: xscvuxdsp f0, f0 6272; CHECK-P10-NEXT: stfs f0, 0(r3) 6273; CHECK-P10-NEXT: blr 6274; 6275; CHECK-P9-LABEL: st_cst_align64_uint16_t_float: 6276; CHECK-P9: # %bb.0: # %entry 6277; CHECK-P9-NEXT: mtfprwz f0, r3 6278; CHECK-P9-NEXT: lis r3, 3725 6279; CHECK-P9-NEXT: xscvuxdsp f0, f0 6280; CHECK-P9-NEXT: ori r3, r3, 19025 6281; CHECK-P9-NEXT: rldic r3, r3, 12, 24 6282; CHECK-P9-NEXT: stfs f0, 0(r3) 6283; CHECK-P9-NEXT: blr 6284; 6285; CHECK-P8-LABEL: st_cst_align64_uint16_t_float: 6286; CHECK-P8: # %bb.0: # %entry 6287; CHECK-P8-NEXT: mtfprwz f0, r3 6288; CHECK-P8-NEXT: lis r3, 3725 6289; CHECK-P8-NEXT: ori r3, r3, 19025 6290; CHECK-P8-NEXT: rldic r3, r3, 12, 24 6291; CHECK-P8-NEXT: xscvuxdsp f0, f0 6292; CHECK-P8-NEXT: stfs f0, 0(r3) 6293; CHECK-P8-NEXT: blr 6294entry: 6295 %conv = uitofp i16 %str to float 6296 store float %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 6297 ret void 6298} 6299 6300; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6301define dso_local void @st_0_uint16_t_double(i64 %ptr, i16 zeroext %str) { 6302; CHECK-LABEL: st_0_uint16_t_double: 6303; CHECK: # %bb.0: # %entry 6304; CHECK-NEXT: mtfprwz f0, r4 6305; CHECK-NEXT: xscvuxddp f0, f0 6306; CHECK-NEXT: stfd f0, 0(r3) 6307; CHECK-NEXT: blr 6308entry: 6309 %conv = uitofp i16 %str to double 6310 %0 = inttoptr i64 %ptr to ptr 6311 store double %conv, ptr %0, align 8 6312 ret void 6313} 6314 6315; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6316define dso_local void @st_align16_uint16_t_double(ptr nocapture %ptr, i16 zeroext %str) { 6317; CHECK-LABEL: st_align16_uint16_t_double: 6318; CHECK: # %bb.0: # %entry 6319; CHECK-NEXT: mtfprwz f0, r4 6320; CHECK-NEXT: xscvuxddp f0, f0 6321; CHECK-NEXT: stfd f0, 8(r3) 6322; CHECK-NEXT: blr 6323entry: 6324 %conv = uitofp i16 %str to double 6325 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 6326 store double %conv, ptr %add.ptr, align 8 6327 ret void 6328} 6329 6330; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6331define dso_local void @st_align32_uint16_t_double(ptr nocapture %ptr, i16 zeroext %str) { 6332; CHECK-P10-LABEL: st_align32_uint16_t_double: 6333; CHECK-P10: # %bb.0: # %entry 6334; CHECK-P10-NEXT: mtfprwz f0, r4 6335; CHECK-P10-NEXT: xscvuxddp f0, f0 6336; CHECK-P10-NEXT: pstfd f0, 99999000(r3), 0 6337; CHECK-P10-NEXT: blr 6338; 6339; CHECK-P9-LABEL: st_align32_uint16_t_double: 6340; CHECK-P9: # %bb.0: # %entry 6341; CHECK-P9-NEXT: mtfprwz f0, r4 6342; CHECK-P9-NEXT: lis r4, 1525 6343; CHECK-P9-NEXT: xscvuxddp f0, f0 6344; CHECK-P9-NEXT: ori r4, r4, 56600 6345; CHECK-P9-NEXT: stfdx f0, r3, r4 6346; CHECK-P9-NEXT: blr 6347; 6348; CHECK-P8-LABEL: st_align32_uint16_t_double: 6349; CHECK-P8: # %bb.0: # %entry 6350; CHECK-P8-NEXT: mtfprwz f0, r4 6351; CHECK-P8-NEXT: lis r4, 1525 6352; CHECK-P8-NEXT: ori r4, r4, 56600 6353; CHECK-P8-NEXT: xscvuxddp f0, f0 6354; CHECK-P8-NEXT: stfdx f0, r3, r4 6355; CHECK-P8-NEXT: blr 6356entry: 6357 %conv = uitofp i16 %str to double 6358 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 6359 store double %conv, ptr %add.ptr, align 8 6360 ret void 6361} 6362 6363; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6364define dso_local void @st_align64_uint16_t_double(ptr nocapture %ptr, i16 zeroext %str) { 6365; CHECK-P10-LABEL: st_align64_uint16_t_double: 6366; CHECK-P10: # %bb.0: # %entry 6367; CHECK-P10-NEXT: mtfprwz f0, r4 6368; CHECK-P10-NEXT: pli r4, 244140625 6369; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6370; CHECK-P10-NEXT: xscvuxddp f0, f0 6371; CHECK-P10-NEXT: stfdx f0, r3, r4 6372; CHECK-P10-NEXT: blr 6373; 6374; CHECK-P9-LABEL: st_align64_uint16_t_double: 6375; CHECK-P9: # %bb.0: # %entry 6376; CHECK-P9-NEXT: mtfprwz f0, r4 6377; CHECK-P9-NEXT: lis r4, 3725 6378; CHECK-P9-NEXT: xscvuxddp f0, f0 6379; CHECK-P9-NEXT: ori r4, r4, 19025 6380; CHECK-P9-NEXT: rldic r4, r4, 12, 24 6381; CHECK-P9-NEXT: stfdx f0, r3, r4 6382; CHECK-P9-NEXT: blr 6383; 6384; CHECK-P8-LABEL: st_align64_uint16_t_double: 6385; CHECK-P8: # %bb.0: # %entry 6386; CHECK-P8-NEXT: mtfprwz f0, r4 6387; CHECK-P8-NEXT: lis r4, 3725 6388; CHECK-P8-NEXT: ori r4, r4, 19025 6389; CHECK-P8-NEXT: rldic r4, r4, 12, 24 6390; CHECK-P8-NEXT: xscvuxddp f0, f0 6391; CHECK-P8-NEXT: stfdx f0, r3, r4 6392; CHECK-P8-NEXT: blr 6393entry: 6394 %conv = uitofp i16 %str to double 6395 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 6396 store double %conv, ptr %add.ptr, align 8 6397 ret void 6398} 6399 6400; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6401define dso_local void @st_reg_uint16_t_double(ptr nocapture %ptr, i64 %off, i16 zeroext %str) { 6402; CHECK-LABEL: st_reg_uint16_t_double: 6403; CHECK: # %bb.0: # %entry 6404; CHECK-NEXT: mtfprwz f0, r5 6405; CHECK-NEXT: xscvuxddp f0, f0 6406; CHECK-NEXT: stfdx f0, r3, r4 6407; CHECK-NEXT: blr 6408entry: 6409 %conv = uitofp i16 %str to double 6410 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 6411 store double %conv, ptr %add.ptr, align 8 6412 ret void 6413} 6414 6415; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6416define dso_local void @st_or1_uint16_t_double(i64 %ptr, i8 zeroext %off, i16 zeroext %str) { 6417; CHECK-LABEL: st_or1_uint16_t_double: 6418; CHECK: # %bb.0: # %entry 6419; CHECK-NEXT: mtfprwz f0, r5 6420; CHECK-NEXT: or r3, r4, r3 6421; CHECK-NEXT: xscvuxddp f0, f0 6422; CHECK-NEXT: stfd f0, 0(r3) 6423; CHECK-NEXT: blr 6424entry: 6425 %conv = uitofp i16 %str to double 6426 %conv1 = zext i8 %off to i64 6427 %or = or i64 %conv1, %ptr 6428 %0 = inttoptr i64 %or to ptr 6429 store double %conv, ptr %0, align 8 6430 ret void 6431} 6432 6433; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6434define dso_local void @st_not_disjoint16_uint16_t_double(i64 %ptr, i16 zeroext %str) { 6435; CHECK-LABEL: st_not_disjoint16_uint16_t_double: 6436; CHECK: # %bb.0: # %entry 6437; CHECK-NEXT: mtfprwz f0, r4 6438; CHECK-NEXT: ori r3, r3, 6 6439; CHECK-NEXT: xscvuxddp f0, f0 6440; CHECK-NEXT: stfd f0, 0(r3) 6441; CHECK-NEXT: blr 6442entry: 6443 %conv = uitofp i16 %str to double 6444 %or = or i64 %ptr, 6 6445 %0 = inttoptr i64 %or to ptr 6446 store double %conv, ptr %0, align 8 6447 ret void 6448} 6449 6450; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6451define dso_local void @st_disjoint_align16_uint16_t_double(i64 %ptr, i16 zeroext %str) { 6452; CHECK-LABEL: st_disjoint_align16_uint16_t_double: 6453; CHECK: # %bb.0: # %entry 6454; CHECK-NEXT: mtfprwz f0, r4 6455; CHECK-NEXT: rldicr r3, r3, 0, 51 6456; CHECK-NEXT: xscvuxddp f0, f0 6457; CHECK-NEXT: stfd f0, 24(r3) 6458; CHECK-NEXT: blr 6459entry: 6460 %and = and i64 %ptr, -4096 6461 %conv = uitofp i16 %str to double 6462 %or = or i64 %and, 24 6463 %0 = inttoptr i64 %or to ptr 6464 store double %conv, ptr %0, align 8 6465 ret void 6466} 6467 6468; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6469define dso_local void @st_not_disjoint32_uint16_t_double(i64 %ptr, i16 zeroext %str) { 6470; CHECK-P10-LABEL: st_not_disjoint32_uint16_t_double: 6471; CHECK-P10: # %bb.0: # %entry 6472; CHECK-P10-NEXT: mtfprwz f0, r4 6473; CHECK-P10-NEXT: ori r3, r3, 34463 6474; CHECK-P10-NEXT: oris r3, r3, 1 6475; CHECK-P10-NEXT: xscvuxddp f0, f0 6476; CHECK-P10-NEXT: stfd f0, 0(r3) 6477; CHECK-P10-NEXT: blr 6478; 6479; CHECK-P9-LABEL: st_not_disjoint32_uint16_t_double: 6480; CHECK-P9: # %bb.0: # %entry 6481; CHECK-P9-NEXT: mtfprwz f0, r4 6482; CHECK-P9-NEXT: ori r3, r3, 34463 6483; CHECK-P9-NEXT: xscvuxddp f0, f0 6484; CHECK-P9-NEXT: oris r3, r3, 1 6485; CHECK-P9-NEXT: stfd f0, 0(r3) 6486; CHECK-P9-NEXT: blr 6487; 6488; CHECK-P8-LABEL: st_not_disjoint32_uint16_t_double: 6489; CHECK-P8: # %bb.0: # %entry 6490; CHECK-P8-NEXT: mtfprwz f0, r4 6491; CHECK-P8-NEXT: ori r3, r3, 34463 6492; CHECK-P8-NEXT: oris r3, r3, 1 6493; CHECK-P8-NEXT: xscvuxddp f0, f0 6494; CHECK-P8-NEXT: stfd f0, 0(r3) 6495; CHECK-P8-NEXT: blr 6496entry: 6497 %conv = uitofp i16 %str to double 6498 %or = or i64 %ptr, 99999 6499 %0 = inttoptr i64 %or to ptr 6500 store double %conv, ptr %0, align 8 6501 ret void 6502} 6503 6504; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6505define dso_local void @st_disjoint_align32_uint16_t_double(i64 %ptr, i16 zeroext %str) { 6506; CHECK-P10-LABEL: st_disjoint_align32_uint16_t_double: 6507; CHECK-P10: # %bb.0: # %entry 6508; CHECK-P10-NEXT: mtfprwz f0, r4 6509; CHECK-P10-NEXT: lis r5, -15264 6510; CHECK-P10-NEXT: and r3, r3, r5 6511; CHECK-P10-NEXT: xscvuxddp f0, f0 6512; CHECK-P10-NEXT: pstfd f0, 999990000(r3), 0 6513; CHECK-P10-NEXT: blr 6514; 6515; CHECK-P9-LABEL: st_disjoint_align32_uint16_t_double: 6516; CHECK-P9: # %bb.0: # %entry 6517; CHECK-P9-NEXT: mtfprwz f0, r4 6518; CHECK-P9-NEXT: lis r5, -15264 6519; CHECK-P9-NEXT: lis r4, 15258 6520; CHECK-P9-NEXT: xscvuxddp f0, f0 6521; CHECK-P9-NEXT: and r3, r3, r5 6522; CHECK-P9-NEXT: ori r4, r4, 41712 6523; CHECK-P9-NEXT: stfdx f0, r3, r4 6524; CHECK-P9-NEXT: blr 6525; 6526; CHECK-P8-LABEL: st_disjoint_align32_uint16_t_double: 6527; CHECK-P8: # %bb.0: # %entry 6528; CHECK-P8-NEXT: mtfprwz f0, r4 6529; CHECK-P8-NEXT: lis r5, -15264 6530; CHECK-P8-NEXT: lis r4, 15258 6531; CHECK-P8-NEXT: and r3, r3, r5 6532; CHECK-P8-NEXT: ori r4, r4, 41712 6533; CHECK-P8-NEXT: xscvuxddp f0, f0 6534; CHECK-P8-NEXT: stfdx f0, r3, r4 6535; CHECK-P8-NEXT: blr 6536entry: 6537 %and = and i64 %ptr, -1000341504 6538 %conv = uitofp i16 %str to double 6539 %or = or i64 %and, 999990000 6540 %0 = inttoptr i64 %or to ptr 6541 store double %conv, ptr %0, align 16 6542 ret void 6543} 6544 6545; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6546define dso_local void @st_not_disjoint64_uint16_t_double(i64 %ptr, i16 zeroext %str) { 6547; CHECK-P10-LABEL: st_not_disjoint64_uint16_t_double: 6548; CHECK-P10: # %bb.0: # %entry 6549; CHECK-P10-NEXT: mtfprwz f0, r4 6550; CHECK-P10-NEXT: pli r4, 232 6551; CHECK-P10-NEXT: pli r5, 3567587329 6552; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 6553; CHECK-P10-NEXT: xscvuxddp f0, f0 6554; CHECK-P10-NEXT: or r3, r3, r5 6555; CHECK-P10-NEXT: stfd f0, 0(r3) 6556; CHECK-P10-NEXT: blr 6557; 6558; CHECK-P9-LABEL: st_not_disjoint64_uint16_t_double: 6559; CHECK-P9: # %bb.0: # %entry 6560; CHECK-P9-NEXT: mtfprwz f0, r4 6561; CHECK-P9-NEXT: li r4, 29 6562; CHECK-P9-NEXT: rldic r4, r4, 35, 24 6563; CHECK-P9-NEXT: xscvuxddp f0, f0 6564; CHECK-P9-NEXT: oris r4, r4, 54437 6565; CHECK-P9-NEXT: ori r4, r4, 4097 6566; CHECK-P9-NEXT: or r3, r3, r4 6567; CHECK-P9-NEXT: stfd f0, 0(r3) 6568; CHECK-P9-NEXT: blr 6569; 6570; CHECK-P8-LABEL: st_not_disjoint64_uint16_t_double: 6571; CHECK-P8: # %bb.0: # %entry 6572; CHECK-P8-NEXT: mtfprwz f0, r4 6573; CHECK-P8-NEXT: li r4, 29 6574; CHECK-P8-NEXT: rldic r4, r4, 35, 24 6575; CHECK-P8-NEXT: oris r4, r4, 54437 6576; CHECK-P8-NEXT: xscvuxddp f0, f0 6577; CHECK-P8-NEXT: ori r4, r4, 4097 6578; CHECK-P8-NEXT: or r3, r3, r4 6579; CHECK-P8-NEXT: stfd f0, 0(r3) 6580; CHECK-P8-NEXT: blr 6581entry: 6582 %conv = uitofp i16 %str to double 6583 %or = or i64 %ptr, 1000000000001 6584 %0 = inttoptr i64 %or to ptr 6585 store double %conv, ptr %0, align 8 6586 ret void 6587} 6588 6589; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6590define dso_local void @st_disjoint_align64_uint16_t_double(i64 %ptr, i16 zeroext %str) { 6591; CHECK-P10-LABEL: st_disjoint_align64_uint16_t_double: 6592; CHECK-P10: # %bb.0: # %entry 6593; CHECK-P10-NEXT: mtfprwz f0, r4 6594; CHECK-P10-NEXT: pli r4, 244140625 6595; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 6596; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6597; CHECK-P10-NEXT: xscvuxddp f0, f0 6598; CHECK-P10-NEXT: stfdx f0, r3, r4 6599; CHECK-P10-NEXT: blr 6600; 6601; CHECK-P9-LABEL: st_disjoint_align64_uint16_t_double: 6602; CHECK-P9: # %bb.0: # %entry 6603; CHECK-P9-NEXT: mtfprwz f0, r4 6604; CHECK-P9-NEXT: lis r4, 3725 6605; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 6606; CHECK-P9-NEXT: xscvuxddp f0, f0 6607; CHECK-P9-NEXT: ori r4, r4, 19025 6608; CHECK-P9-NEXT: rldic r4, r4, 12, 24 6609; CHECK-P9-NEXT: stfdx f0, r3, r4 6610; CHECK-P9-NEXT: blr 6611; 6612; CHECK-P8-LABEL: st_disjoint_align64_uint16_t_double: 6613; CHECK-P8: # %bb.0: # %entry 6614; CHECK-P8-NEXT: mtfprwz f0, r4 6615; CHECK-P8-NEXT: lis r4, 3725 6616; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 6617; CHECK-P8-NEXT: ori r4, r4, 19025 6618; CHECK-P8-NEXT: rldic r4, r4, 12, 24 6619; CHECK-P8-NEXT: xscvuxddp f0, f0 6620; CHECK-P8-NEXT: stfdx f0, r3, r4 6621; CHECK-P8-NEXT: blr 6622entry: 6623 %and = and i64 %ptr, -1099511627776 6624 %conv = uitofp i16 %str to double 6625 %or = or i64 %and, 1000000000000 6626 %0 = inttoptr i64 %or to ptr 6627 store double %conv, ptr %0, align 4096 6628 ret void 6629} 6630 6631; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6632define dso_local void @st_cst_align16_uint16_t_double(i16 zeroext %str) { 6633; CHECK-LABEL: st_cst_align16_uint16_t_double: 6634; CHECK: # %bb.0: # %entry 6635; CHECK-NEXT: mtfprwz f0, r3 6636; CHECK-NEXT: xscvuxddp f0, f0 6637; CHECK-NEXT: stfd f0, 4080(0) 6638; CHECK-NEXT: blr 6639entry: 6640 %conv = uitofp i16 %str to double 6641 store double %conv, ptr inttoptr (i64 4080 to ptr), align 16 6642 ret void 6643} 6644 6645; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6646define dso_local void @st_cst_align32_uint16_t_double(i16 zeroext %str) { 6647; CHECK-LABEL: st_cst_align32_uint16_t_double: 6648; CHECK: # %bb.0: # %entry 6649; CHECK-NEXT: mtfprwz f0, r3 6650; CHECK-NEXT: lis r3, 153 6651; CHECK-NEXT: xscvuxddp f0, f0 6652; CHECK-NEXT: stfd f0, -27108(r3) 6653; CHECK-NEXT: blr 6654entry: 6655 %conv = uitofp i16 %str to double 6656 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 8 6657 ret void 6658} 6659 6660; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6661define dso_local void @st_cst_align64_uint16_t_double(i16 zeroext %str) { 6662; CHECK-P10-LABEL: st_cst_align64_uint16_t_double: 6663; CHECK-P10: # %bb.0: # %entry 6664; CHECK-P10-NEXT: mtfprwz f0, r3 6665; CHECK-P10-NEXT: pli r3, 244140625 6666; CHECK-P10-NEXT: rldic r3, r3, 12, 24 6667; CHECK-P10-NEXT: xscvuxddp f0, f0 6668; CHECK-P10-NEXT: stfd f0, 0(r3) 6669; CHECK-P10-NEXT: blr 6670; 6671; CHECK-P9-LABEL: st_cst_align64_uint16_t_double: 6672; CHECK-P9: # %bb.0: # %entry 6673; CHECK-P9-NEXT: mtfprwz f0, r3 6674; CHECK-P9-NEXT: lis r3, 3725 6675; CHECK-P9-NEXT: xscvuxddp f0, f0 6676; CHECK-P9-NEXT: ori r3, r3, 19025 6677; CHECK-P9-NEXT: rldic r3, r3, 12, 24 6678; CHECK-P9-NEXT: stfd f0, 0(r3) 6679; CHECK-P9-NEXT: blr 6680; 6681; CHECK-P8-LABEL: st_cst_align64_uint16_t_double: 6682; CHECK-P8: # %bb.0: # %entry 6683; CHECK-P8-NEXT: mtfprwz f0, r3 6684; CHECK-P8-NEXT: lis r3, 3725 6685; CHECK-P8-NEXT: ori r3, r3, 19025 6686; CHECK-P8-NEXT: rldic r3, r3, 12, 24 6687; CHECK-P8-NEXT: xscvuxddp f0, f0 6688; CHECK-P8-NEXT: stfd f0, 0(r3) 6689; CHECK-P8-NEXT: blr 6690entry: 6691 %conv = uitofp i16 %str to double 6692 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 6693 ret void 6694} 6695 6696; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6697define dso_local void @st_0_int16_t_uint32_t(i64 %ptr, i16 signext %str) { 6698; CHECK-LABEL: st_0_int16_t_uint32_t: 6699; CHECK: # %bb.0: # %entry 6700; CHECK-NEXT: stw r4, 0(r3) 6701; CHECK-NEXT: blr 6702entry: 6703 %conv = sext i16 %str to i32 6704 %0 = inttoptr i64 %ptr to ptr 6705 store i32 %conv, ptr %0, align 4 6706 ret void 6707} 6708 6709; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6710define dso_local void @st_align16_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) { 6711; CHECK-LABEL: st_align16_int16_t_uint32_t: 6712; CHECK: # %bb.0: # %entry 6713; CHECK-NEXT: stw r4, 8(r3) 6714; CHECK-NEXT: blr 6715entry: 6716 %conv = sext i16 %str to i32 6717 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 6718 store i32 %conv, ptr %add.ptr, align 4 6719 ret void 6720} 6721 6722; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6723define dso_local void @st_align32_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) { 6724; CHECK-P10-LABEL: st_align32_int16_t_uint32_t: 6725; CHECK-P10: # %bb.0: # %entry 6726; CHECK-P10-NEXT: pstw r4, 99999000(r3), 0 6727; CHECK-P10-NEXT: blr 6728; 6729; CHECK-PREP10-LABEL: st_align32_int16_t_uint32_t: 6730; CHECK-PREP10: # %bb.0: # %entry 6731; CHECK-PREP10-NEXT: lis r5, 1525 6732; CHECK-PREP10-NEXT: ori r5, r5, 56600 6733; CHECK-PREP10-NEXT: stwx r4, r3, r5 6734; CHECK-PREP10-NEXT: blr 6735entry: 6736 %conv = sext i16 %str to i32 6737 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 6738 store i32 %conv, ptr %add.ptr, align 4 6739 ret void 6740} 6741 6742; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6743define dso_local void @st_align64_int16_t_uint32_t(ptr nocapture %ptr, i16 signext %str) { 6744; CHECK-P10-LABEL: st_align64_int16_t_uint32_t: 6745; CHECK-P10: # %bb.0: # %entry 6746; CHECK-P10-NEXT: pli r5, 244140625 6747; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6748; CHECK-P10-NEXT: stwx r4, r3, r5 6749; CHECK-P10-NEXT: blr 6750; 6751; CHECK-PREP10-LABEL: st_align64_int16_t_uint32_t: 6752; CHECK-PREP10: # %bb.0: # %entry 6753; CHECK-PREP10-NEXT: lis r5, 3725 6754; CHECK-PREP10-NEXT: ori r5, r5, 19025 6755; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6756; CHECK-PREP10-NEXT: stwx r4, r3, r5 6757; CHECK-PREP10-NEXT: blr 6758entry: 6759 %conv = sext i16 %str to i32 6760 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 6761 store i32 %conv, ptr %add.ptr, align 4 6762 ret void 6763} 6764 6765; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6766define dso_local void @st_reg_int16_t_uint32_t(ptr nocapture %ptr, i64 %off, i16 signext %str) { 6767; CHECK-LABEL: st_reg_int16_t_uint32_t: 6768; CHECK: # %bb.0: # %entry 6769; CHECK-NEXT: stwx r5, r3, r4 6770; CHECK-NEXT: blr 6771entry: 6772 %conv = sext i16 %str to i32 6773 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 6774 store i32 %conv, ptr %add.ptr, align 4 6775 ret void 6776} 6777 6778; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6779define dso_local void @st_or1_int16_t_uint32_t(i64 %ptr, i8 zeroext %off, i16 signext %str) { 6780; CHECK-LABEL: st_or1_int16_t_uint32_t: 6781; CHECK: # %bb.0: # %entry 6782; CHECK-NEXT: or r3, r4, r3 6783; CHECK-NEXT: stw r5, 0(r3) 6784; CHECK-NEXT: blr 6785entry: 6786 %conv = sext i16 %str to i32 6787 %conv1 = zext i8 %off to i64 6788 %or = or i64 %conv1, %ptr 6789 %0 = inttoptr i64 %or to ptr 6790 store i32 %conv, ptr %0, align 4 6791 ret void 6792} 6793 6794; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6795define dso_local void @st_not_disjoint16_int16_t_uint32_t(i64 %ptr, i16 signext %str) { 6796; CHECK-LABEL: st_not_disjoint16_int16_t_uint32_t: 6797; CHECK: # %bb.0: # %entry 6798; CHECK-NEXT: ori r3, r3, 6 6799; CHECK-NEXT: stw r4, 0(r3) 6800; CHECK-NEXT: blr 6801entry: 6802 %conv = sext i16 %str to i32 6803 %or = or i64 %ptr, 6 6804 %0 = inttoptr i64 %or to ptr 6805 store i32 %conv, ptr %0, align 4 6806 ret void 6807} 6808 6809; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6810define dso_local void @st_disjoint_align16_int16_t_uint32_t(i64 %ptr, i16 signext %str) { 6811; CHECK-LABEL: st_disjoint_align16_int16_t_uint32_t: 6812; CHECK: # %bb.0: # %entry 6813; CHECK-NEXT: rldicr r3, r3, 0, 51 6814; CHECK-NEXT: stw r4, 24(r3) 6815; CHECK-NEXT: blr 6816entry: 6817 %and = and i64 %ptr, -4096 6818 %conv = sext i16 %str to i32 6819 %or = or i64 %and, 24 6820 %0 = inttoptr i64 %or to ptr 6821 store i32 %conv, ptr %0, align 8 6822 ret void 6823} 6824 6825; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6826define dso_local void @st_not_disjoint32_int16_t_uint32_t(i64 %ptr, i16 signext %str) { 6827; CHECK-LABEL: st_not_disjoint32_int16_t_uint32_t: 6828; CHECK: # %bb.0: # %entry 6829; CHECK-NEXT: ori r3, r3, 34463 6830; CHECK-NEXT: oris r3, r3, 1 6831; CHECK-NEXT: stw r4, 0(r3) 6832; CHECK-NEXT: blr 6833entry: 6834 %conv = sext i16 %str to i32 6835 %or = or i64 %ptr, 99999 6836 %0 = inttoptr i64 %or to ptr 6837 store i32 %conv, ptr %0, align 4 6838 ret void 6839} 6840 6841; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6842define dso_local void @st_disjoint_align32_int16_t_uint32_t(i64 %ptr, i16 signext %str) { 6843; CHECK-P10-LABEL: st_disjoint_align32_int16_t_uint32_t: 6844; CHECK-P10: # %bb.0: # %entry 6845; CHECK-P10-NEXT: lis r5, -15264 6846; CHECK-P10-NEXT: and r3, r3, r5 6847; CHECK-P10-NEXT: pstw r4, 999990000(r3), 0 6848; CHECK-P10-NEXT: blr 6849; 6850; CHECK-PREP10-LABEL: st_disjoint_align32_int16_t_uint32_t: 6851; CHECK-PREP10: # %bb.0: # %entry 6852; CHECK-PREP10-NEXT: lis r5, -15264 6853; CHECK-PREP10-NEXT: and r3, r3, r5 6854; CHECK-PREP10-NEXT: lis r5, 15258 6855; CHECK-PREP10-NEXT: ori r5, r5, 41712 6856; CHECK-PREP10-NEXT: stwx r4, r3, r5 6857; CHECK-PREP10-NEXT: blr 6858entry: 6859 %and = and i64 %ptr, -1000341504 6860 %conv = sext i16 %str to i32 6861 %or = or i64 %and, 999990000 6862 %0 = inttoptr i64 %or to ptr 6863 store i32 %conv, ptr %0, align 16 6864 ret void 6865} 6866 6867; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6868define dso_local void @st_not_disjoint64_int16_t_uint32_t(i64 %ptr, i16 signext %str) { 6869; CHECK-P10-LABEL: st_not_disjoint64_int16_t_uint32_t: 6870; CHECK-P10: # %bb.0: # %entry 6871; CHECK-P10-NEXT: pli r5, 232 6872; CHECK-P10-NEXT: pli r6, 3567587329 6873; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 6874; CHECK-P10-NEXT: or r3, r3, r6 6875; CHECK-P10-NEXT: stw r4, 0(r3) 6876; CHECK-P10-NEXT: blr 6877; 6878; CHECK-PREP10-LABEL: st_not_disjoint64_int16_t_uint32_t: 6879; CHECK-PREP10: # %bb.0: # %entry 6880; CHECK-PREP10-NEXT: li r5, 29 6881; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 6882; CHECK-PREP10-NEXT: oris r5, r5, 54437 6883; CHECK-PREP10-NEXT: ori r5, r5, 4097 6884; CHECK-PREP10-NEXT: or r3, r3, r5 6885; CHECK-PREP10-NEXT: stw r4, 0(r3) 6886; CHECK-PREP10-NEXT: blr 6887entry: 6888 %conv = sext i16 %str to i32 6889 %or = or i64 %ptr, 1000000000001 6890 %0 = inttoptr i64 %or to ptr 6891 store i32 %conv, ptr %0, align 4 6892 ret void 6893} 6894 6895; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6896define dso_local void @st_disjoint_align64_int16_t_uint32_t(i64 %ptr, i16 signext %str) { 6897; CHECK-P10-LABEL: st_disjoint_align64_int16_t_uint32_t: 6898; CHECK-P10: # %bb.0: # %entry 6899; CHECK-P10-NEXT: pli r5, 244140625 6900; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 6901; CHECK-P10-NEXT: rldic r5, r5, 12, 24 6902; CHECK-P10-NEXT: stwx r4, r3, r5 6903; CHECK-P10-NEXT: blr 6904; 6905; CHECK-PREP10-LABEL: st_disjoint_align64_int16_t_uint32_t: 6906; CHECK-PREP10: # %bb.0: # %entry 6907; CHECK-PREP10-NEXT: lis r5, 3725 6908; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 6909; CHECK-PREP10-NEXT: ori r5, r5, 19025 6910; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 6911; CHECK-PREP10-NEXT: stwx r4, r3, r5 6912; CHECK-PREP10-NEXT: blr 6913entry: 6914 %and = and i64 %ptr, -1099511627776 6915 %conv = sext i16 %str to i32 6916 %or = or i64 %and, 1000000000000 6917 %0 = inttoptr i64 %or to ptr 6918 store i32 %conv, ptr %0, align 4096 6919 ret void 6920} 6921 6922; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6923define dso_local void @st_cst_align16_int16_t_uint32_t(i16 signext %str) { 6924; CHECK-LABEL: st_cst_align16_int16_t_uint32_t: 6925; CHECK: # %bb.0: # %entry 6926; CHECK-NEXT: stw r3, 4080(0) 6927; CHECK-NEXT: blr 6928entry: 6929 %conv = sext i16 %str to i32 6930 store i32 %conv, ptr inttoptr (i64 4080 to ptr), align 16 6931 ret void 6932} 6933 6934; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6935define dso_local void @st_cst_align32_int16_t_uint32_t(i16 signext %str) { 6936; CHECK-LABEL: st_cst_align32_int16_t_uint32_t: 6937; CHECK: # %bb.0: # %entry 6938; CHECK-NEXT: lis r4, 153 6939; CHECK-NEXT: stw r3, -27108(r4) 6940; CHECK-NEXT: blr 6941entry: 6942 %conv = sext i16 %str to i32 6943 store i32 %conv, ptr inttoptr (i64 9999900 to ptr), align 4 6944 ret void 6945} 6946 6947; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6948define dso_local void @st_cst_align64_int16_t_uint32_t(i16 signext %str) { 6949; CHECK-P10-LABEL: st_cst_align64_int16_t_uint32_t: 6950; CHECK-P10: # %bb.0: # %entry 6951; CHECK-P10-NEXT: pli r4, 244140625 6952; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6953; CHECK-P10-NEXT: stw r3, 0(r4) 6954; CHECK-P10-NEXT: blr 6955; 6956; CHECK-PREP10-LABEL: st_cst_align64_int16_t_uint32_t: 6957; CHECK-PREP10: # %bb.0: # %entry 6958; CHECK-PREP10-NEXT: lis r4, 3725 6959; CHECK-PREP10-NEXT: ori r4, r4, 19025 6960; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6961; CHECK-PREP10-NEXT: stw r3, 0(r4) 6962; CHECK-PREP10-NEXT: blr 6963entry: 6964 %conv = sext i16 %str to i32 6965 store i32 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 6966 ret void 6967} 6968 6969; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6970define dso_local void @st_0_int16_t_uint64_t(i64 %ptr, i16 signext %str) { 6971; CHECK-LABEL: st_0_int16_t_uint64_t: 6972; CHECK: # %bb.0: # %entry 6973; CHECK-NEXT: std r4, 0(r3) 6974; CHECK-NEXT: blr 6975entry: 6976 %conv = sext i16 %str to i64 6977 %0 = inttoptr i64 %ptr to ptr 6978 store i64 %conv, ptr %0, align 8 6979 ret void 6980} 6981 6982; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6983define dso_local void @st_align16_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) { 6984; CHECK-LABEL: st_align16_int16_t_uint64_t: 6985; CHECK: # %bb.0: # %entry 6986; CHECK-NEXT: std r4, 8(r3) 6987; CHECK-NEXT: blr 6988entry: 6989 %conv = sext i16 %str to i64 6990 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 6991 store i64 %conv, ptr %add.ptr, align 8 6992 ret void 6993} 6994 6995; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6996define dso_local void @st_align32_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) { 6997; CHECK-P10-LABEL: st_align32_int16_t_uint64_t: 6998; CHECK-P10: # %bb.0: # %entry 6999; CHECK-P10-NEXT: pstd r4, 99999000(r3), 0 7000; CHECK-P10-NEXT: blr 7001; 7002; CHECK-PREP10-LABEL: st_align32_int16_t_uint64_t: 7003; CHECK-PREP10: # %bb.0: # %entry 7004; CHECK-PREP10-NEXT: lis r5, 1525 7005; CHECK-PREP10-NEXT: ori r5, r5, 56600 7006; CHECK-PREP10-NEXT: stdx r4, r3, r5 7007; CHECK-PREP10-NEXT: blr 7008entry: 7009 %conv = sext i16 %str to i64 7010 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 7011 store i64 %conv, ptr %add.ptr, align 8 7012 ret void 7013} 7014 7015; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7016define dso_local void @st_align64_int16_t_uint64_t(ptr nocapture %ptr, i16 signext %str) { 7017; CHECK-P10-LABEL: st_align64_int16_t_uint64_t: 7018; CHECK-P10: # %bb.0: # %entry 7019; CHECK-P10-NEXT: pli r5, 244140625 7020; CHECK-P10-NEXT: rldic r5, r5, 12, 24 7021; CHECK-P10-NEXT: stdx r4, r3, r5 7022; CHECK-P10-NEXT: blr 7023; 7024; CHECK-PREP10-LABEL: st_align64_int16_t_uint64_t: 7025; CHECK-PREP10: # %bb.0: # %entry 7026; CHECK-PREP10-NEXT: lis r5, 3725 7027; CHECK-PREP10-NEXT: ori r5, r5, 19025 7028; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 7029; CHECK-PREP10-NEXT: stdx r4, r3, r5 7030; CHECK-PREP10-NEXT: blr 7031entry: 7032 %conv = sext i16 %str to i64 7033 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 7034 store i64 %conv, ptr %add.ptr, align 8 7035 ret void 7036} 7037 7038; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7039define dso_local void @st_reg_int16_t_uint64_t(ptr nocapture %ptr, i64 %off, i16 signext %str) { 7040; CHECK-LABEL: st_reg_int16_t_uint64_t: 7041; CHECK: # %bb.0: # %entry 7042; CHECK-NEXT: stdx r5, r3, r4 7043; CHECK-NEXT: blr 7044entry: 7045 %conv = sext i16 %str to i64 7046 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 7047 store i64 %conv, ptr %add.ptr, align 8 7048 ret void 7049} 7050 7051; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7052define dso_local void @st_or1_int16_t_uint64_t(i64 %ptr, i8 zeroext %off, i16 signext %str) { 7053; CHECK-LABEL: st_or1_int16_t_uint64_t: 7054; CHECK: # %bb.0: # %entry 7055; CHECK-NEXT: or r3, r4, r3 7056; CHECK-NEXT: std r5, 0(r3) 7057; CHECK-NEXT: blr 7058entry: 7059 %conv = sext i16 %str to i64 7060 %conv1 = zext i8 %off to i64 7061 %or = or i64 %conv1, %ptr 7062 %0 = inttoptr i64 %or to ptr 7063 store i64 %conv, ptr %0, align 8 7064 ret void 7065} 7066 7067; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7068define dso_local void @st_not_disjoint16_int16_t_uint64_t(i64 %ptr, i16 signext %str) { 7069; CHECK-LABEL: st_not_disjoint16_int16_t_uint64_t: 7070; CHECK: # %bb.0: # %entry 7071; CHECK-NEXT: ori r3, r3, 6 7072; CHECK-NEXT: std r4, 0(r3) 7073; CHECK-NEXT: blr 7074entry: 7075 %conv = sext i16 %str to i64 7076 %or = or i64 %ptr, 6 7077 %0 = inttoptr i64 %or to ptr 7078 store i64 %conv, ptr %0, align 8 7079 ret void 7080} 7081 7082; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7083define dso_local void @st_disjoint_align16_int16_t_uint64_t(i64 %ptr, i16 signext %str) { 7084; CHECK-LABEL: st_disjoint_align16_int16_t_uint64_t: 7085; CHECK: # %bb.0: # %entry 7086; CHECK-NEXT: rldicr r3, r3, 0, 51 7087; CHECK-NEXT: std r4, 24(r3) 7088; CHECK-NEXT: blr 7089entry: 7090 %and = and i64 %ptr, -4096 7091 %conv = sext i16 %str to i64 7092 %or = or i64 %and, 24 7093 %0 = inttoptr i64 %or to ptr 7094 store i64 %conv, ptr %0, align 8 7095 ret void 7096} 7097 7098; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7099define dso_local void @st_not_disjoint32_int16_t_uint64_t(i64 %ptr, i16 signext %str) { 7100; CHECK-LABEL: st_not_disjoint32_int16_t_uint64_t: 7101; CHECK: # %bb.0: # %entry 7102; CHECK-NEXT: ori r3, r3, 34463 7103; CHECK-NEXT: oris r3, r3, 1 7104; CHECK-NEXT: std r4, 0(r3) 7105; CHECK-NEXT: blr 7106entry: 7107 %conv = sext i16 %str to i64 7108 %or = or i64 %ptr, 99999 7109 %0 = inttoptr i64 %or to ptr 7110 store i64 %conv, ptr %0, align 8 7111 ret void 7112} 7113 7114; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7115define dso_local void @st_disjoint_align32_int16_t_uint64_t(i64 %ptr, i16 signext %str) { 7116; CHECK-P10-LABEL: st_disjoint_align32_int16_t_uint64_t: 7117; CHECK-P10: # %bb.0: # %entry 7118; CHECK-P10-NEXT: lis r5, -15264 7119; CHECK-P10-NEXT: and r3, r3, r5 7120; CHECK-P10-NEXT: pstd r4, 999990000(r3), 0 7121; CHECK-P10-NEXT: blr 7122; 7123; CHECK-PREP10-LABEL: st_disjoint_align32_int16_t_uint64_t: 7124; CHECK-PREP10: # %bb.0: # %entry 7125; CHECK-PREP10-NEXT: lis r5, -15264 7126; CHECK-PREP10-NEXT: and r3, r3, r5 7127; CHECK-PREP10-NEXT: lis r5, 15258 7128; CHECK-PREP10-NEXT: ori r5, r5, 41712 7129; CHECK-PREP10-NEXT: stdx r4, r3, r5 7130; CHECK-PREP10-NEXT: blr 7131entry: 7132 %and = and i64 %ptr, -1000341504 7133 %conv = sext i16 %str to i64 7134 %or = or i64 %and, 999990000 7135 %0 = inttoptr i64 %or to ptr 7136 store i64 %conv, ptr %0, align 16 7137 ret void 7138} 7139 7140; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7141define dso_local void @st_not_disjoint64_int16_t_uint64_t(i64 %ptr, i16 signext %str) { 7142; CHECK-P10-LABEL: st_not_disjoint64_int16_t_uint64_t: 7143; CHECK-P10: # %bb.0: # %entry 7144; CHECK-P10-NEXT: pli r5, 232 7145; CHECK-P10-NEXT: pli r6, 3567587329 7146; CHECK-P10-NEXT: rldimi r6, r5, 32, 0 7147; CHECK-P10-NEXT: or r3, r3, r6 7148; CHECK-P10-NEXT: std r4, 0(r3) 7149; CHECK-P10-NEXT: blr 7150; 7151; CHECK-PREP10-LABEL: st_not_disjoint64_int16_t_uint64_t: 7152; CHECK-PREP10: # %bb.0: # %entry 7153; CHECK-PREP10-NEXT: li r5, 29 7154; CHECK-PREP10-NEXT: rldic r5, r5, 35, 24 7155; CHECK-PREP10-NEXT: oris r5, r5, 54437 7156; CHECK-PREP10-NEXT: ori r5, r5, 4097 7157; CHECK-PREP10-NEXT: or r3, r3, r5 7158; CHECK-PREP10-NEXT: std r4, 0(r3) 7159; CHECK-PREP10-NEXT: blr 7160entry: 7161 %conv = sext i16 %str to i64 7162 %or = or i64 %ptr, 1000000000001 7163 %0 = inttoptr i64 %or to ptr 7164 store i64 %conv, ptr %0, align 8 7165 ret void 7166} 7167 7168; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7169define dso_local void @st_disjoint_align64_int16_t_uint64_t(i64 %ptr, i16 signext %str) { 7170; CHECK-P10-LABEL: st_disjoint_align64_int16_t_uint64_t: 7171; CHECK-P10: # %bb.0: # %entry 7172; CHECK-P10-NEXT: pli r5, 244140625 7173; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7174; CHECK-P10-NEXT: rldic r5, r5, 12, 24 7175; CHECK-P10-NEXT: stdx r4, r3, r5 7176; CHECK-P10-NEXT: blr 7177; 7178; CHECK-PREP10-LABEL: st_disjoint_align64_int16_t_uint64_t: 7179; CHECK-PREP10: # %bb.0: # %entry 7180; CHECK-PREP10-NEXT: lis r5, 3725 7181; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 7182; CHECK-PREP10-NEXT: ori r5, r5, 19025 7183; CHECK-PREP10-NEXT: rldic r5, r5, 12, 24 7184; CHECK-PREP10-NEXT: stdx r4, r3, r5 7185; CHECK-PREP10-NEXT: blr 7186entry: 7187 %and = and i64 %ptr, -1099511627776 7188 %conv = sext i16 %str to i64 7189 %or = or i64 %and, 1000000000000 7190 %0 = inttoptr i64 %or to ptr 7191 store i64 %conv, ptr %0, align 4096 7192 ret void 7193} 7194 7195; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7196define dso_local void @st_cst_align16_int16_t_uint64_t(i16 signext %str) { 7197; CHECK-LABEL: st_cst_align16_int16_t_uint64_t: 7198; CHECK: # %bb.0: # %entry 7199; CHECK-NEXT: std r3, 4080(0) 7200; CHECK-NEXT: blr 7201entry: 7202 %conv = sext i16 %str to i64 7203 store i64 %conv, ptr inttoptr (i64 4080 to ptr), align 16 7204 ret void 7205} 7206 7207; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7208define dso_local void @st_cst_align32_int16_t_uint64_t(i16 signext %str) { 7209; CHECK-LABEL: st_cst_align32_int16_t_uint64_t: 7210; CHECK: # %bb.0: # %entry 7211; CHECK-NEXT: lis r4, 153 7212; CHECK-NEXT: std r3, -27108(r4) 7213; CHECK-NEXT: blr 7214entry: 7215 %conv = sext i16 %str to i64 7216 store i64 %conv, ptr inttoptr (i64 9999900 to ptr), align 8 7217 ret void 7218} 7219 7220; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7221define dso_local void @st_cst_align64_int16_t_uint64_t(i16 signext %str) { 7222; CHECK-P10-LABEL: st_cst_align64_int16_t_uint64_t: 7223; CHECK-P10: # %bb.0: # %entry 7224; CHECK-P10-NEXT: pli r4, 244140625 7225; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7226; CHECK-P10-NEXT: std r3, 0(r4) 7227; CHECK-P10-NEXT: blr 7228; 7229; CHECK-PREP10-LABEL: st_cst_align64_int16_t_uint64_t: 7230; CHECK-PREP10: # %bb.0: # %entry 7231; CHECK-PREP10-NEXT: lis r4, 3725 7232; CHECK-PREP10-NEXT: ori r4, r4, 19025 7233; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 7234; CHECK-PREP10-NEXT: std r3, 0(r4) 7235; CHECK-PREP10-NEXT: blr 7236entry: 7237 %conv = sext i16 %str to i64 7238 store i64 %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 7239 ret void 7240} 7241 7242; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7243define dso_local void @st_0_int16_t_float(i64 %ptr, i16 signext %str) { 7244; CHECK-LABEL: st_0_int16_t_float: 7245; CHECK: # %bb.0: # %entry 7246; CHECK-NEXT: mtfprwa f0, r4 7247; CHECK-NEXT: xscvsxdsp f0, f0 7248; CHECK-NEXT: stfs f0, 0(r3) 7249; CHECK-NEXT: blr 7250entry: 7251 %conv = sitofp i16 %str to float 7252 %0 = inttoptr i64 %ptr to ptr 7253 store float %conv, ptr %0, align 4 7254 ret void 7255} 7256 7257; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7258define dso_local void @st_align16_int16_t_float(ptr nocapture %ptr, i16 signext %str) { 7259; CHECK-LABEL: st_align16_int16_t_float: 7260; CHECK: # %bb.0: # %entry 7261; CHECK-NEXT: mtfprwa f0, r4 7262; CHECK-NEXT: xscvsxdsp f0, f0 7263; CHECK-NEXT: stfs f0, 8(r3) 7264; CHECK-NEXT: blr 7265entry: 7266 %conv = sitofp i16 %str to float 7267 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 7268 store float %conv, ptr %add.ptr, align 4 7269 ret void 7270} 7271 7272; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7273define dso_local void @st_align32_int16_t_float(ptr nocapture %ptr, i16 signext %str) { 7274; CHECK-P10-LABEL: st_align32_int16_t_float: 7275; CHECK-P10: # %bb.0: # %entry 7276; CHECK-P10-NEXT: mtfprwa f0, r4 7277; CHECK-P10-NEXT: xscvsxdsp f0, f0 7278; CHECK-P10-NEXT: pstfs f0, 99999000(r3), 0 7279; CHECK-P10-NEXT: blr 7280; 7281; CHECK-P9-LABEL: st_align32_int16_t_float: 7282; CHECK-P9: # %bb.0: # %entry 7283; CHECK-P9-NEXT: mtfprwa f0, r4 7284; CHECK-P9-NEXT: lis r4, 1525 7285; CHECK-P9-NEXT: xscvsxdsp f0, f0 7286; CHECK-P9-NEXT: ori r4, r4, 56600 7287; CHECK-P9-NEXT: stfsx f0, r3, r4 7288; CHECK-P9-NEXT: blr 7289; 7290; CHECK-P8-LABEL: st_align32_int16_t_float: 7291; CHECK-P8: # %bb.0: # %entry 7292; CHECK-P8-NEXT: mtfprwa f0, r4 7293; CHECK-P8-NEXT: lis r4, 1525 7294; CHECK-P8-NEXT: ori r4, r4, 56600 7295; CHECK-P8-NEXT: xscvsxdsp f0, f0 7296; CHECK-P8-NEXT: stfsx f0, r3, r4 7297; CHECK-P8-NEXT: blr 7298entry: 7299 %conv = sitofp i16 %str to float 7300 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 7301 store float %conv, ptr %add.ptr, align 4 7302 ret void 7303} 7304 7305; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7306define dso_local void @st_align64_int16_t_float(ptr nocapture %ptr, i16 signext %str) { 7307; CHECK-P10-LABEL: st_align64_int16_t_float: 7308; CHECK-P10: # %bb.0: # %entry 7309; CHECK-P10-NEXT: mtfprwa f0, r4 7310; CHECK-P10-NEXT: pli r4, 244140625 7311; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7312; CHECK-P10-NEXT: xscvsxdsp f0, f0 7313; CHECK-P10-NEXT: stfsx f0, r3, r4 7314; CHECK-P10-NEXT: blr 7315; 7316; CHECK-P9-LABEL: st_align64_int16_t_float: 7317; CHECK-P9: # %bb.0: # %entry 7318; CHECK-P9-NEXT: mtfprwa f0, r4 7319; CHECK-P9-NEXT: lis r4, 3725 7320; CHECK-P9-NEXT: xscvsxdsp f0, f0 7321; CHECK-P9-NEXT: ori r4, r4, 19025 7322; CHECK-P9-NEXT: rldic r4, r4, 12, 24 7323; CHECK-P9-NEXT: stfsx f0, r3, r4 7324; CHECK-P9-NEXT: blr 7325; 7326; CHECK-P8-LABEL: st_align64_int16_t_float: 7327; CHECK-P8: # %bb.0: # %entry 7328; CHECK-P8-NEXT: mtfprwa f0, r4 7329; CHECK-P8-NEXT: lis r4, 3725 7330; CHECK-P8-NEXT: ori r4, r4, 19025 7331; CHECK-P8-NEXT: rldic r4, r4, 12, 24 7332; CHECK-P8-NEXT: xscvsxdsp f0, f0 7333; CHECK-P8-NEXT: stfsx f0, r3, r4 7334; CHECK-P8-NEXT: blr 7335entry: 7336 %conv = sitofp i16 %str to float 7337 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 7338 store float %conv, ptr %add.ptr, align 4 7339 ret void 7340} 7341 7342; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7343define dso_local void @st_reg_int16_t_float(ptr nocapture %ptr, i64 %off, i16 signext %str) { 7344; CHECK-LABEL: st_reg_int16_t_float: 7345; CHECK: # %bb.0: # %entry 7346; CHECK-NEXT: mtfprwa f0, r5 7347; CHECK-NEXT: xscvsxdsp f0, f0 7348; CHECK-NEXT: stfsx f0, r3, r4 7349; CHECK-NEXT: blr 7350entry: 7351 %conv = sitofp i16 %str to float 7352 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 7353 store float %conv, ptr %add.ptr, align 4 7354 ret void 7355} 7356 7357; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7358define dso_local void @st_or1_int16_t_float(i64 %ptr, i8 zeroext %off, i16 signext %str) { 7359; CHECK-LABEL: st_or1_int16_t_float: 7360; CHECK: # %bb.0: # %entry 7361; CHECK-NEXT: mtfprwa f0, r5 7362; CHECK-NEXT: or r3, r4, r3 7363; CHECK-NEXT: xscvsxdsp f0, f0 7364; CHECK-NEXT: stfs f0, 0(r3) 7365; CHECK-NEXT: blr 7366entry: 7367 %conv = sitofp i16 %str to float 7368 %conv1 = zext i8 %off to i64 7369 %or = or i64 %conv1, %ptr 7370 %0 = inttoptr i64 %or to ptr 7371 store float %conv, ptr %0, align 4 7372 ret void 7373} 7374 7375; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7376define dso_local void @st_not_disjoint16_int16_t_float(i64 %ptr, i16 signext %str) { 7377; CHECK-LABEL: st_not_disjoint16_int16_t_float: 7378; CHECK: # %bb.0: # %entry 7379; CHECK-NEXT: mtfprwa f0, r4 7380; CHECK-NEXT: ori r3, r3, 6 7381; CHECK-NEXT: xscvsxdsp f0, f0 7382; CHECK-NEXT: stfs f0, 0(r3) 7383; CHECK-NEXT: blr 7384entry: 7385 %conv = sitofp i16 %str to float 7386 %or = or i64 %ptr, 6 7387 %0 = inttoptr i64 %or to ptr 7388 store float %conv, ptr %0, align 4 7389 ret void 7390} 7391 7392; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7393define dso_local void @st_disjoint_align16_int16_t_float(i64 %ptr, i16 signext %str) { 7394; CHECK-LABEL: st_disjoint_align16_int16_t_float: 7395; CHECK: # %bb.0: # %entry 7396; CHECK-NEXT: mtfprwa f0, r4 7397; CHECK-NEXT: rldicr r3, r3, 0, 51 7398; CHECK-NEXT: xscvsxdsp f0, f0 7399; CHECK-NEXT: stfs f0, 24(r3) 7400; CHECK-NEXT: blr 7401entry: 7402 %and = and i64 %ptr, -4096 7403 %conv = sitofp i16 %str to float 7404 %or = or i64 %and, 24 7405 %0 = inttoptr i64 %or to ptr 7406 store float %conv, ptr %0, align 8 7407 ret void 7408} 7409 7410; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7411define dso_local void @st_not_disjoint32_int16_t_float(i64 %ptr, i16 signext %str) { 7412; CHECK-P10-LABEL: st_not_disjoint32_int16_t_float: 7413; CHECK-P10: # %bb.0: # %entry 7414; CHECK-P10-NEXT: mtfprwa f0, r4 7415; CHECK-P10-NEXT: ori r3, r3, 34463 7416; CHECK-P10-NEXT: oris r3, r3, 1 7417; CHECK-P10-NEXT: xscvsxdsp f0, f0 7418; CHECK-P10-NEXT: stfs f0, 0(r3) 7419; CHECK-P10-NEXT: blr 7420; 7421; CHECK-P9-LABEL: st_not_disjoint32_int16_t_float: 7422; CHECK-P9: # %bb.0: # %entry 7423; CHECK-P9-NEXT: mtfprwa f0, r4 7424; CHECK-P9-NEXT: ori r3, r3, 34463 7425; CHECK-P9-NEXT: xscvsxdsp f0, f0 7426; CHECK-P9-NEXT: oris r3, r3, 1 7427; CHECK-P9-NEXT: stfs f0, 0(r3) 7428; CHECK-P9-NEXT: blr 7429; 7430; CHECK-P8-LABEL: st_not_disjoint32_int16_t_float: 7431; CHECK-P8: # %bb.0: # %entry 7432; CHECK-P8-NEXT: mtfprwa f0, r4 7433; CHECK-P8-NEXT: ori r3, r3, 34463 7434; CHECK-P8-NEXT: oris r3, r3, 1 7435; CHECK-P8-NEXT: xscvsxdsp f0, f0 7436; CHECK-P8-NEXT: stfs f0, 0(r3) 7437; CHECK-P8-NEXT: blr 7438entry: 7439 %conv = sitofp i16 %str to float 7440 %or = or i64 %ptr, 99999 7441 %0 = inttoptr i64 %or to ptr 7442 store float %conv, ptr %0, align 4 7443 ret void 7444} 7445 7446; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7447define dso_local void @st_disjoint_align32_int16_t_float(i64 %ptr, i16 signext %str) { 7448; CHECK-P10-LABEL: st_disjoint_align32_int16_t_float: 7449; CHECK-P10: # %bb.0: # %entry 7450; CHECK-P10-NEXT: mtfprwa f0, r4 7451; CHECK-P10-NEXT: lis r5, -15264 7452; CHECK-P10-NEXT: and r3, r3, r5 7453; CHECK-P10-NEXT: xscvsxdsp f0, f0 7454; CHECK-P10-NEXT: pstfs f0, 999990000(r3), 0 7455; CHECK-P10-NEXT: blr 7456; 7457; CHECK-P9-LABEL: st_disjoint_align32_int16_t_float: 7458; CHECK-P9: # %bb.0: # %entry 7459; CHECK-P9-NEXT: mtfprwa f0, r4 7460; CHECK-P9-NEXT: lis r5, -15264 7461; CHECK-P9-NEXT: lis r4, 15258 7462; CHECK-P9-NEXT: xscvsxdsp f0, f0 7463; CHECK-P9-NEXT: and r3, r3, r5 7464; CHECK-P9-NEXT: ori r4, r4, 41712 7465; CHECK-P9-NEXT: stfsx f0, r3, r4 7466; CHECK-P9-NEXT: blr 7467; 7468; CHECK-P8-LABEL: st_disjoint_align32_int16_t_float: 7469; CHECK-P8: # %bb.0: # %entry 7470; CHECK-P8-NEXT: mtfprwa f0, r4 7471; CHECK-P8-NEXT: lis r5, -15264 7472; CHECK-P8-NEXT: lis r4, 15258 7473; CHECK-P8-NEXT: and r3, r3, r5 7474; CHECK-P8-NEXT: ori r4, r4, 41712 7475; CHECK-P8-NEXT: xscvsxdsp f0, f0 7476; CHECK-P8-NEXT: stfsx f0, r3, r4 7477; CHECK-P8-NEXT: blr 7478entry: 7479 %and = and i64 %ptr, -1000341504 7480 %conv = sitofp i16 %str to float 7481 %or = or i64 %and, 999990000 7482 %0 = inttoptr i64 %or to ptr 7483 store float %conv, ptr %0, align 16 7484 ret void 7485} 7486 7487; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7488define dso_local void @st_not_disjoint64_int16_t_float(i64 %ptr, i16 signext %str) { 7489; CHECK-P10-LABEL: st_not_disjoint64_int16_t_float: 7490; CHECK-P10: # %bb.0: # %entry 7491; CHECK-P10-NEXT: mtfprwa f0, r4 7492; CHECK-P10-NEXT: pli r4, 232 7493; CHECK-P10-NEXT: pli r5, 3567587329 7494; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 7495; CHECK-P10-NEXT: xscvsxdsp f0, f0 7496; CHECK-P10-NEXT: or r3, r3, r5 7497; CHECK-P10-NEXT: stfs f0, 0(r3) 7498; CHECK-P10-NEXT: blr 7499; 7500; CHECK-P9-LABEL: st_not_disjoint64_int16_t_float: 7501; CHECK-P9: # %bb.0: # %entry 7502; CHECK-P9-NEXT: mtfprwa f0, r4 7503; CHECK-P9-NEXT: li r4, 29 7504; CHECK-P9-NEXT: rldic r4, r4, 35, 24 7505; CHECK-P9-NEXT: xscvsxdsp f0, f0 7506; CHECK-P9-NEXT: oris r4, r4, 54437 7507; CHECK-P9-NEXT: ori r4, r4, 4097 7508; CHECK-P9-NEXT: or r3, r3, r4 7509; CHECK-P9-NEXT: stfs f0, 0(r3) 7510; CHECK-P9-NEXT: blr 7511; 7512; CHECK-P8-LABEL: st_not_disjoint64_int16_t_float: 7513; CHECK-P8: # %bb.0: # %entry 7514; CHECK-P8-NEXT: mtfprwa f0, r4 7515; CHECK-P8-NEXT: li r4, 29 7516; CHECK-P8-NEXT: rldic r4, r4, 35, 24 7517; CHECK-P8-NEXT: oris r4, r4, 54437 7518; CHECK-P8-NEXT: xscvsxdsp f0, f0 7519; CHECK-P8-NEXT: ori r4, r4, 4097 7520; CHECK-P8-NEXT: or r3, r3, r4 7521; CHECK-P8-NEXT: stfs f0, 0(r3) 7522; CHECK-P8-NEXT: blr 7523entry: 7524 %conv = sitofp i16 %str to float 7525 %or = or i64 %ptr, 1000000000001 7526 %0 = inttoptr i64 %or to ptr 7527 store float %conv, ptr %0, align 4 7528 ret void 7529} 7530 7531 7532; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7533define dso_local void @st_disjoint_align64_int16_t_float(i64 %ptr, i16 signext %str) { 7534; CHECK-P10-LABEL: st_disjoint_align64_int16_t_float: 7535; CHECK-P10: # %bb.0: # %entry 7536; CHECK-P10-NEXT: mtfprwa f0, r4 7537; CHECK-P10-NEXT: pli r4, 244140625 7538; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7539; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7540; CHECK-P10-NEXT: xscvsxdsp f0, f0 7541; CHECK-P10-NEXT: stfsx f0, r3, r4 7542; CHECK-P10-NEXT: blr 7543; 7544; CHECK-P9-LABEL: st_disjoint_align64_int16_t_float: 7545; CHECK-P9: # %bb.0: # %entry 7546; CHECK-P9-NEXT: mtfprwa f0, r4 7547; CHECK-P9-NEXT: lis r4, 3725 7548; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 7549; CHECK-P9-NEXT: xscvsxdsp f0, f0 7550; CHECK-P9-NEXT: ori r4, r4, 19025 7551; CHECK-P9-NEXT: rldic r4, r4, 12, 24 7552; CHECK-P9-NEXT: stfsx f0, r3, r4 7553; CHECK-P9-NEXT: blr 7554; 7555; CHECK-P8-LABEL: st_disjoint_align64_int16_t_float: 7556; CHECK-P8: # %bb.0: # %entry 7557; CHECK-P8-NEXT: mtfprwa f0, r4 7558; CHECK-P8-NEXT: lis r4, 3725 7559; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 7560; CHECK-P8-NEXT: ori r4, r4, 19025 7561; CHECK-P8-NEXT: rldic r4, r4, 12, 24 7562; CHECK-P8-NEXT: xscvsxdsp f0, f0 7563; CHECK-P8-NEXT: stfsx f0, r3, r4 7564; CHECK-P8-NEXT: blr 7565entry: 7566 %and = and i64 %ptr, -1099511627776 7567 %conv = sitofp i16 %str to float 7568 %or = or i64 %and, 1000000000000 7569 %0 = inttoptr i64 %or to ptr 7570 store float %conv, ptr %0, align 4096 7571 ret void 7572} 7573 7574; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7575define dso_local void @st_cst_align16_int16_t_float(i16 signext %str) { 7576; CHECK-LABEL: st_cst_align16_int16_t_float: 7577; CHECK: # %bb.0: # %entry 7578; CHECK-NEXT: mtfprwa f0, r3 7579; CHECK-NEXT: xscvsxdsp f0, f0 7580; CHECK-NEXT: stfs f0, 4080(0) 7581; CHECK-NEXT: blr 7582entry: 7583 %conv = sitofp i16 %str to float 7584 store float %conv, ptr inttoptr (i64 4080 to ptr), align 16 7585 ret void 7586} 7587 7588; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7589define dso_local void @st_cst_align32_int16_t_float(i16 signext %str) { 7590; CHECK-LABEL: st_cst_align32_int16_t_float: 7591; CHECK: # %bb.0: # %entry 7592; CHECK-NEXT: mtfprwa f0, r3 7593; CHECK-NEXT: lis r3, 153 7594; CHECK-NEXT: xscvsxdsp f0, f0 7595; CHECK-NEXT: stfs f0, -27108(r3) 7596; CHECK-NEXT: blr 7597entry: 7598 %conv = sitofp i16 %str to float 7599 store float %conv, ptr inttoptr (i64 9999900 to ptr), align 4 7600 ret void 7601} 7602 7603; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7604define dso_local void @st_cst_align64_int16_t_float(i16 signext %str) { 7605; CHECK-P10-LABEL: st_cst_align64_int16_t_float: 7606; CHECK-P10: # %bb.0: # %entry 7607; CHECK-P10-NEXT: mtfprwa f0, r3 7608; CHECK-P10-NEXT: pli r3, 244140625 7609; CHECK-P10-NEXT: rldic r3, r3, 12, 24 7610; CHECK-P10-NEXT: xscvsxdsp f0, f0 7611; CHECK-P10-NEXT: stfs f0, 0(r3) 7612; CHECK-P10-NEXT: blr 7613; 7614; CHECK-P9-LABEL: st_cst_align64_int16_t_float: 7615; CHECK-P9: # %bb.0: # %entry 7616; CHECK-P9-NEXT: mtfprwa f0, r3 7617; CHECK-P9-NEXT: lis r3, 3725 7618; CHECK-P9-NEXT: xscvsxdsp f0, f0 7619; CHECK-P9-NEXT: ori r3, r3, 19025 7620; CHECK-P9-NEXT: rldic r3, r3, 12, 24 7621; CHECK-P9-NEXT: stfs f0, 0(r3) 7622; CHECK-P9-NEXT: blr 7623; 7624; CHECK-P8-LABEL: st_cst_align64_int16_t_float: 7625; CHECK-P8: # %bb.0: # %entry 7626; CHECK-P8-NEXT: mtfprwa f0, r3 7627; CHECK-P8-NEXT: lis r3, 3725 7628; CHECK-P8-NEXT: ori r3, r3, 19025 7629; CHECK-P8-NEXT: rldic r3, r3, 12, 24 7630; CHECK-P8-NEXT: xscvsxdsp f0, f0 7631; CHECK-P8-NEXT: stfs f0, 0(r3) 7632; CHECK-P8-NEXT: blr 7633entry: 7634 %conv = sitofp i16 %str to float 7635 store float %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 7636 ret void 7637} 7638 7639; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7640define dso_local void @st_0_int16_t_double(i64 %ptr, i16 signext %str) { 7641; CHECK-LABEL: st_0_int16_t_double: 7642; CHECK: # %bb.0: # %entry 7643; CHECK-NEXT: mtfprwa f0, r4 7644; CHECK-NEXT: xscvsxddp f0, f0 7645; CHECK-NEXT: stfd f0, 0(r3) 7646; CHECK-NEXT: blr 7647entry: 7648 %conv = sitofp i16 %str to double 7649 %0 = inttoptr i64 %ptr to ptr 7650 store double %conv, ptr %0, align 8 7651 ret void 7652} 7653 7654; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7655define dso_local void @st_align16_int16_t_double(ptr nocapture %ptr, i16 signext %str) { 7656; CHECK-LABEL: st_align16_int16_t_double: 7657; CHECK: # %bb.0: # %entry 7658; CHECK-NEXT: mtfprwa f0, r4 7659; CHECK-NEXT: xscvsxddp f0, f0 7660; CHECK-NEXT: stfd f0, 8(r3) 7661; CHECK-NEXT: blr 7662entry: 7663 %conv = sitofp i16 %str to double 7664 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 8 7665 store double %conv, ptr %add.ptr, align 8 7666 ret void 7667} 7668 7669; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7670define dso_local void @st_align32_int16_t_double(ptr nocapture %ptr, i16 signext %str) { 7671; CHECK-P10-LABEL: st_align32_int16_t_double: 7672; CHECK-P10: # %bb.0: # %entry 7673; CHECK-P10-NEXT: mtfprwa f0, r4 7674; CHECK-P10-NEXT: xscvsxddp f0, f0 7675; CHECK-P10-NEXT: pstfd f0, 99999000(r3), 0 7676; CHECK-P10-NEXT: blr 7677; 7678; CHECK-P9-LABEL: st_align32_int16_t_double: 7679; CHECK-P9: # %bb.0: # %entry 7680; CHECK-P9-NEXT: mtfprwa f0, r4 7681; CHECK-P9-NEXT: lis r4, 1525 7682; CHECK-P9-NEXT: xscvsxddp f0, f0 7683; CHECK-P9-NEXT: ori r4, r4, 56600 7684; CHECK-P9-NEXT: stfdx f0, r3, r4 7685; CHECK-P9-NEXT: blr 7686; 7687; CHECK-P8-LABEL: st_align32_int16_t_double: 7688; CHECK-P8: # %bb.0: # %entry 7689; CHECK-P8-NEXT: mtfprwa f0, r4 7690; CHECK-P8-NEXT: lis r4, 1525 7691; CHECK-P8-NEXT: ori r4, r4, 56600 7692; CHECK-P8-NEXT: xscvsxddp f0, f0 7693; CHECK-P8-NEXT: stfdx f0, r3, r4 7694; CHECK-P8-NEXT: blr 7695entry: 7696 %conv = sitofp i16 %str to double 7697 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 99999000 7698 store double %conv, ptr %add.ptr, align 8 7699 ret void 7700} 7701 7702; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7703define dso_local void @st_align64_int16_t_double(ptr nocapture %ptr, i16 signext %str) { 7704; CHECK-P10-LABEL: st_align64_int16_t_double: 7705; CHECK-P10: # %bb.0: # %entry 7706; CHECK-P10-NEXT: mtfprwa f0, r4 7707; CHECK-P10-NEXT: pli r4, 244140625 7708; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7709; CHECK-P10-NEXT: xscvsxddp f0, f0 7710; CHECK-P10-NEXT: stfdx f0, r3, r4 7711; CHECK-P10-NEXT: blr 7712; 7713; CHECK-P9-LABEL: st_align64_int16_t_double: 7714; CHECK-P9: # %bb.0: # %entry 7715; CHECK-P9-NEXT: mtfprwa f0, r4 7716; CHECK-P9-NEXT: lis r4, 3725 7717; CHECK-P9-NEXT: xscvsxddp f0, f0 7718; CHECK-P9-NEXT: ori r4, r4, 19025 7719; CHECK-P9-NEXT: rldic r4, r4, 12, 24 7720; CHECK-P9-NEXT: stfdx f0, r3, r4 7721; CHECK-P9-NEXT: blr 7722; 7723; CHECK-P8-LABEL: st_align64_int16_t_double: 7724; CHECK-P8: # %bb.0: # %entry 7725; CHECK-P8-NEXT: mtfprwa f0, r4 7726; CHECK-P8-NEXT: lis r4, 3725 7727; CHECK-P8-NEXT: ori r4, r4, 19025 7728; CHECK-P8-NEXT: rldic r4, r4, 12, 24 7729; CHECK-P8-NEXT: xscvsxddp f0, f0 7730; CHECK-P8-NEXT: stfdx f0, r3, r4 7731; CHECK-P8-NEXT: blr 7732entry: 7733 %conv = sitofp i16 %str to double 7734 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 1000000000000 7735 store double %conv, ptr %add.ptr, align 8 7736 ret void 7737} 7738 7739; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7740define dso_local void @st_reg_int16_t_double(ptr nocapture %ptr, i64 %off, i16 signext %str) { 7741; CHECK-LABEL: st_reg_int16_t_double: 7742; CHECK: # %bb.0: # %entry 7743; CHECK-NEXT: mtfprwa f0, r5 7744; CHECK-NEXT: xscvsxddp f0, f0 7745; CHECK-NEXT: stfdx f0, r3, r4 7746; CHECK-NEXT: blr 7747entry: 7748 %conv = sitofp i16 %str to double 7749 %add.ptr = getelementptr inbounds i8, ptr %ptr, i64 %off 7750 store double %conv, ptr %add.ptr, align 8 7751 ret void 7752} 7753 7754; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7755define dso_local void @st_or1_int16_t_double(i64 %ptr, i8 zeroext %off, i16 signext %str) { 7756; CHECK-LABEL: st_or1_int16_t_double: 7757; CHECK: # %bb.0: # %entry 7758; CHECK-NEXT: mtfprwa f0, r5 7759; CHECK-NEXT: or r3, r4, r3 7760; CHECK-NEXT: xscvsxddp f0, f0 7761; CHECK-NEXT: stfd f0, 0(r3) 7762; CHECK-NEXT: blr 7763entry: 7764 %conv = sitofp i16 %str to double 7765 %conv1 = zext i8 %off to i64 7766 %or = or i64 %conv1, %ptr 7767 %0 = inttoptr i64 %or to ptr 7768 store double %conv, ptr %0, align 8 7769 ret void 7770} 7771 7772; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7773define dso_local void @st_not_disjoint16_int16_t_double(i64 %ptr, i16 signext %str) { 7774; CHECK-LABEL: st_not_disjoint16_int16_t_double: 7775; CHECK: # %bb.0: # %entry 7776; CHECK-NEXT: mtfprwa f0, r4 7777; CHECK-NEXT: ori r3, r3, 6 7778; CHECK-NEXT: xscvsxddp f0, f0 7779; CHECK-NEXT: stfd f0, 0(r3) 7780; CHECK-NEXT: blr 7781entry: 7782 %conv = sitofp i16 %str to double 7783 %or = or i64 %ptr, 6 7784 %0 = inttoptr i64 %or to ptr 7785 store double %conv, ptr %0, align 8 7786 ret void 7787} 7788 7789; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7790define dso_local void @st_disjoint_align16_int16_t_double(i64 %ptr, i16 signext %str) { 7791; CHECK-LABEL: st_disjoint_align16_int16_t_double: 7792; CHECK: # %bb.0: # %entry 7793; CHECK-NEXT: mtfprwa f0, r4 7794; CHECK-NEXT: rldicr r3, r3, 0, 51 7795; CHECK-NEXT: xscvsxddp f0, f0 7796; CHECK-NEXT: stfd f0, 24(r3) 7797; CHECK-NEXT: blr 7798entry: 7799 %and = and i64 %ptr, -4096 7800 %conv = sitofp i16 %str to double 7801 %or = or i64 %and, 24 7802 %0 = inttoptr i64 %or to ptr 7803 store double %conv, ptr %0, align 8 7804 ret void 7805} 7806 7807; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7808define dso_local void @st_not_disjoint32_int16_t_double(i64 %ptr, i16 signext %str) { 7809; CHECK-P10-LABEL: st_not_disjoint32_int16_t_double: 7810; CHECK-P10: # %bb.0: # %entry 7811; CHECK-P10-NEXT: mtfprwa f0, r4 7812; CHECK-P10-NEXT: ori r3, r3, 34463 7813; CHECK-P10-NEXT: oris r3, r3, 1 7814; CHECK-P10-NEXT: xscvsxddp f0, f0 7815; CHECK-P10-NEXT: stfd f0, 0(r3) 7816; CHECK-P10-NEXT: blr 7817; 7818; CHECK-P9-LABEL: st_not_disjoint32_int16_t_double: 7819; CHECK-P9: # %bb.0: # %entry 7820; CHECK-P9-NEXT: mtfprwa f0, r4 7821; CHECK-P9-NEXT: ori r3, r3, 34463 7822; CHECK-P9-NEXT: xscvsxddp f0, f0 7823; CHECK-P9-NEXT: oris r3, r3, 1 7824; CHECK-P9-NEXT: stfd f0, 0(r3) 7825; CHECK-P9-NEXT: blr 7826; 7827; CHECK-P8-LABEL: st_not_disjoint32_int16_t_double: 7828; CHECK-P8: # %bb.0: # %entry 7829; CHECK-P8-NEXT: mtfprwa f0, r4 7830; CHECK-P8-NEXT: ori r3, r3, 34463 7831; CHECK-P8-NEXT: oris r3, r3, 1 7832; CHECK-P8-NEXT: xscvsxddp f0, f0 7833; CHECK-P8-NEXT: stfd f0, 0(r3) 7834; CHECK-P8-NEXT: blr 7835entry: 7836 %conv = sitofp i16 %str to double 7837 %or = or i64 %ptr, 99999 7838 %0 = inttoptr i64 %or to ptr 7839 store double %conv, ptr %0, align 8 7840 ret void 7841} 7842 7843; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7844define dso_local void @st_disjoint_align32_int16_t_double(i64 %ptr, i16 signext %str) { 7845; CHECK-P10-LABEL: st_disjoint_align32_int16_t_double: 7846; CHECK-P10: # %bb.0: # %entry 7847; CHECK-P10-NEXT: mtfprwa f0, r4 7848; CHECK-P10-NEXT: lis r5, -15264 7849; CHECK-P10-NEXT: and r3, r3, r5 7850; CHECK-P10-NEXT: xscvsxddp f0, f0 7851; CHECK-P10-NEXT: pstfd f0, 999990000(r3), 0 7852; CHECK-P10-NEXT: blr 7853; 7854; CHECK-P9-LABEL: st_disjoint_align32_int16_t_double: 7855; CHECK-P9: # %bb.0: # %entry 7856; CHECK-P9-NEXT: mtfprwa f0, r4 7857; CHECK-P9-NEXT: lis r5, -15264 7858; CHECK-P9-NEXT: lis r4, 15258 7859; CHECK-P9-NEXT: xscvsxddp f0, f0 7860; CHECK-P9-NEXT: and r3, r3, r5 7861; CHECK-P9-NEXT: ori r4, r4, 41712 7862; CHECK-P9-NEXT: stfdx f0, r3, r4 7863; CHECK-P9-NEXT: blr 7864; 7865; CHECK-P8-LABEL: st_disjoint_align32_int16_t_double: 7866; CHECK-P8: # %bb.0: # %entry 7867; CHECK-P8-NEXT: mtfprwa f0, r4 7868; CHECK-P8-NEXT: lis r5, -15264 7869; CHECK-P8-NEXT: lis r4, 15258 7870; CHECK-P8-NEXT: and r3, r3, r5 7871; CHECK-P8-NEXT: ori r4, r4, 41712 7872; CHECK-P8-NEXT: xscvsxddp f0, f0 7873; CHECK-P8-NEXT: stfdx f0, r3, r4 7874; CHECK-P8-NEXT: blr 7875entry: 7876 %and = and i64 %ptr, -1000341504 7877 %conv = sitofp i16 %str to double 7878 %or = or i64 %and, 999990000 7879 %0 = inttoptr i64 %or to ptr 7880 store double %conv, ptr %0, align 16 7881 ret void 7882} 7883 7884; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7885define dso_local void @st_not_disjoint64_int16_t_double(i64 %ptr, i16 signext %str) { 7886; CHECK-P10-LABEL: st_not_disjoint64_int16_t_double: 7887; CHECK-P10: # %bb.0: # %entry 7888; CHECK-P10-NEXT: mtfprwa f0, r4 7889; CHECK-P10-NEXT: pli r4, 232 7890; CHECK-P10-NEXT: pli r5, 3567587329 7891; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 7892; CHECK-P10-NEXT: xscvsxddp f0, f0 7893; CHECK-P10-NEXT: or r3, r3, r5 7894; CHECK-P10-NEXT: stfd f0, 0(r3) 7895; CHECK-P10-NEXT: blr 7896; 7897; CHECK-P9-LABEL: st_not_disjoint64_int16_t_double: 7898; CHECK-P9: # %bb.0: # %entry 7899; CHECK-P9-NEXT: mtfprwa f0, r4 7900; CHECK-P9-NEXT: li r4, 29 7901; CHECK-P9-NEXT: rldic r4, r4, 35, 24 7902; CHECK-P9-NEXT: xscvsxddp f0, f0 7903; CHECK-P9-NEXT: oris r4, r4, 54437 7904; CHECK-P9-NEXT: ori r4, r4, 4097 7905; CHECK-P9-NEXT: or r3, r3, r4 7906; CHECK-P9-NEXT: stfd f0, 0(r3) 7907; CHECK-P9-NEXT: blr 7908; 7909; CHECK-P8-LABEL: st_not_disjoint64_int16_t_double: 7910; CHECK-P8: # %bb.0: # %entry 7911; CHECK-P8-NEXT: mtfprwa f0, r4 7912; CHECK-P8-NEXT: li r4, 29 7913; CHECK-P8-NEXT: rldic r4, r4, 35, 24 7914; CHECK-P8-NEXT: oris r4, r4, 54437 7915; CHECK-P8-NEXT: xscvsxddp f0, f0 7916; CHECK-P8-NEXT: ori r4, r4, 4097 7917; CHECK-P8-NEXT: or r3, r3, r4 7918; CHECK-P8-NEXT: stfd f0, 0(r3) 7919; CHECK-P8-NEXT: blr 7920entry: 7921 %conv = sitofp i16 %str to double 7922 %or = or i64 %ptr, 1000000000001 7923 %0 = inttoptr i64 %or to ptr 7924 store double %conv, ptr %0, align 8 7925 ret void 7926} 7927 7928; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7929define dso_local void @st_disjoint_align64_int16_t_double(i64 %ptr, i16 signext %str) { 7930; CHECK-P10-LABEL: st_disjoint_align64_int16_t_double: 7931; CHECK-P10: # %bb.0: # %entry 7932; CHECK-P10-NEXT: mtfprwa f0, r4 7933; CHECK-P10-NEXT: pli r4, 244140625 7934; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7935; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7936; CHECK-P10-NEXT: xscvsxddp f0, f0 7937; CHECK-P10-NEXT: stfdx f0, r3, r4 7938; CHECK-P10-NEXT: blr 7939; 7940; CHECK-P9-LABEL: st_disjoint_align64_int16_t_double: 7941; CHECK-P9: # %bb.0: # %entry 7942; CHECK-P9-NEXT: mtfprwa f0, r4 7943; CHECK-P9-NEXT: lis r4, 3725 7944; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 7945; CHECK-P9-NEXT: xscvsxddp f0, f0 7946; CHECK-P9-NEXT: ori r4, r4, 19025 7947; CHECK-P9-NEXT: rldic r4, r4, 12, 24 7948; CHECK-P9-NEXT: stfdx f0, r3, r4 7949; CHECK-P9-NEXT: blr 7950; 7951; CHECK-P8-LABEL: st_disjoint_align64_int16_t_double: 7952; CHECK-P8: # %bb.0: # %entry 7953; CHECK-P8-NEXT: mtfprwa f0, r4 7954; CHECK-P8-NEXT: lis r4, 3725 7955; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 7956; CHECK-P8-NEXT: ori r4, r4, 19025 7957; CHECK-P8-NEXT: rldic r4, r4, 12, 24 7958; CHECK-P8-NEXT: xscvsxddp f0, f0 7959; CHECK-P8-NEXT: stfdx f0, r3, r4 7960; CHECK-P8-NEXT: blr 7961entry: 7962 %and = and i64 %ptr, -1099511627776 7963 %conv = sitofp i16 %str to double 7964 %or = or i64 %and, 1000000000000 7965 %0 = inttoptr i64 %or to ptr 7966 store double %conv, ptr %0, align 4096 7967 ret void 7968} 7969 7970; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7971define dso_local void @st_cst_align16_int16_t_double(i16 signext %str) { 7972; CHECK-LABEL: st_cst_align16_int16_t_double: 7973; CHECK: # %bb.0: # %entry 7974; CHECK-NEXT: mtfprwa f0, r3 7975; CHECK-NEXT: xscvsxddp f0, f0 7976; CHECK-NEXT: stfd f0, 4080(0) 7977; CHECK-NEXT: blr 7978entry: 7979 %conv = sitofp i16 %str to double 7980 store double %conv, ptr inttoptr (i64 4080 to ptr), align 16 7981 ret void 7982} 7983 7984; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7985define dso_local void @st_cst_align32_int16_t_double(i16 signext %str) { 7986; CHECK-LABEL: st_cst_align32_int16_t_double: 7987; CHECK: # %bb.0: # %entry 7988; CHECK-NEXT: mtfprwa f0, r3 7989; CHECK-NEXT: lis r3, 153 7990; CHECK-NEXT: xscvsxddp f0, f0 7991; CHECK-NEXT: stfd f0, -27108(r3) 7992; CHECK-NEXT: blr 7993entry: 7994 %conv = sitofp i16 %str to double 7995 store double %conv, ptr inttoptr (i64 9999900 to ptr), align 8 7996 ret void 7997} 7998 7999; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 8000define dso_local void @st_cst_align64_int16_t_double(i16 signext %str) { 8001; CHECK-P10-LABEL: st_cst_align64_int16_t_double: 8002; CHECK-P10: # %bb.0: # %entry 8003; CHECK-P10-NEXT: mtfprwa f0, r3 8004; CHECK-P10-NEXT: pli r3, 244140625 8005; CHECK-P10-NEXT: rldic r3, r3, 12, 24 8006; CHECK-P10-NEXT: xscvsxddp f0, f0 8007; CHECK-P10-NEXT: stfd f0, 0(r3) 8008; CHECK-P10-NEXT: blr 8009; 8010; CHECK-P9-LABEL: st_cst_align64_int16_t_double: 8011; CHECK-P9: # %bb.0: # %entry 8012; CHECK-P9-NEXT: mtfprwa f0, r3 8013; CHECK-P9-NEXT: lis r3, 3725 8014; CHECK-P9-NEXT: xscvsxddp f0, f0 8015; CHECK-P9-NEXT: ori r3, r3, 19025 8016; CHECK-P9-NEXT: rldic r3, r3, 12, 24 8017; CHECK-P9-NEXT: stfd f0, 0(r3) 8018; CHECK-P9-NEXT: blr 8019; 8020; CHECK-P8-LABEL: st_cst_align64_int16_t_double: 8021; CHECK-P8: # %bb.0: # %entry 8022; CHECK-P8-NEXT: mtfprwa f0, r3 8023; CHECK-P8-NEXT: lis r3, 3725 8024; CHECK-P8-NEXT: ori r3, r3, 19025 8025; CHECK-P8-NEXT: rldic r3, r3, 12, 24 8026; CHECK-P8-NEXT: xscvsxddp f0, f0 8027; CHECK-P8-NEXT: stfd f0, 0(r3) 8028; CHECK-P8-NEXT: blr 8029entry: 8030 %conv = sitofp i16 %str to double 8031 store double %conv, ptr inttoptr (i64 1000000000000 to ptr), align 4096 8032 ret void 8033} 8034