1095 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown -ppc-vsr-nums-as-vr \3; RUN: -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown -ppc-vsr-nums-as-vr \5; RUN: -verify-machineinstrs < %s | FileCheck -check-prefix=CHECK-PWR8 %s6 7; ==========================================8; Tests for store of fp_to_sint converstions9; ==========================================10 11; Function Attrs: norecurse nounwind12define void @qpConv2sdw(ptr nocapture readonly %a, ptr nocapture %b) {13; CHECK-LABEL: qpConv2sdw:14; CHECK: # %bb.0: # %entry15; CHECK-NEXT: lxv 2, 0(3)16; CHECK-NEXT: xscvqpsdz 2, 217; CHECK-NEXT: stxsd 2, 0(4)18; CHECK-NEXT: blr19;20; CHECK-PWR8-LABEL: qpConv2sdw:21; CHECK-PWR8: # %bb.0: # %entry22; CHECK-PWR8-NEXT: mflr 023; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 4824; CHECK-PWR8-NEXT: .cfi_offset lr, 1625; CHECK-PWR8-NEXT: .cfi_offset r30, -1626; CHECK-PWR8-NEXT: std 30, -16(1) # 8-byte Folded Spill27; CHECK-PWR8-NEXT: stdu 1, -48(1)28; CHECK-PWR8-NEXT: std 0, 64(1)29; CHECK-PWR8-NEXT: mr 30, 430; CHECK-PWR8-NEXT: lxvd2x 0, 0, 331; CHECK-PWR8-NEXT: xxswapd 2, 032; CHECK-PWR8-NEXT: bl __fixkfdi33; CHECK-PWR8-NEXT: nop34; CHECK-PWR8-NEXT: std 3, 0(30)35; CHECK-PWR8-NEXT: addi 1, 1, 4836; CHECK-PWR8-NEXT: ld 0, 16(1)37; CHECK-PWR8-NEXT: ld 30, -16(1) # 8-byte Folded Reload38; CHECK-PWR8-NEXT: mtlr 039; CHECK-PWR8-NEXT: blr40entry:41 %0 = load fp128, ptr %a, align 1642 %conv = fptosi fp128 %0 to i6443 store i64 %conv, ptr %b, align 844 ret void45 46 47}48 49; Function Attrs: norecurse nounwind50define void @qpConv2sw(ptr nocapture readonly %a, ptr nocapture %b) {51; CHECK-LABEL: qpConv2sw:52; CHECK: # %bb.0: # %entry53; CHECK-NEXT: lxv 2, 0(3)54; CHECK-NEXT: xscvqpswz 2, 255; CHECK-NEXT: stxsiwx 2, 0, 456; CHECK-NEXT: blr57;58; CHECK-PWR8-LABEL: qpConv2sw:59; CHECK-PWR8: # %bb.0: # %entry60; CHECK-PWR8-NEXT: mflr 061; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 4862; CHECK-PWR8-NEXT: .cfi_offset lr, 1663; CHECK-PWR8-NEXT: .cfi_offset r30, -1664; CHECK-PWR8-NEXT: std 30, -16(1) # 8-byte Folded Spill65; CHECK-PWR8-NEXT: stdu 1, -48(1)66; CHECK-PWR8-NEXT: std 0, 64(1)67; CHECK-PWR8-NEXT: mr 30, 468; CHECK-PWR8-NEXT: lxvd2x 0, 0, 369; CHECK-PWR8-NEXT: xxswapd 2, 070; CHECK-PWR8-NEXT: bl __fixkfsi71; CHECK-PWR8-NEXT: nop72; CHECK-PWR8-NEXT: stw 3, 0(30)73; CHECK-PWR8-NEXT: addi 1, 1, 4874; CHECK-PWR8-NEXT: ld 0, 16(1)75; CHECK-PWR8-NEXT: ld 30, -16(1) # 8-byte Folded Reload76; CHECK-PWR8-NEXT: mtlr 077; CHECK-PWR8-NEXT: blr78entry:79 %0 = load fp128, ptr %a, align 1680 %conv = fptosi fp128 %0 to i3281 store i32 %conv, ptr %b, align 482 ret void83 84 85}86 87; Function Attrs: norecurse nounwind88define void @qpConv2udw(ptr nocapture readonly %a, ptr nocapture %b) {89; CHECK-LABEL: qpConv2udw:90; CHECK: # %bb.0: # %entry91; CHECK-NEXT: lxv 2, 0(3)92; CHECK-NEXT: xscvqpudz 2, 293; CHECK-NEXT: stxsd 2, 0(4)94; CHECK-NEXT: blr95;96; CHECK-PWR8-LABEL: qpConv2udw:97; CHECK-PWR8: # %bb.0: # %entry98; CHECK-PWR8-NEXT: mflr 099; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 48100; CHECK-PWR8-NEXT: .cfi_offset lr, 16101; CHECK-PWR8-NEXT: .cfi_offset r30, -16102; CHECK-PWR8-NEXT: std 30, -16(1) # 8-byte Folded Spill103; CHECK-PWR8-NEXT: stdu 1, -48(1)104; CHECK-PWR8-NEXT: std 0, 64(1)105; CHECK-PWR8-NEXT: mr 30, 4106; CHECK-PWR8-NEXT: lxvd2x 0, 0, 3107; CHECK-PWR8-NEXT: xxswapd 2, 0108; CHECK-PWR8-NEXT: bl __fixunskfdi109; CHECK-PWR8-NEXT: nop110; CHECK-PWR8-NEXT: std 3, 0(30)111; CHECK-PWR8-NEXT: addi 1, 1, 48112; CHECK-PWR8-NEXT: ld 0, 16(1)113; CHECK-PWR8-NEXT: ld 30, -16(1) # 8-byte Folded Reload114; CHECK-PWR8-NEXT: mtlr 0115; CHECK-PWR8-NEXT: blr116entry:117 %0 = load fp128, ptr %a, align 16118 %conv = fptoui fp128 %0 to i64119 store i64 %conv, ptr %b, align 8120 ret void121 122 123}124 125; Function Attrs: norecurse nounwind126define void @qpConv2uw(ptr nocapture readonly %a, ptr nocapture %b) {127; CHECK-LABEL: qpConv2uw:128; CHECK: # %bb.0: # %entry129; CHECK-NEXT: lxv 2, 0(3)130; CHECK-NEXT: xscvqpuwz 2, 2131; CHECK-NEXT: stxsiwx 2, 0, 4132; CHECK-NEXT: blr133;134; CHECK-PWR8-LABEL: qpConv2uw:135; CHECK-PWR8: # %bb.0: # %entry136; CHECK-PWR8-NEXT: mflr 0137; CHECK-PWR8-NEXT: .cfi_def_cfa_offset 48138; CHECK-PWR8-NEXT: .cfi_offset lr, 16139; CHECK-PWR8-NEXT: .cfi_offset r30, -16140; CHECK-PWR8-NEXT: std 30, -16(1) # 8-byte Folded Spill141; CHECK-PWR8-NEXT: stdu 1, -48(1)142; CHECK-PWR8-NEXT: std 0, 64(1)143; CHECK-PWR8-NEXT: mr 30, 4144; CHECK-PWR8-NEXT: lxvd2x 0, 0, 3145; CHECK-PWR8-NEXT: xxswapd 2, 0146; CHECK-PWR8-NEXT: bl __fixunskfsi147; CHECK-PWR8-NEXT: nop148; CHECK-PWR8-NEXT: stw 3, 0(30)149; CHECK-PWR8-NEXT: addi 1, 1, 48150; CHECK-PWR8-NEXT: ld 0, 16(1)151; CHECK-PWR8-NEXT: ld 30, -16(1) # 8-byte Folded Reload152; CHECK-PWR8-NEXT: mtlr 0153; CHECK-PWR8-NEXT: blr154entry:155 %0 = load fp128, ptr %a, align 16156 %conv = fptoui fp128 %0 to i32157 store i32 %conv, ptr %b, align 4158 ret void159 160 161}162 163; Function Attrs: norecurse nounwind164define void @dpConv2sdw(ptr nocapture readonly %a, ptr nocapture %b) {165; CHECK-LABEL: dpConv2sdw:166; CHECK: # %bb.0: # %entry167; CHECK-NEXT: lfd 0, 0(3)168; CHECK-NEXT: xscvdpsxds 2, 0169; CHECK-NEXT: stxsd 2, 0(4)170; CHECK-NEXT: blr171;172; CHECK-PWR8-LABEL: dpConv2sdw:173; CHECK-PWR8: # %bb.0: # %entry174; CHECK-PWR8-NEXT: lfd 0, 0(3)175; CHECK-PWR8-NEXT: xscvdpsxds 0, 0176; CHECK-PWR8-NEXT: stxsdx 0, 0, 4177; CHECK-PWR8-NEXT: blr178entry:179 %0 = load double, ptr %a, align 8180 %conv = fptosi double %0 to i64181 store i64 %conv, ptr %b, align 8182 ret void183 184 185}186 187; Function Attrs: norecurse nounwind188define void @dpConv2sw(ptr nocapture readonly %a, ptr nocapture %b) {189; CHECK-LABEL: dpConv2sw:190; CHECK: # %bb.0: # %entry191; CHECK-NEXT: lfd 0, 0(3)192; CHECK-NEXT: xscvdpsxws 0, 0193; CHECK-NEXT: stfiwx 0, 0, 4194; CHECK-NEXT: blr195;196; CHECK-PWR8-LABEL: dpConv2sw:197; CHECK-PWR8: # %bb.0: # %entry198; CHECK-PWR8-NEXT: lfd 0, 0(3)199; CHECK-PWR8-NEXT: xscvdpsxws 0, 0200; CHECK-PWR8-NEXT: stfiwx 0, 0, 4201; CHECK-PWR8-NEXT: blr202entry:203 %0 = load double, ptr %a, align 8204 %conv = fptosi double %0 to i32205 store i32 %conv, ptr %b, align 4206 ret void207 208 209}210 211; Function Attrs: norecurse nounwind212define void @dpConv2shw(ptr nocapture readonly %a, ptr nocapture %b) {213; CHECK-LABEL: dpConv2shw:214; CHECK: # %bb.0: # %entry215; CHECK-NEXT: lfd 0, 0(3)216; CHECK-NEXT: xscvdpsxds 0, 0217; CHECK-NEXT: stxsihx 0, 0, 4218; CHECK-NEXT: blr219;220; CHECK-PWR8-LABEL: dpConv2shw:221; CHECK-PWR8: # %bb.0: # %entry222; CHECK-PWR8-NEXT: lfd 0, 0(3)223; CHECK-PWR8-NEXT: xscvdpsxws 0, 0224; CHECK-PWR8-NEXT: mffprwz 3, 0225; CHECK-PWR8-NEXT: sth 3, 0(4)226; CHECK-PWR8-NEXT: blr227entry:228 %0 = load double, ptr %a, align 8229 %conv = fptosi double %0 to i16230 store i16 %conv, ptr %b, align 2231 ret void232 233 234}235 236; Function Attrs: norecurse nounwind237define void @dpConv2sb(ptr nocapture readonly %a, ptr nocapture %b) {238; CHECK-LABEL: dpConv2sb:239; CHECK: # %bb.0: # %entry240; CHECK-NEXT: lfd 0, 0(3)241; CHECK-NEXT: xscvdpsxds 0, 0242; CHECK-NEXT: stxsibx 0, 0, 4243; CHECK-NEXT: blr244;245; CHECK-PWR8-LABEL: dpConv2sb:246; CHECK-PWR8: # %bb.0: # %entry247; CHECK-PWR8-NEXT: lfd 0, 0(3)248; CHECK-PWR8-NEXT: xscvdpsxws 0, 0249; CHECK-PWR8-NEXT: mffprwz 3, 0250; CHECK-PWR8-NEXT: stb 3, 0(4)251; CHECK-PWR8-NEXT: blr252entry:253 %0 = load double, ptr %a, align 8254 %conv = fptosi double %0 to i8255 store i8 %conv, ptr %b, align 1256 ret void257 258 259}260 261; Function Attrs: norecurse nounwind262define void @spConv2sdw(ptr nocapture readonly %a, ptr nocapture %b) {263; CHECK-LABEL: spConv2sdw:264; CHECK: # %bb.0: # %entry265; CHECK-NEXT: lfs 0, 0(3)266; CHECK-NEXT: xscvdpsxds 2, 0267; CHECK-NEXT: stxsd 2, 0(4)268; CHECK-NEXT: blr269;270; CHECK-PWR8-LABEL: spConv2sdw:271; CHECK-PWR8: # %bb.0: # %entry272; CHECK-PWR8-NEXT: lfs 0, 0(3)273; CHECK-PWR8-NEXT: xscvdpsxds 0, 0274; CHECK-PWR8-NEXT: stxsdx 0, 0, 4275; CHECK-PWR8-NEXT: blr276entry:277 %0 = load float, ptr %a, align 4278 %conv = fptosi float %0 to i64279 store i64 %conv, ptr %b, align 8280 ret void281 282 283}284 285; Function Attrs: norecurse nounwind286define void @spConv2sw(ptr nocapture readonly %a, ptr nocapture %b) {287; CHECK-LABEL: spConv2sw:288; CHECK: # %bb.0: # %entry289; CHECK-NEXT: lfs 0, 0(3)290; CHECK-NEXT: xscvdpsxws 0, 0291; CHECK-NEXT: stfiwx 0, 0, 4292; CHECK-NEXT: blr293;294; CHECK-PWR8-LABEL: spConv2sw:295; CHECK-PWR8: # %bb.0: # %entry296; CHECK-PWR8-NEXT: lfs 0, 0(3)297; CHECK-PWR8-NEXT: xscvdpsxws 0, 0298; CHECK-PWR8-NEXT: stfiwx 0, 0, 4299; CHECK-PWR8-NEXT: blr300entry:301 %0 = load float, ptr %a, align 4302 %conv = fptosi float %0 to i32303 store i32 %conv, ptr %b, align 4304 ret void305 306 307}308 309; Function Attrs: norecurse nounwind310define void @spConv2shw(ptr nocapture readonly %a, ptr nocapture %b) {311; CHECK-LABEL: spConv2shw:312; CHECK: # %bb.0: # %entry313; CHECK-NEXT: lfs 0, 0(3)314; CHECK-NEXT: xscvdpsxds 0, 0315; CHECK-NEXT: stxsihx 0, 0, 4316; CHECK-NEXT: blr317;318; CHECK-PWR8-LABEL: spConv2shw:319; CHECK-PWR8: # %bb.0: # %entry320; CHECK-PWR8-NEXT: lfs 0, 0(3)321; CHECK-PWR8-NEXT: xscvdpsxws 0, 0322; CHECK-PWR8-NEXT: mffprwz 3, 0323; CHECK-PWR8-NEXT: sth 3, 0(4)324; CHECK-PWR8-NEXT: blr325entry:326 %0 = load float, ptr %a, align 4327 %conv = fptosi float %0 to i16328 store i16 %conv, ptr %b, align 2329 ret void330 331 332}333 334; Function Attrs: norecurse nounwind335define void @spConv2sb(ptr nocapture readonly %a, ptr nocapture %b) {336; CHECK-LABEL: spConv2sb:337; CHECK: # %bb.0: # %entry338; CHECK-NEXT: lfs 0, 0(3)339; CHECK-NEXT: xscvdpsxds 0, 0340; CHECK-NEXT: stxsibx 0, 0, 4341; CHECK-NEXT: blr342;343; CHECK-PWR8-LABEL: spConv2sb:344; CHECK-PWR8: # %bb.0: # %entry345; CHECK-PWR8-NEXT: lfs 0, 0(3)346; CHECK-PWR8-NEXT: xscvdpsxws 0, 0347; CHECK-PWR8-NEXT: mffprwz 3, 0348; CHECK-PWR8-NEXT: stb 3, 0(4)349; CHECK-PWR8-NEXT: blr350entry:351 %0 = load float, ptr %a, align 4352 %conv = fptosi float %0 to i8353 store i8 %conv, ptr %b, align 1354 ret void355 356 357}358 359; Function Attrs: norecurse nounwind360define void @dpConv2sdw_x(ptr nocapture readonly %a, ptr nocapture %b,361; CHECK-LABEL: dpConv2sdw_x:362; CHECK: # %bb.0: # %entry363; CHECK-NEXT: lfd 0, 0(3)364; CHECK-NEXT: sldi 3, 5, 3365; CHECK-NEXT: xscvdpsxds 0, 0366; CHECK-NEXT: stxsdx 0, 4, 3367; CHECK-NEXT: blr368;369; CHECK-PWR8-LABEL: dpConv2sdw_x:370; CHECK-PWR8: # %bb.0: # %entry371; CHECK-PWR8-NEXT: lfd 0, 0(3)372; CHECK-PWR8-NEXT: sldi 3, 5, 3373; CHECK-PWR8-NEXT: xscvdpsxds 0, 0374; CHECK-PWR8-NEXT: stxsdx 0, 4, 3375; CHECK-PWR8-NEXT: blr376 i32 signext %idx) {377entry:378 %0 = load double, ptr %a, align 8379 %conv = fptosi double %0 to i64380 %idxprom = sext i32 %idx to i64381 %arrayidx = getelementptr inbounds i64, ptr %b, i64 %idxprom382 store i64 %conv, ptr %arrayidx, align 8383 ret void384 385 386}387 388; Function Attrs: norecurse nounwind389define void @dpConv2sw_x(ptr nocapture readonly %a, ptr nocapture %b,390; CHECK-LABEL: dpConv2sw_x:391; CHECK: # %bb.0: # %entry392; CHECK-NEXT: lfd 0, 0(3)393; CHECK-NEXT: sldi 3, 5, 2394; CHECK-NEXT: xscvdpsxws 0, 0395; CHECK-NEXT: stfiwx 0, 4, 3396; CHECK-NEXT: blr397;398; CHECK-PWR8-LABEL: dpConv2sw_x:399; CHECK-PWR8: # %bb.0: # %entry400; CHECK-PWR8-NEXT: lfd 0, 0(3)401; CHECK-PWR8-NEXT: sldi 3, 5, 2402; CHECK-PWR8-NEXT: xscvdpsxws 0, 0403; CHECK-PWR8-NEXT: stfiwx 0, 4, 3404; CHECK-PWR8-NEXT: blr405 i32 signext %idx) {406entry:407 %0 = load double, ptr %a, align 8408 %conv = fptosi double %0 to i32409 %idxprom = sext i32 %idx to i64410 %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom411 store i32 %conv, ptr %arrayidx, align 4412 ret void413 414 415}416 417; Function Attrs: norecurse nounwind418define void @dpConv2shw_x(ptr nocapture readonly %a, ptr nocapture %b,419; CHECK-LABEL: dpConv2shw_x:420; CHECK: # %bb.0: # %entry421; CHECK-NEXT: lfd 0, 0(3)422; CHECK-NEXT: sldi 3, 5, 1423; CHECK-NEXT: xscvdpsxds 0, 0424; CHECK-NEXT: stxsihx 0, 4, 3425; CHECK-NEXT: blr426;427; CHECK-PWR8-LABEL: dpConv2shw_x:428; CHECK-PWR8: # %bb.0: # %entry429; CHECK-PWR8-NEXT: lfd 0, 0(3)430; CHECK-PWR8-NEXT: sldi 5, 5, 1431; CHECK-PWR8-NEXT: xscvdpsxws 0, 0432; CHECK-PWR8-NEXT: mffprwz 3, 0433; CHECK-PWR8-NEXT: sthx 3, 4, 5434; CHECK-PWR8-NEXT: blr435 i32 signext %idx) {436entry:437 %0 = load double, ptr %a, align 8438 %conv = fptosi double %0 to i16439 %idxprom = sext i32 %idx to i64440 %arrayidx = getelementptr inbounds i16, ptr %b, i64 %idxprom441 store i16 %conv, ptr %arrayidx, align 2442 ret void443 444 445}446 447; Function Attrs: norecurse nounwind448define void @dpConv2sb_x(ptr nocapture readonly %a, ptr nocapture %b,449; CHECK-LABEL: dpConv2sb_x:450; CHECK: # %bb.0: # %entry451; CHECK-NEXT: lfd 0, 0(3)452; CHECK-NEXT: xscvdpsxds 0, 0453; CHECK-NEXT: stxsibx 0, 4, 5454; CHECK-NEXT: blr455;456; CHECK-PWR8-LABEL: dpConv2sb_x:457; CHECK-PWR8: # %bb.0: # %entry458; CHECK-PWR8-NEXT: lfd 0, 0(3)459; CHECK-PWR8-NEXT: xscvdpsxws 0, 0460; CHECK-PWR8-NEXT: mffprwz 3, 0461; CHECK-PWR8-NEXT: stbx 3, 4, 5462; CHECK-PWR8-NEXT: blr463 i32 signext %idx) {464entry:465 %0 = load double, ptr %a, align 8466 %conv = fptosi double %0 to i8467 %idxprom = sext i32 %idx to i64468 %arrayidx = getelementptr inbounds i8, ptr %b, i64 %idxprom469 store i8 %conv, ptr %arrayidx, align 1470 ret void471 472 473}474 475; Function Attrs: norecurse nounwind476define void @spConv2sdw_x(ptr nocapture readonly %a, ptr nocapture %b,477; CHECK-LABEL: spConv2sdw_x:478; CHECK: # %bb.0: # %entry479; CHECK-NEXT: lfs 0, 0(3)480; CHECK-NEXT: xscvdpsxds 0, 0481; CHECK-NEXT: sldi 3, 5, 3482; CHECK-NEXT: stxsdx 0, 4, 3483; CHECK-NEXT: blr484;485; CHECK-PWR8-LABEL: spConv2sdw_x:486; CHECK-PWR8: # %bb.0: # %entry487; CHECK-PWR8-NEXT: lfs 0, 0(3)488; CHECK-PWR8-NEXT: sldi 3, 5, 3489; CHECK-PWR8-NEXT: xscvdpsxds 0, 0490; CHECK-PWR8-NEXT: stxsdx 0, 4, 3491; CHECK-PWR8-NEXT: blr492 i32 signext %idx) {493entry:494 %0 = load float, ptr %a, align 4495 %conv = fptosi float %0 to i64496 %idxprom = sext i32 %idx to i64497 %arrayidx = getelementptr inbounds i64, ptr %b, i64 %idxprom498 store i64 %conv, ptr %arrayidx, align 8499 ret void500 501 502}503 504; Function Attrs: norecurse nounwind505define void @spConv2sw_x(ptr nocapture readonly %a, ptr nocapture %b,506; CHECK-LABEL: spConv2sw_x:507; CHECK: # %bb.0: # %entry508; CHECK-NEXT: lfs 0, 0(3)509; CHECK-NEXT: xscvdpsxws 0, 0510; CHECK-NEXT: sldi 3, 5, 2511; CHECK-NEXT: stfiwx 0, 4, 3512; CHECK-NEXT: blr513;514; CHECK-PWR8-LABEL: spConv2sw_x:515; CHECK-PWR8: # %bb.0: # %entry516; CHECK-PWR8-NEXT: lfs 0, 0(3)517; CHECK-PWR8-NEXT: sldi 3, 5, 2518; CHECK-PWR8-NEXT: xscvdpsxws 0, 0519; CHECK-PWR8-NEXT: stfiwx 0, 4, 3520; CHECK-PWR8-NEXT: blr521 i32 signext %idx) {522entry:523 %0 = load float, ptr %a, align 4524 %conv = fptosi float %0 to i32525 %idxprom = sext i32 %idx to i64526 %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom527 store i32 %conv, ptr %arrayidx, align 4528 ret void529 530 531}532 533; Function Attrs: norecurse nounwind534define void @spConv2shw_x(ptr nocapture readonly %a, ptr nocapture %b,535; CHECK-LABEL: spConv2shw_x:536; CHECK: # %bb.0: # %entry537; CHECK-NEXT: lfs 0, 0(3)538; CHECK-NEXT: xscvdpsxds 0, 0539; CHECK-NEXT: sldi 3, 5, 1540; CHECK-NEXT: stxsihx 0, 4, 3541; CHECK-NEXT: blr542;543; CHECK-PWR8-LABEL: spConv2shw_x:544; CHECK-PWR8: # %bb.0: # %entry545; CHECK-PWR8-NEXT: lfs 0, 0(3)546; CHECK-PWR8-NEXT: sldi 5, 5, 1547; CHECK-PWR8-NEXT: xscvdpsxws 0, 0548; CHECK-PWR8-NEXT: mffprwz 3, 0549; CHECK-PWR8-NEXT: sthx 3, 4, 5550; CHECK-PWR8-NEXT: blr551 i32 signext %idx) {552entry:553 %0 = load float, ptr %a, align 4554 %conv = fptosi float %0 to i16555 %idxprom = sext i32 %idx to i64556 %arrayidx = getelementptr inbounds i16, ptr %b, i64 %idxprom557 store i16 %conv, ptr %arrayidx, align 2558 ret void559 560 561}562 563; Function Attrs: norecurse nounwind564define void @spConv2sb_x(ptr nocapture readonly %a, ptr nocapture %b,565; CHECK-LABEL: spConv2sb_x:566; CHECK: # %bb.0: # %entry567; CHECK-NEXT: lfs 0, 0(3)568; CHECK-NEXT: xscvdpsxds 0, 0569; CHECK-NEXT: stxsibx 0, 4, 5570; CHECK-NEXT: blr571;572; CHECK-PWR8-LABEL: spConv2sb_x:573; CHECK-PWR8: # %bb.0: # %entry574; CHECK-PWR8-NEXT: lfs 0, 0(3)575; CHECK-PWR8-NEXT: xscvdpsxws 0, 0576; CHECK-PWR8-NEXT: mffprwz 3, 0577; CHECK-PWR8-NEXT: stbx 3, 4, 5578; CHECK-PWR8-NEXT: blr579 i32 signext %idx) {580entry:581 %0 = load float, ptr %a, align 4582 %conv = fptosi float %0 to i8583 %idxprom = sext i32 %idx to i64584 %arrayidx = getelementptr inbounds i8, ptr %b, i64 %idxprom585 store i8 %conv, ptr %arrayidx, align 1586 ret void587 588 589}590 591; ==========================================592; Tests for store of fp_to_uint converstions593; ==========================================594 595; Function Attrs: norecurse nounwind596define void @dpConv2udw(ptr nocapture readonly %a, ptr nocapture %b) {597; CHECK-LABEL: dpConv2udw:598; CHECK: # %bb.0: # %entry599; CHECK-NEXT: lfd 0, 0(3)600; CHECK-NEXT: xscvdpuxds 2, 0601; CHECK-NEXT: stxsd 2, 0(4)602; CHECK-NEXT: blr603;604; CHECK-PWR8-LABEL: dpConv2udw:605; CHECK-PWR8: # %bb.0: # %entry606; CHECK-PWR8-NEXT: lfd 0, 0(3)607; CHECK-PWR8-NEXT: xscvdpuxds 0, 0608; CHECK-PWR8-NEXT: stxsdx 0, 0, 4609; CHECK-PWR8-NEXT: blr610entry:611 %0 = load double, ptr %a, align 8612 %conv = fptoui double %0 to i64613 store i64 %conv, ptr %b, align 8614 ret void615 616 617}618 619; Function Attrs: norecurse nounwind620define void @dpConv2uw(ptr nocapture readonly %a, ptr nocapture %b) {621; CHECK-LABEL: dpConv2uw:622; CHECK: # %bb.0: # %entry623; CHECK-NEXT: lfd 0, 0(3)624; CHECK-NEXT: xscvdpuxws 0, 0625; CHECK-NEXT: stfiwx 0, 0, 4626; CHECK-NEXT: blr627;628; CHECK-PWR8-LABEL: dpConv2uw:629; CHECK-PWR8: # %bb.0: # %entry630; CHECK-PWR8-NEXT: lfd 0, 0(3)631; CHECK-PWR8-NEXT: xscvdpuxws 0, 0632; CHECK-PWR8-NEXT: stfiwx 0, 0, 4633; CHECK-PWR8-NEXT: blr634entry:635 %0 = load double, ptr %a, align 8636 %conv = fptoui double %0 to i32637 store i32 %conv, ptr %b, align 4638 ret void639 640 641}642 643; Function Attrs: norecurse nounwind644define void @dpConv2uhw(ptr nocapture readonly %a, ptr nocapture %b) {645; CHECK-LABEL: dpConv2uhw:646; CHECK: # %bb.0: # %entry647; CHECK-NEXT: lfd 0, 0(3)648; CHECK-NEXT: xscvdpuxds 0, 0649; CHECK-NEXT: stxsihx 0, 0, 4650; CHECK-NEXT: blr651;652; CHECK-PWR8-LABEL: dpConv2uhw:653; CHECK-PWR8: # %bb.0: # %entry654; CHECK-PWR8-NEXT: lfd 0, 0(3)655; CHECK-PWR8-NEXT: xscvdpsxws 0, 0656; CHECK-PWR8-NEXT: mffprwz 3, 0657; CHECK-PWR8-NEXT: sth 3, 0(4)658; CHECK-PWR8-NEXT: blr659entry:660 %0 = load double, ptr %a, align 8661 %conv = fptoui double %0 to i16662 store i16 %conv, ptr %b, align 2663 ret void664 665 666}667 668; Function Attrs: norecurse nounwind669define void @dpConv2ub(ptr nocapture readonly %a, ptr nocapture %b) {670; CHECK-LABEL: dpConv2ub:671; CHECK: # %bb.0: # %entry672; CHECK-NEXT: lfd 0, 0(3)673; CHECK-NEXT: xscvdpuxds 0, 0674; CHECK-NEXT: stxsibx 0, 0, 4675; CHECK-NEXT: blr676;677; CHECK-PWR8-LABEL: dpConv2ub:678; CHECK-PWR8: # %bb.0: # %entry679; CHECK-PWR8-NEXT: lfd 0, 0(3)680; CHECK-PWR8-NEXT: xscvdpsxws 0, 0681; CHECK-PWR8-NEXT: mffprwz 3, 0682; CHECK-PWR8-NEXT: stb 3, 0(4)683; CHECK-PWR8-NEXT: blr684entry:685 %0 = load double, ptr %a, align 8686 %conv = fptoui double %0 to i8687 store i8 %conv, ptr %b, align 1688 ret void689 690 691}692 693; Function Attrs: norecurse nounwind694define void @spConv2udw(ptr nocapture readonly %a, ptr nocapture %b) {695; CHECK-LABEL: spConv2udw:696; CHECK: # %bb.0: # %entry697; CHECK-NEXT: lfs 0, 0(3)698; CHECK-NEXT: xscvdpuxds 2, 0699; CHECK-NEXT: stxsd 2, 0(4)700; CHECK-NEXT: blr701;702; CHECK-PWR8-LABEL: spConv2udw:703; CHECK-PWR8: # %bb.0: # %entry704; CHECK-PWR8-NEXT: lfs 0, 0(3)705; CHECK-PWR8-NEXT: xscvdpuxds 0, 0706; CHECK-PWR8-NEXT: stxsdx 0, 0, 4707; CHECK-PWR8-NEXT: blr708entry:709 %0 = load float, ptr %a, align 4710 %conv = fptoui float %0 to i64711 store i64 %conv, ptr %b, align 8712 ret void713 714 715}716 717; Function Attrs: norecurse nounwind718define void @spConv2uw(ptr nocapture readonly %a, ptr nocapture %b) {719; CHECK-LABEL: spConv2uw:720; CHECK: # %bb.0: # %entry721; CHECK-NEXT: lfs 0, 0(3)722; CHECK-NEXT: xscvdpuxws 0, 0723; CHECK-NEXT: stfiwx 0, 0, 4724; CHECK-NEXT: blr725;726; CHECK-PWR8-LABEL: spConv2uw:727; CHECK-PWR8: # %bb.0: # %entry728; CHECK-PWR8-NEXT: lfs 0, 0(3)729; CHECK-PWR8-NEXT: xscvdpuxws 0, 0730; CHECK-PWR8-NEXT: stfiwx 0, 0, 4731; CHECK-PWR8-NEXT: blr732entry:733 %0 = load float, ptr %a, align 4734 %conv = fptoui float %0 to i32735 store i32 %conv, ptr %b, align 4736 ret void737 738 739}740 741; Function Attrs: norecurse nounwind742define void @spConv2uhw(ptr nocapture readonly %a, ptr nocapture %b) {743; CHECK-LABEL: spConv2uhw:744; CHECK: # %bb.0: # %entry745; CHECK-NEXT: lfs 0, 0(3)746; CHECK-NEXT: xscvdpuxds 0, 0747; CHECK-NEXT: stxsihx 0, 0, 4748; CHECK-NEXT: blr749;750; CHECK-PWR8-LABEL: spConv2uhw:751; CHECK-PWR8: # %bb.0: # %entry752; CHECK-PWR8-NEXT: lfs 0, 0(3)753; CHECK-PWR8-NEXT: xscvdpsxws 0, 0754; CHECK-PWR8-NEXT: mffprwz 3, 0755; CHECK-PWR8-NEXT: sth 3, 0(4)756; CHECK-PWR8-NEXT: blr757entry:758 %0 = load float, ptr %a, align 4759 %conv = fptoui float %0 to i16760 store i16 %conv, ptr %b, align 2761 ret void762 763 764}765 766; Function Attrs: norecurse nounwind767define void @spConv2ub(ptr nocapture readonly %a, ptr nocapture %b) {768; CHECK-LABEL: spConv2ub:769; CHECK: # %bb.0: # %entry770; CHECK-NEXT: lfs 0, 0(3)771; CHECK-NEXT: xscvdpuxds 0, 0772; CHECK-NEXT: stxsibx 0, 0, 4773; CHECK-NEXT: blr774;775; CHECK-PWR8-LABEL: spConv2ub:776; CHECK-PWR8: # %bb.0: # %entry777; CHECK-PWR8-NEXT: lfs 0, 0(3)778; CHECK-PWR8-NEXT: xscvdpsxws 0, 0779; CHECK-PWR8-NEXT: mffprwz 3, 0780; CHECK-PWR8-NEXT: stb 3, 0(4)781; CHECK-PWR8-NEXT: blr782entry:783 %0 = load float, ptr %a, align 4784 %conv = fptoui float %0 to i8785 store i8 %conv, ptr %b, align 1786 ret void787 788 789}790 791; Function Attrs: norecurse nounwind792define void @dpConv2udw_x(ptr nocapture readonly %a, ptr nocapture %b,793; CHECK-LABEL: dpConv2udw_x:794; CHECK: # %bb.0: # %entry795; CHECK-NEXT: lfd 0, 0(3)796; CHECK-NEXT: sldi 3, 5, 3797; CHECK-NEXT: xscvdpuxds 0, 0798; CHECK-NEXT: stxsdx 0, 4, 3799; CHECK-NEXT: blr800;801; CHECK-PWR8-LABEL: dpConv2udw_x:802; CHECK-PWR8: # %bb.0: # %entry803; CHECK-PWR8-NEXT: lfd 0, 0(3)804; CHECK-PWR8-NEXT: sldi 3, 5, 3805; CHECK-PWR8-NEXT: xscvdpuxds 0, 0806; CHECK-PWR8-NEXT: stxsdx 0, 4, 3807; CHECK-PWR8-NEXT: blr808 i32 zeroext %idx) {809entry:810 %0 = load double, ptr %a, align 8811 %conv = fptoui double %0 to i64812 %idxprom = zext i32 %idx to i64813 %arrayidx = getelementptr inbounds i64, ptr %b, i64 %idxprom814 store i64 %conv, ptr %arrayidx, align 8815 ret void816 817 818}819 820; Function Attrs: norecurse nounwind821define void @dpConv2uw_x(ptr nocapture readonly %a, ptr nocapture %b,822; CHECK-LABEL: dpConv2uw_x:823; CHECK: # %bb.0: # %entry824; CHECK-NEXT: lfd 0, 0(3)825; CHECK-NEXT: sldi 3, 5, 2826; CHECK-NEXT: xscvdpuxws 0, 0827; CHECK-NEXT: stfiwx 0, 4, 3828; CHECK-NEXT: blr829;830; CHECK-PWR8-LABEL: dpConv2uw_x:831; CHECK-PWR8: # %bb.0: # %entry832; CHECK-PWR8-NEXT: lfd 0, 0(3)833; CHECK-PWR8-NEXT: sldi 3, 5, 2834; CHECK-PWR8-NEXT: xscvdpuxws 0, 0835; CHECK-PWR8-NEXT: stfiwx 0, 4, 3836; CHECK-PWR8-NEXT: blr837 i32 zeroext %idx) {838entry:839 %0 = load double, ptr %a, align 8840 %conv = fptoui double %0 to i32841 %idxprom = zext i32 %idx to i64842 %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom843 store i32 %conv, ptr %arrayidx, align 4844 ret void845 846 847}848 849; Function Attrs: norecurse nounwind850define void @dpConv2uhw_x(ptr nocapture readonly %a, ptr nocapture %b,851; CHECK-LABEL: dpConv2uhw_x:852; CHECK: # %bb.0: # %entry853; CHECK-NEXT: lfd 0, 0(3)854; CHECK-NEXT: sldi 3, 5, 1855; CHECK-NEXT: xscvdpuxds 0, 0856; CHECK-NEXT: stxsihx 0, 4, 3857; CHECK-NEXT: blr858;859; CHECK-PWR8-LABEL: dpConv2uhw_x:860; CHECK-PWR8: # %bb.0: # %entry861; CHECK-PWR8-NEXT: lfd 0, 0(3)862; CHECK-PWR8-NEXT: sldi 5, 5, 1863; CHECK-PWR8-NEXT: xscvdpsxws 0, 0864; CHECK-PWR8-NEXT: mffprwz 3, 0865; CHECK-PWR8-NEXT: sthx 3, 4, 5866; CHECK-PWR8-NEXT: blr867 i32 zeroext %idx) {868entry:869 %0 = load double, ptr %a, align 8870 %conv = fptoui double %0 to i16871 %idxprom = zext i32 %idx to i64872 %arrayidx = getelementptr inbounds i16, ptr %b, i64 %idxprom873 store i16 %conv, ptr %arrayidx, align 2874 ret void875 876 877}878 879; Function Attrs: norecurse nounwind880define void @dpConv2ub_x(ptr nocapture readonly %a, ptr nocapture %b,881; CHECK-LABEL: dpConv2ub_x:882; CHECK: # %bb.0: # %entry883; CHECK-NEXT: lfd 0, 0(3)884; CHECK-NEXT: xscvdpuxds 0, 0885; CHECK-NEXT: stxsibx 0, 4, 5886; CHECK-NEXT: blr887;888; CHECK-PWR8-LABEL: dpConv2ub_x:889; CHECK-PWR8: # %bb.0: # %entry890; CHECK-PWR8-NEXT: lfd 0, 0(3)891; CHECK-PWR8-NEXT: xscvdpsxws 0, 0892; CHECK-PWR8-NEXT: mffprwz 3, 0893; CHECK-PWR8-NEXT: stbx 3, 4, 5894; CHECK-PWR8-NEXT: blr895 i32 zeroext %idx) {896entry:897 %0 = load double, ptr %a, align 8898 %conv = fptoui double %0 to i8899 %idxprom = zext i32 %idx to i64900 %arrayidx = getelementptr inbounds i8, ptr %b, i64 %idxprom901 store i8 %conv, ptr %arrayidx, align 1902 ret void903 904 905}906 907; Function Attrs: norecurse nounwind908define void @spConv2udw_x(ptr nocapture readonly %a, ptr nocapture %b,909; CHECK-LABEL: spConv2udw_x:910; CHECK: # %bb.0: # %entry911; CHECK-NEXT: lfs 0, 0(3)912; CHECK-NEXT: xscvdpuxds 0, 0913; CHECK-NEXT: sldi 3, 5, 3914; CHECK-NEXT: stxsdx 0, 4, 3915; CHECK-NEXT: blr916;917; CHECK-PWR8-LABEL: spConv2udw_x:918; CHECK-PWR8: # %bb.0: # %entry919; CHECK-PWR8-NEXT: lfs 0, 0(3)920; CHECK-PWR8-NEXT: sldi 3, 5, 3921; CHECK-PWR8-NEXT: xscvdpuxds 0, 0922; CHECK-PWR8-NEXT: stxsdx 0, 4, 3923; CHECK-PWR8-NEXT: blr924 i32 zeroext %idx) {925entry:926 %0 = load float, ptr %a, align 4927 %conv = fptoui float %0 to i64928 %idxprom = zext i32 %idx to i64929 %arrayidx = getelementptr inbounds i64, ptr %b, i64 %idxprom930 store i64 %conv, ptr %arrayidx, align 8931 ret void932 933 934}935 936; Function Attrs: norecurse nounwind937define void @spConv2uw_x(ptr nocapture readonly %a, ptr nocapture %b,938; CHECK-LABEL: spConv2uw_x:939; CHECK: # %bb.0: # %entry940; CHECK-NEXT: lfs 0, 0(3)941; CHECK-NEXT: xscvdpuxws 0, 0942; CHECK-NEXT: sldi 3, 5, 2943; CHECK-NEXT: stfiwx 0, 4, 3944; CHECK-NEXT: blr945;946; CHECK-PWR8-LABEL: spConv2uw_x:947; CHECK-PWR8: # %bb.0: # %entry948; CHECK-PWR8-NEXT: lfs 0, 0(3)949; CHECK-PWR8-NEXT: sldi 3, 5, 2950; CHECK-PWR8-NEXT: xscvdpuxws 0, 0951; CHECK-PWR8-NEXT: stfiwx 0, 4, 3952; CHECK-PWR8-NEXT: blr953 i32 zeroext %idx) {954entry:955 %0 = load float, ptr %a, align 4956 %conv = fptoui float %0 to i32957 %idxprom = zext i32 %idx to i64958 %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom959 store i32 %conv, ptr %arrayidx, align 4960 ret void961 962 963}964 965; Function Attrs: norecurse nounwind966define void @spConv2uhw_x(ptr nocapture readonly %a, ptr nocapture %b,967; CHECK-LABEL: spConv2uhw_x:968; CHECK: # %bb.0: # %entry969; CHECK-NEXT: lfs 0, 0(3)970; CHECK-NEXT: xscvdpuxds 0, 0971; CHECK-NEXT: sldi 3, 5, 1972; CHECK-NEXT: stxsihx 0, 4, 3973; CHECK-NEXT: blr974;975; CHECK-PWR8-LABEL: spConv2uhw_x:976; CHECK-PWR8: # %bb.0: # %entry977; CHECK-PWR8-NEXT: lfs 0, 0(3)978; CHECK-PWR8-NEXT: sldi 5, 5, 1979; CHECK-PWR8-NEXT: xscvdpsxws 0, 0980; CHECK-PWR8-NEXT: mffprwz 3, 0981; CHECK-PWR8-NEXT: sthx 3, 4, 5982; CHECK-PWR8-NEXT: blr983 i32 zeroext %idx) {984entry:985 %0 = load float, ptr %a, align 4986 %conv = fptoui float %0 to i16987 %idxprom = zext i32 %idx to i64988 %arrayidx = getelementptr inbounds i16, ptr %b, i64 %idxprom989 store i16 %conv, ptr %arrayidx, align 2990 ret void991 992 993}994 995; Function Attrs: norecurse nounwind996define void @spConv2ub_x(ptr nocapture readonly %a, ptr nocapture %b,997; CHECK-LABEL: spConv2ub_x:998; CHECK: # %bb.0: # %entry999; CHECK-NEXT: lfs 0, 0(3)1000; CHECK-NEXT: xscvdpuxds 0, 01001; CHECK-NEXT: stxsibx 0, 4, 51002; CHECK-NEXT: blr1003;1004; CHECK-PWR8-LABEL: spConv2ub_x:1005; CHECK-PWR8: # %bb.0: # %entry1006; CHECK-PWR8-NEXT: lfs 0, 0(3)1007; CHECK-PWR8-NEXT: xscvdpsxws 0, 01008; CHECK-PWR8-NEXT: mffprwz 3, 01009; CHECK-PWR8-NEXT: stbx 3, 4, 51010; CHECK-PWR8-NEXT: blr1011 i32 zeroext %idx) {1012entry:1013 %0 = load float, ptr %a, align 41014 %conv = fptoui float %0 to i81015 %idxprom = zext i32 %idx to i641016 %arrayidx = getelementptr inbounds i8, ptr %b, i64 %idxprom1017 store i8 %conv, ptr %arrayidx, align 11018 ret void1019 1020 1021}1022 1023define void @multiple_store_64(double %m, ptr %addr1, ptr %addr2, ptr %addr3) {1024; CHECK-LABEL: multiple_store_64:1025; CHECK: # %bb.0: # %entry1026; CHECK-NEXT: xscvdpsxds 2, 11027; CHECK-NEXT: stxsd 2, 0(4)1028; CHECK-NEXT: stxsd 2, 0(5)1029; CHECK-NEXT: stxsd 2, 0(6)1030; CHECK-NEXT: blr1031;1032; CHECK-PWR8-LABEL: multiple_store_64:1033; CHECK-PWR8: # %bb.0: # %entry1034; CHECK-PWR8-NEXT: xscvdpsxds 0, 11035; CHECK-PWR8-NEXT: stxsdx 0, 0, 41036; CHECK-PWR8-NEXT: stxsdx 0, 0, 51037; CHECK-PWR8-NEXT: stxsdx 0, 0, 61038; CHECK-PWR8-NEXT: blr1039entry:1040 %conv1 = fptosi double %m to i641041 store i64 %conv1, ptr %addr1, align 81042 store i64 %conv1, ptr %addr2, align 81043 store i64 %conv1, ptr %addr3, align 81044 ret void1045}1046 1047define void @multiple_store_32(double %m, ptr %addr1, ptr %addr2, ptr %addr3) {1048; CHECK-LABEL: multiple_store_32:1049; CHECK: # %bb.0: # %entry1050; CHECK-NEXT: xscvdpsxws 0, 11051; CHECK-NEXT: stfiwx 0, 0, 41052; CHECK-NEXT: stfiwx 0, 0, 51053; CHECK-NEXT: stfiwx 0, 0, 61054; CHECK-NEXT: blr1055;1056; CHECK-PWR8-LABEL: multiple_store_32:1057; CHECK-PWR8: # %bb.0: # %entry1058; CHECK-PWR8-NEXT: xscvdpsxws 0, 11059; CHECK-PWR8-NEXT: stfiwx 0, 0, 41060; CHECK-PWR8-NEXT: stfiwx 0, 0, 51061; CHECK-PWR8-NEXT: stfiwx 0, 0, 61062; CHECK-PWR8-NEXT: blr1063entry:1064 %conv1 = fptosi double %m to i321065 store i32 %conv1, ptr %addr1, align 81066 store i32 %conv1, ptr %addr2, align 81067 store i32 %conv1, ptr %addr3, align 81068 ret void1069}1070 1071define void @multiple_store_16(double %m, ptr %addr1, ptr %addr2, ptr %addr3) {1072; CHECK-LABEL: multiple_store_16:1073; CHECK: # %bb.0: # %entry1074; CHECK-NEXT: xscvdpsxds 0, 11075; CHECK-NEXT: stxsihx 0, 0, 41076; CHECK-NEXT: stxsihx 0, 0, 51077; CHECK-NEXT: stxsihx 0, 0, 61078; CHECK-NEXT: blr1079;1080; CHECK-PWR8-LABEL: multiple_store_16:1081; CHECK-PWR8: # %bb.0: # %entry1082; CHECK-PWR8-NEXT: xscvdpsxws 0, 11083; CHECK-PWR8-NEXT: mffprwz 3, 01084; CHECK-PWR8-NEXT: sth 3, 0(4)1085; CHECK-PWR8-NEXT: sth 3, 0(5)1086; CHECK-PWR8-NEXT: sth 3, 0(6)1087; CHECK-PWR8-NEXT: blr1088entry:1089 %conv1 = fptosi double %m to i161090 store i16 %conv1, ptr %addr1, align 81091 store i16 %conv1, ptr %addr2, align 81092 store i16 %conv1, ptr %addr3, align 81093 ret void1094}1095