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