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