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-POSTP8-LABEL: ld_0_float_uint64_t: 2489; CHECK-POSTP8: # %bb.0: # %entry 2490; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 2491; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0 2492; CHECK-POSTP8-NEXT: blr 2493; 2494; CHECK-P8-LABEL: ld_0_float_uint64_t: 2495; CHECK-P8: # %bb.0: # %entry 2496; CHECK-P8-NEXT: lfdx f0, 0, r3 2497; CHECK-P8-NEXT: xscvuxdsp f1, f0 2498; CHECK-P8-NEXT: blr 2499entry: 2500 %0 = inttoptr i64 %ptr to i64* 2501 %1 = load i64, i64* %0, align 8 2502 %conv = uitofp i64 %1 to float 2503 ret float %conv 2504} 2505 2506; Function Attrs: norecurse nounwind readonly uwtable willreturn 2507define dso_local float @ld_align16_float_uint64_t(i8* nocapture readonly %ptr) { 2508; CHECK-LABEL: ld_align16_float_uint64_t: 2509; CHECK: # %bb.0: # %entry 2510; CHECK-NEXT: lfd f0, 8(r3) 2511; CHECK-NEXT: xscvuxdsp f1, f0 2512; CHECK-NEXT: blr 2513entry: 2514 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 2515 %0 = bitcast i8* %add.ptr to i64* 2516 %1 = load i64, i64* %0, align 8 2517 %conv = uitofp i64 %1 to float 2518 ret float %conv 2519} 2520 2521; Function Attrs: norecurse nounwind readonly uwtable willreturn 2522define dso_local float @ld_align32_float_uint64_t(i8* nocapture readonly %ptr) { 2523; CHECK-P10-LABEL: ld_align32_float_uint64_t: 2524; CHECK-P10: # %bb.0: # %entry 2525; CHECK-P10-NEXT: pli r4, 99999000 2526; CHECK-P10-NEXT: lfdx f0, r3, r4 2527; CHECK-P10-NEXT: xscvuxdsp f1, f0 2528; CHECK-P10-NEXT: blr 2529; 2530; CHECK-PREP10-LABEL: ld_align32_float_uint64_t: 2531; CHECK-PREP10: # %bb.0: # %entry 2532; CHECK-PREP10-NEXT: lis r4, 1525 2533; CHECK-PREP10-NEXT: ori r4, r4, 56600 2534; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2535; CHECK-PREP10-NEXT: xscvuxdsp f1, f0 2536; CHECK-PREP10-NEXT: blr 2537entry: 2538 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 2539 %0 = bitcast i8* %add.ptr to i64* 2540 %1 = load i64, i64* %0, align 8 2541 %conv = uitofp i64 %1 to float 2542 ret float %conv 2543} 2544 2545; Function Attrs: norecurse nounwind readonly uwtable willreturn 2546define dso_local float @ld_align64_float_uint64_t(i8* nocapture readonly %ptr) { 2547; CHECK-P10-LABEL: ld_align64_float_uint64_t: 2548; CHECK-P10: # %bb.0: # %entry 2549; CHECK-P10-NEXT: pli r4, 244140625 2550; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2551; CHECK-P10-NEXT: lfdx f0, r3, r4 2552; CHECK-P10-NEXT: xscvuxdsp f1, f0 2553; CHECK-P10-NEXT: blr 2554; 2555; CHECK-PREP10-LABEL: ld_align64_float_uint64_t: 2556; CHECK-PREP10: # %bb.0: # %entry 2557; CHECK-PREP10-NEXT: lis r4, 3725 2558; CHECK-PREP10-NEXT: ori r4, r4, 19025 2559; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2560; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2561; CHECK-PREP10-NEXT: xscvuxdsp f1, f0 2562; CHECK-PREP10-NEXT: blr 2563entry: 2564 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 2565 %0 = bitcast i8* %add.ptr to i64* 2566 %1 = load i64, i64* %0, align 8 2567 %conv = uitofp i64 %1 to float 2568 ret float %conv 2569} 2570 2571; Function Attrs: norecurse nounwind readonly uwtable willreturn 2572define dso_local float @ld_reg_float_uint64_t(i8* nocapture readonly %ptr, i64 %off) { 2573; CHECK-LABEL: ld_reg_float_uint64_t: 2574; CHECK: # %bb.0: # %entry 2575; CHECK-NEXT: lfdx f0, r3, r4 2576; CHECK-NEXT: xscvuxdsp f1, f0 2577; CHECK-NEXT: blr 2578entry: 2579 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 2580 %0 = bitcast i8* %add.ptr to i64* 2581 %1 = load i64, i64* %0, align 8 2582 %conv = uitofp i64 %1 to float 2583 ret float %conv 2584} 2585 2586; Function Attrs: norecurse nounwind readonly uwtable willreturn 2587define dso_local float @ld_or_float_uint64_t(i64 %ptr, i8 zeroext %off) { 2588; CHECK-POSTP8-LABEL: ld_or_float_uint64_t: 2589; CHECK-POSTP8: # %bb.0: # %entry 2590; CHECK-POSTP8-NEXT: or r3, r4, r3 2591; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 2592; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0 2593; CHECK-POSTP8-NEXT: blr 2594; 2595; CHECK-P8-LABEL: ld_or_float_uint64_t: 2596; CHECK-P8: # %bb.0: # %entry 2597; CHECK-P8-NEXT: or r3, r4, r3 2598; CHECK-P8-NEXT: lfdx f0, 0, r3 2599; CHECK-P8-NEXT: xscvuxdsp f1, f0 2600; CHECK-P8-NEXT: blr 2601entry: 2602 %conv = zext i8 %off to i64 2603 %or = or i64 %conv, %ptr 2604 %0 = inttoptr i64 %or to i64* 2605 %1 = load i64, i64* %0, align 8 2606 %conv1 = uitofp i64 %1 to float 2607 ret float %conv1 2608} 2609 2610; Function Attrs: norecurse nounwind readonly uwtable willreturn 2611define dso_local float @ld_not_disjoint16_float_uint64_t(i64 %ptr) { 2612; CHECK-POSTP8-LABEL: ld_not_disjoint16_float_uint64_t: 2613; CHECK-POSTP8: # %bb.0: # %entry 2614; CHECK-POSTP8-NEXT: ori r3, r3, 6 2615; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 2616; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0 2617; CHECK-POSTP8-NEXT: blr 2618; 2619; CHECK-P8-LABEL: ld_not_disjoint16_float_uint64_t: 2620; CHECK-P8: # %bb.0: # %entry 2621; CHECK-P8-NEXT: ori r3, r3, 6 2622; CHECK-P8-NEXT: lfdx f0, 0, r3 2623; CHECK-P8-NEXT: xscvuxdsp f1, f0 2624; CHECK-P8-NEXT: blr 2625entry: 2626 %or = or i64 %ptr, 6 2627 %0 = inttoptr i64 %or to i64* 2628 %1 = load i64, i64* %0, align 8 2629 %conv = uitofp i64 %1 to float 2630 ret float %conv 2631} 2632 2633; Function Attrs: norecurse nounwind readonly uwtable willreturn 2634define dso_local float @ld_disjoint_align16_float_uint64_t(i64 %ptr) { 2635; CHECK-POSTP8-LABEL: ld_disjoint_align16_float_uint64_t: 2636; CHECK-POSTP8: # %bb.0: # %entry 2637; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 2638; CHECK-POSTP8-NEXT: lfd f0, 24(r3) 2639; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0 2640; CHECK-POSTP8-NEXT: blr 2641; 2642; CHECK-P8-LABEL: ld_disjoint_align16_float_uint64_t: 2643; CHECK-P8: # %bb.0: # %entry 2644; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 2645; CHECK-P8-NEXT: ori r3, r3, 24 2646; CHECK-P8-NEXT: lfdx f0, 0, r3 2647; CHECK-P8-NEXT: xscvuxdsp f1, f0 2648; CHECK-P8-NEXT: blr 2649entry: 2650 %and = and i64 %ptr, -4096 2651 %or = or i64 %and, 24 2652 %0 = inttoptr i64 %or to i64* 2653 %1 = load i64, i64* %0, align 8 2654 %conv = uitofp i64 %1 to float 2655 ret float %conv 2656} 2657 2658; Function Attrs: norecurse nounwind readonly uwtable willreturn 2659define dso_local float @ld_not_disjoint32_float_uint64_t(i64 %ptr) { 2660; CHECK-POSTP8-LABEL: ld_not_disjoint32_float_uint64_t: 2661; CHECK-POSTP8: # %bb.0: # %entry 2662; CHECK-POSTP8-NEXT: ori r3, r3, 34463 2663; CHECK-POSTP8-NEXT: oris r3, r3, 1 2664; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 2665; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0 2666; CHECK-POSTP8-NEXT: blr 2667; 2668; CHECK-P8-LABEL: ld_not_disjoint32_float_uint64_t: 2669; CHECK-P8: # %bb.0: # %entry 2670; CHECK-P8-NEXT: ori r3, r3, 34463 2671; CHECK-P8-NEXT: oris r3, r3, 1 2672; CHECK-P8-NEXT: lfdx f0, 0, r3 2673; CHECK-P8-NEXT: xscvuxdsp f1, f0 2674; CHECK-P8-NEXT: blr 2675entry: 2676 %or = or i64 %ptr, 99999 2677 %0 = inttoptr i64 %or to i64* 2678 %1 = load i64, i64* %0, align 8 2679 %conv = uitofp i64 %1 to float 2680 ret float %conv 2681} 2682 2683; Function Attrs: norecurse nounwind readonly uwtable willreturn 2684define dso_local float @ld_disjoint_align32_float_uint64_t(i64 %ptr) { 2685; CHECK-P10-LABEL: ld_disjoint_align32_float_uint64_t: 2686; CHECK-P10: # %bb.0: # %entry 2687; CHECK-P10-NEXT: lis r4, -15264 2688; CHECK-P10-NEXT: and r3, r3, r4 2689; CHECK-P10-NEXT: pli r4, 999990000 2690; CHECK-P10-NEXT: lfdx f0, r3, r4 2691; CHECK-P10-NEXT: xscvuxdsp f1, f0 2692; CHECK-P10-NEXT: blr 2693; 2694; CHECK-P9-LABEL: ld_disjoint_align32_float_uint64_t: 2695; CHECK-P9: # %bb.0: # %entry 2696; CHECK-P9-NEXT: lis r4, -15264 2697; CHECK-P9-NEXT: and r3, r3, r4 2698; CHECK-P9-NEXT: lis r4, 15258 2699; CHECK-P9-NEXT: ori r4, r4, 41712 2700; CHECK-P9-NEXT: lfdx f0, r3, r4 2701; CHECK-P9-NEXT: xscvuxdsp f1, f0 2702; CHECK-P9-NEXT: blr 2703; 2704; CHECK-P8-LABEL: ld_disjoint_align32_float_uint64_t: 2705; CHECK-P8: # %bb.0: # %entry 2706; CHECK-P8-NEXT: lis r4, -15264 2707; CHECK-P8-NEXT: lis r5, 15258 2708; CHECK-P8-NEXT: and r3, r3, r4 2709; CHECK-P8-NEXT: ori r4, r5, 41712 2710; CHECK-P8-NEXT: lfdx f0, r3, r4 2711; CHECK-P8-NEXT: xscvuxdsp f1, f0 2712; CHECK-P8-NEXT: blr 2713entry: 2714 %and = and i64 %ptr, -1000341504 2715 %or = or i64 %and, 999990000 2716 %0 = inttoptr i64 %or to i64* 2717 %1 = load i64, i64* %0, align 16 2718 %conv = uitofp i64 %1 to float 2719 ret float %conv 2720} 2721 2722; Function Attrs: norecurse nounwind readonly uwtable willreturn 2723define dso_local float @ld_not_disjoint64_float_uint64_t(i64 %ptr) { 2724; CHECK-P10-LABEL: ld_not_disjoint64_float_uint64_t: 2725; CHECK-P10: # %bb.0: # %entry 2726; CHECK-P10-NEXT: pli r4, 232 2727; CHECK-P10-NEXT: pli r5, 3567587329 2728; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 2729; CHECK-P10-NEXT: or r3, r3, r5 2730; CHECK-P10-NEXT: lfd f0, 0(r3) 2731; CHECK-P10-NEXT: xscvuxdsp f1, f0 2732; CHECK-P10-NEXT: blr 2733; 2734; CHECK-P9-LABEL: ld_not_disjoint64_float_uint64_t: 2735; CHECK-P9: # %bb.0: # %entry 2736; CHECK-P9-NEXT: li r4, 29 2737; CHECK-P9-NEXT: rldic r4, r4, 35, 24 2738; CHECK-P9-NEXT: oris r4, r4, 54437 2739; CHECK-P9-NEXT: ori r4, r4, 4097 2740; CHECK-P9-NEXT: or r3, r3, r4 2741; CHECK-P9-NEXT: lfd f0, 0(r3) 2742; CHECK-P9-NEXT: xscvuxdsp f1, f0 2743; CHECK-P9-NEXT: blr 2744; 2745; CHECK-P8-LABEL: ld_not_disjoint64_float_uint64_t: 2746; CHECK-P8: # %bb.0: # %entry 2747; CHECK-P8-NEXT: li r4, 29 2748; CHECK-P8-NEXT: rldic r4, r4, 35, 24 2749; CHECK-P8-NEXT: oris r4, r4, 54437 2750; CHECK-P8-NEXT: ori r4, r4, 4097 2751; CHECK-P8-NEXT: or r3, r3, r4 2752; CHECK-P8-NEXT: lfdx f0, 0, r3 2753; CHECK-P8-NEXT: xscvuxdsp f1, f0 2754; CHECK-P8-NEXT: blr 2755entry: 2756 %or = or i64 %ptr, 1000000000001 2757 %0 = inttoptr i64 %or to i64* 2758 %1 = load i64, i64* %0, align 8 2759 %conv = uitofp i64 %1 to float 2760 ret float %conv 2761} 2762 2763; Function Attrs: norecurse nounwind readonly uwtable willreturn 2764define dso_local float @ld_disjoint_align64_float_uint64_t(i64 %ptr) { 2765; CHECK-P10-LABEL: ld_disjoint_align64_float_uint64_t: 2766; CHECK-P10: # %bb.0: # %entry 2767; CHECK-P10-NEXT: pli r4, 244140625 2768; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 2769; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2770; CHECK-P10-NEXT: lfdx f0, r3, r4 2771; CHECK-P10-NEXT: xscvuxdsp f1, f0 2772; CHECK-P10-NEXT: blr 2773; 2774; CHECK-PREP10-LABEL: ld_disjoint_align64_float_uint64_t: 2775; CHECK-PREP10: # %bb.0: # %entry 2776; CHECK-PREP10-NEXT: lis r4, 3725 2777; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 2778; CHECK-PREP10-NEXT: ori r4, r4, 19025 2779; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2780; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2781; CHECK-PREP10-NEXT: xscvuxdsp f1, f0 2782; CHECK-PREP10-NEXT: blr 2783entry: 2784 %and = and i64 %ptr, -1099511627776 2785 %or = or i64 %and, 1000000000000 2786 %0 = inttoptr i64 %or to i64* 2787 %1 = load i64, i64* %0, align 4096 2788 %conv = uitofp i64 %1 to float 2789 ret float %conv 2790} 2791 2792; Function Attrs: norecurse nounwind readonly uwtable willreturn 2793define dso_local float @ld_cst_align16_float_uint64_t() { 2794; CHECK-LABEL: ld_cst_align16_float_uint64_t: 2795; CHECK: # %bb.0: # %entry 2796; CHECK-NEXT: lfd f0, 4080(0) 2797; CHECK-NEXT: xscvuxdsp f1, f0 2798; CHECK-NEXT: blr 2799entry: 2800 %0 = load i64, i64* inttoptr (i64 4080 to i64*), align 16 2801 %conv = uitofp i64 %0 to float 2802 ret float %conv 2803} 2804 2805; Function Attrs: norecurse nounwind readonly uwtable willreturn 2806define dso_local float @ld_cst_align32_float_uint64_t() { 2807; CHECK-POSTP8-LABEL: ld_cst_align32_float_uint64_t: 2808; CHECK-POSTP8: # %bb.0: # %entry 2809; CHECK-POSTP8-NEXT: lis r3, 153 2810; CHECK-POSTP8-NEXT: lfd f0, -27108(r3) 2811; CHECK-POSTP8-NEXT: xscvuxdsp f1, f0 2812; CHECK-POSTP8-NEXT: blr 2813; 2814; CHECK-P8-LABEL: ld_cst_align32_float_uint64_t: 2815; CHECK-P8: # %bb.0: # %entry 2816; CHECK-P8-NEXT: lis r3, 152 2817; CHECK-P8-NEXT: ori r3, r3, 38428 2818; CHECK-P8-NEXT: lfdx f0, 0, r3 2819; CHECK-P8-NEXT: xscvuxdsp f1, f0 2820; CHECK-P8-NEXT: blr 2821entry: 2822 %0 = load i64, i64* inttoptr (i64 9999900 to i64*), align 8 2823 %conv = uitofp i64 %0 to float 2824 ret float %conv 2825} 2826 2827; Function Attrs: norecurse nounwind readonly uwtable willreturn 2828define dso_local float @ld_cst_align64_float_uint64_t() { 2829; CHECK-P10-LABEL: ld_cst_align64_float_uint64_t: 2830; CHECK-P10: # %bb.0: # %entry 2831; CHECK-P10-NEXT: pli r3, 244140625 2832; CHECK-P10-NEXT: rldic r3, r3, 12, 24 2833; CHECK-P10-NEXT: lfd f0, 0(r3) 2834; CHECK-P10-NEXT: xscvuxdsp f1, f0 2835; CHECK-P10-NEXT: blr 2836; 2837; CHECK-P9-LABEL: ld_cst_align64_float_uint64_t: 2838; CHECK-P9: # %bb.0: # %entry 2839; CHECK-P9-NEXT: lis r3, 3725 2840; CHECK-P9-NEXT: ori r3, r3, 19025 2841; CHECK-P9-NEXT: rldic r3, r3, 12, 24 2842; CHECK-P9-NEXT: lfd f0, 0(r3) 2843; CHECK-P9-NEXT: xscvuxdsp f1, f0 2844; CHECK-P9-NEXT: blr 2845; 2846; CHECK-P8-LABEL: ld_cst_align64_float_uint64_t: 2847; CHECK-P8: # %bb.0: # %entry 2848; CHECK-P8-NEXT: lis r3, 3725 2849; CHECK-P8-NEXT: ori r3, r3, 19025 2850; CHECK-P8-NEXT: rldic r3, r3, 12, 24 2851; CHECK-P8-NEXT: lfdx f0, 0, r3 2852; CHECK-P8-NEXT: xscvuxdsp f1, f0 2853; CHECK-P8-NEXT: blr 2854entry: 2855 %0 = load i64, i64* inttoptr (i64 1000000000000 to i64*), align 4096 2856 %conv = uitofp i64 %0 to float 2857 ret float %conv 2858} 2859 2860; Function Attrs: norecurse nounwind readonly uwtable willreturn 2861define dso_local float @ld_0_float_int64_t(i64 %ptr) { 2862; CHECK-POSTP8-LABEL: ld_0_float_int64_t: 2863; CHECK-POSTP8: # %bb.0: # %entry 2864; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 2865; CHECK-POSTP8-NEXT: xscvsxdsp f1, f0 2866; CHECK-POSTP8-NEXT: blr 2867; 2868; CHECK-P8-LABEL: ld_0_float_int64_t: 2869; CHECK-P8: # %bb.0: # %entry 2870; CHECK-P8-NEXT: lfdx f0, 0, r3 2871; CHECK-P8-NEXT: xscvsxdsp f1, f0 2872; CHECK-P8-NEXT: blr 2873entry: 2874 %0 = inttoptr i64 %ptr to i64* 2875 %1 = load i64, i64* %0, align 8 2876 %conv = sitofp i64 %1 to float 2877 ret float %conv 2878} 2879 2880; Function Attrs: norecurse nounwind readonly uwtable willreturn 2881define dso_local float @ld_align16_float_int64_t(i8* nocapture readonly %ptr) { 2882; CHECK-LABEL: ld_align16_float_int64_t: 2883; CHECK: # %bb.0: # %entry 2884; CHECK-NEXT: lfd f0, 8(r3) 2885; CHECK-NEXT: xscvsxdsp f1, f0 2886; CHECK-NEXT: blr 2887entry: 2888 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 2889 %0 = bitcast i8* %add.ptr to i64* 2890 %1 = load i64, i64* %0, align 8 2891 %conv = sitofp i64 %1 to float 2892 ret float %conv 2893} 2894 2895; Function Attrs: norecurse nounwind readonly uwtable willreturn 2896define dso_local float @ld_align32_float_int64_t(i8* nocapture readonly %ptr) { 2897; CHECK-P10-LABEL: ld_align32_float_int64_t: 2898; CHECK-P10: # %bb.0: # %entry 2899; CHECK-P10-NEXT: pli r4, 99999000 2900; CHECK-P10-NEXT: lfdx f0, r3, r4 2901; CHECK-P10-NEXT: xscvsxdsp f1, f0 2902; CHECK-P10-NEXT: blr 2903; 2904; CHECK-PREP10-LABEL: ld_align32_float_int64_t: 2905; CHECK-PREP10: # %bb.0: # %entry 2906; CHECK-PREP10-NEXT: lis r4, 1525 2907; CHECK-PREP10-NEXT: ori r4, r4, 56600 2908; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2909; CHECK-PREP10-NEXT: xscvsxdsp f1, f0 2910; CHECK-PREP10-NEXT: blr 2911entry: 2912 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 2913 %0 = bitcast i8* %add.ptr to i64* 2914 %1 = load i64, i64* %0, align 8 2915 %conv = sitofp i64 %1 to float 2916 ret float %conv 2917} 2918 2919; Function Attrs: norecurse nounwind readonly uwtable willreturn 2920define dso_local float @ld_align64_float_int64_t(i8* nocapture readonly %ptr) { 2921; CHECK-P10-LABEL: ld_align64_float_int64_t: 2922; CHECK-P10: # %bb.0: # %entry 2923; CHECK-P10-NEXT: pli r4, 244140625 2924; CHECK-P10-NEXT: rldic r4, r4, 12, 24 2925; CHECK-P10-NEXT: lfdx f0, r3, r4 2926; CHECK-P10-NEXT: xscvsxdsp f1, f0 2927; CHECK-P10-NEXT: blr 2928; 2929; CHECK-PREP10-LABEL: ld_align64_float_int64_t: 2930; CHECK-PREP10: # %bb.0: # %entry 2931; CHECK-PREP10-NEXT: lis r4, 3725 2932; CHECK-PREP10-NEXT: ori r4, r4, 19025 2933; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 2934; CHECK-PREP10-NEXT: lfdx f0, r3, r4 2935; CHECK-PREP10-NEXT: xscvsxdsp f1, f0 2936; CHECK-PREP10-NEXT: blr 2937entry: 2938 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 2939 %0 = bitcast i8* %add.ptr to i64* 2940 %1 = load i64, i64* %0, align 8 2941 %conv = sitofp i64 %1 to float 2942 ret float %conv 2943} 2944 2945; Function Attrs: norecurse nounwind readonly uwtable willreturn 2946define dso_local float @ld_reg_float_int64_t(i8* nocapture readonly %ptr, i64 %off) { 2947; CHECK-LABEL: ld_reg_float_int64_t: 2948; CHECK: # %bb.0: # %entry 2949; CHECK-NEXT: lfdx f0, r3, r4 2950; CHECK-NEXT: xscvsxdsp f1, f0 2951; CHECK-NEXT: blr 2952entry: 2953 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 2954 %0 = bitcast i8* %add.ptr to i64* 2955 %1 = load i64, i64* %0, align 8 2956 %conv = sitofp i64 %1 to float 2957 ret float %conv 2958} 2959 2960; Function Attrs: norecurse nounwind readonly uwtable willreturn 2961define dso_local float @ld_or_float_int64_t(i64 %ptr, i8 zeroext %off) { 2962; CHECK-POSTP8-LABEL: ld_or_float_int64_t: 2963; CHECK-POSTP8: # %bb.0: # %entry 2964; CHECK-POSTP8-NEXT: or r3, r4, r3 2965; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 2966; CHECK-POSTP8-NEXT: xscvsxdsp f1, f0 2967; CHECK-POSTP8-NEXT: blr 2968; 2969; CHECK-P8-LABEL: ld_or_float_int64_t: 2970; CHECK-P8: # %bb.0: # %entry 2971; CHECK-P8-NEXT: or r3, r4, r3 2972; CHECK-P8-NEXT: lfdx f0, 0, r3 2973; CHECK-P8-NEXT: xscvsxdsp f1, f0 2974; CHECK-P8-NEXT: blr 2975entry: 2976 %conv = zext i8 %off to i64 2977 %or = or i64 %conv, %ptr 2978 %0 = inttoptr i64 %or to i64* 2979 %1 = load i64, i64* %0, align 8 2980 %conv1 = sitofp i64 %1 to float 2981 ret float %conv1 2982} 2983 2984; Function Attrs: norecurse nounwind readonly uwtable willreturn 2985define dso_local float @ld_not_disjoint16_float_int64_t(i64 %ptr) { 2986; CHECK-POSTP8-LABEL: ld_not_disjoint16_float_int64_t: 2987; CHECK-POSTP8: # %bb.0: # %entry 2988; CHECK-POSTP8-NEXT: ori r3, r3, 6 2989; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 2990; CHECK-POSTP8-NEXT: xscvsxdsp f1, f0 2991; CHECK-POSTP8-NEXT: blr 2992; 2993; CHECK-P8-LABEL: ld_not_disjoint16_float_int64_t: 2994; CHECK-P8: # %bb.0: # %entry 2995; CHECK-P8-NEXT: ori r3, r3, 6 2996; CHECK-P8-NEXT: lfdx f0, 0, r3 2997; CHECK-P8-NEXT: xscvsxdsp f1, f0 2998; CHECK-P8-NEXT: blr 2999entry: 3000 %or = or i64 %ptr, 6 3001 %0 = inttoptr i64 %or to i64* 3002 %1 = load i64, i64* %0, align 8 3003 %conv = sitofp i64 %1 to float 3004 ret float %conv 3005} 3006 3007; Function Attrs: norecurse nounwind readonly uwtable willreturn 3008define dso_local float @ld_disjoint_align16_float_int64_t(i64 %ptr) { 3009; CHECK-POSTP8-LABEL: ld_disjoint_align16_float_int64_t: 3010; CHECK-POSTP8: # %bb.0: # %entry 3011; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 3012; CHECK-POSTP8-NEXT: lfd f0, 24(r3) 3013; CHECK-POSTP8-NEXT: xscvsxdsp f1, f0 3014; CHECK-POSTP8-NEXT: blr 3015; 3016; CHECK-P8-LABEL: ld_disjoint_align16_float_int64_t: 3017; CHECK-P8: # %bb.0: # %entry 3018; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 3019; CHECK-P8-NEXT: ori r3, r3, 24 3020; CHECK-P8-NEXT: lfdx f0, 0, r3 3021; CHECK-P8-NEXT: xscvsxdsp f1, f0 3022; CHECK-P8-NEXT: blr 3023entry: 3024 %and = and i64 %ptr, -4096 3025 %or = or i64 %and, 24 3026 %0 = inttoptr i64 %or to i64* 3027 %1 = load i64, i64* %0, align 8 3028 %conv = sitofp i64 %1 to float 3029 ret float %conv 3030} 3031 3032; Function Attrs: norecurse nounwind readonly uwtable willreturn 3033define dso_local float @ld_not_disjoint32_float_int64_t(i64 %ptr) { 3034; CHECK-POSTP8-LABEL: ld_not_disjoint32_float_int64_t: 3035; CHECK-POSTP8: # %bb.0: # %entry 3036; CHECK-POSTP8-NEXT: ori r3, r3, 34463 3037; CHECK-POSTP8-NEXT: oris r3, r3, 1 3038; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 3039; CHECK-POSTP8-NEXT: xscvsxdsp f1, f0 3040; CHECK-POSTP8-NEXT: blr 3041; 3042; CHECK-P8-LABEL: ld_not_disjoint32_float_int64_t: 3043; CHECK-P8: # %bb.0: # %entry 3044; CHECK-P8-NEXT: ori r3, r3, 34463 3045; CHECK-P8-NEXT: oris r3, r3, 1 3046; CHECK-P8-NEXT: lfdx f0, 0, r3 3047; CHECK-P8-NEXT: xscvsxdsp f1, f0 3048; CHECK-P8-NEXT: blr 3049entry: 3050 %or = or i64 %ptr, 99999 3051 %0 = inttoptr i64 %or to i64* 3052 %1 = load i64, i64* %0, align 8 3053 %conv = sitofp i64 %1 to float 3054 ret float %conv 3055} 3056 3057; Function Attrs: norecurse nounwind readonly uwtable willreturn 3058define dso_local float @ld_disjoint_align32_float_int64_t(i64 %ptr) { 3059; CHECK-P10-LABEL: ld_disjoint_align32_float_int64_t: 3060; CHECK-P10: # %bb.0: # %entry 3061; CHECK-P10-NEXT: lis r4, -15264 3062; CHECK-P10-NEXT: and r3, r3, r4 3063; CHECK-P10-NEXT: pli r4, 999990000 3064; CHECK-P10-NEXT: lfdx f0, r3, r4 3065; CHECK-P10-NEXT: xscvsxdsp f1, f0 3066; CHECK-P10-NEXT: blr 3067; 3068; CHECK-P9-LABEL: ld_disjoint_align32_float_int64_t: 3069; CHECK-P9: # %bb.0: # %entry 3070; CHECK-P9-NEXT: lis r4, -15264 3071; CHECK-P9-NEXT: and r3, r3, r4 3072; CHECK-P9-NEXT: lis r4, 15258 3073; CHECK-P9-NEXT: ori r4, r4, 41712 3074; CHECK-P9-NEXT: lfdx f0, r3, r4 3075; CHECK-P9-NEXT: xscvsxdsp f1, f0 3076; CHECK-P9-NEXT: blr 3077; 3078; CHECK-P8-LABEL: ld_disjoint_align32_float_int64_t: 3079; CHECK-P8: # %bb.0: # %entry 3080; CHECK-P8-NEXT: lis r4, -15264 3081; CHECK-P8-NEXT: lis r5, 15258 3082; CHECK-P8-NEXT: and r3, r3, r4 3083; CHECK-P8-NEXT: ori r4, r5, 41712 3084; CHECK-P8-NEXT: lfdx f0, r3, r4 3085; CHECK-P8-NEXT: xscvsxdsp f1, f0 3086; CHECK-P8-NEXT: blr 3087entry: 3088 %and = and i64 %ptr, -1000341504 3089 %or = or i64 %and, 999990000 3090 %0 = inttoptr i64 %or to i64* 3091 %1 = load i64, i64* %0, align 16 3092 %conv = sitofp i64 %1 to float 3093 ret float %conv 3094} 3095 3096; Function Attrs: norecurse nounwind readonly uwtable willreturn 3097define dso_local float @ld_not_disjoint64_float_int64_t(i64 %ptr) { 3098; CHECK-P10-LABEL: ld_not_disjoint64_float_int64_t: 3099; CHECK-P10: # %bb.0: # %entry 3100; CHECK-P10-NEXT: pli r4, 232 3101; CHECK-P10-NEXT: pli r5, 3567587329 3102; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 3103; CHECK-P10-NEXT: or r3, r3, r5 3104; CHECK-P10-NEXT: lfd f0, 0(r3) 3105; CHECK-P10-NEXT: xscvsxdsp f1, f0 3106; CHECK-P10-NEXT: blr 3107; 3108; CHECK-P9-LABEL: ld_not_disjoint64_float_int64_t: 3109; CHECK-P9: # %bb.0: # %entry 3110; CHECK-P9-NEXT: li r4, 29 3111; CHECK-P9-NEXT: rldic r4, r4, 35, 24 3112; CHECK-P9-NEXT: oris r4, r4, 54437 3113; CHECK-P9-NEXT: ori r4, r4, 4097 3114; CHECK-P9-NEXT: or r3, r3, r4 3115; CHECK-P9-NEXT: lfd f0, 0(r3) 3116; CHECK-P9-NEXT: xscvsxdsp f1, f0 3117; CHECK-P9-NEXT: blr 3118; 3119; CHECK-P8-LABEL: ld_not_disjoint64_float_int64_t: 3120; CHECK-P8: # %bb.0: # %entry 3121; CHECK-P8-NEXT: li r4, 29 3122; CHECK-P8-NEXT: rldic r4, r4, 35, 24 3123; CHECK-P8-NEXT: oris r4, r4, 54437 3124; CHECK-P8-NEXT: ori r4, r4, 4097 3125; CHECK-P8-NEXT: or r3, r3, r4 3126; CHECK-P8-NEXT: lfdx f0, 0, r3 3127; CHECK-P8-NEXT: xscvsxdsp f1, f0 3128; CHECK-P8-NEXT: blr 3129entry: 3130 %or = or i64 %ptr, 1000000000001 3131 %0 = inttoptr i64 %or to i64* 3132 %1 = load i64, i64* %0, align 8 3133 %conv = sitofp i64 %1 to float 3134 ret float %conv 3135} 3136 3137; Function Attrs: norecurse nounwind readonly uwtable willreturn 3138define dso_local float @ld_disjoint_align64_float_int64_t(i64 %ptr) { 3139; CHECK-P10-LABEL: ld_disjoint_align64_float_int64_t: 3140; CHECK-P10: # %bb.0: # %entry 3141; CHECK-P10-NEXT: pli r4, 244140625 3142; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 3143; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3144; CHECK-P10-NEXT: lfdx f0, r3, r4 3145; CHECK-P10-NEXT: xscvsxdsp f1, f0 3146; CHECK-P10-NEXT: blr 3147; 3148; CHECK-PREP10-LABEL: ld_disjoint_align64_float_int64_t: 3149; CHECK-PREP10: # %bb.0: # %entry 3150; CHECK-PREP10-NEXT: lis r4, 3725 3151; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 3152; CHECK-PREP10-NEXT: ori r4, r4, 19025 3153; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3154; CHECK-PREP10-NEXT: lfdx f0, r3, r4 3155; CHECK-PREP10-NEXT: xscvsxdsp f1, f0 3156; CHECK-PREP10-NEXT: blr 3157entry: 3158 %and = and i64 %ptr, -1099511627776 3159 %or = or i64 %and, 1000000000000 3160 %0 = inttoptr i64 %or to i64* 3161 %1 = load i64, i64* %0, align 4096 3162 %conv = sitofp i64 %1 to float 3163 ret float %conv 3164} 3165 3166; Function Attrs: norecurse nounwind readonly uwtable willreturn 3167define dso_local float @ld_cst_align16_float_int64_t() { 3168; CHECK-LABEL: ld_cst_align16_float_int64_t: 3169; CHECK: # %bb.0: # %entry 3170; CHECK-NEXT: lfd f0, 4080(0) 3171; CHECK-NEXT: xscvsxdsp f1, f0 3172; CHECK-NEXT: blr 3173entry: 3174 %0 = load i64, i64* inttoptr (i64 4080 to i64*), align 16 3175 %conv = sitofp i64 %0 to float 3176 ret float %conv 3177} 3178 3179; Function Attrs: norecurse nounwind readonly uwtable willreturn 3180define dso_local float @ld_cst_align32_float_int64_t() { 3181; CHECK-POSTP8-LABEL: ld_cst_align32_float_int64_t: 3182; CHECK-POSTP8: # %bb.0: # %entry 3183; CHECK-POSTP8-NEXT: lis r3, 153 3184; CHECK-POSTP8-NEXT: lfd f0, -27108(r3) 3185; CHECK-POSTP8-NEXT: xscvsxdsp f1, f0 3186; CHECK-POSTP8-NEXT: blr 3187; 3188; CHECK-P8-LABEL: ld_cst_align32_float_int64_t: 3189; CHECK-P8: # %bb.0: # %entry 3190; CHECK-P8-NEXT: lis r3, 152 3191; CHECK-P8-NEXT: ori r3, r3, 38428 3192; CHECK-P8-NEXT: lfdx f0, 0, r3 3193; CHECK-P8-NEXT: xscvsxdsp f1, f0 3194; CHECK-P8-NEXT: blr 3195entry: 3196 %0 = load i64, i64* inttoptr (i64 9999900 to i64*), align 8 3197 %conv = sitofp i64 %0 to float 3198 ret float %conv 3199} 3200 3201; Function Attrs: norecurse nounwind readonly uwtable willreturn 3202define dso_local float @ld_cst_align64_float_int64_t() { 3203; CHECK-P10-LABEL: ld_cst_align64_float_int64_t: 3204; CHECK-P10: # %bb.0: # %entry 3205; CHECK-P10-NEXT: pli r3, 244140625 3206; CHECK-P10-NEXT: rldic r3, r3, 12, 24 3207; CHECK-P10-NEXT: lfd f0, 0(r3) 3208; CHECK-P10-NEXT: xscvsxdsp f1, f0 3209; CHECK-P10-NEXT: blr 3210; 3211; CHECK-P9-LABEL: ld_cst_align64_float_int64_t: 3212; CHECK-P9: # %bb.0: # %entry 3213; CHECK-P9-NEXT: lis r3, 3725 3214; CHECK-P9-NEXT: ori r3, r3, 19025 3215; CHECK-P9-NEXT: rldic r3, r3, 12, 24 3216; CHECK-P9-NEXT: lfd f0, 0(r3) 3217; CHECK-P9-NEXT: xscvsxdsp f1, f0 3218; CHECK-P9-NEXT: blr 3219; 3220; CHECK-P8-LABEL: ld_cst_align64_float_int64_t: 3221; CHECK-P8: # %bb.0: # %entry 3222; CHECK-P8-NEXT: lis r3, 3725 3223; CHECK-P8-NEXT: ori r3, r3, 19025 3224; CHECK-P8-NEXT: rldic r3, r3, 12, 24 3225; CHECK-P8-NEXT: lfdx f0, 0, r3 3226; CHECK-P8-NEXT: xscvsxdsp f1, f0 3227; CHECK-P8-NEXT: blr 3228entry: 3229 %0 = load i64, i64* inttoptr (i64 1000000000000 to i64*), align 4096 3230 %conv = sitofp i64 %0 to float 3231 ret float %conv 3232} 3233 3234; Function Attrs: norecurse nounwind readonly uwtable willreturn 3235define dso_local float @ld_0_float_float(i64 %ptr) { 3236; CHECK-POSTP8-LABEL: ld_0_float_float: 3237; CHECK-POSTP8: # %bb.0: # %entry 3238; CHECK-POSTP8-NEXT: lfs f1, 0(r3) 3239; CHECK-POSTP8-NEXT: blr 3240; 3241; CHECK-P8-LABEL: ld_0_float_float: 3242; CHECK-P8: # %bb.0: # %entry 3243; CHECK-P8-NEXT: lfsx f1, 0, r3 3244; CHECK-P8-NEXT: blr 3245entry: 3246 %0 = inttoptr i64 %ptr to float* 3247 %1 = load float, float* %0, align 4 3248 ret float %1 3249} 3250 3251; Function Attrs: norecurse nounwind readonly uwtable willreturn 3252define dso_local float @ld_align16_float_float(i8* nocapture readonly %ptr) { 3253; CHECK-LABEL: ld_align16_float_float: 3254; CHECK: # %bb.0: # %entry 3255; CHECK-NEXT: lfs f1, 8(r3) 3256; CHECK-NEXT: blr 3257entry: 3258 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 3259 %0 = bitcast i8* %add.ptr to float* 3260 %1 = load float, float* %0, align 4 3261 ret float %1 3262} 3263 3264; Function Attrs: norecurse nounwind readonly uwtable willreturn 3265define dso_local float @ld_align32_float_float(i8* nocapture readonly %ptr) { 3266; CHECK-P10-LABEL: ld_align32_float_float: 3267; CHECK-P10: # %bb.0: # %entry 3268; CHECK-P10-NEXT: pli r4, 99999000 3269; CHECK-P10-NEXT: lfsx f1, r3, r4 3270; CHECK-P10-NEXT: blr 3271; 3272; CHECK-PREP10-LABEL: ld_align32_float_float: 3273; CHECK-PREP10: # %bb.0: # %entry 3274; CHECK-PREP10-NEXT: lis r4, 1525 3275; CHECK-PREP10-NEXT: ori r4, r4, 56600 3276; CHECK-PREP10-NEXT: lfsx f1, r3, r4 3277; CHECK-PREP10-NEXT: blr 3278entry: 3279 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 3280 %0 = bitcast i8* %add.ptr to float* 3281 %1 = load float, float* %0, align 4 3282 ret float %1 3283} 3284 3285; Function Attrs: norecurse nounwind readonly uwtable willreturn 3286define dso_local float @ld_align64_float_float(i8* nocapture readonly %ptr) { 3287; CHECK-P10-LABEL: ld_align64_float_float: 3288; CHECK-P10: # %bb.0: # %entry 3289; CHECK-P10-NEXT: pli r4, 244140625 3290; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3291; CHECK-P10-NEXT: lfsx f1, r3, r4 3292; CHECK-P10-NEXT: blr 3293; 3294; CHECK-PREP10-LABEL: ld_align64_float_float: 3295; CHECK-PREP10: # %bb.0: # %entry 3296; CHECK-PREP10-NEXT: lis r4, 3725 3297; CHECK-PREP10-NEXT: ori r4, r4, 19025 3298; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3299; CHECK-PREP10-NEXT: lfsx f1, r3, r4 3300; CHECK-PREP10-NEXT: blr 3301entry: 3302 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 3303 %0 = bitcast i8* %add.ptr to float* 3304 %1 = load float, float* %0, align 4 3305 ret float %1 3306} 3307 3308; Function Attrs: norecurse nounwind readonly uwtable willreturn 3309define dso_local float @ld_reg_float_float(i8* nocapture readonly %ptr, i64 %off) { 3310; CHECK-LABEL: ld_reg_float_float: 3311; CHECK: # %bb.0: # %entry 3312; CHECK-NEXT: lfsx f1, r3, r4 3313; CHECK-NEXT: blr 3314entry: 3315 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 3316 %0 = bitcast i8* %add.ptr to float* 3317 %1 = load float, float* %0, align 4 3318 ret float %1 3319} 3320 3321; Function Attrs: norecurse nounwind readonly uwtable willreturn 3322define dso_local float @ld_or_float_float(i64 %ptr, i8 zeroext %off) { 3323; CHECK-POSTP8-LABEL: ld_or_float_float: 3324; CHECK-POSTP8: # %bb.0: # %entry 3325; CHECK-POSTP8-NEXT: or r3, r4, r3 3326; CHECK-POSTP8-NEXT: lfs f1, 0(r3) 3327; CHECK-POSTP8-NEXT: blr 3328; 3329; CHECK-P8-LABEL: ld_or_float_float: 3330; CHECK-P8: # %bb.0: # %entry 3331; CHECK-P8-NEXT: or r3, r4, r3 3332; CHECK-P8-NEXT: lfsx f1, 0, r3 3333; CHECK-P8-NEXT: blr 3334entry: 3335 %conv = zext i8 %off to i64 3336 %or = or i64 %conv, %ptr 3337 %0 = inttoptr i64 %or to float* 3338 %1 = load float, float* %0, align 4 3339 ret float %1 3340} 3341 3342; Function Attrs: norecurse nounwind readonly uwtable willreturn 3343define dso_local float @ld_not_disjoint16_float_float(i64 %ptr) { 3344; CHECK-POSTP8-LABEL: ld_not_disjoint16_float_float: 3345; CHECK-POSTP8: # %bb.0: # %entry 3346; CHECK-POSTP8-NEXT: ori r3, r3, 6 3347; CHECK-POSTP8-NEXT: lfs f1, 0(r3) 3348; CHECK-POSTP8-NEXT: blr 3349; 3350; CHECK-P8-LABEL: ld_not_disjoint16_float_float: 3351; CHECK-P8: # %bb.0: # %entry 3352; CHECK-P8-NEXT: ori r3, r3, 6 3353; CHECK-P8-NEXT: lfsx f1, 0, r3 3354; CHECK-P8-NEXT: blr 3355entry: 3356 %or = or i64 %ptr, 6 3357 %0 = inttoptr i64 %or to float* 3358 %1 = load float, float* %0, align 4 3359 ret float %1 3360} 3361 3362; Function Attrs: norecurse nounwind readonly uwtable willreturn 3363define dso_local float @ld_disjoint_align16_float_float(i64 %ptr) { 3364; CHECK-POSTP8-LABEL: ld_disjoint_align16_float_float: 3365; CHECK-POSTP8: # %bb.0: # %entry 3366; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 3367; CHECK-POSTP8-NEXT: lfs f1, 24(r3) 3368; CHECK-POSTP8-NEXT: blr 3369; 3370; CHECK-P8-LABEL: ld_disjoint_align16_float_float: 3371; CHECK-P8: # %bb.0: # %entry 3372; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 3373; CHECK-P8-NEXT: ori r3, r3, 24 3374; CHECK-P8-NEXT: lfsx f1, 0, r3 3375; CHECK-P8-NEXT: blr 3376entry: 3377 %and = and i64 %ptr, -4096 3378 %or = or i64 %and, 24 3379 %0 = inttoptr i64 %or to float* 3380 %1 = load float, float* %0, align 8 3381 ret float %1 3382} 3383 3384; Function Attrs: norecurse nounwind readonly uwtable willreturn 3385define dso_local float @ld_not_disjoint32_float_float(i64 %ptr) { 3386; CHECK-POSTP8-LABEL: ld_not_disjoint32_float_float: 3387; CHECK-POSTP8: # %bb.0: # %entry 3388; CHECK-POSTP8-NEXT: ori r3, r3, 34463 3389; CHECK-POSTP8-NEXT: oris r3, r3, 1 3390; CHECK-POSTP8-NEXT: lfs f1, 0(r3) 3391; CHECK-POSTP8-NEXT: blr 3392; 3393; CHECK-P8-LABEL: ld_not_disjoint32_float_float: 3394; CHECK-P8: # %bb.0: # %entry 3395; CHECK-P8-NEXT: ori r3, r3, 34463 3396; CHECK-P8-NEXT: oris r3, r3, 1 3397; CHECK-P8-NEXT: lfsx f1, 0, r3 3398; CHECK-P8-NEXT: blr 3399entry: 3400 %or = or i64 %ptr, 99999 3401 %0 = inttoptr i64 %or to float* 3402 %1 = load float, float* %0, align 4 3403 ret float %1 3404} 3405 3406; Function Attrs: norecurse nounwind readonly uwtable willreturn 3407define dso_local float @ld_disjoint_align32_float_float(i64 %ptr) { 3408; CHECK-P10-LABEL: ld_disjoint_align32_float_float: 3409; CHECK-P10: # %bb.0: # %entry 3410; CHECK-P10-NEXT: lis r4, -15264 3411; CHECK-P10-NEXT: and r3, r3, r4 3412; CHECK-P10-NEXT: pli r4, 999990000 3413; CHECK-P10-NEXT: lfsx f1, r3, r4 3414; CHECK-P10-NEXT: blr 3415; 3416; CHECK-P9-LABEL: ld_disjoint_align32_float_float: 3417; CHECK-P9: # %bb.0: # %entry 3418; CHECK-P9-NEXT: lis r4, -15264 3419; CHECK-P9-NEXT: and r3, r3, r4 3420; CHECK-P9-NEXT: lis r4, 15258 3421; CHECK-P9-NEXT: ori r4, r4, 41712 3422; CHECK-P9-NEXT: lfsx f1, r3, r4 3423; CHECK-P9-NEXT: blr 3424; 3425; CHECK-P8-LABEL: ld_disjoint_align32_float_float: 3426; CHECK-P8: # %bb.0: # %entry 3427; CHECK-P8-NEXT: lis r4, -15264 3428; CHECK-P8-NEXT: lis r5, 15258 3429; CHECK-P8-NEXT: and r3, r3, r4 3430; CHECK-P8-NEXT: ori r4, r5, 41712 3431; CHECK-P8-NEXT: lfsx f1, r3, r4 3432; CHECK-P8-NEXT: blr 3433entry: 3434 %and = and i64 %ptr, -1000341504 3435 %or = or i64 %and, 999990000 3436 %0 = inttoptr i64 %or to float* 3437 %1 = load float, float* %0, align 16 3438 ret float %1 3439} 3440 3441; Function Attrs: norecurse nounwind readonly uwtable willreturn 3442define dso_local float @ld_not_disjoint64_float_float(i64 %ptr) { 3443; CHECK-P10-LABEL: ld_not_disjoint64_float_float: 3444; CHECK-P10: # %bb.0: # %entry 3445; CHECK-P10-NEXT: pli r4, 232 3446; CHECK-P10-NEXT: pli r5, 3567587329 3447; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 3448; CHECK-P10-NEXT: or r3, r3, r5 3449; CHECK-P10-NEXT: lfs f1, 0(r3) 3450; CHECK-P10-NEXT: blr 3451; 3452; CHECK-P9-LABEL: ld_not_disjoint64_float_float: 3453; CHECK-P9: # %bb.0: # %entry 3454; CHECK-P9-NEXT: li r4, 29 3455; CHECK-P9-NEXT: rldic r4, r4, 35, 24 3456; CHECK-P9-NEXT: oris r4, r4, 54437 3457; CHECK-P9-NEXT: ori r4, r4, 4097 3458; CHECK-P9-NEXT: or r3, r3, r4 3459; CHECK-P9-NEXT: lfs f1, 0(r3) 3460; CHECK-P9-NEXT: blr 3461; 3462; CHECK-P8-LABEL: ld_not_disjoint64_float_float: 3463; CHECK-P8: # %bb.0: # %entry 3464; CHECK-P8-NEXT: li r4, 29 3465; CHECK-P8-NEXT: rldic r4, r4, 35, 24 3466; CHECK-P8-NEXT: oris r4, r4, 54437 3467; CHECK-P8-NEXT: ori r4, r4, 4097 3468; CHECK-P8-NEXT: or r3, r3, r4 3469; CHECK-P8-NEXT: lfsx f1, 0, r3 3470; CHECK-P8-NEXT: blr 3471entry: 3472 %or = or i64 %ptr, 1000000000001 3473 %0 = inttoptr i64 %or to float* 3474 %1 = load float, float* %0, align 4 3475 ret float %1 3476} 3477 3478; Function Attrs: norecurse nounwind readonly uwtable willreturn 3479define dso_local float @ld_disjoint_align64_float_float(i64 %ptr) { 3480; CHECK-P10-LABEL: ld_disjoint_align64_float_float: 3481; CHECK-P10: # %bb.0: # %entry 3482; CHECK-P10-NEXT: pli r4, 244140625 3483; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 3484; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3485; CHECK-P10-NEXT: lfsx f1, r3, r4 3486; CHECK-P10-NEXT: blr 3487; 3488; CHECK-PREP10-LABEL: ld_disjoint_align64_float_float: 3489; CHECK-PREP10: # %bb.0: # %entry 3490; CHECK-PREP10-NEXT: lis r4, 3725 3491; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 3492; CHECK-PREP10-NEXT: ori r4, r4, 19025 3493; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3494; CHECK-PREP10-NEXT: lfsx f1, r3, r4 3495; CHECK-PREP10-NEXT: blr 3496entry: 3497 %and = and i64 %ptr, -1099511627776 3498 %or = or i64 %and, 1000000000000 3499 %0 = inttoptr i64 %or to float* 3500 %1 = load float, float* %0, align 4096 3501 ret float %1 3502} 3503 3504; Function Attrs: norecurse nounwind readonly uwtable willreturn 3505define dso_local float @ld_cst_align16_float_float() { 3506; CHECK-LABEL: ld_cst_align16_float_float: 3507; CHECK: # %bb.0: # %entry 3508; CHECK-NEXT: lfs f1, 4080(0) 3509; CHECK-NEXT: blr 3510entry: 3511 %0 = load float, float* inttoptr (i64 4080 to float*), align 16 3512 ret float %0 3513} 3514 3515; Function Attrs: norecurse nounwind readonly uwtable willreturn 3516define dso_local float @ld_cst_align32_float_float() { 3517; CHECK-POSTP8-LABEL: ld_cst_align32_float_float: 3518; CHECK-POSTP8: # %bb.0: # %entry 3519; CHECK-POSTP8-NEXT: lis r3, 153 3520; CHECK-POSTP8-NEXT: lfs f1, -27108(r3) 3521; CHECK-POSTP8-NEXT: blr 3522; 3523; CHECK-P8-LABEL: ld_cst_align32_float_float: 3524; CHECK-P8: # %bb.0: # %entry 3525; CHECK-P8-NEXT: lis r3, 152 3526; CHECK-P8-NEXT: ori r3, r3, 38428 3527; CHECK-P8-NEXT: lfsx f1, 0, r3 3528; CHECK-P8-NEXT: blr 3529entry: 3530 %0 = load float, float* inttoptr (i64 9999900 to float*), align 4 3531 ret float %0 3532} 3533 3534; Function Attrs: norecurse nounwind readonly uwtable willreturn 3535define dso_local float @ld_cst_align64_float_float() { 3536; CHECK-P10-LABEL: ld_cst_align64_float_float: 3537; CHECK-P10: # %bb.0: # %entry 3538; CHECK-P10-NEXT: pli r3, 244140625 3539; CHECK-P10-NEXT: rldic r3, r3, 12, 24 3540; CHECK-P10-NEXT: lfs f1, 0(r3) 3541; CHECK-P10-NEXT: blr 3542; 3543; CHECK-P9-LABEL: ld_cst_align64_float_float: 3544; CHECK-P9: # %bb.0: # %entry 3545; CHECK-P9-NEXT: lis r3, 3725 3546; CHECK-P9-NEXT: ori r3, r3, 19025 3547; CHECK-P9-NEXT: rldic r3, r3, 12, 24 3548; CHECK-P9-NEXT: lfs f1, 0(r3) 3549; CHECK-P9-NEXT: blr 3550; 3551; CHECK-P8-LABEL: ld_cst_align64_float_float: 3552; CHECK-P8: # %bb.0: # %entry 3553; CHECK-P8-NEXT: lis r3, 3725 3554; CHECK-P8-NEXT: ori r3, r3, 19025 3555; CHECK-P8-NEXT: rldic r3, r3, 12, 24 3556; CHECK-P8-NEXT: lfsx f1, 0, r3 3557; CHECK-P8-NEXT: blr 3558entry: 3559 %0 = load float, float* inttoptr (i64 1000000000000 to float*), align 4096 3560 ret float %0 3561} 3562 3563; Function Attrs: norecurse nounwind readonly uwtable willreturn 3564define dso_local float @ld_0_float_double(i64 %ptr) { 3565; CHECK-POSTP8-LABEL: ld_0_float_double: 3566; CHECK-POSTP8: # %bb.0: # %entry 3567; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 3568; CHECK-POSTP8-NEXT: xsrsp f1, f0 3569; CHECK-POSTP8-NEXT: blr 3570; 3571; CHECK-P8-LABEL: ld_0_float_double: 3572; CHECK-P8: # %bb.0: # %entry 3573; CHECK-P8-NEXT: lfdx f0, 0, r3 3574; CHECK-P8-NEXT: xsrsp f1, f0 3575; CHECK-P8-NEXT: blr 3576entry: 3577 %0 = inttoptr i64 %ptr to double* 3578 %1 = load double, double* %0, align 8 3579 %conv = fptrunc double %1 to float 3580 ret float %conv 3581} 3582 3583; Function Attrs: norecurse nounwind readonly uwtable willreturn 3584define dso_local float @ld_align16_float_double(i8* nocapture readonly %ptr) { 3585; CHECK-LABEL: ld_align16_float_double: 3586; CHECK: # %bb.0: # %entry 3587; CHECK-NEXT: lfd f0, 8(r3) 3588; CHECK-NEXT: xsrsp f1, f0 3589; CHECK-NEXT: blr 3590entry: 3591 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 3592 %0 = bitcast i8* %add.ptr to double* 3593 %1 = load double, double* %0, align 8 3594 %conv = fptrunc double %1 to float 3595 ret float %conv 3596} 3597 3598; Function Attrs: norecurse nounwind readonly uwtable willreturn 3599define dso_local float @ld_align32_float_double(i8* nocapture readonly %ptr) { 3600; CHECK-P10-LABEL: ld_align32_float_double: 3601; CHECK-P10: # %bb.0: # %entry 3602; CHECK-P10-NEXT: pli r4, 99999000 3603; CHECK-P10-NEXT: lfdx f0, r3, r4 3604; CHECK-P10-NEXT: xsrsp f1, f0 3605; CHECK-P10-NEXT: blr 3606; 3607; CHECK-PREP10-LABEL: ld_align32_float_double: 3608; CHECK-PREP10: # %bb.0: # %entry 3609; CHECK-PREP10-NEXT: lis r4, 1525 3610; CHECK-PREP10-NEXT: ori r4, r4, 56600 3611; CHECK-PREP10-NEXT: lfdx f0, r3, r4 3612; CHECK-PREP10-NEXT: xsrsp f1, f0 3613; CHECK-PREP10-NEXT: blr 3614entry: 3615 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 3616 %0 = bitcast i8* %add.ptr to double* 3617 %1 = load double, double* %0, align 8 3618 %conv = fptrunc double %1 to float 3619 ret float %conv 3620} 3621 3622; Function Attrs: norecurse nounwind readonly uwtable willreturn 3623define dso_local float @ld_align64_float_double(i8* nocapture readonly %ptr) { 3624; CHECK-P10-LABEL: ld_align64_float_double: 3625; CHECK-P10: # %bb.0: # %entry 3626; CHECK-P10-NEXT: pli r4, 244140625 3627; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3628; CHECK-P10-NEXT: lfdx f0, r3, r4 3629; CHECK-P10-NEXT: xsrsp f1, f0 3630; CHECK-P10-NEXT: blr 3631; 3632; CHECK-PREP10-LABEL: ld_align64_float_double: 3633; CHECK-PREP10: # %bb.0: # %entry 3634; CHECK-PREP10-NEXT: lis r4, 3725 3635; CHECK-PREP10-NEXT: ori r4, r4, 19025 3636; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3637; CHECK-PREP10-NEXT: lfdx f0, r3, r4 3638; CHECK-PREP10-NEXT: xsrsp f1, f0 3639; CHECK-PREP10-NEXT: blr 3640entry: 3641 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 3642 %0 = bitcast i8* %add.ptr to double* 3643 %1 = load double, double* %0, align 8 3644 %conv = fptrunc double %1 to float 3645 ret float %conv 3646} 3647 3648; Function Attrs: norecurse nounwind readonly uwtable willreturn 3649define dso_local float @ld_reg_float_double(i8* nocapture readonly %ptr, i64 %off) { 3650; CHECK-LABEL: ld_reg_float_double: 3651; CHECK: # %bb.0: # %entry 3652; CHECK-NEXT: lfdx f0, r3, r4 3653; CHECK-NEXT: xsrsp f1, f0 3654; CHECK-NEXT: blr 3655entry: 3656 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 3657 %0 = bitcast i8* %add.ptr to double* 3658 %1 = load double, double* %0, align 8 3659 %conv = fptrunc double %1 to float 3660 ret float %conv 3661} 3662 3663; Function Attrs: norecurse nounwind readonly uwtable willreturn 3664define dso_local float @ld_or_float_double(i64 %ptr, i8 zeroext %off) { 3665; CHECK-POSTP8-LABEL: ld_or_float_double: 3666; CHECK-POSTP8: # %bb.0: # %entry 3667; CHECK-POSTP8-NEXT: or r3, r4, r3 3668; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 3669; CHECK-POSTP8-NEXT: xsrsp f1, f0 3670; CHECK-POSTP8-NEXT: blr 3671; 3672; CHECK-P8-LABEL: ld_or_float_double: 3673; CHECK-P8: # %bb.0: # %entry 3674; CHECK-P8-NEXT: or r3, r4, r3 3675; CHECK-P8-NEXT: lfdx f0, 0, r3 3676; CHECK-P8-NEXT: xsrsp f1, f0 3677; CHECK-P8-NEXT: blr 3678entry: 3679 %conv = zext i8 %off to i64 3680 %or = or i64 %conv, %ptr 3681 %0 = inttoptr i64 %or to double* 3682 %1 = load double, double* %0, align 8 3683 %conv1 = fptrunc double %1 to float 3684 ret float %conv1 3685} 3686 3687; Function Attrs: norecurse nounwind readonly uwtable willreturn 3688define dso_local float @ld_not_disjoint16_float_double(i64 %ptr) { 3689; CHECK-POSTP8-LABEL: ld_not_disjoint16_float_double: 3690; CHECK-POSTP8: # %bb.0: # %entry 3691; CHECK-POSTP8-NEXT: ori r3, r3, 6 3692; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 3693; CHECK-POSTP8-NEXT: xsrsp f1, f0 3694; CHECK-POSTP8-NEXT: blr 3695; 3696; CHECK-P8-LABEL: ld_not_disjoint16_float_double: 3697; CHECK-P8: # %bb.0: # %entry 3698; CHECK-P8-NEXT: ori r3, r3, 6 3699; CHECK-P8-NEXT: lfdx f0, 0, r3 3700; CHECK-P8-NEXT: xsrsp f1, f0 3701; CHECK-P8-NEXT: blr 3702entry: 3703 %or = or i64 %ptr, 6 3704 %0 = inttoptr i64 %or to double* 3705 %1 = load double, double* %0, align 8 3706 %conv = fptrunc double %1 to float 3707 ret float %conv 3708} 3709 3710; Function Attrs: norecurse nounwind readonly uwtable willreturn 3711define dso_local float @ld_disjoint_align16_float_double(i64 %ptr) { 3712; CHECK-POSTP8-LABEL: ld_disjoint_align16_float_double: 3713; CHECK-POSTP8: # %bb.0: # %entry 3714; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 3715; CHECK-POSTP8-NEXT: lfd f0, 24(r3) 3716; CHECK-POSTP8-NEXT: xsrsp f1, f0 3717; CHECK-POSTP8-NEXT: blr 3718; 3719; CHECK-P8-LABEL: ld_disjoint_align16_float_double: 3720; CHECK-P8: # %bb.0: # %entry 3721; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 3722; CHECK-P8-NEXT: ori r3, r3, 24 3723; CHECK-P8-NEXT: lfdx f0, 0, r3 3724; CHECK-P8-NEXT: xsrsp f1, f0 3725; CHECK-P8-NEXT: blr 3726entry: 3727 %and = and i64 %ptr, -4096 3728 %or = or i64 %and, 24 3729 %0 = inttoptr i64 %or to double* 3730 %1 = load double, double* %0, align 8 3731 %conv = fptrunc double %1 to float 3732 ret float %conv 3733} 3734 3735; Function Attrs: norecurse nounwind readonly uwtable willreturn 3736define dso_local float @ld_not_disjoint32_float_double(i64 %ptr) { 3737; CHECK-POSTP8-LABEL: ld_not_disjoint32_float_double: 3738; CHECK-POSTP8: # %bb.0: # %entry 3739; CHECK-POSTP8-NEXT: ori r3, r3, 34463 3740; CHECK-POSTP8-NEXT: oris r3, r3, 1 3741; CHECK-POSTP8-NEXT: lfd f0, 0(r3) 3742; CHECK-POSTP8-NEXT: xsrsp f1, f0 3743; CHECK-POSTP8-NEXT: blr 3744; 3745; CHECK-P8-LABEL: ld_not_disjoint32_float_double: 3746; CHECK-P8: # %bb.0: # %entry 3747; CHECK-P8-NEXT: ori r3, r3, 34463 3748; CHECK-P8-NEXT: oris r3, r3, 1 3749; CHECK-P8-NEXT: lfdx f0, 0, r3 3750; CHECK-P8-NEXT: xsrsp f1, f0 3751; CHECK-P8-NEXT: blr 3752entry: 3753 %or = or i64 %ptr, 99999 3754 %0 = inttoptr i64 %or to double* 3755 %1 = load double, double* %0, align 8 3756 %conv = fptrunc double %1 to float 3757 ret float %conv 3758} 3759 3760; Function Attrs: norecurse nounwind readonly uwtable willreturn 3761define dso_local float @ld_disjoint_align32_float_double(i64 %ptr) { 3762; CHECK-P10-LABEL: ld_disjoint_align32_float_double: 3763; CHECK-P10: # %bb.0: # %entry 3764; CHECK-P10-NEXT: lis r4, -15264 3765; CHECK-P10-NEXT: and r3, r3, r4 3766; CHECK-P10-NEXT: pli r4, 999990000 3767; CHECK-P10-NEXT: lfdx f0, r3, r4 3768; CHECK-P10-NEXT: xsrsp f1, f0 3769; CHECK-P10-NEXT: blr 3770; 3771; CHECK-P9-LABEL: ld_disjoint_align32_float_double: 3772; CHECK-P9: # %bb.0: # %entry 3773; CHECK-P9-NEXT: lis r4, -15264 3774; CHECK-P9-NEXT: and r3, r3, r4 3775; CHECK-P9-NEXT: lis r4, 15258 3776; CHECK-P9-NEXT: ori r4, r4, 41712 3777; CHECK-P9-NEXT: lfdx f0, r3, r4 3778; CHECK-P9-NEXT: xsrsp f1, f0 3779; CHECK-P9-NEXT: blr 3780; 3781; CHECK-P8-LABEL: ld_disjoint_align32_float_double: 3782; CHECK-P8: # %bb.0: # %entry 3783; CHECK-P8-NEXT: lis r4, -15264 3784; CHECK-P8-NEXT: lis r5, 15258 3785; CHECK-P8-NEXT: and r3, r3, r4 3786; CHECK-P8-NEXT: ori r4, r5, 41712 3787; CHECK-P8-NEXT: lfdx f0, r3, r4 3788; CHECK-P8-NEXT: xsrsp f1, f0 3789; CHECK-P8-NEXT: blr 3790entry: 3791 %and = and i64 %ptr, -1000341504 3792 %or = or i64 %and, 999990000 3793 %0 = inttoptr i64 %or to double* 3794 %1 = load double, double* %0, align 16 3795 %conv = fptrunc double %1 to float 3796 ret float %conv 3797} 3798 3799; Function Attrs: norecurse nounwind readonly uwtable willreturn 3800define dso_local float @ld_not_disjoint64_float_double(i64 %ptr) { 3801; CHECK-P10-LABEL: ld_not_disjoint64_float_double: 3802; CHECK-P10: # %bb.0: # %entry 3803; CHECK-P10-NEXT: pli r4, 232 3804; CHECK-P10-NEXT: pli r5, 3567587329 3805; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 3806; CHECK-P10-NEXT: or r3, r3, r5 3807; CHECK-P10-NEXT: lfd f0, 0(r3) 3808; CHECK-P10-NEXT: xsrsp f1, f0 3809; CHECK-P10-NEXT: blr 3810; 3811; CHECK-P9-LABEL: ld_not_disjoint64_float_double: 3812; CHECK-P9: # %bb.0: # %entry 3813; CHECK-P9-NEXT: li r4, 29 3814; CHECK-P9-NEXT: rldic r4, r4, 35, 24 3815; CHECK-P9-NEXT: oris r4, r4, 54437 3816; CHECK-P9-NEXT: ori r4, r4, 4097 3817; CHECK-P9-NEXT: or r3, r3, r4 3818; CHECK-P9-NEXT: lfd f0, 0(r3) 3819; CHECK-P9-NEXT: xsrsp f1, f0 3820; CHECK-P9-NEXT: blr 3821; 3822; CHECK-P8-LABEL: ld_not_disjoint64_float_double: 3823; CHECK-P8: # %bb.0: # %entry 3824; CHECK-P8-NEXT: li r4, 29 3825; CHECK-P8-NEXT: rldic r4, r4, 35, 24 3826; CHECK-P8-NEXT: oris r4, r4, 54437 3827; CHECK-P8-NEXT: ori r4, r4, 4097 3828; CHECK-P8-NEXT: or r3, r3, r4 3829; CHECK-P8-NEXT: lfdx f0, 0, r3 3830; CHECK-P8-NEXT: xsrsp f1, f0 3831; CHECK-P8-NEXT: blr 3832entry: 3833 %or = or i64 %ptr, 1000000000001 3834 %0 = inttoptr i64 %or to double* 3835 %1 = load double, double* %0, align 8 3836 %conv = fptrunc double %1 to float 3837 ret float %conv 3838} 3839 3840; Function Attrs: norecurse nounwind readonly uwtable willreturn 3841define dso_local float @ld_disjoint_align64_float_double(i64 %ptr) { 3842; CHECK-P10-LABEL: ld_disjoint_align64_float_double: 3843; CHECK-P10: # %bb.0: # %entry 3844; CHECK-P10-NEXT: pli r4, 244140625 3845; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 3846; CHECK-P10-NEXT: rldic r4, r4, 12, 24 3847; CHECK-P10-NEXT: lfdx f0, r3, r4 3848; CHECK-P10-NEXT: xsrsp f1, f0 3849; CHECK-P10-NEXT: blr 3850; 3851; CHECK-PREP10-LABEL: ld_disjoint_align64_float_double: 3852; CHECK-PREP10: # %bb.0: # %entry 3853; CHECK-PREP10-NEXT: lis r4, 3725 3854; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 3855; CHECK-PREP10-NEXT: ori r4, r4, 19025 3856; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 3857; CHECK-PREP10-NEXT: lfdx f0, r3, r4 3858; CHECK-PREP10-NEXT: xsrsp f1, f0 3859; CHECK-PREP10-NEXT: blr 3860entry: 3861 %and = and i64 %ptr, -1099511627776 3862 %or = or i64 %and, 1000000000000 3863 %0 = inttoptr i64 %or to double* 3864 %1 = load double, double* %0, align 4096 3865 %conv = fptrunc double %1 to float 3866 ret float %conv 3867} 3868 3869; Function Attrs: norecurse nounwind readonly uwtable willreturn 3870define dso_local float @ld_cst_align16_float_double() { 3871; CHECK-LABEL: ld_cst_align16_float_double: 3872; CHECK: # %bb.0: # %entry 3873; CHECK-NEXT: lfd f0, 4080(0) 3874; CHECK-NEXT: xsrsp f1, f0 3875; CHECK-NEXT: blr 3876entry: 3877 %0 = load double, double* inttoptr (i64 4080 to double*), align 16 3878 %conv = fptrunc double %0 to float 3879 ret float %conv 3880} 3881 3882; Function Attrs: norecurse nounwind readonly uwtable willreturn 3883define dso_local float @ld_cst_align32_float_double() { 3884; CHECK-POSTP8-LABEL: ld_cst_align32_float_double: 3885; CHECK-POSTP8: # %bb.0: # %entry 3886; CHECK-POSTP8-NEXT: lis r3, 153 3887; CHECK-POSTP8-NEXT: lfd f0, -27108(r3) 3888; CHECK-POSTP8-NEXT: xsrsp f1, f0 3889; CHECK-POSTP8-NEXT: blr 3890; 3891; CHECK-P8-LABEL: ld_cst_align32_float_double: 3892; CHECK-P8: # %bb.0: # %entry 3893; CHECK-P8-NEXT: lis r3, 152 3894; CHECK-P8-NEXT: ori r3, r3, 38428 3895; CHECK-P8-NEXT: lfdx f0, 0, r3 3896; CHECK-P8-NEXT: xsrsp f1, f0 3897; CHECK-P8-NEXT: blr 3898entry: 3899 %0 = load double, double* inttoptr (i64 9999900 to double*), align 8 3900 %conv = fptrunc double %0 to float 3901 ret float %conv 3902} 3903 3904; Function Attrs: norecurse nounwind readonly uwtable willreturn 3905define dso_local float @ld_cst_align64_float_double() { 3906; CHECK-P10-LABEL: ld_cst_align64_float_double: 3907; CHECK-P10: # %bb.0: # %entry 3908; CHECK-P10-NEXT: pli r3, 244140625 3909; CHECK-P10-NEXT: rldic r3, r3, 12, 24 3910; CHECK-P10-NEXT: lfd f0, 0(r3) 3911; CHECK-P10-NEXT: xsrsp f1, f0 3912; CHECK-P10-NEXT: blr 3913; 3914; CHECK-P9-LABEL: ld_cst_align64_float_double: 3915; CHECK-P9: # %bb.0: # %entry 3916; CHECK-P9-NEXT: lis r3, 3725 3917; CHECK-P9-NEXT: ori r3, r3, 19025 3918; CHECK-P9-NEXT: rldic r3, r3, 12, 24 3919; CHECK-P9-NEXT: lfd f0, 0(r3) 3920; CHECK-P9-NEXT: xsrsp f1, f0 3921; CHECK-P9-NEXT: blr 3922; 3923; CHECK-P8-LABEL: ld_cst_align64_float_double: 3924; CHECK-P8: # %bb.0: # %entry 3925; CHECK-P8-NEXT: lis r3, 3725 3926; CHECK-P8-NEXT: ori r3, r3, 19025 3927; CHECK-P8-NEXT: rldic r3, r3, 12, 24 3928; CHECK-P8-NEXT: lfdx f0, 0, r3 3929; CHECK-P8-NEXT: xsrsp f1, f0 3930; CHECK-P8-NEXT: blr 3931entry: 3932 %0 = load double, double* inttoptr (i64 1000000000000 to double*), align 4096 3933 %conv = fptrunc double %0 to float 3934 ret float %conv 3935} 3936 3937; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 3938define dso_local void @st_0_float_uint8_t(i64 %ptr, float %str) { 3939; CHECK-POSTP8-LABEL: st_0_float_uint8_t: 3940; CHECK-POSTP8: # %bb.0: # %entry 3941; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 3942; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 3943; CHECK-POSTP8-NEXT: blr 3944; 3945; CHECK-P8-LABEL: st_0_float_uint8_t: 3946; CHECK-P8: # %bb.0: # %entry 3947; CHECK-P8-NEXT: xscvdpsxws f0, f1 3948; CHECK-P8-NEXT: mffprwz r4, f0 3949; CHECK-P8-NEXT: stb r4, 0(r3) 3950; CHECK-P8-NEXT: blr 3951entry: 3952 %conv = fptoui float %str to i8 3953 %0 = inttoptr i64 %ptr to i8* 3954 store i8 %conv, i8* %0, align 1 3955 ret void 3956} 3957 3958; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 3959define dso_local void @st_align16_float_uint8_t(i8* nocapture %ptr, float %str) { 3960; CHECK-POSTP8-LABEL: st_align16_float_uint8_t: 3961; CHECK-POSTP8: # %bb.0: # %entry 3962; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 3963; CHECK-POSTP8-NEXT: addi r3, r3, 8 3964; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 3965; CHECK-POSTP8-NEXT: blr 3966; 3967; CHECK-P8-LABEL: st_align16_float_uint8_t: 3968; CHECK-P8: # %bb.0: # %entry 3969; CHECK-P8-NEXT: xscvdpsxws f0, f1 3970; CHECK-P8-NEXT: mffprwz r4, f0 3971; CHECK-P8-NEXT: stb r4, 8(r3) 3972; CHECK-P8-NEXT: blr 3973entry: 3974 %conv = fptoui float %str to i8 3975 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 3976 store i8 %conv, i8* %add.ptr, align 1 3977 ret void 3978} 3979 3980; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 3981define dso_local void @st_align32_float_uint8_t(i8* nocapture %ptr, float %str) { 3982; CHECK-P10-LABEL: st_align32_float_uint8_t: 3983; CHECK-P10: # %bb.0: # %entry 3984; CHECK-P10-NEXT: xscvdpuxws f0, f1 3985; CHECK-P10-NEXT: pli r4, 99999000 3986; CHECK-P10-NEXT: stxsibx f0, r3, r4 3987; CHECK-P10-NEXT: blr 3988; 3989; CHECK-P9-LABEL: st_align32_float_uint8_t: 3990; CHECK-P9: # %bb.0: # %entry 3991; CHECK-P9-NEXT: xscvdpuxws f0, f1 3992; CHECK-P9-NEXT: lis r4, 1525 3993; CHECK-P9-NEXT: ori r4, r4, 56600 3994; CHECK-P9-NEXT: stxsibx f0, r3, r4 3995; CHECK-P9-NEXT: blr 3996; 3997; CHECK-P8-LABEL: st_align32_float_uint8_t: 3998; CHECK-P8: # %bb.0: # %entry 3999; CHECK-P8-NEXT: xscvdpsxws f0, f1 4000; CHECK-P8-NEXT: lis r4, 1525 4001; CHECK-P8-NEXT: ori r4, r4, 56600 4002; CHECK-P8-NEXT: mffprwz r5, f0 4003; CHECK-P8-NEXT: stbx r5, r3, r4 4004; CHECK-P8-NEXT: blr 4005entry: 4006 %conv = fptoui float %str to i8 4007 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 4008 store i8 %conv, i8* %add.ptr, align 1 4009 ret void 4010} 4011 4012; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4013define dso_local void @st_align64_float_uint8_t(i8* nocapture %ptr, float %str) { 4014; CHECK-P10-LABEL: st_align64_float_uint8_t: 4015; CHECK-P10: # %bb.0: # %entry 4016; CHECK-P10-NEXT: xscvdpuxws f0, f1 4017; CHECK-P10-NEXT: pli r4, 244140625 4018; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4019; CHECK-P10-NEXT: stxsibx f0, r3, r4 4020; CHECK-P10-NEXT: blr 4021; 4022; CHECK-P9-LABEL: st_align64_float_uint8_t: 4023; CHECK-P9: # %bb.0: # %entry 4024; CHECK-P9-NEXT: xscvdpuxws f0, f1 4025; CHECK-P9-NEXT: lis r4, 3725 4026; CHECK-P9-NEXT: ori r4, r4, 19025 4027; CHECK-P9-NEXT: rldic r4, r4, 12, 24 4028; CHECK-P9-NEXT: stxsibx f0, r3, r4 4029; CHECK-P9-NEXT: blr 4030; 4031; CHECK-P8-LABEL: st_align64_float_uint8_t: 4032; CHECK-P8: # %bb.0: # %entry 4033; CHECK-P8-NEXT: xscvdpsxws f0, f1 4034; CHECK-P8-NEXT: lis r4, 3725 4035; CHECK-P8-NEXT: ori r4, r4, 19025 4036; CHECK-P8-NEXT: rldic r4, r4, 12, 24 4037; CHECK-P8-NEXT: mffprwz r5, f0 4038; CHECK-P8-NEXT: stbx r5, r3, r4 4039; CHECK-P8-NEXT: blr 4040entry: 4041 %conv = fptoui float %str to i8 4042 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 4043 store i8 %conv, i8* %add.ptr, align 1 4044 ret void 4045} 4046 4047; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4048define dso_local void @st_reg_float_uint8_t(i8* nocapture %ptr, i64 %off, float %str) { 4049; CHECK-POSTP8-LABEL: st_reg_float_uint8_t: 4050; CHECK-POSTP8: # %bb.0: # %entry 4051; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4052; CHECK-POSTP8-NEXT: stxsibx f0, r3, r4 4053; CHECK-POSTP8-NEXT: blr 4054; 4055; CHECK-P8-LABEL: st_reg_float_uint8_t: 4056; CHECK-P8: # %bb.0: # %entry 4057; CHECK-P8-NEXT: xscvdpsxws f0, f1 4058; CHECK-P8-NEXT: mffprwz r5, f0 4059; CHECK-P8-NEXT: stbx r5, r3, r4 4060; CHECK-P8-NEXT: blr 4061entry: 4062 %conv = fptoui float %str to i8 4063 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 4064 store i8 %conv, i8* %add.ptr, align 1 4065 ret void 4066} 4067 4068; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4069define dso_local void @st_or1_float_uint8_t(i64 %ptr, i8 zeroext %off, float %str) { 4070; CHECK-POSTP8-LABEL: st_or1_float_uint8_t: 4071; CHECK-POSTP8: # %bb.0: # %entry 4072; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4073; CHECK-POSTP8-NEXT: or r3, r4, r3 4074; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4075; CHECK-POSTP8-NEXT: blr 4076; 4077; CHECK-P8-LABEL: st_or1_float_uint8_t: 4078; CHECK-P8: # %bb.0: # %entry 4079; CHECK-P8-NEXT: xscvdpsxws f0, f1 4080; CHECK-P8-NEXT: or r3, r4, r3 4081; CHECK-P8-NEXT: mffprwz r5, f0 4082; CHECK-P8-NEXT: stb r5, 0(r3) 4083; CHECK-P8-NEXT: blr 4084entry: 4085 %conv = fptoui float %str to i8 4086 %conv1 = zext i8 %off to i64 4087 %or = or i64 %conv1, %ptr 4088 %0 = inttoptr i64 %or to i8* 4089 store i8 %conv, i8* %0, align 1 4090 ret void 4091} 4092 4093; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4094define dso_local void @st_not_disjoint16_float_uint8_t(i64 %ptr, float %str) { 4095; CHECK-POSTP8-LABEL: st_not_disjoint16_float_uint8_t: 4096; CHECK-POSTP8: # %bb.0: # %entry 4097; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4098; CHECK-POSTP8-NEXT: ori r3, r3, 6 4099; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4100; CHECK-POSTP8-NEXT: blr 4101; 4102; CHECK-P8-LABEL: st_not_disjoint16_float_uint8_t: 4103; CHECK-P8: # %bb.0: # %entry 4104; CHECK-P8-NEXT: xscvdpsxws f0, f1 4105; CHECK-P8-NEXT: ori r3, r3, 6 4106; CHECK-P8-NEXT: mffprwz r4, f0 4107; CHECK-P8-NEXT: stb r4, 0(r3) 4108; CHECK-P8-NEXT: blr 4109entry: 4110 %conv = fptoui float %str to i8 4111 %or = or i64 %ptr, 6 4112 %0 = inttoptr i64 %or to i8* 4113 store i8 %conv, i8* %0, align 1 4114 ret void 4115} 4116 4117; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4118define dso_local void @st_disjoint_align16_float_uint8_t(i64 %ptr, float %str) { 4119; CHECK-POSTP8-LABEL: st_disjoint_align16_float_uint8_t: 4120; CHECK-POSTP8: # %bb.0: # %entry 4121; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4122; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 4123; CHECK-POSTP8-NEXT: ori r3, r3, 24 4124; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4125; CHECK-POSTP8-NEXT: blr 4126; 4127; CHECK-P8-LABEL: st_disjoint_align16_float_uint8_t: 4128; CHECK-P8: # %bb.0: # %entry 4129; CHECK-P8-NEXT: xscvdpsxws f0, f1 4130; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 4131; CHECK-P8-NEXT: mffprwz r4, f0 4132; CHECK-P8-NEXT: stb r4, 24(r3) 4133; CHECK-P8-NEXT: blr 4134entry: 4135 %and = and i64 %ptr, -4096 4136 %conv = fptoui float %str to i8 4137 %or = or i64 %and, 24 4138 %0 = inttoptr i64 %or to i8* 4139 store i8 %conv, i8* %0, align 8 4140 ret void 4141} 4142 4143; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4144define dso_local void @st_not_disjoint32_float_uint8_t(i64 %ptr, float %str) { 4145; CHECK-POSTP8-LABEL: st_not_disjoint32_float_uint8_t: 4146; CHECK-POSTP8: # %bb.0: # %entry 4147; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4148; CHECK-POSTP8-NEXT: ori r3, r3, 34463 4149; CHECK-POSTP8-NEXT: oris r3, r3, 1 4150; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4151; CHECK-POSTP8-NEXT: blr 4152; 4153; CHECK-P8-LABEL: st_not_disjoint32_float_uint8_t: 4154; CHECK-P8: # %bb.0: # %entry 4155; CHECK-P8-NEXT: xscvdpsxws f0, f1 4156; CHECK-P8-NEXT: ori r3, r3, 34463 4157; CHECK-P8-NEXT: oris r3, r3, 1 4158; CHECK-P8-NEXT: mffprwz r4, f0 4159; CHECK-P8-NEXT: stb r4, 0(r3) 4160; CHECK-P8-NEXT: blr 4161entry: 4162 %conv = fptoui float %str to i8 4163 %or = or i64 %ptr, 99999 4164 %0 = inttoptr i64 %or to i8* 4165 store i8 %conv, i8* %0, align 1 4166 ret void 4167} 4168 4169; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4170define dso_local void @st_disjoint_align32_float_uint8_t(i64 %ptr, float %str) { 4171; CHECK-P10-LABEL: st_disjoint_align32_float_uint8_t: 4172; CHECK-P10: # %bb.0: # %entry 4173; CHECK-P10-NEXT: xscvdpuxws f0, f1 4174; CHECK-P10-NEXT: lis r4, -15264 4175; CHECK-P10-NEXT: and r3, r3, r4 4176; CHECK-P10-NEXT: pli r4, 999990000 4177; CHECK-P10-NEXT: stxsibx f0, r3, r4 4178; CHECK-P10-NEXT: blr 4179; 4180; CHECK-P9-LABEL: st_disjoint_align32_float_uint8_t: 4181; CHECK-P9: # %bb.0: # %entry 4182; CHECK-P9-NEXT: xscvdpuxws f0, f1 4183; CHECK-P9-NEXT: lis r4, -15264 4184; CHECK-P9-NEXT: and r3, r3, r4 4185; CHECK-P9-NEXT: lis r4, 15258 4186; CHECK-P9-NEXT: ori r4, r4, 41712 4187; CHECK-P9-NEXT: stxsibx f0, r3, r4 4188; CHECK-P9-NEXT: blr 4189; 4190; CHECK-P8-LABEL: st_disjoint_align32_float_uint8_t: 4191; CHECK-P8: # %bb.0: # %entry 4192; CHECK-P8-NEXT: xscvdpsxws f0, f1 4193; CHECK-P8-NEXT: lis r4, -15264 4194; CHECK-P8-NEXT: lis r6, 15258 4195; CHECK-P8-NEXT: and r3, r3, r4 4196; CHECK-P8-NEXT: ori r4, r6, 41712 4197; CHECK-P8-NEXT: mffprwz r5, f0 4198; CHECK-P8-NEXT: stbx r5, r3, r4 4199; CHECK-P8-NEXT: blr 4200entry: 4201 %and = and i64 %ptr, -1000341504 4202 %conv = fptoui float %str to i8 4203 %or = or i64 %and, 999990000 4204 %0 = inttoptr i64 %or to i8* 4205 store i8 %conv, i8* %0, align 16 4206 ret void 4207} 4208 4209; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4210define dso_local void @st_not_disjoint64_float_uint8_t(i64 %ptr, float %str) { 4211; CHECK-P10-LABEL: st_not_disjoint64_float_uint8_t: 4212; CHECK-P10: # %bb.0: # %entry 4213; CHECK-P10-NEXT: xscvdpuxws f0, f1 4214; CHECK-P10-NEXT: pli r4, 232 4215; CHECK-P10-NEXT: pli r5, 3567587329 4216; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 4217; CHECK-P10-NEXT: or r3, r3, r5 4218; CHECK-P10-NEXT: stxsibx f0, 0, r3 4219; CHECK-P10-NEXT: blr 4220; 4221; CHECK-P9-LABEL: st_not_disjoint64_float_uint8_t: 4222; CHECK-P9: # %bb.0: # %entry 4223; CHECK-P9-NEXT: li r4, 29 4224; CHECK-P9-NEXT: xscvdpuxws f0, f1 4225; CHECK-P9-NEXT: rldic r4, r4, 35, 24 4226; CHECK-P9-NEXT: oris r4, r4, 54437 4227; CHECK-P9-NEXT: ori r4, r4, 4097 4228; CHECK-P9-NEXT: or r3, r3, r4 4229; CHECK-P9-NEXT: stxsibx f0, 0, r3 4230; CHECK-P9-NEXT: blr 4231; 4232; CHECK-P8-LABEL: st_not_disjoint64_float_uint8_t: 4233; CHECK-P8: # %bb.0: # %entry 4234; CHECK-P8-NEXT: xscvdpsxws f0, f1 4235; CHECK-P8-NEXT: li r4, 29 4236; CHECK-P8-NEXT: rldic r4, r4, 35, 24 4237; CHECK-P8-NEXT: oris r4, r4, 54437 4238; CHECK-P8-NEXT: ori r4, r4, 4097 4239; CHECK-P8-NEXT: or r3, r3, r4 4240; CHECK-P8-NEXT: mffprwz r5, f0 4241; CHECK-P8-NEXT: stb r5, 0(r3) 4242; CHECK-P8-NEXT: blr 4243entry: 4244 %conv = fptoui float %str to i8 4245 %or = or i64 %ptr, 1000000000001 4246 %0 = inttoptr i64 %or to i8* 4247 store i8 %conv, i8* %0, align 1 4248 ret void 4249} 4250 4251; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4252define dso_local void @st_disjoint_align64_float_uint8_t(i64 %ptr, float %str) { 4253; CHECK-P10-LABEL: st_disjoint_align64_float_uint8_t: 4254; CHECK-P10: # %bb.0: # %entry 4255; CHECK-P10-NEXT: xscvdpuxws f0, f1 4256; CHECK-P10-NEXT: pli r4, 244140625 4257; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 4258; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4259; CHECK-P10-NEXT: stxsibx f0, r3, r4 4260; CHECK-P10-NEXT: blr 4261; 4262; CHECK-P9-LABEL: st_disjoint_align64_float_uint8_t: 4263; CHECK-P9: # %bb.0: # %entry 4264; CHECK-P9-NEXT: xscvdpuxws f0, f1 4265; CHECK-P9-NEXT: lis r4, 3725 4266; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 4267; CHECK-P9-NEXT: ori r4, r4, 19025 4268; CHECK-P9-NEXT: rldic r4, r4, 12, 24 4269; CHECK-P9-NEXT: stxsibx f0, r3, r4 4270; CHECK-P9-NEXT: blr 4271; 4272; CHECK-P8-LABEL: st_disjoint_align64_float_uint8_t: 4273; CHECK-P8: # %bb.0: # %entry 4274; CHECK-P8-NEXT: xscvdpsxws f0, f1 4275; CHECK-P8-NEXT: lis r4, 3725 4276; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 4277; CHECK-P8-NEXT: ori r4, r4, 19025 4278; CHECK-P8-NEXT: rldic r4, r4, 12, 24 4279; CHECK-P8-NEXT: mffprwz r5, f0 4280; CHECK-P8-NEXT: stbx r5, r3, r4 4281; CHECK-P8-NEXT: blr 4282entry: 4283 %and = and i64 %ptr, -1099511627776 4284 %conv = fptoui float %str to i8 4285 %or = or i64 %and, 1000000000000 4286 %0 = inttoptr i64 %or to i8* 4287 store i8 %conv, i8* %0, align 4096 4288 ret void 4289} 4290 4291; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4292define dso_local void @st_cst_align16_float_uint8_t(float %str) { 4293; CHECK-POSTP8-LABEL: st_cst_align16_float_uint8_t: 4294; CHECK-POSTP8: # %bb.0: # %entry 4295; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4296; CHECK-POSTP8-NEXT: li r3, 4080 4297; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4298; CHECK-POSTP8-NEXT: blr 4299; 4300; CHECK-P8-LABEL: st_cst_align16_float_uint8_t: 4301; CHECK-P8: # %bb.0: # %entry 4302; CHECK-P8-NEXT: xscvdpsxws f0, f1 4303; CHECK-P8-NEXT: mffprwz r3, f0 4304; CHECK-P8-NEXT: stb r3, 4080(0) 4305; CHECK-P8-NEXT: blr 4306entry: 4307 %conv = fptoui float %str to i8 4308 store i8 %conv, i8* inttoptr (i64 4080 to i8*), align 16 4309 ret void 4310} 4311 4312; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4313define dso_local void @st_cst_align32_float_uint8_t(float %str) { 4314; CHECK-P10-LABEL: st_cst_align32_float_uint8_t: 4315; CHECK-P10: # %bb.0: # %entry 4316; CHECK-P10-NEXT: xscvdpuxws f0, f1 4317; CHECK-P10-NEXT: pli r3, 9999900 4318; CHECK-P10-NEXT: stxsibx f0, 0, r3 4319; CHECK-P10-NEXT: blr 4320; 4321; CHECK-P9-LABEL: st_cst_align32_float_uint8_t: 4322; CHECK-P9: # %bb.0: # %entry 4323; CHECK-P9-NEXT: xscvdpuxws f0, f1 4324; CHECK-P9-NEXT: lis r3, 152 4325; CHECK-P9-NEXT: ori r3, r3, 38428 4326; CHECK-P9-NEXT: stxsibx f0, 0, r3 4327; CHECK-P9-NEXT: blr 4328; 4329; CHECK-P8-LABEL: st_cst_align32_float_uint8_t: 4330; CHECK-P8: # %bb.0: # %entry 4331; CHECK-P8-NEXT: xscvdpsxws f0, f1 4332; CHECK-P8-NEXT: lis r4, 153 4333; CHECK-P8-NEXT: mffprwz r3, f0 4334; CHECK-P8-NEXT: stb r3, -27108(r4) 4335; CHECK-P8-NEXT: blr 4336entry: 4337 %conv = fptoui float %str to i8 4338 store i8 %conv, i8* inttoptr (i64 9999900 to i8*), align 4 4339 ret void 4340} 4341 4342; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4343define dso_local void @st_cst_align64_float_uint8_t(float %str) { 4344; CHECK-P10-LABEL: st_cst_align64_float_uint8_t: 4345; CHECK-P10: # %bb.0: # %entry 4346; CHECK-P10-NEXT: xscvdpuxws f0, f1 4347; CHECK-P10-NEXT: pli r3, 244140625 4348; CHECK-P10-NEXT: rldic r3, r3, 12, 24 4349; CHECK-P10-NEXT: stxsibx f0, 0, r3 4350; CHECK-P10-NEXT: blr 4351; 4352; CHECK-P9-LABEL: st_cst_align64_float_uint8_t: 4353; CHECK-P9: # %bb.0: # %entry 4354; CHECK-P9-NEXT: xscvdpuxws f0, f1 4355; CHECK-P9-NEXT: lis r3, 3725 4356; CHECK-P9-NEXT: ori r3, r3, 19025 4357; CHECK-P9-NEXT: rldic r3, r3, 12, 24 4358; CHECK-P9-NEXT: stxsibx f0, 0, r3 4359; CHECK-P9-NEXT: blr 4360; 4361; CHECK-P8-LABEL: st_cst_align64_float_uint8_t: 4362; CHECK-P8: # %bb.0: # %entry 4363; CHECK-P8-NEXT: xscvdpsxws f0, f1 4364; CHECK-P8-NEXT: lis r3, 3725 4365; CHECK-P8-NEXT: ori r3, r3, 19025 4366; CHECK-P8-NEXT: rldic r3, r3, 12, 24 4367; CHECK-P8-NEXT: mffprwz r4, f0 4368; CHECK-P8-NEXT: stb r4, 0(r3) 4369; CHECK-P8-NEXT: blr 4370entry: 4371 %conv = fptoui float %str to i8 4372 store i8 %conv, i8* inttoptr (i64 1000000000000 to i8*), align 4096 4373 ret void 4374} 4375 4376; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4377define dso_local void @st_0_float_int8_t(i64 %ptr, float %str) { 4378; CHECK-POSTP8-LABEL: st_0_float_int8_t: 4379; CHECK-POSTP8: # %bb.0: # %entry 4380; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 4381; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4382; CHECK-POSTP8-NEXT: blr 4383; 4384; CHECK-P8-LABEL: st_0_float_int8_t: 4385; CHECK-P8: # %bb.0: # %entry 4386; CHECK-P8-NEXT: xscvdpsxws f0, f1 4387; CHECK-P8-NEXT: mffprwz r4, f0 4388; CHECK-P8-NEXT: stb r4, 0(r3) 4389; CHECK-P8-NEXT: blr 4390entry: 4391 %conv = fptosi float %str to i8 4392 %0 = inttoptr i64 %ptr to i8* 4393 store i8 %conv, i8* %0, align 1 4394 ret void 4395} 4396 4397; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4398define dso_local void @st_align16_float_int8_t(i8* nocapture %ptr, float %str) { 4399; CHECK-POSTP8-LABEL: st_align16_float_int8_t: 4400; CHECK-POSTP8: # %bb.0: # %entry 4401; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 4402; CHECK-POSTP8-NEXT: addi r3, r3, 8 4403; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4404; CHECK-POSTP8-NEXT: blr 4405; 4406; CHECK-P8-LABEL: st_align16_float_int8_t: 4407; CHECK-P8: # %bb.0: # %entry 4408; CHECK-P8-NEXT: xscvdpsxws f0, f1 4409; CHECK-P8-NEXT: mffprwz r4, f0 4410; CHECK-P8-NEXT: stb r4, 8(r3) 4411; CHECK-P8-NEXT: blr 4412entry: 4413 %conv = fptosi float %str to i8 4414 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 4415 store i8 %conv, i8* %add.ptr, align 1 4416 ret void 4417} 4418 4419; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4420define dso_local void @st_align32_float_int8_t(i8* nocapture %ptr, float %str) { 4421; CHECK-P10-LABEL: st_align32_float_int8_t: 4422; CHECK-P10: # %bb.0: # %entry 4423; CHECK-P10-NEXT: xscvdpsxws f0, f1 4424; CHECK-P10-NEXT: pli r4, 99999000 4425; CHECK-P10-NEXT: stxsibx f0, r3, r4 4426; CHECK-P10-NEXT: blr 4427; 4428; CHECK-P9-LABEL: st_align32_float_int8_t: 4429; CHECK-P9: # %bb.0: # %entry 4430; CHECK-P9-NEXT: xscvdpsxws f0, f1 4431; CHECK-P9-NEXT: lis r4, 1525 4432; CHECK-P9-NEXT: ori r4, r4, 56600 4433; CHECK-P9-NEXT: stxsibx f0, r3, r4 4434; CHECK-P9-NEXT: blr 4435; 4436; CHECK-P8-LABEL: st_align32_float_int8_t: 4437; CHECK-P8: # %bb.0: # %entry 4438; CHECK-P8-NEXT: xscvdpsxws f0, f1 4439; CHECK-P8-NEXT: lis r4, 1525 4440; CHECK-P8-NEXT: ori r4, r4, 56600 4441; CHECK-P8-NEXT: mffprwz r5, f0 4442; CHECK-P8-NEXT: stbx r5, r3, r4 4443; CHECK-P8-NEXT: blr 4444entry: 4445 %conv = fptosi float %str to i8 4446 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 4447 store i8 %conv, i8* %add.ptr, align 1 4448 ret void 4449} 4450 4451; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4452define dso_local void @st_align64_float_int8_t(i8* nocapture %ptr, float %str) { 4453; CHECK-P10-LABEL: st_align64_float_int8_t: 4454; CHECK-P10: # %bb.0: # %entry 4455; CHECK-P10-NEXT: xscvdpsxws f0, f1 4456; CHECK-P10-NEXT: pli r4, 244140625 4457; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4458; CHECK-P10-NEXT: stxsibx f0, r3, r4 4459; CHECK-P10-NEXT: blr 4460; 4461; CHECK-P9-LABEL: st_align64_float_int8_t: 4462; CHECK-P9: # %bb.0: # %entry 4463; CHECK-P9-NEXT: xscvdpsxws f0, f1 4464; CHECK-P9-NEXT: lis r4, 3725 4465; CHECK-P9-NEXT: ori r4, r4, 19025 4466; CHECK-P9-NEXT: rldic r4, r4, 12, 24 4467; CHECK-P9-NEXT: stxsibx f0, r3, r4 4468; CHECK-P9-NEXT: blr 4469; 4470; CHECK-P8-LABEL: st_align64_float_int8_t: 4471; CHECK-P8: # %bb.0: # %entry 4472; CHECK-P8-NEXT: xscvdpsxws f0, f1 4473; CHECK-P8-NEXT: lis r4, 3725 4474; CHECK-P8-NEXT: ori r4, r4, 19025 4475; CHECK-P8-NEXT: rldic r4, r4, 12, 24 4476; CHECK-P8-NEXT: mffprwz r5, f0 4477; CHECK-P8-NEXT: stbx r5, r3, r4 4478; CHECK-P8-NEXT: blr 4479entry: 4480 %conv = fptosi float %str to i8 4481 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 4482 store i8 %conv, i8* %add.ptr, align 1 4483 ret void 4484} 4485 4486; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4487define dso_local void @st_reg_float_int8_t(i8* nocapture %ptr, i64 %off, float %str) { 4488; CHECK-POSTP8-LABEL: st_reg_float_int8_t: 4489; CHECK-POSTP8: # %bb.0: # %entry 4490; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 4491; CHECK-POSTP8-NEXT: stxsibx f0, r3, r4 4492; CHECK-POSTP8-NEXT: blr 4493; 4494; CHECK-P8-LABEL: st_reg_float_int8_t: 4495; CHECK-P8: # %bb.0: # %entry 4496; CHECK-P8-NEXT: xscvdpsxws f0, f1 4497; CHECK-P8-NEXT: mffprwz r5, f0 4498; CHECK-P8-NEXT: stbx r5, r3, r4 4499; CHECK-P8-NEXT: blr 4500entry: 4501 %conv = fptosi float %str to i8 4502 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 4503 store i8 %conv, i8* %add.ptr, align 1 4504 ret void 4505} 4506 4507; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4508define dso_local void @st_or1_float_int8_t(i64 %ptr, i8 zeroext %off, float %str) { 4509; CHECK-POSTP8-LABEL: st_or1_float_int8_t: 4510; CHECK-POSTP8: # %bb.0: # %entry 4511; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 4512; CHECK-POSTP8-NEXT: or r3, r4, r3 4513; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4514; CHECK-POSTP8-NEXT: blr 4515; 4516; CHECK-P8-LABEL: st_or1_float_int8_t: 4517; CHECK-P8: # %bb.0: # %entry 4518; CHECK-P8-NEXT: xscvdpsxws f0, f1 4519; CHECK-P8-NEXT: or r3, r4, r3 4520; CHECK-P8-NEXT: mffprwz r5, f0 4521; CHECK-P8-NEXT: stb r5, 0(r3) 4522; CHECK-P8-NEXT: blr 4523entry: 4524 %conv = fptosi float %str to i8 4525 %conv1 = zext i8 %off to i64 4526 %or = or i64 %conv1, %ptr 4527 %0 = inttoptr i64 %or to i8* 4528 store i8 %conv, i8* %0, align 1 4529 ret void 4530} 4531 4532; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4533define dso_local void @st_not_disjoint16_float_int8_t(i64 %ptr, float %str) { 4534; CHECK-POSTP8-LABEL: st_not_disjoint16_float_int8_t: 4535; CHECK-POSTP8: # %bb.0: # %entry 4536; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 4537; CHECK-POSTP8-NEXT: ori r3, r3, 6 4538; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4539; CHECK-POSTP8-NEXT: blr 4540; 4541; CHECK-P8-LABEL: st_not_disjoint16_float_int8_t: 4542; CHECK-P8: # %bb.0: # %entry 4543; CHECK-P8-NEXT: xscvdpsxws f0, f1 4544; CHECK-P8-NEXT: ori r3, r3, 6 4545; CHECK-P8-NEXT: mffprwz r4, f0 4546; CHECK-P8-NEXT: stb r4, 0(r3) 4547; CHECK-P8-NEXT: blr 4548entry: 4549 %conv = fptosi float %str to i8 4550 %or = or i64 %ptr, 6 4551 %0 = inttoptr i64 %or to i8* 4552 store i8 %conv, i8* %0, align 1 4553 ret void 4554} 4555 4556; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4557define dso_local void @st_disjoint_align16_float_int8_t(i64 %ptr, float %str) { 4558; CHECK-POSTP8-LABEL: st_disjoint_align16_float_int8_t: 4559; CHECK-POSTP8: # %bb.0: # %entry 4560; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 4561; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 4562; CHECK-POSTP8-NEXT: ori r3, r3, 24 4563; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4564; CHECK-POSTP8-NEXT: blr 4565; 4566; CHECK-P8-LABEL: st_disjoint_align16_float_int8_t: 4567; CHECK-P8: # %bb.0: # %entry 4568; CHECK-P8-NEXT: xscvdpsxws f0, f1 4569; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 4570; CHECK-P8-NEXT: mffprwz r4, f0 4571; CHECK-P8-NEXT: stb r4, 24(r3) 4572; CHECK-P8-NEXT: blr 4573entry: 4574 %and = and i64 %ptr, -4096 4575 %conv = fptosi float %str to i8 4576 %or = or i64 %and, 24 4577 %0 = inttoptr i64 %or to i8* 4578 store i8 %conv, i8* %0, align 8 4579 ret void 4580} 4581 4582; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4583define dso_local void @st_not_disjoint32_float_int8_t(i64 %ptr, float %str) { 4584; CHECK-POSTP8-LABEL: st_not_disjoint32_float_int8_t: 4585; CHECK-POSTP8: # %bb.0: # %entry 4586; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 4587; CHECK-POSTP8-NEXT: ori r3, r3, 34463 4588; CHECK-POSTP8-NEXT: oris r3, r3, 1 4589; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4590; CHECK-POSTP8-NEXT: blr 4591; 4592; CHECK-P8-LABEL: st_not_disjoint32_float_int8_t: 4593; CHECK-P8: # %bb.0: # %entry 4594; CHECK-P8-NEXT: xscvdpsxws f0, f1 4595; CHECK-P8-NEXT: ori r3, r3, 34463 4596; CHECK-P8-NEXT: oris r3, r3, 1 4597; CHECK-P8-NEXT: mffprwz r4, f0 4598; CHECK-P8-NEXT: stb r4, 0(r3) 4599; CHECK-P8-NEXT: blr 4600entry: 4601 %conv = fptosi float %str to i8 4602 %or = or i64 %ptr, 99999 4603 %0 = inttoptr i64 %or to i8* 4604 store i8 %conv, i8* %0, align 1 4605 ret void 4606} 4607 4608; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4609define dso_local void @st_disjoint_align32_float_int8_t(i64 %ptr, float %str) { 4610; CHECK-P10-LABEL: st_disjoint_align32_float_int8_t: 4611; CHECK-P10: # %bb.0: # %entry 4612; CHECK-P10-NEXT: xscvdpsxws f0, f1 4613; CHECK-P10-NEXT: lis r4, -15264 4614; CHECK-P10-NEXT: and r3, r3, r4 4615; CHECK-P10-NEXT: pli r4, 999990000 4616; CHECK-P10-NEXT: stxsibx f0, r3, r4 4617; CHECK-P10-NEXT: blr 4618; 4619; CHECK-P9-LABEL: st_disjoint_align32_float_int8_t: 4620; CHECK-P9: # %bb.0: # %entry 4621; CHECK-P9-NEXT: xscvdpsxws f0, f1 4622; CHECK-P9-NEXT: lis r4, -15264 4623; CHECK-P9-NEXT: and r3, r3, r4 4624; CHECK-P9-NEXT: lis r4, 15258 4625; CHECK-P9-NEXT: ori r4, r4, 41712 4626; CHECK-P9-NEXT: stxsibx f0, r3, r4 4627; CHECK-P9-NEXT: blr 4628; 4629; CHECK-P8-LABEL: st_disjoint_align32_float_int8_t: 4630; CHECK-P8: # %bb.0: # %entry 4631; CHECK-P8-NEXT: xscvdpsxws f0, f1 4632; CHECK-P8-NEXT: lis r4, -15264 4633; CHECK-P8-NEXT: lis r6, 15258 4634; CHECK-P8-NEXT: and r3, r3, r4 4635; CHECK-P8-NEXT: ori r4, r6, 41712 4636; CHECK-P8-NEXT: mffprwz r5, f0 4637; CHECK-P8-NEXT: stbx r5, r3, r4 4638; CHECK-P8-NEXT: blr 4639entry: 4640 %and = and i64 %ptr, -1000341504 4641 %conv = fptosi float %str to i8 4642 %or = or i64 %and, 999990000 4643 %0 = inttoptr i64 %or to i8* 4644 store i8 %conv, i8* %0, align 16 4645 ret void 4646} 4647 4648; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4649define dso_local void @st_not_disjoint64_float_int8_t(i64 %ptr, float %str) { 4650; CHECK-P10-LABEL: st_not_disjoint64_float_int8_t: 4651; CHECK-P10: # %bb.0: # %entry 4652; CHECK-P10-NEXT: xscvdpsxws f0, f1 4653; CHECK-P10-NEXT: pli r4, 232 4654; CHECK-P10-NEXT: pli r5, 3567587329 4655; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 4656; CHECK-P10-NEXT: or r3, r3, r5 4657; CHECK-P10-NEXT: stxsibx f0, 0, r3 4658; CHECK-P10-NEXT: blr 4659; 4660; CHECK-P9-LABEL: st_not_disjoint64_float_int8_t: 4661; CHECK-P9: # %bb.0: # %entry 4662; CHECK-P9-NEXT: li r4, 29 4663; CHECK-P9-NEXT: xscvdpsxws f0, f1 4664; CHECK-P9-NEXT: rldic r4, r4, 35, 24 4665; CHECK-P9-NEXT: oris r4, r4, 54437 4666; CHECK-P9-NEXT: ori r4, r4, 4097 4667; CHECK-P9-NEXT: or r3, r3, r4 4668; CHECK-P9-NEXT: stxsibx f0, 0, r3 4669; CHECK-P9-NEXT: blr 4670; 4671; CHECK-P8-LABEL: st_not_disjoint64_float_int8_t: 4672; CHECK-P8: # %bb.0: # %entry 4673; CHECK-P8-NEXT: xscvdpsxws f0, f1 4674; CHECK-P8-NEXT: li r4, 29 4675; CHECK-P8-NEXT: rldic r4, r4, 35, 24 4676; CHECK-P8-NEXT: oris r4, r4, 54437 4677; CHECK-P8-NEXT: ori r4, r4, 4097 4678; CHECK-P8-NEXT: or r3, r3, r4 4679; CHECK-P8-NEXT: mffprwz r5, f0 4680; CHECK-P8-NEXT: stb r5, 0(r3) 4681; CHECK-P8-NEXT: blr 4682entry: 4683 %conv = fptosi float %str to i8 4684 %or = or i64 %ptr, 1000000000001 4685 %0 = inttoptr i64 %or to i8* 4686 store i8 %conv, i8* %0, align 1 4687 ret void 4688} 4689 4690; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4691define dso_local void @st_disjoint_align64_float_int8_t(i64 %ptr, float %str) { 4692; CHECK-P10-LABEL: st_disjoint_align64_float_int8_t: 4693; CHECK-P10: # %bb.0: # %entry 4694; CHECK-P10-NEXT: xscvdpsxws f0, f1 4695; CHECK-P10-NEXT: pli r4, 244140625 4696; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 4697; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4698; CHECK-P10-NEXT: stxsibx f0, r3, r4 4699; CHECK-P10-NEXT: blr 4700; 4701; CHECK-P9-LABEL: st_disjoint_align64_float_int8_t: 4702; CHECK-P9: # %bb.0: # %entry 4703; CHECK-P9-NEXT: xscvdpsxws f0, f1 4704; CHECK-P9-NEXT: lis r4, 3725 4705; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 4706; CHECK-P9-NEXT: ori r4, r4, 19025 4707; CHECK-P9-NEXT: rldic r4, r4, 12, 24 4708; CHECK-P9-NEXT: stxsibx f0, r3, r4 4709; CHECK-P9-NEXT: blr 4710; 4711; CHECK-P8-LABEL: st_disjoint_align64_float_int8_t: 4712; CHECK-P8: # %bb.0: # %entry 4713; CHECK-P8-NEXT: xscvdpsxws f0, f1 4714; CHECK-P8-NEXT: lis r4, 3725 4715; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 4716; CHECK-P8-NEXT: ori r4, r4, 19025 4717; CHECK-P8-NEXT: rldic r4, r4, 12, 24 4718; CHECK-P8-NEXT: mffprwz r5, f0 4719; CHECK-P8-NEXT: stbx r5, r3, r4 4720; CHECK-P8-NEXT: blr 4721entry: 4722 %and = and i64 %ptr, -1099511627776 4723 %conv = fptosi float %str to i8 4724 %or = or i64 %and, 1000000000000 4725 %0 = inttoptr i64 %or to i8* 4726 store i8 %conv, i8* %0, align 4096 4727 ret void 4728} 4729 4730; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4731define dso_local void @st_cst_align16_float_int8_t(float %str) { 4732; CHECK-POSTP8-LABEL: st_cst_align16_float_int8_t: 4733; CHECK-POSTP8: # %bb.0: # %entry 4734; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 4735; CHECK-POSTP8-NEXT: li r3, 4080 4736; CHECK-POSTP8-NEXT: stxsibx f0, 0, r3 4737; CHECK-POSTP8-NEXT: blr 4738; 4739; CHECK-P8-LABEL: st_cst_align16_float_int8_t: 4740; CHECK-P8: # %bb.0: # %entry 4741; CHECK-P8-NEXT: xscvdpsxws f0, f1 4742; CHECK-P8-NEXT: mffprwz r3, f0 4743; CHECK-P8-NEXT: stb r3, 4080(0) 4744; CHECK-P8-NEXT: blr 4745entry: 4746 %conv = fptosi float %str to i8 4747 store i8 %conv, i8* inttoptr (i64 4080 to i8*), align 16 4748 ret void 4749} 4750 4751; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4752define dso_local void @st_cst_align32_float_int8_t(float %str) { 4753; CHECK-P10-LABEL: st_cst_align32_float_int8_t: 4754; CHECK-P10: # %bb.0: # %entry 4755; CHECK-P10-NEXT: xscvdpsxws f0, f1 4756; CHECK-P10-NEXT: pli r3, 9999900 4757; CHECK-P10-NEXT: stxsibx f0, 0, r3 4758; CHECK-P10-NEXT: blr 4759; 4760; CHECK-P9-LABEL: st_cst_align32_float_int8_t: 4761; CHECK-P9: # %bb.0: # %entry 4762; CHECK-P9-NEXT: xscvdpsxws f0, f1 4763; CHECK-P9-NEXT: lis r3, 152 4764; CHECK-P9-NEXT: ori r3, r3, 38428 4765; CHECK-P9-NEXT: stxsibx f0, 0, r3 4766; CHECK-P9-NEXT: blr 4767; 4768; CHECK-P8-LABEL: st_cst_align32_float_int8_t: 4769; CHECK-P8: # %bb.0: # %entry 4770; CHECK-P8-NEXT: xscvdpsxws f0, f1 4771; CHECK-P8-NEXT: lis r4, 153 4772; CHECK-P8-NEXT: mffprwz r3, f0 4773; CHECK-P8-NEXT: stb r3, -27108(r4) 4774; CHECK-P8-NEXT: blr 4775entry: 4776 %conv = fptosi float %str to i8 4777 store i8 %conv, i8* inttoptr (i64 9999900 to i8*), align 4 4778 ret void 4779} 4780 4781; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4782define dso_local void @st_cst_align64_float_int8_t(float %str) { 4783; CHECK-P10-LABEL: st_cst_align64_float_int8_t: 4784; CHECK-P10: # %bb.0: # %entry 4785; CHECK-P10-NEXT: xscvdpsxws f0, f1 4786; CHECK-P10-NEXT: pli r3, 244140625 4787; CHECK-P10-NEXT: rldic r3, r3, 12, 24 4788; CHECK-P10-NEXT: stxsibx f0, 0, r3 4789; CHECK-P10-NEXT: blr 4790; 4791; CHECK-P9-LABEL: st_cst_align64_float_int8_t: 4792; CHECK-P9: # %bb.0: # %entry 4793; CHECK-P9-NEXT: xscvdpsxws f0, f1 4794; CHECK-P9-NEXT: lis r3, 3725 4795; CHECK-P9-NEXT: ori r3, r3, 19025 4796; CHECK-P9-NEXT: rldic r3, r3, 12, 24 4797; CHECK-P9-NEXT: stxsibx f0, 0, r3 4798; CHECK-P9-NEXT: blr 4799; 4800; CHECK-P8-LABEL: st_cst_align64_float_int8_t: 4801; CHECK-P8: # %bb.0: # %entry 4802; CHECK-P8-NEXT: xscvdpsxws f0, f1 4803; CHECK-P8-NEXT: lis r3, 3725 4804; CHECK-P8-NEXT: ori r3, r3, 19025 4805; CHECK-P8-NEXT: rldic r3, r3, 12, 24 4806; CHECK-P8-NEXT: mffprwz r4, f0 4807; CHECK-P8-NEXT: stb r4, 0(r3) 4808; CHECK-P8-NEXT: blr 4809entry: 4810 %conv = fptosi float %str to i8 4811 store i8 %conv, i8* inttoptr (i64 1000000000000 to i8*), align 4096 4812 ret void 4813} 4814 4815; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4816define dso_local void @st_0_float_uint16_t(i64 %ptr, float %str) { 4817; CHECK-POSTP8-LABEL: st_0_float_uint16_t: 4818; CHECK-POSTP8: # %bb.0: # %entry 4819; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4820; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 4821; CHECK-POSTP8-NEXT: blr 4822; 4823; CHECK-P8-LABEL: st_0_float_uint16_t: 4824; CHECK-P8: # %bb.0: # %entry 4825; CHECK-P8-NEXT: xscvdpsxws f0, f1 4826; CHECK-P8-NEXT: mffprwz r4, f0 4827; CHECK-P8-NEXT: sth r4, 0(r3) 4828; CHECK-P8-NEXT: blr 4829entry: 4830 %conv = fptoui float %str to i16 4831 %0 = inttoptr i64 %ptr to i16* 4832 store i16 %conv, i16* %0, align 2 4833 ret void 4834} 4835 4836; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4837define dso_local void @st_align16_float_uint16_t(i8* nocapture %ptr, float %str) { 4838; CHECK-POSTP8-LABEL: st_align16_float_uint16_t: 4839; CHECK-POSTP8: # %bb.0: # %entry 4840; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4841; CHECK-POSTP8-NEXT: addi r3, r3, 8 4842; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 4843; CHECK-POSTP8-NEXT: blr 4844; 4845; CHECK-P8-LABEL: st_align16_float_uint16_t: 4846; CHECK-P8: # %bb.0: # %entry 4847; CHECK-P8-NEXT: xscvdpsxws f0, f1 4848; CHECK-P8-NEXT: mffprwz r4, f0 4849; CHECK-P8-NEXT: sth r4, 8(r3) 4850; CHECK-P8-NEXT: blr 4851entry: 4852 %conv = fptoui float %str to i16 4853 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 4854 %0 = bitcast i8* %add.ptr to i16* 4855 store i16 %conv, i16* %0, align 2 4856 ret void 4857} 4858 4859; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4860define dso_local void @st_align32_float_uint16_t(i8* nocapture %ptr, float %str) { 4861; CHECK-P10-LABEL: st_align32_float_uint16_t: 4862; CHECK-P10: # %bb.0: # %entry 4863; CHECK-P10-NEXT: xscvdpuxws f0, f1 4864; CHECK-P10-NEXT: pli r4, 99999000 4865; CHECK-P10-NEXT: stxsihx f0, r3, r4 4866; CHECK-P10-NEXT: blr 4867; 4868; CHECK-P9-LABEL: st_align32_float_uint16_t: 4869; CHECK-P9: # %bb.0: # %entry 4870; CHECK-P9-NEXT: xscvdpuxws f0, f1 4871; CHECK-P9-NEXT: lis r4, 1525 4872; CHECK-P9-NEXT: ori r4, r4, 56600 4873; CHECK-P9-NEXT: stxsihx f0, r3, r4 4874; CHECK-P9-NEXT: blr 4875; 4876; CHECK-P8-LABEL: st_align32_float_uint16_t: 4877; CHECK-P8: # %bb.0: # %entry 4878; CHECK-P8-NEXT: xscvdpsxws f0, f1 4879; CHECK-P8-NEXT: lis r4, 1525 4880; CHECK-P8-NEXT: ori r4, r4, 56600 4881; CHECK-P8-NEXT: mffprwz r5, f0 4882; CHECK-P8-NEXT: sthx r5, r3, r4 4883; CHECK-P8-NEXT: blr 4884entry: 4885 %conv = fptoui float %str to i16 4886 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 4887 %0 = bitcast i8* %add.ptr to i16* 4888 store i16 %conv, i16* %0, align 2 4889 ret void 4890} 4891 4892; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4893define dso_local void @st_align64_float_uint16_t(i8* nocapture %ptr, float %str) { 4894; CHECK-P10-LABEL: st_align64_float_uint16_t: 4895; CHECK-P10: # %bb.0: # %entry 4896; CHECK-P10-NEXT: xscvdpuxws f0, f1 4897; CHECK-P10-NEXT: pli r4, 244140625 4898; CHECK-P10-NEXT: rldic r4, r4, 12, 24 4899; CHECK-P10-NEXT: stxsihx f0, r3, r4 4900; CHECK-P10-NEXT: blr 4901; 4902; CHECK-P9-LABEL: st_align64_float_uint16_t: 4903; CHECK-P9: # %bb.0: # %entry 4904; CHECK-P9-NEXT: xscvdpuxws f0, f1 4905; CHECK-P9-NEXT: lis r4, 3725 4906; CHECK-P9-NEXT: ori r4, r4, 19025 4907; CHECK-P9-NEXT: rldic r4, r4, 12, 24 4908; CHECK-P9-NEXT: stxsihx f0, r3, r4 4909; CHECK-P9-NEXT: blr 4910; 4911; CHECK-P8-LABEL: st_align64_float_uint16_t: 4912; CHECK-P8: # %bb.0: # %entry 4913; CHECK-P8-NEXT: xscvdpsxws f0, f1 4914; CHECK-P8-NEXT: lis r4, 3725 4915; CHECK-P8-NEXT: ori r4, r4, 19025 4916; CHECK-P8-NEXT: rldic r4, r4, 12, 24 4917; CHECK-P8-NEXT: mffprwz r5, f0 4918; CHECK-P8-NEXT: sthx r5, r3, r4 4919; CHECK-P8-NEXT: blr 4920entry: 4921 %conv = fptoui float %str to i16 4922 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 4923 %0 = bitcast i8* %add.ptr to i16* 4924 store i16 %conv, i16* %0, align 2 4925 ret void 4926} 4927 4928; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4929define dso_local void @st_reg_float_uint16_t(i8* nocapture %ptr, i64 %off, float %str) { 4930; CHECK-POSTP8-LABEL: st_reg_float_uint16_t: 4931; CHECK-POSTP8: # %bb.0: # %entry 4932; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4933; CHECK-POSTP8-NEXT: stxsihx f0, r3, r4 4934; CHECK-POSTP8-NEXT: blr 4935; 4936; CHECK-P8-LABEL: st_reg_float_uint16_t: 4937; CHECK-P8: # %bb.0: # %entry 4938; CHECK-P8-NEXT: xscvdpsxws f0, f1 4939; CHECK-P8-NEXT: mffprwz r5, f0 4940; CHECK-P8-NEXT: sthx r5, r3, r4 4941; CHECK-P8-NEXT: blr 4942entry: 4943 %conv = fptoui float %str to i16 4944 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 4945 %0 = bitcast i8* %add.ptr to i16* 4946 store i16 %conv, i16* %0, align 2 4947 ret void 4948} 4949 4950; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4951define dso_local void @st_or1_float_uint16_t(i64 %ptr, i8 zeroext %off, float %str) { 4952; CHECK-POSTP8-LABEL: st_or1_float_uint16_t: 4953; CHECK-POSTP8: # %bb.0: # %entry 4954; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4955; CHECK-POSTP8-NEXT: or r3, r4, r3 4956; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 4957; CHECK-POSTP8-NEXT: blr 4958; 4959; CHECK-P8-LABEL: st_or1_float_uint16_t: 4960; CHECK-P8: # %bb.0: # %entry 4961; CHECK-P8-NEXT: xscvdpsxws f0, f1 4962; CHECK-P8-NEXT: or r3, r4, r3 4963; CHECK-P8-NEXT: mffprwz r5, f0 4964; CHECK-P8-NEXT: sth r5, 0(r3) 4965; CHECK-P8-NEXT: blr 4966entry: 4967 %conv = fptoui float %str to i16 4968 %conv1 = zext i8 %off to i64 4969 %or = or i64 %conv1, %ptr 4970 %0 = inttoptr i64 %or to i16* 4971 store i16 %conv, i16* %0, align 2 4972 ret void 4973} 4974 4975; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 4976define dso_local void @st_not_disjoint16_float_uint16_t(i64 %ptr, float %str) { 4977; CHECK-POSTP8-LABEL: st_not_disjoint16_float_uint16_t: 4978; CHECK-POSTP8: # %bb.0: # %entry 4979; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 4980; CHECK-POSTP8-NEXT: ori r3, r3, 6 4981; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 4982; CHECK-POSTP8-NEXT: blr 4983; 4984; CHECK-P8-LABEL: st_not_disjoint16_float_uint16_t: 4985; CHECK-P8: # %bb.0: # %entry 4986; CHECK-P8-NEXT: xscvdpsxws f0, f1 4987; CHECK-P8-NEXT: ori r3, r3, 6 4988; CHECK-P8-NEXT: mffprwz r4, f0 4989; CHECK-P8-NEXT: sth r4, 0(r3) 4990; CHECK-P8-NEXT: blr 4991entry: 4992 %conv = fptoui float %str to i16 4993 %or = or i64 %ptr, 6 4994 %0 = inttoptr i64 %or to i16* 4995 store i16 %conv, i16* %0, align 2 4996 ret void 4997} 4998 4999; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5000define dso_local void @st_disjoint_align16_float_uint16_t(i64 %ptr, float %str) { 5001; CHECK-POSTP8-LABEL: st_disjoint_align16_float_uint16_t: 5002; CHECK-POSTP8: # %bb.0: # %entry 5003; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 5004; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 5005; CHECK-POSTP8-NEXT: ori r3, r3, 24 5006; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5007; CHECK-POSTP8-NEXT: blr 5008; 5009; CHECK-P8-LABEL: st_disjoint_align16_float_uint16_t: 5010; CHECK-P8: # %bb.0: # %entry 5011; CHECK-P8-NEXT: xscvdpsxws f0, f1 5012; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 5013; CHECK-P8-NEXT: mffprwz r4, f0 5014; CHECK-P8-NEXT: sth r4, 24(r3) 5015; CHECK-P8-NEXT: blr 5016entry: 5017 %and = and i64 %ptr, -4096 5018 %conv = fptoui float %str to i16 5019 %or = or i64 %and, 24 5020 %0 = inttoptr i64 %or to i16* 5021 store i16 %conv, i16* %0, align 8 5022 ret void 5023} 5024 5025; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5026define dso_local void @st_not_disjoint32_float_uint16_t(i64 %ptr, float %str) { 5027; CHECK-POSTP8-LABEL: st_not_disjoint32_float_uint16_t: 5028; CHECK-POSTP8: # %bb.0: # %entry 5029; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 5030; CHECK-POSTP8-NEXT: ori r3, r3, 34463 5031; CHECK-POSTP8-NEXT: oris r3, r3, 1 5032; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5033; CHECK-POSTP8-NEXT: blr 5034; 5035; CHECK-P8-LABEL: st_not_disjoint32_float_uint16_t: 5036; CHECK-P8: # %bb.0: # %entry 5037; CHECK-P8-NEXT: xscvdpsxws f0, f1 5038; CHECK-P8-NEXT: ori r3, r3, 34463 5039; CHECK-P8-NEXT: oris r3, r3, 1 5040; CHECK-P8-NEXT: mffprwz r4, f0 5041; CHECK-P8-NEXT: sth r4, 0(r3) 5042; CHECK-P8-NEXT: blr 5043entry: 5044 %conv = fptoui float %str to i16 5045 %or = or i64 %ptr, 99999 5046 %0 = inttoptr i64 %or to i16* 5047 store i16 %conv, i16* %0, align 2 5048 ret void 5049} 5050 5051; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5052define dso_local void @st_disjoint_align32_float_uint16_t(i64 %ptr, float %str) { 5053; CHECK-P10-LABEL: st_disjoint_align32_float_uint16_t: 5054; CHECK-P10: # %bb.0: # %entry 5055; CHECK-P10-NEXT: xscvdpuxws f0, f1 5056; CHECK-P10-NEXT: lis r4, -15264 5057; CHECK-P10-NEXT: and r3, r3, r4 5058; CHECK-P10-NEXT: pli r4, 999990000 5059; CHECK-P10-NEXT: stxsihx f0, r3, r4 5060; CHECK-P10-NEXT: blr 5061; 5062; CHECK-P9-LABEL: st_disjoint_align32_float_uint16_t: 5063; CHECK-P9: # %bb.0: # %entry 5064; CHECK-P9-NEXT: xscvdpuxws f0, f1 5065; CHECK-P9-NEXT: lis r4, -15264 5066; CHECK-P9-NEXT: and r3, r3, r4 5067; CHECK-P9-NEXT: lis r4, 15258 5068; CHECK-P9-NEXT: ori r4, r4, 41712 5069; CHECK-P9-NEXT: stxsihx f0, r3, r4 5070; CHECK-P9-NEXT: blr 5071; 5072; CHECK-P8-LABEL: st_disjoint_align32_float_uint16_t: 5073; CHECK-P8: # %bb.0: # %entry 5074; CHECK-P8-NEXT: xscvdpsxws f0, f1 5075; CHECK-P8-NEXT: lis r4, -15264 5076; CHECK-P8-NEXT: lis r6, 15258 5077; CHECK-P8-NEXT: and r3, r3, r4 5078; CHECK-P8-NEXT: ori r4, r6, 41712 5079; CHECK-P8-NEXT: mffprwz r5, f0 5080; CHECK-P8-NEXT: sthx r5, r3, r4 5081; CHECK-P8-NEXT: blr 5082entry: 5083 %and = and i64 %ptr, -1000341504 5084 %conv = fptoui float %str to i16 5085 %or = or i64 %and, 999990000 5086 %0 = inttoptr i64 %or to i16* 5087 store i16 %conv, i16* %0, align 16 5088 ret void 5089} 5090 5091; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5092define dso_local void @st_not_disjoint64_float_uint16_t(i64 %ptr, float %str) { 5093; CHECK-P10-LABEL: st_not_disjoint64_float_uint16_t: 5094; CHECK-P10: # %bb.0: # %entry 5095; CHECK-P10-NEXT: xscvdpuxws f0, f1 5096; CHECK-P10-NEXT: pli r4, 232 5097; CHECK-P10-NEXT: pli r5, 3567587329 5098; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5099; CHECK-P10-NEXT: or r3, r3, r5 5100; CHECK-P10-NEXT: stxsihx f0, 0, r3 5101; CHECK-P10-NEXT: blr 5102; 5103; CHECK-P9-LABEL: st_not_disjoint64_float_uint16_t: 5104; CHECK-P9: # %bb.0: # %entry 5105; CHECK-P9-NEXT: li r4, 29 5106; CHECK-P9-NEXT: xscvdpuxws f0, f1 5107; CHECK-P9-NEXT: rldic r4, r4, 35, 24 5108; CHECK-P9-NEXT: oris r4, r4, 54437 5109; CHECK-P9-NEXT: ori r4, r4, 4097 5110; CHECK-P9-NEXT: or r3, r3, r4 5111; CHECK-P9-NEXT: stxsihx f0, 0, r3 5112; CHECK-P9-NEXT: blr 5113; 5114; CHECK-P8-LABEL: st_not_disjoint64_float_uint16_t: 5115; CHECK-P8: # %bb.0: # %entry 5116; CHECK-P8-NEXT: xscvdpsxws f0, f1 5117; CHECK-P8-NEXT: li r4, 29 5118; CHECK-P8-NEXT: rldic r4, r4, 35, 24 5119; CHECK-P8-NEXT: oris r4, r4, 54437 5120; CHECK-P8-NEXT: ori r4, r4, 4097 5121; CHECK-P8-NEXT: or r3, r3, r4 5122; CHECK-P8-NEXT: mffprwz r5, f0 5123; CHECK-P8-NEXT: sth r5, 0(r3) 5124; CHECK-P8-NEXT: blr 5125entry: 5126 %conv = fptoui float %str to i16 5127 %or = or i64 %ptr, 1000000000001 5128 %0 = inttoptr i64 %or to i16* 5129 store i16 %conv, i16* %0, align 2 5130 ret void 5131} 5132 5133; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5134define dso_local void @st_disjoint_align64_float_uint16_t(i64 %ptr, float %str) { 5135; CHECK-P10-LABEL: st_disjoint_align64_float_uint16_t: 5136; CHECK-P10: # %bb.0: # %entry 5137; CHECK-P10-NEXT: xscvdpuxws f0, f1 5138; CHECK-P10-NEXT: pli r4, 244140625 5139; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5140; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5141; CHECK-P10-NEXT: stxsihx f0, r3, r4 5142; CHECK-P10-NEXT: blr 5143; 5144; CHECK-P9-LABEL: st_disjoint_align64_float_uint16_t: 5145; CHECK-P9: # %bb.0: # %entry 5146; CHECK-P9-NEXT: xscvdpuxws f0, f1 5147; CHECK-P9-NEXT: lis r4, 3725 5148; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 5149; CHECK-P9-NEXT: ori r4, r4, 19025 5150; CHECK-P9-NEXT: rldic r4, r4, 12, 24 5151; CHECK-P9-NEXT: stxsihx f0, r3, r4 5152; CHECK-P9-NEXT: blr 5153; 5154; CHECK-P8-LABEL: st_disjoint_align64_float_uint16_t: 5155; CHECK-P8: # %bb.0: # %entry 5156; CHECK-P8-NEXT: xscvdpsxws f0, f1 5157; CHECK-P8-NEXT: lis r4, 3725 5158; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 5159; CHECK-P8-NEXT: ori r4, r4, 19025 5160; CHECK-P8-NEXT: rldic r4, r4, 12, 24 5161; CHECK-P8-NEXT: mffprwz r5, f0 5162; CHECK-P8-NEXT: sthx r5, r3, r4 5163; CHECK-P8-NEXT: blr 5164entry: 5165 %and = and i64 %ptr, -1099511627776 5166 %conv = fptoui float %str to i16 5167 %or = or i64 %and, 1000000000000 5168 %0 = inttoptr i64 %or to i16* 5169 store i16 %conv, i16* %0, align 4096 5170 ret void 5171} 5172 5173; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5174define dso_local void @st_cst_align16_float_uint16_t(float %str) { 5175; CHECK-POSTP8-LABEL: st_cst_align16_float_uint16_t: 5176; CHECK-POSTP8: # %bb.0: # %entry 5177; CHECK-POSTP8-NEXT: xscvdpuxws f0, f1 5178; CHECK-POSTP8-NEXT: li r3, 4080 5179; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5180; CHECK-POSTP8-NEXT: blr 5181; 5182; CHECK-P8-LABEL: st_cst_align16_float_uint16_t: 5183; CHECK-P8: # %bb.0: # %entry 5184; CHECK-P8-NEXT: xscvdpsxws f0, f1 5185; CHECK-P8-NEXT: mffprwz r3, f0 5186; CHECK-P8-NEXT: sth r3, 4080(0) 5187; CHECK-P8-NEXT: blr 5188entry: 5189 %conv = fptoui float %str to i16 5190 store i16 %conv, i16* inttoptr (i64 4080 to i16*), align 16 5191 ret void 5192} 5193 5194; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5195define dso_local void @st_cst_align32_float_uint16_t(float %str) { 5196; CHECK-P10-LABEL: st_cst_align32_float_uint16_t: 5197; CHECK-P10: # %bb.0: # %entry 5198; CHECK-P10-NEXT: xscvdpuxws f0, f1 5199; CHECK-P10-NEXT: pli r3, 9999900 5200; CHECK-P10-NEXT: stxsihx f0, 0, r3 5201; CHECK-P10-NEXT: blr 5202; 5203; CHECK-P9-LABEL: st_cst_align32_float_uint16_t: 5204; CHECK-P9: # %bb.0: # %entry 5205; CHECK-P9-NEXT: xscvdpuxws f0, f1 5206; CHECK-P9-NEXT: lis r3, 152 5207; CHECK-P9-NEXT: ori r3, r3, 38428 5208; CHECK-P9-NEXT: stxsihx f0, 0, r3 5209; CHECK-P9-NEXT: blr 5210; 5211; CHECK-P8-LABEL: st_cst_align32_float_uint16_t: 5212; CHECK-P8: # %bb.0: # %entry 5213; CHECK-P8-NEXT: xscvdpsxws f0, f1 5214; CHECK-P8-NEXT: lis r4, 153 5215; CHECK-P8-NEXT: mffprwz r3, f0 5216; CHECK-P8-NEXT: sth r3, -27108(r4) 5217; CHECK-P8-NEXT: blr 5218entry: 5219 %conv = fptoui float %str to i16 5220 store i16 %conv, i16* inttoptr (i64 9999900 to i16*), align 4 5221 ret void 5222} 5223 5224; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5225define dso_local void @st_cst_align64_float_uint16_t(float %str) { 5226; CHECK-P10-LABEL: st_cst_align64_float_uint16_t: 5227; CHECK-P10: # %bb.0: # %entry 5228; CHECK-P10-NEXT: xscvdpuxws f0, f1 5229; CHECK-P10-NEXT: pli r3, 244140625 5230; CHECK-P10-NEXT: rldic r3, r3, 12, 24 5231; CHECK-P10-NEXT: stxsihx f0, 0, r3 5232; CHECK-P10-NEXT: blr 5233; 5234; CHECK-P9-LABEL: st_cst_align64_float_uint16_t: 5235; CHECK-P9: # %bb.0: # %entry 5236; CHECK-P9-NEXT: xscvdpuxws f0, f1 5237; CHECK-P9-NEXT: lis r3, 3725 5238; CHECK-P9-NEXT: ori r3, r3, 19025 5239; CHECK-P9-NEXT: rldic r3, r3, 12, 24 5240; CHECK-P9-NEXT: stxsihx f0, 0, r3 5241; CHECK-P9-NEXT: blr 5242; 5243; CHECK-P8-LABEL: st_cst_align64_float_uint16_t: 5244; CHECK-P8: # %bb.0: # %entry 5245; CHECK-P8-NEXT: xscvdpsxws f0, f1 5246; CHECK-P8-NEXT: lis r3, 3725 5247; CHECK-P8-NEXT: ori r3, r3, 19025 5248; CHECK-P8-NEXT: rldic r3, r3, 12, 24 5249; CHECK-P8-NEXT: mffprwz r4, f0 5250; CHECK-P8-NEXT: sth r4, 0(r3) 5251; CHECK-P8-NEXT: blr 5252entry: 5253 %conv = fptoui float %str to i16 5254 store i16 %conv, i16* inttoptr (i64 1000000000000 to i16*), align 4096 5255 ret void 5256} 5257 5258; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5259define dso_local void @st_0_float_int16_t(i64 %ptr, float %str) { 5260; CHECK-POSTP8-LABEL: st_0_float_int16_t: 5261; CHECK-POSTP8: # %bb.0: # %entry 5262; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 5263; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5264; CHECK-POSTP8-NEXT: blr 5265; 5266; CHECK-P8-LABEL: st_0_float_int16_t: 5267; CHECK-P8: # %bb.0: # %entry 5268; CHECK-P8-NEXT: xscvdpsxws f0, f1 5269; CHECK-P8-NEXT: mffprwz r4, f0 5270; CHECK-P8-NEXT: sth r4, 0(r3) 5271; CHECK-P8-NEXT: blr 5272entry: 5273 %conv = fptosi float %str to i16 5274 %0 = inttoptr i64 %ptr to i16* 5275 store i16 %conv, i16* %0, align 2 5276 ret void 5277} 5278 5279; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5280define dso_local void @st_align16_float_int16_t(i8* nocapture %ptr, float %str) { 5281; CHECK-POSTP8-LABEL: st_align16_float_int16_t: 5282; CHECK-POSTP8: # %bb.0: # %entry 5283; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 5284; CHECK-POSTP8-NEXT: addi r3, r3, 8 5285; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5286; CHECK-POSTP8-NEXT: blr 5287; 5288; CHECK-P8-LABEL: st_align16_float_int16_t: 5289; CHECK-P8: # %bb.0: # %entry 5290; CHECK-P8-NEXT: xscvdpsxws f0, f1 5291; CHECK-P8-NEXT: mffprwz r4, f0 5292; CHECK-P8-NEXT: sth r4, 8(r3) 5293; CHECK-P8-NEXT: blr 5294entry: 5295 %conv = fptosi float %str to i16 5296 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 5297 %0 = bitcast i8* %add.ptr to i16* 5298 store i16 %conv, i16* %0, align 2 5299 ret void 5300} 5301 5302; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5303define dso_local void @st_align32_float_int16_t(i8* nocapture %ptr, float %str) { 5304; CHECK-P10-LABEL: st_align32_float_int16_t: 5305; CHECK-P10: # %bb.0: # %entry 5306; CHECK-P10-NEXT: xscvdpsxws f0, f1 5307; CHECK-P10-NEXT: pli r4, 99999000 5308; CHECK-P10-NEXT: stxsihx f0, r3, r4 5309; CHECK-P10-NEXT: blr 5310; 5311; CHECK-P9-LABEL: st_align32_float_int16_t: 5312; CHECK-P9: # %bb.0: # %entry 5313; CHECK-P9-NEXT: xscvdpsxws f0, f1 5314; CHECK-P9-NEXT: lis r4, 1525 5315; CHECK-P9-NEXT: ori r4, r4, 56600 5316; CHECK-P9-NEXT: stxsihx f0, r3, r4 5317; CHECK-P9-NEXT: blr 5318; 5319; CHECK-P8-LABEL: st_align32_float_int16_t: 5320; CHECK-P8: # %bb.0: # %entry 5321; CHECK-P8-NEXT: xscvdpsxws f0, f1 5322; CHECK-P8-NEXT: lis r4, 1525 5323; CHECK-P8-NEXT: ori r4, r4, 56600 5324; CHECK-P8-NEXT: mffprwz r5, f0 5325; CHECK-P8-NEXT: sthx r5, r3, r4 5326; CHECK-P8-NEXT: blr 5327entry: 5328 %conv = fptosi float %str to i16 5329 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 5330 %0 = bitcast i8* %add.ptr to i16* 5331 store i16 %conv, i16* %0, align 2 5332 ret void 5333} 5334 5335; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5336define dso_local void @st_align64_float_int16_t(i8* nocapture %ptr, float %str) { 5337; CHECK-P10-LABEL: st_align64_float_int16_t: 5338; CHECK-P10: # %bb.0: # %entry 5339; CHECK-P10-NEXT: xscvdpsxws f0, f1 5340; CHECK-P10-NEXT: pli r4, 244140625 5341; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5342; CHECK-P10-NEXT: stxsihx f0, r3, r4 5343; CHECK-P10-NEXT: blr 5344; 5345; CHECK-P9-LABEL: st_align64_float_int16_t: 5346; CHECK-P9: # %bb.0: # %entry 5347; CHECK-P9-NEXT: xscvdpsxws f0, f1 5348; CHECK-P9-NEXT: lis r4, 3725 5349; CHECK-P9-NEXT: ori r4, r4, 19025 5350; CHECK-P9-NEXT: rldic r4, r4, 12, 24 5351; CHECK-P9-NEXT: stxsihx f0, r3, r4 5352; CHECK-P9-NEXT: blr 5353; 5354; CHECK-P8-LABEL: st_align64_float_int16_t: 5355; CHECK-P8: # %bb.0: # %entry 5356; CHECK-P8-NEXT: xscvdpsxws f0, f1 5357; CHECK-P8-NEXT: lis r4, 3725 5358; CHECK-P8-NEXT: ori r4, r4, 19025 5359; CHECK-P8-NEXT: rldic r4, r4, 12, 24 5360; CHECK-P8-NEXT: mffprwz r5, f0 5361; CHECK-P8-NEXT: sthx r5, r3, r4 5362; CHECK-P8-NEXT: blr 5363entry: 5364 %conv = fptosi float %str to i16 5365 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 5366 %0 = bitcast i8* %add.ptr to i16* 5367 store i16 %conv, i16* %0, align 2 5368 ret void 5369} 5370 5371; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5372define dso_local void @st_reg_float_int16_t(i8* nocapture %ptr, i64 %off, float %str) { 5373; CHECK-POSTP8-LABEL: st_reg_float_int16_t: 5374; CHECK-POSTP8: # %bb.0: # %entry 5375; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 5376; CHECK-POSTP8-NEXT: stxsihx f0, r3, r4 5377; CHECK-POSTP8-NEXT: blr 5378; 5379; CHECK-P8-LABEL: st_reg_float_int16_t: 5380; CHECK-P8: # %bb.0: # %entry 5381; CHECK-P8-NEXT: xscvdpsxws f0, f1 5382; CHECK-P8-NEXT: mffprwz r5, f0 5383; CHECK-P8-NEXT: sthx r5, r3, r4 5384; CHECK-P8-NEXT: blr 5385entry: 5386 %conv = fptosi float %str to i16 5387 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 5388 %0 = bitcast i8* %add.ptr to i16* 5389 store i16 %conv, i16* %0, align 2 5390 ret void 5391} 5392 5393; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5394define dso_local void @st_or1_float_int16_t(i64 %ptr, i8 zeroext %off, float %str) { 5395; CHECK-POSTP8-LABEL: st_or1_float_int16_t: 5396; CHECK-POSTP8: # %bb.0: # %entry 5397; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 5398; CHECK-POSTP8-NEXT: or r3, r4, r3 5399; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5400; CHECK-POSTP8-NEXT: blr 5401; 5402; CHECK-P8-LABEL: st_or1_float_int16_t: 5403; CHECK-P8: # %bb.0: # %entry 5404; CHECK-P8-NEXT: xscvdpsxws f0, f1 5405; CHECK-P8-NEXT: or r3, r4, r3 5406; CHECK-P8-NEXT: mffprwz r5, f0 5407; CHECK-P8-NEXT: sth r5, 0(r3) 5408; CHECK-P8-NEXT: blr 5409entry: 5410 %conv = fptosi float %str to i16 5411 %conv1 = zext i8 %off to i64 5412 %or = or i64 %conv1, %ptr 5413 %0 = inttoptr i64 %or to i16* 5414 store i16 %conv, i16* %0, align 2 5415 ret void 5416} 5417 5418; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5419define dso_local void @st_not_disjoint16_float_int16_t(i64 %ptr, float %str) { 5420; CHECK-POSTP8-LABEL: st_not_disjoint16_float_int16_t: 5421; CHECK-POSTP8: # %bb.0: # %entry 5422; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 5423; CHECK-POSTP8-NEXT: ori r3, r3, 6 5424; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5425; CHECK-POSTP8-NEXT: blr 5426; 5427; CHECK-P8-LABEL: st_not_disjoint16_float_int16_t: 5428; CHECK-P8: # %bb.0: # %entry 5429; CHECK-P8-NEXT: xscvdpsxws f0, f1 5430; CHECK-P8-NEXT: ori r3, r3, 6 5431; CHECK-P8-NEXT: mffprwz r4, f0 5432; CHECK-P8-NEXT: sth r4, 0(r3) 5433; CHECK-P8-NEXT: blr 5434entry: 5435 %conv = fptosi float %str to i16 5436 %or = or i64 %ptr, 6 5437 %0 = inttoptr i64 %or to i16* 5438 store i16 %conv, i16* %0, align 2 5439 ret void 5440} 5441 5442; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5443define dso_local void @st_disjoint_align16_float_int16_t(i64 %ptr, float %str) { 5444; CHECK-POSTP8-LABEL: st_disjoint_align16_float_int16_t: 5445; CHECK-POSTP8: # %bb.0: # %entry 5446; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 5447; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 5448; CHECK-POSTP8-NEXT: ori r3, r3, 24 5449; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5450; CHECK-POSTP8-NEXT: blr 5451; 5452; CHECK-P8-LABEL: st_disjoint_align16_float_int16_t: 5453; CHECK-P8: # %bb.0: # %entry 5454; CHECK-P8-NEXT: xscvdpsxws f0, f1 5455; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 5456; CHECK-P8-NEXT: mffprwz r4, f0 5457; CHECK-P8-NEXT: sth r4, 24(r3) 5458; CHECK-P8-NEXT: blr 5459entry: 5460 %and = and i64 %ptr, -4096 5461 %conv = fptosi float %str to i16 5462 %or = or i64 %and, 24 5463 %0 = inttoptr i64 %or to i16* 5464 store i16 %conv, i16* %0, align 8 5465 ret void 5466} 5467 5468; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5469define dso_local void @st_not_disjoint32_float_int16_t(i64 %ptr, float %str) { 5470; CHECK-POSTP8-LABEL: st_not_disjoint32_float_int16_t: 5471; CHECK-POSTP8: # %bb.0: # %entry 5472; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 5473; CHECK-POSTP8-NEXT: ori r3, r3, 34463 5474; CHECK-POSTP8-NEXT: oris r3, r3, 1 5475; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5476; CHECK-POSTP8-NEXT: blr 5477; 5478; CHECK-P8-LABEL: st_not_disjoint32_float_int16_t: 5479; CHECK-P8: # %bb.0: # %entry 5480; CHECK-P8-NEXT: xscvdpsxws f0, f1 5481; CHECK-P8-NEXT: ori r3, r3, 34463 5482; CHECK-P8-NEXT: oris r3, r3, 1 5483; CHECK-P8-NEXT: mffprwz r4, f0 5484; CHECK-P8-NEXT: sth r4, 0(r3) 5485; CHECK-P8-NEXT: blr 5486entry: 5487 %conv = fptosi float %str to i16 5488 %or = or i64 %ptr, 99999 5489 %0 = inttoptr i64 %or to i16* 5490 store i16 %conv, i16* %0, align 2 5491 ret void 5492} 5493 5494; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5495define dso_local void @st_disjoint_align32_float_int16_t(i64 %ptr, float %str) { 5496; CHECK-P10-LABEL: st_disjoint_align32_float_int16_t: 5497; CHECK-P10: # %bb.0: # %entry 5498; CHECK-P10-NEXT: xscvdpsxws f0, f1 5499; CHECK-P10-NEXT: lis r4, -15264 5500; CHECK-P10-NEXT: and r3, r3, r4 5501; CHECK-P10-NEXT: pli r4, 999990000 5502; CHECK-P10-NEXT: stxsihx f0, r3, r4 5503; CHECK-P10-NEXT: blr 5504; 5505; CHECK-P9-LABEL: st_disjoint_align32_float_int16_t: 5506; CHECK-P9: # %bb.0: # %entry 5507; CHECK-P9-NEXT: xscvdpsxws f0, f1 5508; CHECK-P9-NEXT: lis r4, -15264 5509; CHECK-P9-NEXT: and r3, r3, r4 5510; CHECK-P9-NEXT: lis r4, 15258 5511; CHECK-P9-NEXT: ori r4, r4, 41712 5512; CHECK-P9-NEXT: stxsihx f0, r3, r4 5513; CHECK-P9-NEXT: blr 5514; 5515; CHECK-P8-LABEL: st_disjoint_align32_float_int16_t: 5516; CHECK-P8: # %bb.0: # %entry 5517; CHECK-P8-NEXT: xscvdpsxws f0, f1 5518; CHECK-P8-NEXT: lis r4, -15264 5519; CHECK-P8-NEXT: lis r6, 15258 5520; CHECK-P8-NEXT: and r3, r3, r4 5521; CHECK-P8-NEXT: ori r4, r6, 41712 5522; CHECK-P8-NEXT: mffprwz r5, f0 5523; CHECK-P8-NEXT: sthx r5, r3, r4 5524; CHECK-P8-NEXT: blr 5525entry: 5526 %and = and i64 %ptr, -1000341504 5527 %conv = fptosi float %str to i16 5528 %or = or i64 %and, 999990000 5529 %0 = inttoptr i64 %or to i16* 5530 store i16 %conv, i16* %0, align 16 5531 ret void 5532} 5533 5534; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5535define dso_local void @st_not_disjoint64_float_int16_t(i64 %ptr, float %str) { 5536; CHECK-P10-LABEL: st_not_disjoint64_float_int16_t: 5537; CHECK-P10: # %bb.0: # %entry 5538; CHECK-P10-NEXT: xscvdpsxws f0, f1 5539; CHECK-P10-NEXT: pli r4, 232 5540; CHECK-P10-NEXT: pli r5, 3567587329 5541; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5542; CHECK-P10-NEXT: or r3, r3, r5 5543; CHECK-P10-NEXT: stxsihx f0, 0, r3 5544; CHECK-P10-NEXT: blr 5545; 5546; CHECK-P9-LABEL: st_not_disjoint64_float_int16_t: 5547; CHECK-P9: # %bb.0: # %entry 5548; CHECK-P9-NEXT: li r4, 29 5549; CHECK-P9-NEXT: xscvdpsxws f0, f1 5550; CHECK-P9-NEXT: rldic r4, r4, 35, 24 5551; CHECK-P9-NEXT: oris r4, r4, 54437 5552; CHECK-P9-NEXT: ori r4, r4, 4097 5553; CHECK-P9-NEXT: or r3, r3, r4 5554; CHECK-P9-NEXT: stxsihx f0, 0, r3 5555; CHECK-P9-NEXT: blr 5556; 5557; CHECK-P8-LABEL: st_not_disjoint64_float_int16_t: 5558; CHECK-P8: # %bb.0: # %entry 5559; CHECK-P8-NEXT: xscvdpsxws f0, f1 5560; CHECK-P8-NEXT: li r4, 29 5561; CHECK-P8-NEXT: rldic r4, r4, 35, 24 5562; CHECK-P8-NEXT: oris r4, r4, 54437 5563; CHECK-P8-NEXT: ori r4, r4, 4097 5564; CHECK-P8-NEXT: or r3, r3, r4 5565; CHECK-P8-NEXT: mffprwz r5, f0 5566; CHECK-P8-NEXT: sth r5, 0(r3) 5567; CHECK-P8-NEXT: blr 5568entry: 5569 %conv = fptosi float %str to i16 5570 %or = or i64 %ptr, 1000000000001 5571 %0 = inttoptr i64 %or to i16* 5572 store i16 %conv, i16* %0, align 2 5573 ret void 5574} 5575 5576; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5577define dso_local void @st_disjoint_align64_float_int16_t(i64 %ptr, float %str) { 5578; CHECK-P10-LABEL: st_disjoint_align64_float_int16_t: 5579; CHECK-P10: # %bb.0: # %entry 5580; CHECK-P10-NEXT: xscvdpsxws f0, f1 5581; CHECK-P10-NEXT: pli r4, 244140625 5582; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5583; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5584; CHECK-P10-NEXT: stxsihx f0, r3, r4 5585; CHECK-P10-NEXT: blr 5586; 5587; CHECK-P9-LABEL: st_disjoint_align64_float_int16_t: 5588; CHECK-P9: # %bb.0: # %entry 5589; CHECK-P9-NEXT: xscvdpsxws f0, f1 5590; CHECK-P9-NEXT: lis r4, 3725 5591; CHECK-P9-NEXT: rldicr r3, r3, 0, 23 5592; CHECK-P9-NEXT: ori r4, r4, 19025 5593; CHECK-P9-NEXT: rldic r4, r4, 12, 24 5594; CHECK-P9-NEXT: stxsihx f0, r3, r4 5595; CHECK-P9-NEXT: blr 5596; 5597; CHECK-P8-LABEL: st_disjoint_align64_float_int16_t: 5598; CHECK-P8: # %bb.0: # %entry 5599; CHECK-P8-NEXT: xscvdpsxws f0, f1 5600; CHECK-P8-NEXT: lis r4, 3725 5601; CHECK-P8-NEXT: rldicr r3, r3, 0, 23 5602; CHECK-P8-NEXT: ori r4, r4, 19025 5603; CHECK-P8-NEXT: rldic r4, r4, 12, 24 5604; CHECK-P8-NEXT: mffprwz r5, f0 5605; CHECK-P8-NEXT: sthx r5, r3, r4 5606; CHECK-P8-NEXT: blr 5607entry: 5608 %and = and i64 %ptr, -1099511627776 5609 %conv = fptosi float %str to i16 5610 %or = or i64 %and, 1000000000000 5611 %0 = inttoptr i64 %or to i16* 5612 store i16 %conv, i16* %0, align 4096 5613 ret void 5614} 5615 5616; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5617define dso_local void @st_cst_align16_float_int16_t(float %str) { 5618; CHECK-POSTP8-LABEL: st_cst_align16_float_int16_t: 5619; CHECK-POSTP8: # %bb.0: # %entry 5620; CHECK-POSTP8-NEXT: xscvdpsxws f0, f1 5621; CHECK-POSTP8-NEXT: li r3, 4080 5622; CHECK-POSTP8-NEXT: stxsihx f0, 0, r3 5623; CHECK-POSTP8-NEXT: blr 5624; 5625; CHECK-P8-LABEL: st_cst_align16_float_int16_t: 5626; CHECK-P8: # %bb.0: # %entry 5627; CHECK-P8-NEXT: xscvdpsxws f0, f1 5628; CHECK-P8-NEXT: mffprwz r3, f0 5629; CHECK-P8-NEXT: sth r3, 4080(0) 5630; CHECK-P8-NEXT: blr 5631entry: 5632 %conv = fptosi float %str to i16 5633 store i16 %conv, i16* inttoptr (i64 4080 to i16*), align 16 5634 ret void 5635} 5636 5637; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5638define dso_local void @st_cst_align32_float_int16_t(float %str) { 5639; CHECK-P10-LABEL: st_cst_align32_float_int16_t: 5640; CHECK-P10: # %bb.0: # %entry 5641; CHECK-P10-NEXT: xscvdpsxws f0, f1 5642; CHECK-P10-NEXT: pli r3, 9999900 5643; CHECK-P10-NEXT: stxsihx f0, 0, r3 5644; CHECK-P10-NEXT: blr 5645; 5646; CHECK-P9-LABEL: st_cst_align32_float_int16_t: 5647; CHECK-P9: # %bb.0: # %entry 5648; CHECK-P9-NEXT: xscvdpsxws f0, f1 5649; CHECK-P9-NEXT: lis r3, 152 5650; CHECK-P9-NEXT: ori r3, r3, 38428 5651; CHECK-P9-NEXT: stxsihx f0, 0, r3 5652; CHECK-P9-NEXT: blr 5653; 5654; CHECK-P8-LABEL: st_cst_align32_float_int16_t: 5655; CHECK-P8: # %bb.0: # %entry 5656; CHECK-P8-NEXT: xscvdpsxws f0, f1 5657; CHECK-P8-NEXT: lis r4, 153 5658; CHECK-P8-NEXT: mffprwz r3, f0 5659; CHECK-P8-NEXT: sth r3, -27108(r4) 5660; CHECK-P8-NEXT: blr 5661entry: 5662 %conv = fptosi float %str to i16 5663 store i16 %conv, i16* inttoptr (i64 9999900 to i16*), align 4 5664 ret void 5665} 5666 5667; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5668define dso_local void @st_cst_align64_float_int16_t(float %str) { 5669; CHECK-P10-LABEL: st_cst_align64_float_int16_t: 5670; CHECK-P10: # %bb.0: # %entry 5671; CHECK-P10-NEXT: xscvdpsxws f0, f1 5672; CHECK-P10-NEXT: pli r3, 244140625 5673; CHECK-P10-NEXT: rldic r3, r3, 12, 24 5674; CHECK-P10-NEXT: stxsihx f0, 0, r3 5675; CHECK-P10-NEXT: blr 5676; 5677; CHECK-P9-LABEL: st_cst_align64_float_int16_t: 5678; CHECK-P9: # %bb.0: # %entry 5679; CHECK-P9-NEXT: xscvdpsxws f0, f1 5680; CHECK-P9-NEXT: lis r3, 3725 5681; CHECK-P9-NEXT: ori r3, r3, 19025 5682; CHECK-P9-NEXT: rldic r3, r3, 12, 24 5683; CHECK-P9-NEXT: stxsihx f0, 0, r3 5684; CHECK-P9-NEXT: blr 5685; 5686; CHECK-P8-LABEL: st_cst_align64_float_int16_t: 5687; CHECK-P8: # %bb.0: # %entry 5688; CHECK-P8-NEXT: xscvdpsxws f0, f1 5689; CHECK-P8-NEXT: lis r3, 3725 5690; CHECK-P8-NEXT: ori r3, r3, 19025 5691; CHECK-P8-NEXT: rldic r3, r3, 12, 24 5692; CHECK-P8-NEXT: mffprwz r4, f0 5693; CHECK-P8-NEXT: sth r4, 0(r3) 5694; CHECK-P8-NEXT: blr 5695entry: 5696 %conv = fptosi float %str to i16 5697 store i16 %conv, i16* inttoptr (i64 1000000000000 to i16*), align 4096 5698 ret void 5699} 5700 5701; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5702define dso_local void @st_0_float_uint32_t(i64 %ptr, float %str) { 5703; CHECK-LABEL: st_0_float_uint32_t: 5704; CHECK: # %bb.0: # %entry 5705; CHECK-NEXT: xscvdpuxws f0, f1 5706; CHECK-NEXT: stfiwx f0, 0, r3 5707; CHECK-NEXT: blr 5708entry: 5709 %conv = fptoui float %str to i32 5710 %0 = inttoptr i64 %ptr to i32* 5711 store i32 %conv, i32* %0, align 4 5712 ret void 5713} 5714 5715; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5716define dso_local void @st_align16_float_uint32_t(i8* nocapture %ptr, float %str) { 5717; CHECK-LABEL: st_align16_float_uint32_t: 5718; CHECK: # %bb.0: # %entry 5719; CHECK-NEXT: xscvdpuxws f0, f1 5720; CHECK-NEXT: addi r3, r3, 8 5721; CHECK-NEXT: stfiwx f0, 0, r3 5722; CHECK-NEXT: blr 5723entry: 5724 %conv = fptoui float %str to i32 5725 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 5726 %0 = bitcast i8* %add.ptr to i32* 5727 store i32 %conv, i32* %0, align 4 5728 ret void 5729} 5730 5731; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5732define dso_local void @st_align32_float_uint32_t(i8* nocapture %ptr, float %str) { 5733; CHECK-P10-LABEL: st_align32_float_uint32_t: 5734; CHECK-P10: # %bb.0: # %entry 5735; CHECK-P10-NEXT: xscvdpuxws f0, f1 5736; CHECK-P10-NEXT: pli r4, 99999000 5737; CHECK-P10-NEXT: stfiwx f0, r3, r4 5738; CHECK-P10-NEXT: blr 5739; 5740; CHECK-PREP10-LABEL: st_align32_float_uint32_t: 5741; CHECK-PREP10: # %bb.0: # %entry 5742; CHECK-PREP10-NEXT: xscvdpuxws f0, f1 5743; CHECK-PREP10-NEXT: lis r4, 1525 5744; CHECK-PREP10-NEXT: ori r4, r4, 56600 5745; CHECK-PREP10-NEXT: stfiwx f0, r3, r4 5746; CHECK-PREP10-NEXT: blr 5747entry: 5748 %conv = fptoui float %str to i32 5749 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 5750 %0 = bitcast i8* %add.ptr to i32* 5751 store i32 %conv, i32* %0, align 4 5752 ret void 5753} 5754 5755; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5756define dso_local void @st_align64_float_uint32_t(i8* nocapture %ptr, float %str) { 5757; CHECK-P10-LABEL: st_align64_float_uint32_t: 5758; CHECK-P10: # %bb.0: # %entry 5759; CHECK-P10-NEXT: xscvdpuxws f0, f1 5760; CHECK-P10-NEXT: pli r4, 244140625 5761; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5762; CHECK-P10-NEXT: stfiwx f0, r3, r4 5763; CHECK-P10-NEXT: blr 5764; 5765; CHECK-PREP10-LABEL: st_align64_float_uint32_t: 5766; CHECK-PREP10: # %bb.0: # %entry 5767; CHECK-PREP10-NEXT: xscvdpuxws f0, f1 5768; CHECK-PREP10-NEXT: lis r4, 3725 5769; CHECK-PREP10-NEXT: ori r4, r4, 19025 5770; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5771; CHECK-PREP10-NEXT: stfiwx f0, r3, r4 5772; CHECK-PREP10-NEXT: blr 5773entry: 5774 %conv = fptoui float %str to i32 5775 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 5776 %0 = bitcast i8* %add.ptr to i32* 5777 store i32 %conv, i32* %0, align 4 5778 ret void 5779} 5780 5781; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5782define dso_local void @st_reg_float_uint32_t(i8* nocapture %ptr, i64 %off, float %str) { 5783; CHECK-LABEL: st_reg_float_uint32_t: 5784; CHECK: # %bb.0: # %entry 5785; CHECK-NEXT: xscvdpuxws f0, f1 5786; CHECK-NEXT: stfiwx f0, r3, r4 5787; CHECK-NEXT: blr 5788entry: 5789 %conv = fptoui float %str to i32 5790 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 5791 %0 = bitcast i8* %add.ptr to i32* 5792 store i32 %conv, i32* %0, align 4 5793 ret void 5794} 5795 5796; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5797define dso_local void @st_or1_float_uint32_t(i64 %ptr, i8 zeroext %off, float %str) { 5798; CHECK-LABEL: st_or1_float_uint32_t: 5799; CHECK: # %bb.0: # %entry 5800; CHECK-NEXT: xscvdpuxws f0, f1 5801; CHECK-NEXT: or r3, r4, r3 5802; CHECK-NEXT: stfiwx f0, 0, r3 5803; CHECK-NEXT: blr 5804entry: 5805 %conv = fptoui float %str to i32 5806 %conv1 = zext i8 %off to i64 5807 %or = or i64 %conv1, %ptr 5808 %0 = inttoptr i64 %or to i32* 5809 store i32 %conv, i32* %0, align 4 5810 ret void 5811} 5812 5813; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5814define dso_local void @st_not_disjoint16_float_uint32_t(i64 %ptr, float %str) { 5815; CHECK-LABEL: st_not_disjoint16_float_uint32_t: 5816; CHECK: # %bb.0: # %entry 5817; CHECK-NEXT: xscvdpuxws f0, f1 5818; CHECK-NEXT: ori r3, r3, 6 5819; CHECK-NEXT: stfiwx f0, 0, r3 5820; CHECK-NEXT: blr 5821entry: 5822 %conv = fptoui float %str to i32 5823 %or = or i64 %ptr, 6 5824 %0 = inttoptr i64 %or to i32* 5825 store i32 %conv, i32* %0, align 4 5826 ret void 5827} 5828 5829; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5830define dso_local void @st_disjoint_align16_float_uint32_t(i64 %ptr, float %str) { 5831; CHECK-LABEL: st_disjoint_align16_float_uint32_t: 5832; CHECK: # %bb.0: # %entry 5833; CHECK-NEXT: xscvdpuxws f0, f1 5834; CHECK-NEXT: rldicr r3, r3, 0, 51 5835; CHECK-NEXT: ori r3, r3, 24 5836; CHECK-NEXT: stfiwx f0, 0, r3 5837; CHECK-NEXT: blr 5838entry: 5839 %and = and i64 %ptr, -4096 5840 %conv = fptoui float %str to i32 5841 %or = or i64 %and, 24 5842 %0 = inttoptr i64 %or to i32* 5843 store i32 %conv, i32* %0, align 8 5844 ret void 5845} 5846 5847; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5848define dso_local void @st_not_disjoint32_float_uint32_t(i64 %ptr, float %str) { 5849; CHECK-LABEL: st_not_disjoint32_float_uint32_t: 5850; CHECK: # %bb.0: # %entry 5851; CHECK-NEXT: xscvdpuxws f0, f1 5852; CHECK-NEXT: ori r3, r3, 34463 5853; CHECK-NEXT: oris r3, r3, 1 5854; CHECK-NEXT: stfiwx f0, 0, r3 5855; CHECK-NEXT: blr 5856entry: 5857 %conv = fptoui float %str to i32 5858 %or = or i64 %ptr, 99999 5859 %0 = inttoptr i64 %or to i32* 5860 store i32 %conv, i32* %0, align 4 5861 ret void 5862} 5863 5864; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5865define dso_local void @st_disjoint_align32_float_uint32_t(i64 %ptr, float %str) { 5866; CHECK-P10-LABEL: st_disjoint_align32_float_uint32_t: 5867; CHECK-P10: # %bb.0: # %entry 5868; CHECK-P10-NEXT: xscvdpuxws f0, f1 5869; CHECK-P10-NEXT: lis r4, -15264 5870; CHECK-P10-NEXT: and r3, r3, r4 5871; CHECK-P10-NEXT: pli r4, 999990000 5872; CHECK-P10-NEXT: stfiwx f0, r3, r4 5873; CHECK-P10-NEXT: blr 5874; 5875; CHECK-P9-LABEL: st_disjoint_align32_float_uint32_t: 5876; CHECK-P9: # %bb.0: # %entry 5877; CHECK-P9-NEXT: xscvdpuxws f0, f1 5878; CHECK-P9-NEXT: lis r4, -15264 5879; CHECK-P9-NEXT: and r3, r3, r4 5880; CHECK-P9-NEXT: lis r4, 15258 5881; CHECK-P9-NEXT: ori r4, r4, 41712 5882; CHECK-P9-NEXT: stfiwx f0, r3, r4 5883; CHECK-P9-NEXT: blr 5884; 5885; CHECK-P8-LABEL: st_disjoint_align32_float_uint32_t: 5886; CHECK-P8: # %bb.0: # %entry 5887; CHECK-P8-NEXT: xscvdpuxws f0, f1 5888; CHECK-P8-NEXT: lis r4, -15264 5889; CHECK-P8-NEXT: lis r5, 15258 5890; CHECK-P8-NEXT: and r3, r3, r4 5891; CHECK-P8-NEXT: ori r4, r5, 41712 5892; CHECK-P8-NEXT: stfiwx f0, r3, r4 5893; CHECK-P8-NEXT: blr 5894entry: 5895 %and = and i64 %ptr, -1000341504 5896 %conv = fptoui float %str to i32 5897 %or = or i64 %and, 999990000 5898 %0 = inttoptr i64 %or to i32* 5899 store i32 %conv, i32* %0, align 16 5900 ret void 5901} 5902 5903; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5904define dso_local void @st_not_disjoint64_float_uint32_t(i64 %ptr, float %str) { 5905; CHECK-P10-LABEL: st_not_disjoint64_float_uint32_t: 5906; CHECK-P10: # %bb.0: # %entry 5907; CHECK-P10-NEXT: xscvdpuxws f0, f1 5908; CHECK-P10-NEXT: pli r4, 232 5909; CHECK-P10-NEXT: pli r5, 3567587329 5910; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 5911; CHECK-P10-NEXT: or r3, r3, r5 5912; CHECK-P10-NEXT: stfiwx f0, 0, r3 5913; CHECK-P10-NEXT: blr 5914; 5915; CHECK-P9-LABEL: st_not_disjoint64_float_uint32_t: 5916; CHECK-P9: # %bb.0: # %entry 5917; CHECK-P9-NEXT: li r4, 29 5918; CHECK-P9-NEXT: xscvdpuxws f0, f1 5919; CHECK-P9-NEXT: rldic r4, r4, 35, 24 5920; CHECK-P9-NEXT: oris r4, r4, 54437 5921; CHECK-P9-NEXT: ori r4, r4, 4097 5922; CHECK-P9-NEXT: or r3, r3, r4 5923; CHECK-P9-NEXT: stfiwx f0, 0, r3 5924; CHECK-P9-NEXT: blr 5925; 5926; CHECK-P8-LABEL: st_not_disjoint64_float_uint32_t: 5927; CHECK-P8: # %bb.0: # %entry 5928; CHECK-P8-NEXT: xscvdpuxws f0, f1 5929; CHECK-P8-NEXT: li r4, 29 5930; CHECK-P8-NEXT: rldic r4, r4, 35, 24 5931; CHECK-P8-NEXT: oris r4, r4, 54437 5932; CHECK-P8-NEXT: ori r4, r4, 4097 5933; CHECK-P8-NEXT: or r3, r3, r4 5934; CHECK-P8-NEXT: stfiwx f0, 0, r3 5935; CHECK-P8-NEXT: blr 5936entry: 5937 %conv = fptoui float %str to i32 5938 %or = or i64 %ptr, 1000000000001 5939 %0 = inttoptr i64 %or to i32* 5940 store i32 %conv, i32* %0, align 4 5941 ret void 5942} 5943 5944; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5945define dso_local void @st_disjoint_align64_float_uint32_t(i64 %ptr, float %str) { 5946; CHECK-P10-LABEL: st_disjoint_align64_float_uint32_t: 5947; CHECK-P10: # %bb.0: # %entry 5948; CHECK-P10-NEXT: xscvdpuxws f0, f1 5949; CHECK-P10-NEXT: pli r4, 244140625 5950; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 5951; CHECK-P10-NEXT: rldic r4, r4, 12, 24 5952; CHECK-P10-NEXT: stfiwx f0, r3, r4 5953; CHECK-P10-NEXT: blr 5954; 5955; CHECK-PREP10-LABEL: st_disjoint_align64_float_uint32_t: 5956; CHECK-PREP10: # %bb.0: # %entry 5957; CHECK-PREP10-NEXT: xscvdpuxws f0, f1 5958; CHECK-PREP10-NEXT: lis r4, 3725 5959; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 5960; CHECK-PREP10-NEXT: ori r4, r4, 19025 5961; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 5962; CHECK-PREP10-NEXT: stfiwx f0, r3, r4 5963; CHECK-PREP10-NEXT: blr 5964entry: 5965 %and = and i64 %ptr, -1099511627776 5966 %conv = fptoui float %str to i32 5967 %or = or i64 %and, 1000000000000 5968 %0 = inttoptr i64 %or to i32* 5969 store i32 %conv, i32* %0, align 4096 5970 ret void 5971} 5972 5973; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5974define dso_local void @st_cst_align16_float_uint32_t(float %str) { 5975; CHECK-LABEL: st_cst_align16_float_uint32_t: 5976; CHECK: # %bb.0: # %entry 5977; CHECK-NEXT: xscvdpuxws f0, f1 5978; CHECK-NEXT: li r3, 4080 5979; CHECK-NEXT: stfiwx f0, 0, r3 5980; CHECK-NEXT: blr 5981entry: 5982 %conv = fptoui float %str to i32 5983 store i32 %conv, i32* inttoptr (i64 4080 to i32*), align 16 5984 ret void 5985} 5986 5987; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 5988define dso_local void @st_cst_align32_float_uint32_t(float %str) { 5989; CHECK-P10-LABEL: st_cst_align32_float_uint32_t: 5990; CHECK-P10: # %bb.0: # %entry 5991; CHECK-P10-NEXT: xscvdpuxws f0, f1 5992; CHECK-P10-NEXT: pli r3, 9999900 5993; CHECK-P10-NEXT: stfiwx f0, 0, r3 5994; CHECK-P10-NEXT: blr 5995; 5996; CHECK-PREP10-LABEL: st_cst_align32_float_uint32_t: 5997; CHECK-PREP10: # %bb.0: # %entry 5998; CHECK-PREP10-NEXT: xscvdpuxws f0, f1 5999; CHECK-PREP10-NEXT: lis r3, 152 6000; CHECK-PREP10-NEXT: ori r3, r3, 38428 6001; CHECK-PREP10-NEXT: stfiwx f0, 0, r3 6002; CHECK-PREP10-NEXT: blr 6003entry: 6004 %conv = fptoui float %str to i32 6005 store i32 %conv, i32* inttoptr (i64 9999900 to i32*), align 4 6006 ret void 6007} 6008 6009; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6010define dso_local void @st_cst_align64_float_uint32_t(float %str) { 6011; CHECK-P10-LABEL: st_cst_align64_float_uint32_t: 6012; CHECK-P10: # %bb.0: # %entry 6013; CHECK-P10-NEXT: xscvdpuxws f0, f1 6014; CHECK-P10-NEXT: pli r3, 244140625 6015; CHECK-P10-NEXT: rldic r3, r3, 12, 24 6016; CHECK-P10-NEXT: stfiwx f0, 0, r3 6017; CHECK-P10-NEXT: blr 6018; 6019; CHECK-PREP10-LABEL: st_cst_align64_float_uint32_t: 6020; CHECK-PREP10: # %bb.0: # %entry 6021; CHECK-PREP10-NEXT: xscvdpuxws f0, f1 6022; CHECK-PREP10-NEXT: lis r3, 3725 6023; CHECK-PREP10-NEXT: ori r3, r3, 19025 6024; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 6025; CHECK-PREP10-NEXT: stfiwx f0, 0, r3 6026; CHECK-PREP10-NEXT: blr 6027entry: 6028 %conv = fptoui float %str to i32 6029 store i32 %conv, i32* inttoptr (i64 1000000000000 to i32*), align 4096 6030 ret void 6031} 6032 6033; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6034define dso_local void @st_0_float_int32_t(i64 %ptr, float %str) { 6035; CHECK-LABEL: st_0_float_int32_t: 6036; CHECK: # %bb.0: # %entry 6037; CHECK-NEXT: xscvdpsxws f0, f1 6038; CHECK-NEXT: stfiwx f0, 0, r3 6039; CHECK-NEXT: blr 6040entry: 6041 %conv = fptosi float %str to i32 6042 %0 = inttoptr i64 %ptr to i32* 6043 store i32 %conv, i32* %0, align 4 6044 ret void 6045} 6046 6047; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6048define dso_local void @st_align16_float_int32_t(i8* nocapture %ptr, float %str) { 6049; CHECK-LABEL: st_align16_float_int32_t: 6050; CHECK: # %bb.0: # %entry 6051; CHECK-NEXT: xscvdpsxws f0, f1 6052; CHECK-NEXT: addi r3, r3, 8 6053; CHECK-NEXT: stfiwx f0, 0, r3 6054; CHECK-NEXT: blr 6055entry: 6056 %conv = fptosi float %str to i32 6057 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 6058 %0 = bitcast i8* %add.ptr to i32* 6059 store i32 %conv, i32* %0, align 4 6060 ret void 6061} 6062 6063; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6064define dso_local void @st_align32_float_int32_t(i8* nocapture %ptr, float %str) { 6065; CHECK-P10-LABEL: st_align32_float_int32_t: 6066; CHECK-P10: # %bb.0: # %entry 6067; CHECK-P10-NEXT: xscvdpsxws f0, f1 6068; CHECK-P10-NEXT: pli r4, 99999000 6069; CHECK-P10-NEXT: stfiwx f0, r3, r4 6070; CHECK-P10-NEXT: blr 6071; 6072; CHECK-PREP10-LABEL: st_align32_float_int32_t: 6073; CHECK-PREP10: # %bb.0: # %entry 6074; CHECK-PREP10-NEXT: xscvdpsxws f0, f1 6075; CHECK-PREP10-NEXT: lis r4, 1525 6076; CHECK-PREP10-NEXT: ori r4, r4, 56600 6077; CHECK-PREP10-NEXT: stfiwx f0, r3, r4 6078; CHECK-PREP10-NEXT: blr 6079entry: 6080 %conv = fptosi float %str to i32 6081 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 6082 %0 = bitcast i8* %add.ptr to i32* 6083 store i32 %conv, i32* %0, align 4 6084 ret void 6085} 6086 6087; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6088define dso_local void @st_align64_float_int32_t(i8* nocapture %ptr, float %str) { 6089; CHECK-P10-LABEL: st_align64_float_int32_t: 6090; CHECK-P10: # %bb.0: # %entry 6091; CHECK-P10-NEXT: xscvdpsxws f0, f1 6092; CHECK-P10-NEXT: pli r4, 244140625 6093; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6094; CHECK-P10-NEXT: stfiwx f0, r3, r4 6095; CHECK-P10-NEXT: blr 6096; 6097; CHECK-PREP10-LABEL: st_align64_float_int32_t: 6098; CHECK-PREP10: # %bb.0: # %entry 6099; CHECK-PREP10-NEXT: xscvdpsxws f0, f1 6100; CHECK-PREP10-NEXT: lis r4, 3725 6101; CHECK-PREP10-NEXT: ori r4, r4, 19025 6102; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6103; CHECK-PREP10-NEXT: stfiwx f0, r3, r4 6104; CHECK-PREP10-NEXT: blr 6105entry: 6106 %conv = fptosi float %str to i32 6107 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 6108 %0 = bitcast i8* %add.ptr to i32* 6109 store i32 %conv, i32* %0, align 4 6110 ret void 6111} 6112 6113; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6114define dso_local void @st_reg_float_int32_t(i8* nocapture %ptr, i64 %off, float %str) { 6115; CHECK-LABEL: st_reg_float_int32_t: 6116; CHECK: # %bb.0: # %entry 6117; CHECK-NEXT: xscvdpsxws f0, f1 6118; CHECK-NEXT: stfiwx f0, r3, r4 6119; CHECK-NEXT: blr 6120entry: 6121 %conv = fptosi float %str to i32 6122 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 6123 %0 = bitcast i8* %add.ptr to i32* 6124 store i32 %conv, i32* %0, align 4 6125 ret void 6126} 6127 6128; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6129define dso_local void @st_or1_float_int32_t(i64 %ptr, i8 zeroext %off, float %str) { 6130; CHECK-LABEL: st_or1_float_int32_t: 6131; CHECK: # %bb.0: # %entry 6132; CHECK-NEXT: xscvdpsxws f0, f1 6133; CHECK-NEXT: or r3, r4, r3 6134; CHECK-NEXT: stfiwx f0, 0, r3 6135; CHECK-NEXT: blr 6136entry: 6137 %conv = fptosi float %str to i32 6138 %conv1 = zext i8 %off to i64 6139 %or = or i64 %conv1, %ptr 6140 %0 = inttoptr i64 %or to i32* 6141 store i32 %conv, i32* %0, align 4 6142 ret void 6143} 6144 6145; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6146define dso_local void @st_not_disjoint16_float_int32_t(i64 %ptr, float %str) { 6147; CHECK-LABEL: st_not_disjoint16_float_int32_t: 6148; CHECK: # %bb.0: # %entry 6149; CHECK-NEXT: xscvdpsxws f0, f1 6150; CHECK-NEXT: ori r3, r3, 6 6151; CHECK-NEXT: stfiwx f0, 0, r3 6152; CHECK-NEXT: blr 6153entry: 6154 %conv = fptosi float %str to i32 6155 %or = or i64 %ptr, 6 6156 %0 = inttoptr i64 %or to i32* 6157 store i32 %conv, i32* %0, align 4 6158 ret void 6159} 6160 6161; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6162define dso_local void @st_disjoint_align16_float_int32_t(i64 %ptr, float %str) { 6163; CHECK-LABEL: st_disjoint_align16_float_int32_t: 6164; CHECK: # %bb.0: # %entry 6165; CHECK-NEXT: xscvdpsxws f0, f1 6166; CHECK-NEXT: rldicr r3, r3, 0, 51 6167; CHECK-NEXT: ori r3, r3, 24 6168; CHECK-NEXT: stfiwx f0, 0, r3 6169; CHECK-NEXT: blr 6170entry: 6171 %and = and i64 %ptr, -4096 6172 %conv = fptosi float %str to i32 6173 %or = or i64 %and, 24 6174 %0 = inttoptr i64 %or to i32* 6175 store i32 %conv, i32* %0, align 8 6176 ret void 6177} 6178 6179; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6180define dso_local void @st_not_disjoint32_float_int32_t(i64 %ptr, float %str) { 6181; CHECK-LABEL: st_not_disjoint32_float_int32_t: 6182; CHECK: # %bb.0: # %entry 6183; CHECK-NEXT: xscvdpsxws f0, f1 6184; CHECK-NEXT: ori r3, r3, 34463 6185; CHECK-NEXT: oris r3, r3, 1 6186; CHECK-NEXT: stfiwx f0, 0, r3 6187; CHECK-NEXT: blr 6188entry: 6189 %conv = fptosi float %str to i32 6190 %or = or i64 %ptr, 99999 6191 %0 = inttoptr i64 %or to i32* 6192 store i32 %conv, i32* %0, align 4 6193 ret void 6194} 6195 6196; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6197define dso_local void @st_disjoint_align32_float_int32_t(i64 %ptr, float %str) { 6198; CHECK-P10-LABEL: st_disjoint_align32_float_int32_t: 6199; CHECK-P10: # %bb.0: # %entry 6200; CHECK-P10-NEXT: xscvdpsxws f0, f1 6201; CHECK-P10-NEXT: lis r4, -15264 6202; CHECK-P10-NEXT: and r3, r3, r4 6203; CHECK-P10-NEXT: pli r4, 999990000 6204; CHECK-P10-NEXT: stfiwx f0, r3, r4 6205; CHECK-P10-NEXT: blr 6206; 6207; CHECK-P9-LABEL: st_disjoint_align32_float_int32_t: 6208; CHECK-P9: # %bb.0: # %entry 6209; CHECK-P9-NEXT: xscvdpsxws f0, f1 6210; CHECK-P9-NEXT: lis r4, -15264 6211; CHECK-P9-NEXT: and r3, r3, r4 6212; CHECK-P9-NEXT: lis r4, 15258 6213; CHECK-P9-NEXT: ori r4, r4, 41712 6214; CHECK-P9-NEXT: stfiwx f0, r3, r4 6215; CHECK-P9-NEXT: blr 6216; 6217; CHECK-P8-LABEL: st_disjoint_align32_float_int32_t: 6218; CHECK-P8: # %bb.0: # %entry 6219; CHECK-P8-NEXT: xscvdpsxws f0, f1 6220; CHECK-P8-NEXT: lis r4, -15264 6221; CHECK-P8-NEXT: lis r5, 15258 6222; CHECK-P8-NEXT: and r3, r3, r4 6223; CHECK-P8-NEXT: ori r4, r5, 41712 6224; CHECK-P8-NEXT: stfiwx f0, r3, r4 6225; CHECK-P8-NEXT: blr 6226entry: 6227 %and = and i64 %ptr, -1000341504 6228 %conv = fptosi float %str to i32 6229 %or = or i64 %and, 999990000 6230 %0 = inttoptr i64 %or to i32* 6231 store i32 %conv, i32* %0, align 16 6232 ret void 6233} 6234 6235; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6236define dso_local void @st_not_disjoint64_float_int32_t(i64 %ptr, float %str) { 6237; CHECK-P10-LABEL: st_not_disjoint64_float_int32_t: 6238; CHECK-P10: # %bb.0: # %entry 6239; CHECK-P10-NEXT: xscvdpsxws f0, f1 6240; CHECK-P10-NEXT: pli r4, 232 6241; CHECK-P10-NEXT: pli r5, 3567587329 6242; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 6243; CHECK-P10-NEXT: or r3, r3, r5 6244; CHECK-P10-NEXT: stfiwx f0, 0, r3 6245; CHECK-P10-NEXT: blr 6246; 6247; CHECK-P9-LABEL: st_not_disjoint64_float_int32_t: 6248; CHECK-P9: # %bb.0: # %entry 6249; CHECK-P9-NEXT: li r4, 29 6250; CHECK-P9-NEXT: xscvdpsxws f0, f1 6251; CHECK-P9-NEXT: rldic r4, r4, 35, 24 6252; CHECK-P9-NEXT: oris r4, r4, 54437 6253; CHECK-P9-NEXT: ori r4, r4, 4097 6254; CHECK-P9-NEXT: or r3, r3, r4 6255; CHECK-P9-NEXT: stfiwx f0, 0, r3 6256; CHECK-P9-NEXT: blr 6257; 6258; CHECK-P8-LABEL: st_not_disjoint64_float_int32_t: 6259; CHECK-P8: # %bb.0: # %entry 6260; CHECK-P8-NEXT: xscvdpsxws f0, f1 6261; CHECK-P8-NEXT: li r4, 29 6262; CHECK-P8-NEXT: rldic r4, r4, 35, 24 6263; CHECK-P8-NEXT: oris r4, r4, 54437 6264; CHECK-P8-NEXT: ori r4, r4, 4097 6265; CHECK-P8-NEXT: or r3, r3, r4 6266; CHECK-P8-NEXT: stfiwx f0, 0, r3 6267; CHECK-P8-NEXT: blr 6268entry: 6269 %conv = fptosi float %str to i32 6270 %or = or i64 %ptr, 1000000000001 6271 %0 = inttoptr i64 %or to i32* 6272 store i32 %conv, i32* %0, align 4 6273 ret void 6274} 6275 6276; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6277define dso_local void @st_disjoint_align64_float_int32_t(i64 %ptr, float %str) { 6278; CHECK-P10-LABEL: st_disjoint_align64_float_int32_t: 6279; CHECK-P10: # %bb.0: # %entry 6280; CHECK-P10-NEXT: xscvdpsxws f0, f1 6281; CHECK-P10-NEXT: pli r4, 244140625 6282; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 6283; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6284; CHECK-P10-NEXT: stfiwx f0, r3, r4 6285; CHECK-P10-NEXT: blr 6286; 6287; CHECK-PREP10-LABEL: st_disjoint_align64_float_int32_t: 6288; CHECK-PREP10: # %bb.0: # %entry 6289; CHECK-PREP10-NEXT: xscvdpsxws f0, f1 6290; CHECK-PREP10-NEXT: lis r4, 3725 6291; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 6292; CHECK-PREP10-NEXT: ori r4, r4, 19025 6293; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6294; CHECK-PREP10-NEXT: stfiwx f0, r3, r4 6295; CHECK-PREP10-NEXT: blr 6296entry: 6297 %and = and i64 %ptr, -1099511627776 6298 %conv = fptosi float %str to i32 6299 %or = or i64 %and, 1000000000000 6300 %0 = inttoptr i64 %or to i32* 6301 store i32 %conv, i32* %0, align 4096 6302 ret void 6303} 6304 6305; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6306define dso_local void @st_cst_align16_float_int32_t(float %str) { 6307; CHECK-LABEL: st_cst_align16_float_int32_t: 6308; CHECK: # %bb.0: # %entry 6309; CHECK-NEXT: xscvdpsxws f0, f1 6310; CHECK-NEXT: li r3, 4080 6311; CHECK-NEXT: stfiwx f0, 0, r3 6312; CHECK-NEXT: blr 6313entry: 6314 %conv = fptosi float %str to i32 6315 store i32 %conv, i32* inttoptr (i64 4080 to i32*), align 16 6316 ret void 6317} 6318 6319; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6320define dso_local void @st_cst_align32_float_int32_t(float %str) { 6321; CHECK-P10-LABEL: st_cst_align32_float_int32_t: 6322; CHECK-P10: # %bb.0: # %entry 6323; CHECK-P10-NEXT: xscvdpsxws f0, f1 6324; CHECK-P10-NEXT: pli r3, 9999900 6325; CHECK-P10-NEXT: stfiwx f0, 0, r3 6326; CHECK-P10-NEXT: blr 6327; 6328; CHECK-PREP10-LABEL: st_cst_align32_float_int32_t: 6329; CHECK-PREP10: # %bb.0: # %entry 6330; CHECK-PREP10-NEXT: xscvdpsxws f0, f1 6331; CHECK-PREP10-NEXT: lis r3, 152 6332; CHECK-PREP10-NEXT: ori r3, r3, 38428 6333; CHECK-PREP10-NEXT: stfiwx f0, 0, r3 6334; CHECK-PREP10-NEXT: blr 6335entry: 6336 %conv = fptosi float %str to i32 6337 store i32 %conv, i32* inttoptr (i64 9999900 to i32*), align 4 6338 ret void 6339} 6340 6341; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6342define dso_local void @st_cst_align64_float_int32_t(float %str) { 6343; CHECK-P10-LABEL: st_cst_align64_float_int32_t: 6344; CHECK-P10: # %bb.0: # %entry 6345; CHECK-P10-NEXT: xscvdpsxws f0, f1 6346; CHECK-P10-NEXT: pli r3, 244140625 6347; CHECK-P10-NEXT: rldic r3, r3, 12, 24 6348; CHECK-P10-NEXT: stfiwx f0, 0, r3 6349; CHECK-P10-NEXT: blr 6350; 6351; CHECK-PREP10-LABEL: st_cst_align64_float_int32_t: 6352; CHECK-PREP10: # %bb.0: # %entry 6353; CHECK-PREP10-NEXT: xscvdpsxws f0, f1 6354; CHECK-PREP10-NEXT: lis r3, 3725 6355; CHECK-PREP10-NEXT: ori r3, r3, 19025 6356; CHECK-PREP10-NEXT: rldic r3, r3, 12, 24 6357; CHECK-PREP10-NEXT: stfiwx f0, 0, r3 6358; CHECK-PREP10-NEXT: blr 6359entry: 6360 %conv = fptosi float %str to i32 6361 store i32 %conv, i32* inttoptr (i64 1000000000000 to i32*), align 4096 6362 ret void 6363} 6364 6365; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6366define dso_local void @st_0_float_uint64_t(i64 %ptr, float %str) { 6367; CHECK-POSTP8-LABEL: st_0_float_uint64_t: 6368; CHECK-POSTP8: # %bb.0: # %entry 6369; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1 6370; CHECK-POSTP8-NEXT: stxsd v2, 0(r3) 6371; CHECK-POSTP8-NEXT: blr 6372; 6373; CHECK-P8-LABEL: st_0_float_uint64_t: 6374; CHECK-P8: # %bb.0: # %entry 6375; CHECK-P8-NEXT: xscvdpuxds f0, f1 6376; CHECK-P8-NEXT: stxsdx f0, 0, r3 6377; CHECK-P8-NEXT: blr 6378entry: 6379 %conv = fptoui float %str to i64 6380 %0 = inttoptr i64 %ptr to i64* 6381 store i64 %conv, i64* %0, align 8 6382 ret void 6383} 6384 6385; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6386define dso_local void @st_align16_float_uint64_t(i8* nocapture %ptr, float %str) { 6387; CHECK-POSTP8-LABEL: st_align16_float_uint64_t: 6388; CHECK-POSTP8: # %bb.0: # %entry 6389; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1 6390; CHECK-POSTP8-NEXT: stxsd v2, 8(r3) 6391; CHECK-POSTP8-NEXT: blr 6392; 6393; CHECK-P8-LABEL: st_align16_float_uint64_t: 6394; CHECK-P8: # %bb.0: # %entry 6395; CHECK-P8-NEXT: xscvdpuxds f0, f1 6396; CHECK-P8-NEXT: li r4, 8 6397; CHECK-P8-NEXT: stxsdx f0, r3, r4 6398; CHECK-P8-NEXT: blr 6399entry: 6400 %conv = fptoui float %str to i64 6401 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 6402 %0 = bitcast i8* %add.ptr to i64* 6403 store i64 %conv, i64* %0, align 8 6404 ret void 6405} 6406 6407; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6408define dso_local void @st_align32_float_uint64_t(i8* nocapture %ptr, float %str) { 6409; CHECK-P10-LABEL: st_align32_float_uint64_t: 6410; CHECK-P10: # %bb.0: # %entry 6411; CHECK-P10-NEXT: xscvdpuxds f0, f1 6412; CHECK-P10-NEXT: pli r4, 99999000 6413; CHECK-P10-NEXT: stxsdx f0, r3, r4 6414; CHECK-P10-NEXT: blr 6415; 6416; CHECK-PREP10-LABEL: st_align32_float_uint64_t: 6417; CHECK-PREP10: # %bb.0: # %entry 6418; CHECK-PREP10-NEXT: xscvdpuxds f0, f1 6419; CHECK-PREP10-NEXT: lis r4, 1525 6420; CHECK-PREP10-NEXT: ori r4, r4, 56600 6421; CHECK-PREP10-NEXT: stxsdx f0, r3, r4 6422; CHECK-PREP10-NEXT: blr 6423entry: 6424 %conv = fptoui float %str to i64 6425 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 6426 %0 = bitcast i8* %add.ptr to i64* 6427 store i64 %conv, i64* %0, align 8 6428 ret void 6429} 6430 6431; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6432define dso_local void @st_align64_float_uint64_t(i8* nocapture %ptr, float %str) { 6433; CHECK-P10-LABEL: st_align64_float_uint64_t: 6434; CHECK-P10: # %bb.0: # %entry 6435; CHECK-P10-NEXT: xscvdpuxds f0, f1 6436; CHECK-P10-NEXT: pli r4, 244140625 6437; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6438; CHECK-P10-NEXT: stxsdx f0, r3, r4 6439; CHECK-P10-NEXT: blr 6440; 6441; CHECK-PREP10-LABEL: st_align64_float_uint64_t: 6442; CHECK-PREP10: # %bb.0: # %entry 6443; CHECK-PREP10-NEXT: xscvdpuxds f0, f1 6444; CHECK-PREP10-NEXT: lis r4, 3725 6445; CHECK-PREP10-NEXT: ori r4, r4, 19025 6446; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6447; CHECK-PREP10-NEXT: stxsdx f0, r3, r4 6448; CHECK-PREP10-NEXT: blr 6449entry: 6450 %conv = fptoui float %str to i64 6451 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 6452 %0 = bitcast i8* %add.ptr to i64* 6453 store i64 %conv, i64* %0, align 8 6454 ret void 6455} 6456 6457; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6458define dso_local void @st_reg_float_uint64_t(i8* nocapture %ptr, i64 %off, float %str) { 6459; CHECK-LABEL: st_reg_float_uint64_t: 6460; CHECK: # %bb.0: # %entry 6461; CHECK-NEXT: xscvdpuxds f0, f1 6462; CHECK-NEXT: stxsdx f0, r3, r4 6463; CHECK-NEXT: blr 6464entry: 6465 %conv = fptoui float %str to i64 6466 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 6467 %0 = bitcast i8* %add.ptr to i64* 6468 store i64 %conv, i64* %0, align 8 6469 ret void 6470} 6471 6472; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6473define dso_local void @st_or1_float_uint64_t(i64 %ptr, i8 zeroext %off, float %str) { 6474; CHECK-POSTP8-LABEL: st_or1_float_uint64_t: 6475; CHECK-POSTP8: # %bb.0: # %entry 6476; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1 6477; CHECK-POSTP8-NEXT: or r3, r4, r3 6478; CHECK-POSTP8-NEXT: stxsd v2, 0(r3) 6479; CHECK-POSTP8-NEXT: blr 6480; 6481; CHECK-P8-LABEL: st_or1_float_uint64_t: 6482; CHECK-P8: # %bb.0: # %entry 6483; CHECK-P8-NEXT: xscvdpuxds f0, f1 6484; CHECK-P8-NEXT: or r3, r4, r3 6485; CHECK-P8-NEXT: stxsdx f0, 0, r3 6486; CHECK-P8-NEXT: blr 6487entry: 6488 %conv = fptoui float %str to i64 6489 %conv1 = zext i8 %off to i64 6490 %or = or i64 %conv1, %ptr 6491 %0 = inttoptr i64 %or to i64* 6492 store i64 %conv, i64* %0, align 8 6493 ret void 6494} 6495 6496; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6497define dso_local void @st_not_disjoint16_float_uint64_t(i64 %ptr, float %str) { 6498; CHECK-POSTP8-LABEL: st_not_disjoint16_float_uint64_t: 6499; CHECK-POSTP8: # %bb.0: # %entry 6500; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1 6501; CHECK-POSTP8-NEXT: ori r3, r3, 6 6502; CHECK-POSTP8-NEXT: stxsd v2, 0(r3) 6503; CHECK-POSTP8-NEXT: blr 6504; 6505; CHECK-P8-LABEL: st_not_disjoint16_float_uint64_t: 6506; CHECK-P8: # %bb.0: # %entry 6507; CHECK-P8-NEXT: xscvdpuxds f0, f1 6508; CHECK-P8-NEXT: ori r3, r3, 6 6509; CHECK-P8-NEXT: stxsdx f0, 0, r3 6510; CHECK-P8-NEXT: blr 6511entry: 6512 %conv = fptoui float %str to i64 6513 %or = or i64 %ptr, 6 6514 %0 = inttoptr i64 %or to i64* 6515 store i64 %conv, i64* %0, align 8 6516 ret void 6517} 6518 6519; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6520define dso_local void @st_disjoint_align16_float_uint64_t(i64 %ptr, float %str) { 6521; CHECK-POSTP8-LABEL: st_disjoint_align16_float_uint64_t: 6522; CHECK-POSTP8: # %bb.0: # %entry 6523; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1 6524; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 6525; CHECK-POSTP8-NEXT: stxsd v2, 24(r3) 6526; CHECK-POSTP8-NEXT: blr 6527; 6528; CHECK-P8-LABEL: st_disjoint_align16_float_uint64_t: 6529; CHECK-P8: # %bb.0: # %entry 6530; CHECK-P8-NEXT: xscvdpuxds f0, f1 6531; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 6532; CHECK-P8-NEXT: ori r3, r3, 24 6533; CHECK-P8-NEXT: stxsdx f0, 0, r3 6534; CHECK-P8-NEXT: blr 6535entry: 6536 %and = and i64 %ptr, -4096 6537 %conv = fptoui float %str to i64 6538 %or = or i64 %and, 24 6539 %0 = inttoptr i64 %or to i64* 6540 store i64 %conv, i64* %0, align 8 6541 ret void 6542} 6543 6544; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6545define dso_local void @st_not_disjoint32_float_uint64_t(i64 %ptr, float %str) { 6546; CHECK-POSTP8-LABEL: st_not_disjoint32_float_uint64_t: 6547; CHECK-POSTP8: # %bb.0: # %entry 6548; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1 6549; CHECK-POSTP8-NEXT: ori r3, r3, 34463 6550; CHECK-POSTP8-NEXT: oris r3, r3, 1 6551; CHECK-POSTP8-NEXT: stxsd v2, 0(r3) 6552; CHECK-POSTP8-NEXT: blr 6553; 6554; CHECK-P8-LABEL: st_not_disjoint32_float_uint64_t: 6555; CHECK-P8: # %bb.0: # %entry 6556; CHECK-P8-NEXT: xscvdpuxds f0, f1 6557; CHECK-P8-NEXT: ori r3, r3, 34463 6558; CHECK-P8-NEXT: oris r3, r3, 1 6559; CHECK-P8-NEXT: stxsdx f0, 0, r3 6560; CHECK-P8-NEXT: blr 6561entry: 6562 %conv = fptoui float %str to i64 6563 %or = or i64 %ptr, 99999 6564 %0 = inttoptr i64 %or to i64* 6565 store i64 %conv, i64* %0, align 8 6566 ret void 6567} 6568 6569; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6570define dso_local void @st_disjoint_align32_float_uint64_t(i64 %ptr, float %str) { 6571; CHECK-P10-LABEL: st_disjoint_align32_float_uint64_t: 6572; CHECK-P10: # %bb.0: # %entry 6573; CHECK-P10-NEXT: xscvdpuxds f0, f1 6574; CHECK-P10-NEXT: lis r4, -15264 6575; CHECK-P10-NEXT: and r3, r3, r4 6576; CHECK-P10-NEXT: pli r4, 999990000 6577; CHECK-P10-NEXT: stxsdx f0, r3, r4 6578; CHECK-P10-NEXT: blr 6579; 6580; CHECK-P9-LABEL: st_disjoint_align32_float_uint64_t: 6581; CHECK-P9: # %bb.0: # %entry 6582; CHECK-P9-NEXT: xscvdpuxds f0, f1 6583; CHECK-P9-NEXT: lis r4, -15264 6584; CHECK-P9-NEXT: and r3, r3, r4 6585; CHECK-P9-NEXT: lis r4, 15258 6586; CHECK-P9-NEXT: ori r4, r4, 41712 6587; CHECK-P9-NEXT: stxsdx f0, r3, r4 6588; CHECK-P9-NEXT: blr 6589; 6590; CHECK-P8-LABEL: st_disjoint_align32_float_uint64_t: 6591; CHECK-P8: # %bb.0: # %entry 6592; CHECK-P8-NEXT: xscvdpuxds f0, f1 6593; CHECK-P8-NEXT: lis r4, -15264 6594; CHECK-P8-NEXT: lis r5, 15258 6595; CHECK-P8-NEXT: and r3, r3, r4 6596; CHECK-P8-NEXT: ori r4, r5, 41712 6597; CHECK-P8-NEXT: stxsdx f0, r3, r4 6598; CHECK-P8-NEXT: blr 6599entry: 6600 %and = and i64 %ptr, -1000341504 6601 %conv = fptoui float %str to i64 6602 %or = or i64 %and, 999990000 6603 %0 = inttoptr i64 %or to i64* 6604 store i64 %conv, i64* %0, align 16 6605 ret void 6606} 6607 6608; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6609define dso_local void @st_not_disjoint64_float_uint64_t(i64 %ptr, float %str) { 6610; CHECK-P10-LABEL: st_not_disjoint64_float_uint64_t: 6611; CHECK-P10: # %bb.0: # %entry 6612; CHECK-P10-NEXT: xscvdpuxds v2, f1 6613; CHECK-P10-NEXT: pli r4, 232 6614; CHECK-P10-NEXT: pli r5, 3567587329 6615; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 6616; CHECK-P10-NEXT: or r3, r3, r5 6617; CHECK-P10-NEXT: stxsd v2, 0(r3) 6618; CHECK-P10-NEXT: blr 6619; 6620; CHECK-P9-LABEL: st_not_disjoint64_float_uint64_t: 6621; CHECK-P9: # %bb.0: # %entry 6622; CHECK-P9-NEXT: li r4, 29 6623; CHECK-P9-NEXT: xscvdpuxds v2, f1 6624; CHECK-P9-NEXT: rldic r4, r4, 35, 24 6625; CHECK-P9-NEXT: oris r4, r4, 54437 6626; CHECK-P9-NEXT: ori r4, r4, 4097 6627; CHECK-P9-NEXT: or r3, r3, r4 6628; CHECK-P9-NEXT: stxsd v2, 0(r3) 6629; CHECK-P9-NEXT: blr 6630; 6631; CHECK-P8-LABEL: st_not_disjoint64_float_uint64_t: 6632; CHECK-P8: # %bb.0: # %entry 6633; CHECK-P8-NEXT: xscvdpuxds f0, f1 6634; CHECK-P8-NEXT: li r4, 29 6635; CHECK-P8-NEXT: rldic r4, r4, 35, 24 6636; CHECK-P8-NEXT: oris r4, r4, 54437 6637; CHECK-P8-NEXT: ori r4, r4, 4097 6638; CHECK-P8-NEXT: or r3, r3, r4 6639; CHECK-P8-NEXT: stxsdx f0, 0, r3 6640; CHECK-P8-NEXT: blr 6641entry: 6642 %conv = fptoui float %str to i64 6643 %or = or i64 %ptr, 1000000000001 6644 %0 = inttoptr i64 %or to i64* 6645 store i64 %conv, i64* %0, align 8 6646 ret void 6647} 6648 6649; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6650define dso_local void @st_disjoint_align64_float_uint64_t(i64 %ptr, float %str) { 6651; CHECK-P10-LABEL: st_disjoint_align64_float_uint64_t: 6652; CHECK-P10: # %bb.0: # %entry 6653; CHECK-P10-NEXT: xscvdpuxds f0, f1 6654; CHECK-P10-NEXT: pli r4, 244140625 6655; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 6656; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6657; CHECK-P10-NEXT: stxsdx f0, r3, r4 6658; CHECK-P10-NEXT: blr 6659; 6660; CHECK-PREP10-LABEL: st_disjoint_align64_float_uint64_t: 6661; CHECK-PREP10: # %bb.0: # %entry 6662; CHECK-PREP10-NEXT: xscvdpuxds f0, f1 6663; CHECK-PREP10-NEXT: lis r4, 3725 6664; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 6665; CHECK-PREP10-NEXT: ori r4, r4, 19025 6666; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6667; CHECK-PREP10-NEXT: stxsdx f0, r3, r4 6668; CHECK-PREP10-NEXT: blr 6669entry: 6670 %and = and i64 %ptr, -1099511627776 6671 %conv = fptoui float %str to i64 6672 %or = or i64 %and, 1000000000000 6673 %0 = inttoptr i64 %or to i64* 6674 store i64 %conv, i64* %0, align 4096 6675 ret void 6676} 6677 6678; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6679define dso_local void @st_cst_align16_float_uint64_t(float %str) { 6680; CHECK-POSTP8-LABEL: st_cst_align16_float_uint64_t: 6681; CHECK-POSTP8: # %bb.0: # %entry 6682; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1 6683; CHECK-POSTP8-NEXT: stxsd v2, 4080(0) 6684; CHECK-POSTP8-NEXT: blr 6685; 6686; CHECK-P8-LABEL: st_cst_align16_float_uint64_t: 6687; CHECK-P8: # %bb.0: # %entry 6688; CHECK-P8-NEXT: xscvdpuxds f0, f1 6689; CHECK-P8-NEXT: li r3, 4080 6690; CHECK-P8-NEXT: stxsdx f0, 0, r3 6691; CHECK-P8-NEXT: blr 6692entry: 6693 %conv = fptoui float %str to i64 6694 store i64 %conv, i64* inttoptr (i64 4080 to i64*), align 16 6695 ret void 6696} 6697 6698; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6699define dso_local void @st_cst_align32_float_uint64_t(float %str) { 6700; CHECK-POSTP8-LABEL: st_cst_align32_float_uint64_t: 6701; CHECK-POSTP8: # %bb.0: # %entry 6702; CHECK-POSTP8-NEXT: xscvdpuxds v2, f1 6703; CHECK-POSTP8-NEXT: lis r3, 153 6704; CHECK-POSTP8-NEXT: stxsd v2, -27108(r3) 6705; CHECK-POSTP8-NEXT: blr 6706; 6707; CHECK-P8-LABEL: st_cst_align32_float_uint64_t: 6708; CHECK-P8: # %bb.0: # %entry 6709; CHECK-P8-NEXT: xscvdpuxds f0, f1 6710; CHECK-P8-NEXT: lis r3, 152 6711; CHECK-P8-NEXT: ori r3, r3, 38428 6712; CHECK-P8-NEXT: stxsdx f0, 0, r3 6713; CHECK-P8-NEXT: blr 6714entry: 6715 %conv = fptoui float %str to i64 6716 store i64 %conv, i64* inttoptr (i64 9999900 to i64*), align 8 6717 ret void 6718} 6719 6720; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6721define dso_local void @st_cst_align64_float_uint64_t(float %str) { 6722; CHECK-P10-LABEL: st_cst_align64_float_uint64_t: 6723; CHECK-P10: # %bb.0: # %entry 6724; CHECK-P10-NEXT: xscvdpuxds v2, f1 6725; CHECK-P10-NEXT: pli r3, 244140625 6726; CHECK-P10-NEXT: rldic r3, r3, 12, 24 6727; CHECK-P10-NEXT: stxsd v2, 0(r3) 6728; CHECK-P10-NEXT: blr 6729; 6730; CHECK-P9-LABEL: st_cst_align64_float_uint64_t: 6731; CHECK-P9: # %bb.0: # %entry 6732; CHECK-P9-NEXT: xscvdpuxds v2, f1 6733; CHECK-P9-NEXT: lis r3, 3725 6734; CHECK-P9-NEXT: ori r3, r3, 19025 6735; CHECK-P9-NEXT: rldic r3, r3, 12, 24 6736; CHECK-P9-NEXT: stxsd v2, 0(r3) 6737; CHECK-P9-NEXT: blr 6738; 6739; CHECK-P8-LABEL: st_cst_align64_float_uint64_t: 6740; CHECK-P8: # %bb.0: # %entry 6741; CHECK-P8-NEXT: xscvdpuxds f0, f1 6742; CHECK-P8-NEXT: lis r3, 3725 6743; CHECK-P8-NEXT: ori r3, r3, 19025 6744; CHECK-P8-NEXT: rldic r3, r3, 12, 24 6745; CHECK-P8-NEXT: stxsdx f0, 0, r3 6746; CHECK-P8-NEXT: blr 6747entry: 6748 %conv = fptoui float %str to i64 6749 store i64 %conv, i64* inttoptr (i64 1000000000000 to i64*), align 4096 6750 ret void 6751} 6752 6753; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6754define dso_local void @st_0_float_int64_t(i64 %ptr, float %str) { 6755; CHECK-POSTP8-LABEL: st_0_float_int64_t: 6756; CHECK-POSTP8: # %bb.0: # %entry 6757; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1 6758; CHECK-POSTP8-NEXT: stxsd v2, 0(r3) 6759; CHECK-POSTP8-NEXT: blr 6760; 6761; CHECK-P8-LABEL: st_0_float_int64_t: 6762; CHECK-P8: # %bb.0: # %entry 6763; CHECK-P8-NEXT: xscvdpsxds f0, f1 6764; CHECK-P8-NEXT: stxsdx f0, 0, r3 6765; CHECK-P8-NEXT: blr 6766entry: 6767 %conv = fptosi float %str to i64 6768 %0 = inttoptr i64 %ptr to i64* 6769 store i64 %conv, i64* %0, align 8 6770 ret void 6771} 6772 6773; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6774define dso_local void @st_align16_float_int64_t(i8* nocapture %ptr, float %str) { 6775; CHECK-POSTP8-LABEL: st_align16_float_int64_t: 6776; CHECK-POSTP8: # %bb.0: # %entry 6777; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1 6778; CHECK-POSTP8-NEXT: stxsd v2, 8(r3) 6779; CHECK-POSTP8-NEXT: blr 6780; 6781; CHECK-P8-LABEL: st_align16_float_int64_t: 6782; CHECK-P8: # %bb.0: # %entry 6783; CHECK-P8-NEXT: xscvdpsxds f0, f1 6784; CHECK-P8-NEXT: li r4, 8 6785; CHECK-P8-NEXT: stxsdx f0, r3, r4 6786; CHECK-P8-NEXT: blr 6787entry: 6788 %conv = fptosi float %str to i64 6789 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 6790 %0 = bitcast i8* %add.ptr to i64* 6791 store i64 %conv, i64* %0, align 8 6792 ret void 6793} 6794 6795; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6796define dso_local void @st_align32_float_int64_t(i8* nocapture %ptr, float %str) { 6797; CHECK-P10-LABEL: st_align32_float_int64_t: 6798; CHECK-P10: # %bb.0: # %entry 6799; CHECK-P10-NEXT: xscvdpsxds f0, f1 6800; CHECK-P10-NEXT: pli r4, 99999000 6801; CHECK-P10-NEXT: stxsdx f0, r3, r4 6802; CHECK-P10-NEXT: blr 6803; 6804; CHECK-PREP10-LABEL: st_align32_float_int64_t: 6805; CHECK-PREP10: # %bb.0: # %entry 6806; CHECK-PREP10-NEXT: xscvdpsxds f0, f1 6807; CHECK-PREP10-NEXT: lis r4, 1525 6808; CHECK-PREP10-NEXT: ori r4, r4, 56600 6809; CHECK-PREP10-NEXT: stxsdx f0, r3, r4 6810; CHECK-PREP10-NEXT: blr 6811entry: 6812 %conv = fptosi float %str to i64 6813 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 6814 %0 = bitcast i8* %add.ptr to i64* 6815 store i64 %conv, i64* %0, align 8 6816 ret void 6817} 6818 6819; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6820define dso_local void @st_align64_float_int64_t(i8* nocapture %ptr, float %str) { 6821; CHECK-P10-LABEL: st_align64_float_int64_t: 6822; CHECK-P10: # %bb.0: # %entry 6823; CHECK-P10-NEXT: xscvdpsxds f0, f1 6824; CHECK-P10-NEXT: pli r4, 244140625 6825; CHECK-P10-NEXT: rldic r4, r4, 12, 24 6826; CHECK-P10-NEXT: stxsdx f0, r3, r4 6827; CHECK-P10-NEXT: blr 6828; 6829; CHECK-PREP10-LABEL: st_align64_float_int64_t: 6830; CHECK-PREP10: # %bb.0: # %entry 6831; CHECK-PREP10-NEXT: xscvdpsxds f0, f1 6832; CHECK-PREP10-NEXT: lis r4, 3725 6833; CHECK-PREP10-NEXT: ori r4, r4, 19025 6834; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 6835; CHECK-PREP10-NEXT: stxsdx f0, r3, r4 6836; CHECK-PREP10-NEXT: blr 6837entry: 6838 %conv = fptosi float %str to i64 6839 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 6840 %0 = bitcast i8* %add.ptr to i64* 6841 store i64 %conv, i64* %0, align 8 6842 ret void 6843} 6844 6845; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6846define dso_local void @st_reg_float_int64_t(i8* nocapture %ptr, i64 %off, float %str) { 6847; CHECK-LABEL: st_reg_float_int64_t: 6848; CHECK: # %bb.0: # %entry 6849; CHECK-NEXT: xscvdpsxds f0, f1 6850; CHECK-NEXT: stxsdx f0, r3, r4 6851; CHECK-NEXT: blr 6852entry: 6853 %conv = fptosi float %str to i64 6854 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 6855 %0 = bitcast i8* %add.ptr to i64* 6856 store i64 %conv, i64* %0, align 8 6857 ret void 6858} 6859 6860; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6861define dso_local void @st_or1_float_int64_t(i64 %ptr, i8 zeroext %off, float %str) { 6862; CHECK-POSTP8-LABEL: st_or1_float_int64_t: 6863; CHECK-POSTP8: # %bb.0: # %entry 6864; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1 6865; CHECK-POSTP8-NEXT: or r3, r4, r3 6866; CHECK-POSTP8-NEXT: stxsd v2, 0(r3) 6867; CHECK-POSTP8-NEXT: blr 6868; 6869; CHECK-P8-LABEL: st_or1_float_int64_t: 6870; CHECK-P8: # %bb.0: # %entry 6871; CHECK-P8-NEXT: xscvdpsxds f0, f1 6872; CHECK-P8-NEXT: or r3, r4, r3 6873; CHECK-P8-NEXT: stxsdx f0, 0, r3 6874; CHECK-P8-NEXT: blr 6875entry: 6876 %conv = fptosi float %str to i64 6877 %conv1 = zext i8 %off to i64 6878 %or = or i64 %conv1, %ptr 6879 %0 = inttoptr i64 %or to i64* 6880 store i64 %conv, i64* %0, align 8 6881 ret void 6882} 6883 6884; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6885define dso_local void @st_not_disjoint16_float_int64_t(i64 %ptr, float %str) { 6886; CHECK-POSTP8-LABEL: st_not_disjoint16_float_int64_t: 6887; CHECK-POSTP8: # %bb.0: # %entry 6888; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1 6889; CHECK-POSTP8-NEXT: ori r3, r3, 6 6890; CHECK-POSTP8-NEXT: stxsd v2, 0(r3) 6891; CHECK-POSTP8-NEXT: blr 6892; 6893; CHECK-P8-LABEL: st_not_disjoint16_float_int64_t: 6894; CHECK-P8: # %bb.0: # %entry 6895; CHECK-P8-NEXT: xscvdpsxds f0, f1 6896; CHECK-P8-NEXT: ori r3, r3, 6 6897; CHECK-P8-NEXT: stxsdx f0, 0, r3 6898; CHECK-P8-NEXT: blr 6899entry: 6900 %conv = fptosi float %str to i64 6901 %or = or i64 %ptr, 6 6902 %0 = inttoptr i64 %or to i64* 6903 store i64 %conv, i64* %0, align 8 6904 ret void 6905} 6906 6907; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6908define dso_local void @st_disjoint_align16_float_int64_t(i64 %ptr, float %str) { 6909; CHECK-POSTP8-LABEL: st_disjoint_align16_float_int64_t: 6910; CHECK-POSTP8: # %bb.0: # %entry 6911; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1 6912; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 6913; CHECK-POSTP8-NEXT: stxsd v2, 24(r3) 6914; CHECK-POSTP8-NEXT: blr 6915; 6916; CHECK-P8-LABEL: st_disjoint_align16_float_int64_t: 6917; CHECK-P8: # %bb.0: # %entry 6918; CHECK-P8-NEXT: xscvdpsxds f0, f1 6919; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 6920; CHECK-P8-NEXT: ori r3, r3, 24 6921; CHECK-P8-NEXT: stxsdx f0, 0, r3 6922; CHECK-P8-NEXT: blr 6923entry: 6924 %and = and i64 %ptr, -4096 6925 %conv = fptosi float %str to i64 6926 %or = or i64 %and, 24 6927 %0 = inttoptr i64 %or to i64* 6928 store i64 %conv, i64* %0, align 8 6929 ret void 6930} 6931 6932; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6933define dso_local void @st_not_disjoint32_float_int64_t(i64 %ptr, float %str) { 6934; CHECK-POSTP8-LABEL: st_not_disjoint32_float_int64_t: 6935; CHECK-POSTP8: # %bb.0: # %entry 6936; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1 6937; CHECK-POSTP8-NEXT: ori r3, r3, 34463 6938; CHECK-POSTP8-NEXT: oris r3, r3, 1 6939; CHECK-POSTP8-NEXT: stxsd v2, 0(r3) 6940; CHECK-POSTP8-NEXT: blr 6941; 6942; CHECK-P8-LABEL: st_not_disjoint32_float_int64_t: 6943; CHECK-P8: # %bb.0: # %entry 6944; CHECK-P8-NEXT: xscvdpsxds f0, f1 6945; CHECK-P8-NEXT: ori r3, r3, 34463 6946; CHECK-P8-NEXT: oris r3, r3, 1 6947; CHECK-P8-NEXT: stxsdx f0, 0, r3 6948; CHECK-P8-NEXT: blr 6949entry: 6950 %conv = fptosi float %str to i64 6951 %or = or i64 %ptr, 99999 6952 %0 = inttoptr i64 %or to i64* 6953 store i64 %conv, i64* %0, align 8 6954 ret void 6955} 6956 6957; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6958define dso_local void @st_disjoint_align32_float_int64_t(i64 %ptr, float %str) { 6959; CHECK-P10-LABEL: st_disjoint_align32_float_int64_t: 6960; CHECK-P10: # %bb.0: # %entry 6961; CHECK-P10-NEXT: xscvdpsxds f0, f1 6962; CHECK-P10-NEXT: lis r4, -15264 6963; CHECK-P10-NEXT: and r3, r3, r4 6964; CHECK-P10-NEXT: pli r4, 999990000 6965; CHECK-P10-NEXT: stxsdx f0, r3, r4 6966; CHECK-P10-NEXT: blr 6967; 6968; CHECK-P9-LABEL: st_disjoint_align32_float_int64_t: 6969; CHECK-P9: # %bb.0: # %entry 6970; CHECK-P9-NEXT: xscvdpsxds f0, f1 6971; CHECK-P9-NEXT: lis r4, -15264 6972; CHECK-P9-NEXT: and r3, r3, r4 6973; CHECK-P9-NEXT: lis r4, 15258 6974; CHECK-P9-NEXT: ori r4, r4, 41712 6975; CHECK-P9-NEXT: stxsdx f0, r3, r4 6976; CHECK-P9-NEXT: blr 6977; 6978; CHECK-P8-LABEL: st_disjoint_align32_float_int64_t: 6979; CHECK-P8: # %bb.0: # %entry 6980; CHECK-P8-NEXT: xscvdpsxds f0, f1 6981; CHECK-P8-NEXT: lis r4, -15264 6982; CHECK-P8-NEXT: lis r5, 15258 6983; CHECK-P8-NEXT: and r3, r3, r4 6984; CHECK-P8-NEXT: ori r4, r5, 41712 6985; CHECK-P8-NEXT: stxsdx f0, r3, r4 6986; CHECK-P8-NEXT: blr 6987entry: 6988 %and = and i64 %ptr, -1000341504 6989 %conv = fptosi float %str to i64 6990 %or = or i64 %and, 999990000 6991 %0 = inttoptr i64 %or to i64* 6992 store i64 %conv, i64* %0, align 16 6993 ret void 6994} 6995 6996; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 6997define dso_local void @st_not_disjoint64_float_int64_t(i64 %ptr, float %str) { 6998; CHECK-P10-LABEL: st_not_disjoint64_float_int64_t: 6999; CHECK-P10: # %bb.0: # %entry 7000; CHECK-P10-NEXT: xscvdpsxds v2, f1 7001; CHECK-P10-NEXT: pli r4, 232 7002; CHECK-P10-NEXT: pli r5, 3567587329 7003; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 7004; CHECK-P10-NEXT: or r3, r3, r5 7005; CHECK-P10-NEXT: stxsd v2, 0(r3) 7006; CHECK-P10-NEXT: blr 7007; 7008; CHECK-P9-LABEL: st_not_disjoint64_float_int64_t: 7009; CHECK-P9: # %bb.0: # %entry 7010; CHECK-P9-NEXT: li r4, 29 7011; CHECK-P9-NEXT: xscvdpsxds v2, f1 7012; CHECK-P9-NEXT: rldic r4, r4, 35, 24 7013; CHECK-P9-NEXT: oris r4, r4, 54437 7014; CHECK-P9-NEXT: ori r4, r4, 4097 7015; CHECK-P9-NEXT: or r3, r3, r4 7016; CHECK-P9-NEXT: stxsd v2, 0(r3) 7017; CHECK-P9-NEXT: blr 7018; 7019; CHECK-P8-LABEL: st_not_disjoint64_float_int64_t: 7020; CHECK-P8: # %bb.0: # %entry 7021; CHECK-P8-NEXT: xscvdpsxds f0, f1 7022; CHECK-P8-NEXT: li r4, 29 7023; CHECK-P8-NEXT: rldic r4, r4, 35, 24 7024; CHECK-P8-NEXT: oris r4, r4, 54437 7025; CHECK-P8-NEXT: ori r4, r4, 4097 7026; CHECK-P8-NEXT: or r3, r3, r4 7027; CHECK-P8-NEXT: stxsdx f0, 0, r3 7028; CHECK-P8-NEXT: blr 7029entry: 7030 %conv = fptosi float %str to i64 7031 %or = or i64 %ptr, 1000000000001 7032 %0 = inttoptr i64 %or to i64* 7033 store i64 %conv, i64* %0, align 8 7034 ret void 7035} 7036 7037; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7038define dso_local void @st_disjoint_align64_float_int64_t(i64 %ptr, float %str) { 7039; CHECK-P10-LABEL: st_disjoint_align64_float_int64_t: 7040; CHECK-P10: # %bb.0: # %entry 7041; CHECK-P10-NEXT: xscvdpsxds f0, f1 7042; CHECK-P10-NEXT: pli r4, 244140625 7043; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7044; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7045; CHECK-P10-NEXT: stxsdx f0, r3, r4 7046; CHECK-P10-NEXT: blr 7047; 7048; CHECK-PREP10-LABEL: st_disjoint_align64_float_int64_t: 7049; CHECK-PREP10: # %bb.0: # %entry 7050; CHECK-PREP10-NEXT: xscvdpsxds f0, f1 7051; CHECK-PREP10-NEXT: lis r4, 3725 7052; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 7053; CHECK-PREP10-NEXT: ori r4, r4, 19025 7054; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 7055; CHECK-PREP10-NEXT: stxsdx f0, r3, r4 7056; CHECK-PREP10-NEXT: blr 7057entry: 7058 %and = and i64 %ptr, -1099511627776 7059 %conv = fptosi float %str to i64 7060 %or = or i64 %and, 1000000000000 7061 %0 = inttoptr i64 %or to i64* 7062 store i64 %conv, i64* %0, align 4096 7063 ret void 7064} 7065 7066; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7067define dso_local void @st_cst_align16_float_int64_t(float %str) { 7068; CHECK-POSTP8-LABEL: st_cst_align16_float_int64_t: 7069; CHECK-POSTP8: # %bb.0: # %entry 7070; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1 7071; CHECK-POSTP8-NEXT: stxsd v2, 4080(0) 7072; CHECK-POSTP8-NEXT: blr 7073; 7074; CHECK-P8-LABEL: st_cst_align16_float_int64_t: 7075; CHECK-P8: # %bb.0: # %entry 7076; CHECK-P8-NEXT: xscvdpsxds f0, f1 7077; CHECK-P8-NEXT: li r3, 4080 7078; CHECK-P8-NEXT: stxsdx f0, 0, r3 7079; CHECK-P8-NEXT: blr 7080entry: 7081 %conv = fptosi float %str to i64 7082 store i64 %conv, i64* inttoptr (i64 4080 to i64*), align 16 7083 ret void 7084} 7085 7086; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7087define dso_local void @st_cst_align32_float_int64_t(float %str) { 7088; CHECK-POSTP8-LABEL: st_cst_align32_float_int64_t: 7089; CHECK-POSTP8: # %bb.0: # %entry 7090; CHECK-POSTP8-NEXT: xscvdpsxds v2, f1 7091; CHECK-POSTP8-NEXT: lis r3, 153 7092; CHECK-POSTP8-NEXT: stxsd v2, -27108(r3) 7093; CHECK-POSTP8-NEXT: blr 7094; 7095; CHECK-P8-LABEL: st_cst_align32_float_int64_t: 7096; CHECK-P8: # %bb.0: # %entry 7097; CHECK-P8-NEXT: xscvdpsxds f0, f1 7098; CHECK-P8-NEXT: lis r3, 152 7099; CHECK-P8-NEXT: ori r3, r3, 38428 7100; CHECK-P8-NEXT: stxsdx f0, 0, r3 7101; CHECK-P8-NEXT: blr 7102entry: 7103 %conv = fptosi float %str to i64 7104 store i64 %conv, i64* inttoptr (i64 9999900 to i64*), align 8 7105 ret void 7106} 7107 7108; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7109define dso_local void @st_cst_align64_float_int64_t(float %str) { 7110; CHECK-P10-LABEL: st_cst_align64_float_int64_t: 7111; CHECK-P10: # %bb.0: # %entry 7112; CHECK-P10-NEXT: xscvdpsxds v2, f1 7113; CHECK-P10-NEXT: pli r3, 244140625 7114; CHECK-P10-NEXT: rldic r3, r3, 12, 24 7115; CHECK-P10-NEXT: stxsd v2, 0(r3) 7116; CHECK-P10-NEXT: blr 7117; 7118; CHECK-P9-LABEL: st_cst_align64_float_int64_t: 7119; CHECK-P9: # %bb.0: # %entry 7120; CHECK-P9-NEXT: xscvdpsxds v2, f1 7121; CHECK-P9-NEXT: lis r3, 3725 7122; CHECK-P9-NEXT: ori r3, r3, 19025 7123; CHECK-P9-NEXT: rldic r3, r3, 12, 24 7124; CHECK-P9-NEXT: stxsd v2, 0(r3) 7125; CHECK-P9-NEXT: blr 7126; 7127; CHECK-P8-LABEL: st_cst_align64_float_int64_t: 7128; CHECK-P8: # %bb.0: # %entry 7129; CHECK-P8-NEXT: xscvdpsxds f0, f1 7130; CHECK-P8-NEXT: lis r3, 3725 7131; CHECK-P8-NEXT: ori r3, r3, 19025 7132; CHECK-P8-NEXT: rldic r3, r3, 12, 24 7133; CHECK-P8-NEXT: stxsdx f0, 0, r3 7134; CHECK-P8-NEXT: blr 7135entry: 7136 %conv = fptosi float %str to i64 7137 store i64 %conv, i64* inttoptr (i64 1000000000000 to i64*), align 4096 7138 ret void 7139} 7140 7141; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7142define dso_local void @st_0_float_float(i64 %ptr, float %str) { 7143; CHECK-POSTP8-LABEL: st_0_float_float: 7144; CHECK-POSTP8: # %bb.0: # %entry 7145; CHECK-POSTP8-NEXT: stfs f1, 0(r3) 7146; CHECK-POSTP8-NEXT: blr 7147; 7148; CHECK-P8-LABEL: st_0_float_float: 7149; CHECK-P8: # %bb.0: # %entry 7150; CHECK-P8-NEXT: stfsx f1, 0, r3 7151; CHECK-P8-NEXT: blr 7152entry: 7153 %0 = inttoptr i64 %ptr to float* 7154 store float %str, float* %0, align 4 7155 ret void 7156} 7157 7158; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7159define dso_local void @st_align16_float_float(i8* nocapture %ptr, float %str) { 7160; CHECK-LABEL: st_align16_float_float: 7161; CHECK: # %bb.0: # %entry 7162; CHECK-NEXT: stfs f1, 8(r3) 7163; CHECK-NEXT: blr 7164entry: 7165 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 7166 %0 = bitcast i8* %add.ptr to float* 7167 store float %str, float* %0, align 4 7168 ret void 7169} 7170 7171; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7172define dso_local void @st_align32_float_float(i8* nocapture %ptr, float %str) { 7173; CHECK-P10-LABEL: st_align32_float_float: 7174; CHECK-P10: # %bb.0: # %entry 7175; CHECK-P10-NEXT: pli r4, 99999000 7176; CHECK-P10-NEXT: stfsx f1, r3, r4 7177; CHECK-P10-NEXT: blr 7178; 7179; CHECK-PREP10-LABEL: st_align32_float_float: 7180; CHECK-PREP10: # %bb.0: # %entry 7181; CHECK-PREP10-NEXT: lis r4, 1525 7182; CHECK-PREP10-NEXT: ori r4, r4, 56600 7183; CHECK-PREP10-NEXT: stfsx f1, r3, r4 7184; CHECK-PREP10-NEXT: blr 7185entry: 7186 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 7187 %0 = bitcast i8* %add.ptr to float* 7188 store float %str, float* %0, align 4 7189 ret void 7190} 7191 7192; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7193define dso_local void @st_align64_float_float(i8* nocapture %ptr, float %str) { 7194; CHECK-P10-LABEL: st_align64_float_float: 7195; CHECK-P10: # %bb.0: # %entry 7196; CHECK-P10-NEXT: pli r4, 244140625 7197; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7198; CHECK-P10-NEXT: stfsx f1, r3, r4 7199; CHECK-P10-NEXT: blr 7200; 7201; CHECK-PREP10-LABEL: st_align64_float_float: 7202; CHECK-PREP10: # %bb.0: # %entry 7203; CHECK-PREP10-NEXT: lis r4, 3725 7204; CHECK-PREP10-NEXT: ori r4, r4, 19025 7205; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 7206; CHECK-PREP10-NEXT: stfsx f1, r3, r4 7207; CHECK-PREP10-NEXT: blr 7208entry: 7209 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 7210 %0 = bitcast i8* %add.ptr to float* 7211 store float %str, float* %0, align 4 7212 ret void 7213} 7214 7215; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7216define dso_local void @st_reg_float_float(i8* nocapture %ptr, i64 %off, float %str) { 7217; CHECK-LABEL: st_reg_float_float: 7218; CHECK: # %bb.0: # %entry 7219; CHECK-NEXT: stfsx f1, r3, r4 7220; CHECK-NEXT: blr 7221entry: 7222 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 7223 %0 = bitcast i8* %add.ptr to float* 7224 store float %str, float* %0, align 4 7225 ret void 7226} 7227 7228; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7229define dso_local void @st_or1_float_float(i64 %ptr, i8 zeroext %off, float %str) { 7230; CHECK-POSTP8-LABEL: st_or1_float_float: 7231; CHECK-POSTP8: # %bb.0: # %entry 7232; CHECK-POSTP8-NEXT: or r3, r4, r3 7233; CHECK-POSTP8-NEXT: stfs f1, 0(r3) 7234; CHECK-POSTP8-NEXT: blr 7235; 7236; CHECK-P8-LABEL: st_or1_float_float: 7237; CHECK-P8: # %bb.0: # %entry 7238; CHECK-P8-NEXT: or r3, r4, r3 7239; CHECK-P8-NEXT: stfsx f1, 0, r3 7240; CHECK-P8-NEXT: blr 7241entry: 7242 %conv = zext i8 %off to i64 7243 %or = or i64 %conv, %ptr 7244 %0 = inttoptr i64 %or to float* 7245 store float %str, float* %0, align 4 7246 ret void 7247} 7248 7249; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7250define dso_local void @st_not_disjoint16_float_float(i64 %ptr, float %str) { 7251; CHECK-POSTP8-LABEL: st_not_disjoint16_float_float: 7252; CHECK-POSTP8: # %bb.0: # %entry 7253; CHECK-POSTP8-NEXT: ori r3, r3, 6 7254; CHECK-POSTP8-NEXT: stfs f1, 0(r3) 7255; CHECK-POSTP8-NEXT: blr 7256; 7257; CHECK-P8-LABEL: st_not_disjoint16_float_float: 7258; CHECK-P8: # %bb.0: # %entry 7259; CHECK-P8-NEXT: ori r3, r3, 6 7260; CHECK-P8-NEXT: stfsx f1, 0, r3 7261; CHECK-P8-NEXT: blr 7262entry: 7263 %or = or i64 %ptr, 6 7264 %0 = inttoptr i64 %or to float* 7265 store float %str, float* %0, align 4 7266 ret void 7267} 7268 7269; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7270define dso_local void @st_disjoint_align16_float_float(i64 %ptr, float %str) { 7271; CHECK-POSTP8-LABEL: st_disjoint_align16_float_float: 7272; CHECK-POSTP8: # %bb.0: # %entry 7273; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 7274; CHECK-POSTP8-NEXT: stfs f1, 24(r3) 7275; CHECK-POSTP8-NEXT: blr 7276; 7277; CHECK-P8-LABEL: st_disjoint_align16_float_float: 7278; CHECK-P8: # %bb.0: # %entry 7279; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 7280; CHECK-P8-NEXT: ori r3, r3, 24 7281; CHECK-P8-NEXT: stfsx f1, 0, r3 7282; CHECK-P8-NEXT: blr 7283entry: 7284 %and = and i64 %ptr, -4096 7285 %or = or i64 %and, 24 7286 %0 = inttoptr i64 %or to float* 7287 store float %str, float* %0, align 8 7288 ret void 7289} 7290 7291; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7292define dso_local void @st_not_disjoint32_float_float(i64 %ptr, float %str) { 7293; CHECK-POSTP8-LABEL: st_not_disjoint32_float_float: 7294; CHECK-POSTP8: # %bb.0: # %entry 7295; CHECK-POSTP8-NEXT: ori r3, r3, 34463 7296; CHECK-POSTP8-NEXT: oris r3, r3, 1 7297; CHECK-POSTP8-NEXT: stfs f1, 0(r3) 7298; CHECK-POSTP8-NEXT: blr 7299; 7300; CHECK-P8-LABEL: st_not_disjoint32_float_float: 7301; CHECK-P8: # %bb.0: # %entry 7302; CHECK-P8-NEXT: ori r3, r3, 34463 7303; CHECK-P8-NEXT: oris r3, r3, 1 7304; CHECK-P8-NEXT: stfsx f1, 0, r3 7305; CHECK-P8-NEXT: blr 7306entry: 7307 %or = or i64 %ptr, 99999 7308 %0 = inttoptr i64 %or to float* 7309 store float %str, float* %0, align 4 7310 ret void 7311} 7312 7313; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7314define dso_local void @st_disjoint_align32_float_float(i64 %ptr, float %str) { 7315; CHECK-P10-LABEL: st_disjoint_align32_float_float: 7316; CHECK-P10: # %bb.0: # %entry 7317; CHECK-P10-NEXT: lis r4, -15264 7318; CHECK-P10-NEXT: and r3, r3, r4 7319; CHECK-P10-NEXT: pli r4, 999990000 7320; CHECK-P10-NEXT: stfsx f1, r3, r4 7321; CHECK-P10-NEXT: blr 7322; 7323; CHECK-P9-LABEL: st_disjoint_align32_float_float: 7324; CHECK-P9: # %bb.0: # %entry 7325; CHECK-P9-NEXT: lis r4, -15264 7326; CHECK-P9-NEXT: and r3, r3, r4 7327; CHECK-P9-NEXT: lis r4, 15258 7328; CHECK-P9-NEXT: ori r4, r4, 41712 7329; CHECK-P9-NEXT: stfsx f1, r3, r4 7330; CHECK-P9-NEXT: blr 7331; 7332; CHECK-P8-LABEL: st_disjoint_align32_float_float: 7333; CHECK-P8: # %bb.0: # %entry 7334; CHECK-P8-NEXT: lis r4, -15264 7335; CHECK-P8-NEXT: lis r5, 15258 7336; CHECK-P8-NEXT: and r3, r3, r4 7337; CHECK-P8-NEXT: ori r4, r5, 41712 7338; CHECK-P8-NEXT: stfsx f1, r3, r4 7339; CHECK-P8-NEXT: blr 7340entry: 7341 %and = and i64 %ptr, -1000341504 7342 %or = or i64 %and, 999990000 7343 %0 = inttoptr i64 %or to float* 7344 store float %str, float* %0, align 16 7345 ret void 7346} 7347 7348; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7349define dso_local void @st_not_disjoint64_float_float(i64 %ptr, float %str) { 7350; CHECK-P10-LABEL: st_not_disjoint64_float_float: 7351; CHECK-P10: # %bb.0: # %entry 7352; CHECK-P10-NEXT: pli r4, 232 7353; CHECK-P10-NEXT: pli r5, 3567587329 7354; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 7355; CHECK-P10-NEXT: or r3, r3, r5 7356; CHECK-P10-NEXT: stfs f1, 0(r3) 7357; CHECK-P10-NEXT: blr 7358; 7359; CHECK-P9-LABEL: st_not_disjoint64_float_float: 7360; CHECK-P9: # %bb.0: # %entry 7361; CHECK-P9-NEXT: li r4, 29 7362; CHECK-P9-NEXT: rldic r4, r4, 35, 24 7363; CHECK-P9-NEXT: oris r4, r4, 54437 7364; CHECK-P9-NEXT: ori r4, r4, 4097 7365; CHECK-P9-NEXT: or r3, r3, r4 7366; CHECK-P9-NEXT: stfs f1, 0(r3) 7367; CHECK-P9-NEXT: blr 7368; 7369; CHECK-P8-LABEL: st_not_disjoint64_float_float: 7370; CHECK-P8: # %bb.0: # %entry 7371; CHECK-P8-NEXT: li r4, 29 7372; CHECK-P8-NEXT: rldic r4, r4, 35, 24 7373; CHECK-P8-NEXT: oris r4, r4, 54437 7374; CHECK-P8-NEXT: ori r4, r4, 4097 7375; CHECK-P8-NEXT: or r3, r3, r4 7376; CHECK-P8-NEXT: stfsx f1, 0, r3 7377; CHECK-P8-NEXT: blr 7378entry: 7379 %or = or i64 %ptr, 1000000000001 7380 %0 = inttoptr i64 %or to float* 7381 store float %str, float* %0, align 4 7382 ret void 7383} 7384 7385; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7386define dso_local void @st_disjoint_align64_float_float(i64 %ptr, float %str) { 7387; CHECK-P10-LABEL: st_disjoint_align64_float_float: 7388; CHECK-P10: # %bb.0: # %entry 7389; CHECK-P10-NEXT: pli r4, 244140625 7390; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7391; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7392; CHECK-P10-NEXT: stfsx f1, r3, r4 7393; CHECK-P10-NEXT: blr 7394; 7395; CHECK-PREP10-LABEL: st_disjoint_align64_float_float: 7396; CHECK-PREP10: # %bb.0: # %entry 7397; CHECK-PREP10-NEXT: lis r4, 3725 7398; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 7399; CHECK-PREP10-NEXT: ori r4, r4, 19025 7400; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 7401; CHECK-PREP10-NEXT: stfsx f1, r3, r4 7402; CHECK-PREP10-NEXT: blr 7403entry: 7404 %and = and i64 %ptr, -1099511627776 7405 %or = or i64 %and, 1000000000000 7406 %0 = inttoptr i64 %or to float* 7407 store float %str, float* %0, align 4096 7408 ret void 7409} 7410 7411; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7412define dso_local void @st_cst_align16_float_float(float %str) { 7413; CHECK-LABEL: st_cst_align16_float_float: 7414; CHECK: # %bb.0: # %entry 7415; CHECK-NEXT: stfs f1, 4080(0) 7416; CHECK-NEXT: blr 7417entry: 7418 store float %str, float* inttoptr (i64 4080 to float*), align 16 7419 ret void 7420} 7421 7422; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7423define dso_local void @st_cst_align32_float_float(float %str) { 7424; CHECK-POSTP8-LABEL: st_cst_align32_float_float: 7425; CHECK-POSTP8: # %bb.0: # %entry 7426; CHECK-POSTP8-NEXT: lis r3, 153 7427; CHECK-POSTP8-NEXT: stfs f1, -27108(r3) 7428; CHECK-POSTP8-NEXT: blr 7429; 7430; CHECK-P8-LABEL: st_cst_align32_float_float: 7431; CHECK-P8: # %bb.0: # %entry 7432; CHECK-P8-NEXT: lis r3, 152 7433; CHECK-P8-NEXT: ori r3, r3, 38428 7434; CHECK-P8-NEXT: stfsx f1, 0, r3 7435; CHECK-P8-NEXT: blr 7436entry: 7437 store float %str, float* inttoptr (i64 9999900 to float*), align 4 7438 ret void 7439} 7440 7441; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7442define dso_local void @st_cst_align64_float_float(float %str) { 7443; CHECK-P10-LABEL: st_cst_align64_float_float: 7444; CHECK-P10: # %bb.0: # %entry 7445; CHECK-P10-NEXT: pli r3, 244140625 7446; CHECK-P10-NEXT: rldic r3, r3, 12, 24 7447; CHECK-P10-NEXT: stfs f1, 0(r3) 7448; CHECK-P10-NEXT: blr 7449; 7450; CHECK-P9-LABEL: st_cst_align64_float_float: 7451; CHECK-P9: # %bb.0: # %entry 7452; CHECK-P9-NEXT: lis r3, 3725 7453; CHECK-P9-NEXT: ori r3, r3, 19025 7454; CHECK-P9-NEXT: rldic r3, r3, 12, 24 7455; CHECK-P9-NEXT: stfs f1, 0(r3) 7456; CHECK-P9-NEXT: blr 7457; 7458; CHECK-P8-LABEL: st_cst_align64_float_float: 7459; CHECK-P8: # %bb.0: # %entry 7460; CHECK-P8-NEXT: lis r3, 3725 7461; CHECK-P8-NEXT: ori r3, r3, 19025 7462; CHECK-P8-NEXT: rldic r3, r3, 12, 24 7463; CHECK-P8-NEXT: stfsx f1, 0, r3 7464; CHECK-P8-NEXT: blr 7465entry: 7466 store float %str, float* inttoptr (i64 1000000000000 to float*), align 4096 7467 ret void 7468} 7469 7470; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7471define dso_local void @st_0_float_double(i64 %ptr, float %str) { 7472; CHECK-POSTP8-LABEL: st_0_float_double: 7473; CHECK-POSTP8: # %bb.0: # %entry 7474; CHECK-POSTP8-NEXT: stfd f1, 0(r3) 7475; CHECK-POSTP8-NEXT: blr 7476; 7477; CHECK-P8-LABEL: st_0_float_double: 7478; CHECK-P8: # %bb.0: # %entry 7479; CHECK-P8-NEXT: stfdx f1, 0, r3 7480; CHECK-P8-NEXT: blr 7481entry: 7482 %conv = fpext float %str to double 7483 %0 = inttoptr i64 %ptr to double* 7484 store double %conv, double* %0, align 8 7485 ret void 7486} 7487 7488; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7489define dso_local void @st_align16_float_double(i8* nocapture %ptr, float %str) { 7490; CHECK-LABEL: st_align16_float_double: 7491; CHECK: # %bb.0: # %entry 7492; CHECK-NEXT: stfd f1, 8(r3) 7493; CHECK-NEXT: blr 7494entry: 7495 %conv = fpext float %str to double 7496 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 8 7497 %0 = bitcast i8* %add.ptr to double* 7498 store double %conv, double* %0, align 8 7499 ret void 7500} 7501 7502; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7503define dso_local void @st_align32_float_double(i8* nocapture %ptr, float %str) { 7504; CHECK-P10-LABEL: st_align32_float_double: 7505; CHECK-P10: # %bb.0: # %entry 7506; CHECK-P10-NEXT: pli r4, 99999000 7507; CHECK-P10-NEXT: stfdx f1, r3, r4 7508; CHECK-P10-NEXT: blr 7509; 7510; CHECK-PREP10-LABEL: st_align32_float_double: 7511; CHECK-PREP10: # %bb.0: # %entry 7512; CHECK-PREP10-NEXT: lis r4, 1525 7513; CHECK-PREP10-NEXT: ori r4, r4, 56600 7514; CHECK-PREP10-NEXT: stfdx f1, r3, r4 7515; CHECK-PREP10-NEXT: blr 7516entry: 7517 %conv = fpext float %str to double 7518 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 99999000 7519 %0 = bitcast i8* %add.ptr to double* 7520 store double %conv, double* %0, align 8 7521 ret void 7522} 7523 7524; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7525define dso_local void @st_align64_float_double(i8* nocapture %ptr, float %str) { 7526; CHECK-P10-LABEL: st_align64_float_double: 7527; CHECK-P10: # %bb.0: # %entry 7528; CHECK-P10-NEXT: pli r4, 244140625 7529; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7530; CHECK-P10-NEXT: stfdx f1, r3, r4 7531; CHECK-P10-NEXT: blr 7532; 7533; CHECK-PREP10-LABEL: st_align64_float_double: 7534; CHECK-PREP10: # %bb.0: # %entry 7535; CHECK-PREP10-NEXT: lis r4, 3725 7536; CHECK-PREP10-NEXT: ori r4, r4, 19025 7537; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 7538; CHECK-PREP10-NEXT: stfdx f1, r3, r4 7539; CHECK-PREP10-NEXT: blr 7540entry: 7541 %conv = fpext float %str to double 7542 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 1000000000000 7543 %0 = bitcast i8* %add.ptr to double* 7544 store double %conv, double* %0, align 8 7545 ret void 7546} 7547 7548; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7549define dso_local void @st_reg_float_double(i8* nocapture %ptr, i64 %off, float %str) { 7550; CHECK-LABEL: st_reg_float_double: 7551; CHECK: # %bb.0: # %entry 7552; CHECK-NEXT: stfdx f1, r3, r4 7553; CHECK-NEXT: blr 7554entry: 7555 %conv = fpext float %str to double 7556 %add.ptr = getelementptr inbounds i8, i8* %ptr, i64 %off 7557 %0 = bitcast i8* %add.ptr to double* 7558 store double %conv, double* %0, align 8 7559 ret void 7560} 7561 7562; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7563define dso_local void @st_or1_float_double(i64 %ptr, i8 zeroext %off, float %str) { 7564; CHECK-POSTP8-LABEL: st_or1_float_double: 7565; CHECK-POSTP8: # %bb.0: # %entry 7566; CHECK-POSTP8-NEXT: or r3, r4, r3 7567; CHECK-POSTP8-NEXT: stfd f1, 0(r3) 7568; CHECK-POSTP8-NEXT: blr 7569; 7570; CHECK-P8-LABEL: st_or1_float_double: 7571; CHECK-P8: # %bb.0: # %entry 7572; CHECK-P8-NEXT: or r3, r4, r3 7573; CHECK-P8-NEXT: stfdx f1, 0, r3 7574; CHECK-P8-NEXT: blr 7575entry: 7576 %conv = fpext float %str to double 7577 %conv1 = zext i8 %off to i64 7578 %or = or i64 %conv1, %ptr 7579 %0 = inttoptr i64 %or to double* 7580 store double %conv, double* %0, align 8 7581 ret void 7582} 7583 7584; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7585define dso_local void @st_not_disjoint16_float_double(i64 %ptr, float %str) { 7586; CHECK-POSTP8-LABEL: st_not_disjoint16_float_double: 7587; CHECK-POSTP8: # %bb.0: # %entry 7588; CHECK-POSTP8-NEXT: ori r3, r3, 6 7589; CHECK-POSTP8-NEXT: stfd f1, 0(r3) 7590; CHECK-POSTP8-NEXT: blr 7591; 7592; CHECK-P8-LABEL: st_not_disjoint16_float_double: 7593; CHECK-P8: # %bb.0: # %entry 7594; CHECK-P8-NEXT: ori r3, r3, 6 7595; CHECK-P8-NEXT: stfdx f1, 0, r3 7596; CHECK-P8-NEXT: blr 7597entry: 7598 %conv = fpext float %str to double 7599 %or = or i64 %ptr, 6 7600 %0 = inttoptr i64 %or to double* 7601 store double %conv, double* %0, align 8 7602 ret void 7603} 7604 7605; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7606define dso_local void @st_disjoint_align16_float_double(i64 %ptr, float %str) { 7607; CHECK-POSTP8-LABEL: st_disjoint_align16_float_double: 7608; CHECK-POSTP8: # %bb.0: # %entry 7609; CHECK-POSTP8-NEXT: rldicr r3, r3, 0, 51 7610; CHECK-POSTP8-NEXT: stfd f1, 24(r3) 7611; CHECK-POSTP8-NEXT: blr 7612; 7613; CHECK-P8-LABEL: st_disjoint_align16_float_double: 7614; CHECK-P8: # %bb.0: # %entry 7615; CHECK-P8-NEXT: rldicr r3, r3, 0, 51 7616; CHECK-P8-NEXT: ori r3, r3, 24 7617; CHECK-P8-NEXT: stfdx f1, 0, r3 7618; CHECK-P8-NEXT: blr 7619entry: 7620 %and = and i64 %ptr, -4096 7621 %conv = fpext float %str to double 7622 %or = or i64 %and, 24 7623 %0 = inttoptr i64 %or to double* 7624 store double %conv, double* %0, align 8 7625 ret void 7626} 7627 7628; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7629define dso_local void @st_not_disjoint32_float_double(i64 %ptr, float %str) { 7630; CHECK-POSTP8-LABEL: st_not_disjoint32_float_double: 7631; CHECK-POSTP8: # %bb.0: # %entry 7632; CHECK-POSTP8-NEXT: ori r3, r3, 34463 7633; CHECK-POSTP8-NEXT: oris r3, r3, 1 7634; CHECK-POSTP8-NEXT: stfd f1, 0(r3) 7635; CHECK-POSTP8-NEXT: blr 7636; 7637; CHECK-P8-LABEL: st_not_disjoint32_float_double: 7638; CHECK-P8: # %bb.0: # %entry 7639; CHECK-P8-NEXT: ori r3, r3, 34463 7640; CHECK-P8-NEXT: oris r3, r3, 1 7641; CHECK-P8-NEXT: stfdx f1, 0, r3 7642; CHECK-P8-NEXT: blr 7643entry: 7644 %conv = fpext float %str to double 7645 %or = or i64 %ptr, 99999 7646 %0 = inttoptr i64 %or to double* 7647 store double %conv, double* %0, align 8 7648 ret void 7649} 7650 7651; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7652define dso_local void @st_disjoint_align32_float_double(i64 %ptr, float %str) { 7653; CHECK-P10-LABEL: st_disjoint_align32_float_double: 7654; CHECK-P10: # %bb.0: # %entry 7655; CHECK-P10-NEXT: lis r4, -15264 7656; CHECK-P10-NEXT: and r3, r3, r4 7657; CHECK-P10-NEXT: pli r4, 999990000 7658; CHECK-P10-NEXT: stfdx f1, r3, r4 7659; CHECK-P10-NEXT: blr 7660; 7661; CHECK-P9-LABEL: st_disjoint_align32_float_double: 7662; CHECK-P9: # %bb.0: # %entry 7663; CHECK-P9-NEXT: lis r4, -15264 7664; CHECK-P9-NEXT: and r3, r3, r4 7665; CHECK-P9-NEXT: lis r4, 15258 7666; CHECK-P9-NEXT: ori r4, r4, 41712 7667; CHECK-P9-NEXT: stfdx f1, r3, r4 7668; CHECK-P9-NEXT: blr 7669; 7670; CHECK-P8-LABEL: st_disjoint_align32_float_double: 7671; CHECK-P8: # %bb.0: # %entry 7672; CHECK-P8-NEXT: lis r4, -15264 7673; CHECK-P8-NEXT: lis r5, 15258 7674; CHECK-P8-NEXT: and r3, r3, r4 7675; CHECK-P8-NEXT: ori r4, r5, 41712 7676; CHECK-P8-NEXT: stfdx f1, r3, r4 7677; CHECK-P8-NEXT: blr 7678entry: 7679 %and = and i64 %ptr, -1000341504 7680 %conv = fpext float %str to double 7681 %or = or i64 %and, 999990000 7682 %0 = inttoptr i64 %or to double* 7683 store double %conv, double* %0, align 16 7684 ret void 7685} 7686 7687; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7688define dso_local void @st_not_disjoint64_float_double(i64 %ptr, float %str) { 7689; CHECK-P10-LABEL: st_not_disjoint64_float_double: 7690; CHECK-P10: # %bb.0: # %entry 7691; CHECK-P10-NEXT: pli r4, 232 7692; CHECK-P10-NEXT: pli r5, 3567587329 7693; CHECK-P10-NEXT: rldimi r5, r4, 32, 0 7694; CHECK-P10-NEXT: or r3, r3, r5 7695; CHECK-P10-NEXT: stfd f1, 0(r3) 7696; CHECK-P10-NEXT: blr 7697; 7698; CHECK-P9-LABEL: st_not_disjoint64_float_double: 7699; CHECK-P9: # %bb.0: # %entry 7700; CHECK-P9-NEXT: li r4, 29 7701; CHECK-P9-NEXT: rldic r4, r4, 35, 24 7702; CHECK-P9-NEXT: oris r4, r4, 54437 7703; CHECK-P9-NEXT: ori r4, r4, 4097 7704; CHECK-P9-NEXT: or r3, r3, r4 7705; CHECK-P9-NEXT: stfd f1, 0(r3) 7706; CHECK-P9-NEXT: blr 7707; 7708; CHECK-P8-LABEL: st_not_disjoint64_float_double: 7709; CHECK-P8: # %bb.0: # %entry 7710; CHECK-P8-NEXT: li r4, 29 7711; CHECK-P8-NEXT: rldic r4, r4, 35, 24 7712; CHECK-P8-NEXT: oris r4, r4, 54437 7713; CHECK-P8-NEXT: ori r4, r4, 4097 7714; CHECK-P8-NEXT: or r3, r3, r4 7715; CHECK-P8-NEXT: stfdx f1, 0, r3 7716; CHECK-P8-NEXT: blr 7717entry: 7718 %conv = fpext float %str to double 7719 %or = or i64 %ptr, 1000000000001 7720 %0 = inttoptr i64 %or to double* 7721 store double %conv, double* %0, align 8 7722 ret void 7723} 7724 7725; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7726define dso_local void @st_disjoint_align64_float_double(i64 %ptr, float %str) { 7727; CHECK-P10-LABEL: st_disjoint_align64_float_double: 7728; CHECK-P10: # %bb.0: # %entry 7729; CHECK-P10-NEXT: pli r4, 244140625 7730; CHECK-P10-NEXT: rldicr r3, r3, 0, 23 7731; CHECK-P10-NEXT: rldic r4, r4, 12, 24 7732; CHECK-P10-NEXT: stfdx f1, r3, r4 7733; CHECK-P10-NEXT: blr 7734; 7735; CHECK-PREP10-LABEL: st_disjoint_align64_float_double: 7736; CHECK-PREP10: # %bb.0: # %entry 7737; CHECK-PREP10-NEXT: lis r4, 3725 7738; CHECK-PREP10-NEXT: rldicr r3, r3, 0, 23 7739; CHECK-PREP10-NEXT: ori r4, r4, 19025 7740; CHECK-PREP10-NEXT: rldic r4, r4, 12, 24 7741; CHECK-PREP10-NEXT: stfdx f1, r3, r4 7742; CHECK-PREP10-NEXT: blr 7743entry: 7744 %and = and i64 %ptr, -1099511627776 7745 %conv = fpext float %str to double 7746 %or = or i64 %and, 1000000000000 7747 %0 = inttoptr i64 %or to double* 7748 store double %conv, double* %0, align 4096 7749 ret void 7750} 7751 7752; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7753define dso_local void @st_cst_align16_float_double(float %str) { 7754; CHECK-LABEL: st_cst_align16_float_double: 7755; CHECK: # %bb.0: # %entry 7756; CHECK-NEXT: stfd f1, 4080(0) 7757; CHECK-NEXT: blr 7758entry: 7759 %conv = fpext float %str to double 7760 store double %conv, double* inttoptr (i64 4080 to double*), align 16 7761 ret void 7762} 7763 7764; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7765define dso_local void @st_cst_align32_float_double(float %str) { 7766; CHECK-POSTP8-LABEL: st_cst_align32_float_double: 7767; CHECK-POSTP8: # %bb.0: # %entry 7768; CHECK-POSTP8-NEXT: lis r3, 153 7769; CHECK-POSTP8-NEXT: stfd f1, -27108(r3) 7770; CHECK-POSTP8-NEXT: blr 7771; 7772; CHECK-P8-LABEL: st_cst_align32_float_double: 7773; CHECK-P8: # %bb.0: # %entry 7774; CHECK-P8-NEXT: lis r3, 152 7775; CHECK-P8-NEXT: ori r3, r3, 38428 7776; CHECK-P8-NEXT: stfdx f1, 0, r3 7777; CHECK-P8-NEXT: blr 7778entry: 7779 %conv = fpext float %str to double 7780 store double %conv, double* inttoptr (i64 9999900 to double*), align 8 7781 ret void 7782} 7783 7784; Function Attrs: nofree norecurse nounwind uwtable willreturn writeonly 7785define dso_local void @st_cst_align64_float_double(float %str) { 7786; CHECK-P10-LABEL: st_cst_align64_float_double: 7787; CHECK-P10: # %bb.0: # %entry 7788; CHECK-P10-NEXT: pli r3, 244140625 7789; CHECK-P10-NEXT: rldic r3, r3, 12, 24 7790; CHECK-P10-NEXT: stfd f1, 0(r3) 7791; CHECK-P10-NEXT: blr 7792; 7793; CHECK-P9-LABEL: st_cst_align64_float_double: 7794; CHECK-P9: # %bb.0: # %entry 7795; CHECK-P9-NEXT: lis r3, 3725 7796; CHECK-P9-NEXT: ori r3, r3, 19025 7797; CHECK-P9-NEXT: rldic r3, r3, 12, 24 7798; CHECK-P9-NEXT: stfd f1, 0(r3) 7799; CHECK-P9-NEXT: blr 7800; 7801; CHECK-P8-LABEL: st_cst_align64_float_double: 7802; CHECK-P8: # %bb.0: # %entry 7803; CHECK-P8-NEXT: lis r3, 3725 7804; CHECK-P8-NEXT: ori r3, r3, 19025 7805; CHECK-P8-NEXT: rldic r3, r3, 12, 24 7806; CHECK-P8-NEXT: stfdx f1, 0, r3 7807; CHECK-P8-NEXT: blr 7808entry: 7809 %conv = fpext float %str to double 7810 store double %conv, double* inttoptr (i64 1000000000000 to double*), align 4096 7811 ret void 7812} 7813