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