628 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA32F3; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32D4; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64F5; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64D6 7define signext i8 @convert_float_to_i8(float %a) nounwind {8; LA32F-LABEL: convert_float_to_i8:9; LA32F: # %bb.0:10; LA32F-NEXT: ftintrz.w.s $fa0, $fa011; LA32F-NEXT: movfr2gr.s $a0, $fa012; LA32F-NEXT: ret13;14; LA32D-LABEL: convert_float_to_i8:15; LA32D: # %bb.0:16; LA32D-NEXT: ftintrz.w.s $fa0, $fa017; LA32D-NEXT: movfr2gr.s $a0, $fa018; LA32D-NEXT: ret19;20; LA64F-LABEL: convert_float_to_i8:21; LA64F: # %bb.0:22; LA64F-NEXT: ftintrz.w.s $fa0, $fa023; LA64F-NEXT: movfr2gr.s $a0, $fa024; LA64F-NEXT: ret25;26; LA64D-LABEL: convert_float_to_i8:27; LA64D: # %bb.0:28; LA64D-NEXT: ftintrz.l.s $fa0, $fa029; LA64D-NEXT: movfr2gr.d $a0, $fa030; LA64D-NEXT: ret31 %1 = fptosi float %a to i832 ret i8 %133}34 35define signext i16 @convert_float_to_i16(float %a) nounwind {36; LA32F-LABEL: convert_float_to_i16:37; LA32F: # %bb.0:38; LA32F-NEXT: ftintrz.w.s $fa0, $fa039; LA32F-NEXT: movfr2gr.s $a0, $fa040; LA32F-NEXT: ret41;42; LA32D-LABEL: convert_float_to_i16:43; LA32D: # %bb.0:44; LA32D-NEXT: ftintrz.w.s $fa0, $fa045; LA32D-NEXT: movfr2gr.s $a0, $fa046; LA32D-NEXT: ret47;48; LA64F-LABEL: convert_float_to_i16:49; LA64F: # %bb.0:50; LA64F-NEXT: ftintrz.w.s $fa0, $fa051; LA64F-NEXT: movfr2gr.s $a0, $fa052; LA64F-NEXT: ret53;54; LA64D-LABEL: convert_float_to_i16:55; LA64D: # %bb.0:56; LA64D-NEXT: ftintrz.l.s $fa0, $fa057; LA64D-NEXT: movfr2gr.d $a0, $fa058; LA64D-NEXT: ret59 %1 = fptosi float %a to i1660 ret i16 %161}62 63define i32 @convert_float_to_i32(float %a) nounwind {64; LA32F-LABEL: convert_float_to_i32:65; LA32F: # %bb.0:66; LA32F-NEXT: ftintrz.w.s $fa0, $fa067; LA32F-NEXT: movfr2gr.s $a0, $fa068; LA32F-NEXT: ret69;70; LA32D-LABEL: convert_float_to_i32:71; LA32D: # %bb.0:72; LA32D-NEXT: ftintrz.w.s $fa0, $fa073; LA32D-NEXT: movfr2gr.s $a0, $fa074; LA32D-NEXT: ret75;76; LA64F-LABEL: convert_float_to_i32:77; LA64F: # %bb.0:78; LA64F-NEXT: ftintrz.w.s $fa0, $fa079; LA64F-NEXT: movfr2gr.s $a0, $fa080; LA64F-NEXT: ret81;82; LA64D-LABEL: convert_float_to_i32:83; LA64D: # %bb.0:84; LA64D-NEXT: ftintrz.w.s $fa0, $fa085; LA64D-NEXT: movfr2gr.s $a0, $fa086; LA64D-NEXT: ret87 %1 = fptosi float %a to i3288 ret i32 %189}90 91define i64 @convert_float_to_i64(float %a) nounwind {92; LA32F-LABEL: convert_float_to_i64:93; LA32F: # %bb.0:94; LA32F-NEXT: addi.w $sp, $sp, -1695; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill96; LA32F-NEXT: bl __fixsfdi97; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload98; LA32F-NEXT: addi.w $sp, $sp, 1699; LA32F-NEXT: ret100;101; LA32D-LABEL: convert_float_to_i64:102; LA32D: # %bb.0:103; LA32D-NEXT: addi.w $sp, $sp, -16104; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill105; LA32D-NEXT: bl __fixsfdi106; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload107; LA32D-NEXT: addi.w $sp, $sp, 16108; LA32D-NEXT: ret109;110; LA64F-LABEL: convert_float_to_i64:111; LA64F: # %bb.0:112; LA64F-NEXT: ftintrz.w.s $fa0, $fa0113; LA64F-NEXT: movfr2gr.s $a0, $fa0114; LA64F-NEXT: ret115;116; LA64D-LABEL: convert_float_to_i64:117; LA64D: # %bb.0:118; LA64D-NEXT: ftintrz.l.s $fa0, $fa0119; LA64D-NEXT: movfr2gr.d $a0, $fa0120; LA64D-NEXT: ret121 %1 = fptosi float %a to i64122 ret i64 %1123}124 125define zeroext i8 @convert_float_to_u8(float %a) nounwind {126; LA32F-LABEL: convert_float_to_u8:127; LA32F: # %bb.0:128; LA32F-NEXT: ftintrz.w.s $fa0, $fa0129; LA32F-NEXT: movfr2gr.s $a0, $fa0130; LA32F-NEXT: ret131;132; LA32D-LABEL: convert_float_to_u8:133; LA32D: # %bb.0:134; LA32D-NEXT: ftintrz.w.s $fa0, $fa0135; LA32D-NEXT: movfr2gr.s $a0, $fa0136; LA32D-NEXT: ret137;138; LA64F-LABEL: convert_float_to_u8:139; LA64F: # %bb.0:140; LA64F-NEXT: ftintrz.w.s $fa0, $fa0141; LA64F-NEXT: movfr2gr.s $a0, $fa0142; LA64F-NEXT: ret143;144; LA64D-LABEL: convert_float_to_u8:145; LA64D: # %bb.0:146; LA64D-NEXT: ftintrz.l.s $fa0, $fa0147; LA64D-NEXT: movfr2gr.d $a0, $fa0148; LA64D-NEXT: ret149 %1 = fptoui float %a to i8150 ret i8 %1151}152 153define zeroext i16 @convert_float_to_u16(float %a) nounwind {154; LA32F-LABEL: convert_float_to_u16:155; LA32F: # %bb.0:156; LA32F-NEXT: ftintrz.w.s $fa0, $fa0157; LA32F-NEXT: movfr2gr.s $a0, $fa0158; LA32F-NEXT: ret159;160; LA32D-LABEL: convert_float_to_u16:161; LA32D: # %bb.0:162; LA32D-NEXT: ftintrz.w.s $fa0, $fa0163; LA32D-NEXT: movfr2gr.s $a0, $fa0164; LA32D-NEXT: ret165;166; LA64F-LABEL: convert_float_to_u16:167; LA64F: # %bb.0:168; LA64F-NEXT: ftintrz.w.s $fa0, $fa0169; LA64F-NEXT: movfr2gr.s $a0, $fa0170; LA64F-NEXT: ret171;172; LA64D-LABEL: convert_float_to_u16:173; LA64D: # %bb.0:174; LA64D-NEXT: ftintrz.l.s $fa0, $fa0175; LA64D-NEXT: movfr2gr.d $a0, $fa0176; LA64D-NEXT: ret177 %1 = fptoui float %a to i16178 ret i16 %1179}180 181define i32 @convert_float_to_u32(float %a) nounwind {182; LA32F-LABEL: convert_float_to_u32:183; LA32F: # %bb.0:184; LA32F-NEXT: lu12i.w $a0, 323584185; LA32F-NEXT: movgr2fr.w $fa1, $a0186; LA32F-NEXT: fcmp.clt.s $fcc0, $fa0, $fa1187; LA32F-NEXT: movcf2gr $a0, $fcc0188; LA32F-NEXT: bne $a0, $zero, .LBB6_2189; LA32F-NEXT: # %bb.1:190; LA32F-NEXT: fsub.s $fa0, $fa0, $fa1191; LA32F-NEXT: ftintrz.w.s $fa0, $fa0192; LA32F-NEXT: movfr2gr.s $a0, $fa0193; LA32F-NEXT: lu12i.w $a1, -524288194; LA32F-NEXT: xor $a0, $a0, $a1195; LA32F-NEXT: ret196; LA32F-NEXT: .LBB6_2:197; LA32F-NEXT: ftintrz.w.s $fa0, $fa0198; LA32F-NEXT: movfr2gr.s $a0, $fa0199; LA32F-NEXT: ret200;201; LA32D-LABEL: convert_float_to_u32:202; LA32D: # %bb.0:203; LA32D-NEXT: lu12i.w $a0, 323584204; LA32D-NEXT: movgr2fr.w $fa1, $a0205; LA32D-NEXT: fcmp.clt.s $fcc0, $fa0, $fa1206; LA32D-NEXT: movcf2gr $a0, $fcc0207; LA32D-NEXT: bne $a0, $zero, .LBB6_2208; LA32D-NEXT: # %bb.1:209; LA32D-NEXT: fsub.s $fa0, $fa0, $fa1210; LA32D-NEXT: ftintrz.w.s $fa0, $fa0211; LA32D-NEXT: movfr2gr.s $a0, $fa0212; LA32D-NEXT: lu12i.w $a1, -524288213; LA32D-NEXT: xor $a0, $a0, $a1214; LA32D-NEXT: ret215; LA32D-NEXT: .LBB6_2:216; LA32D-NEXT: ftintrz.w.s $fa0, $fa0217; LA32D-NEXT: movfr2gr.s $a0, $fa0218; LA32D-NEXT: ret219;220; LA64F-LABEL: convert_float_to_u32:221; LA64F: # %bb.0:222; LA64F-NEXT: lu12i.w $a0, 323584223; LA64F-NEXT: movgr2fr.w $fa1, $a0224; LA64F-NEXT: fcmp.clt.s $fcc0, $fa0, $fa1225; LA64F-NEXT: fsub.s $fa1, $fa0, $fa1226; LA64F-NEXT: ftintrz.w.s $fa1, $fa1227; LA64F-NEXT: movfr2gr.s $a0, $fa1228; LA64F-NEXT: lu12i.w $a1, -524288229; LA64F-NEXT: xor $a0, $a0, $a1230; LA64F-NEXT: movcf2gr $a1, $fcc0231; LA64F-NEXT: masknez $a0, $a0, $a1232; LA64F-NEXT: ftintrz.w.s $fa0, $fa0233; LA64F-NEXT: movfr2gr.s $a2, $fa0234; LA64F-NEXT: maskeqz $a1, $a2, $a1235; LA64F-NEXT: or $a0, $a1, $a0236; LA64F-NEXT: ret237;238; LA64D-LABEL: convert_float_to_u32:239; LA64D: # %bb.0:240; LA64D-NEXT: ftintrz.l.s $fa0, $fa0241; LA64D-NEXT: movfr2gr.d $a0, $fa0242; LA64D-NEXT: ret243 %1 = fptoui float %a to i32244 ret i32 %1245}246 247define i64 @convert_float_to_u64(float %a) nounwind {248; LA32F-LABEL: convert_float_to_u64:249; LA32F: # %bb.0:250; LA32F-NEXT: addi.w $sp, $sp, -16251; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill252; LA32F-NEXT: bl __fixunssfdi253; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload254; LA32F-NEXT: addi.w $sp, $sp, 16255; LA32F-NEXT: ret256;257; LA32D-LABEL: convert_float_to_u64:258; LA32D: # %bb.0:259; LA32D-NEXT: addi.w $sp, $sp, -16260; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill261; LA32D-NEXT: bl __fixunssfdi262; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload263; LA32D-NEXT: addi.w $sp, $sp, 16264; LA32D-NEXT: ret265;266; LA64F-LABEL: convert_float_to_u64:267; LA64F: # %bb.0:268; LA64F-NEXT: lu12i.w $a0, 389120269; LA64F-NEXT: movgr2fr.w $fa1, $a0270; LA64F-NEXT: fcmp.clt.s $fcc0, $fa0, $fa1271; LA64F-NEXT: fsub.s $fa1, $fa0, $fa1272; LA64F-NEXT: ftintrz.w.s $fa1, $fa1273; LA64F-NEXT: movfr2gr.s $a0, $fa1274; LA64F-NEXT: lu52i.d $a1, $zero, -2048275; LA64F-NEXT: xor $a0, $a0, $a1276; LA64F-NEXT: movcf2gr $a1, $fcc0277; LA64F-NEXT: masknez $a0, $a0, $a1278; LA64F-NEXT: ftintrz.w.s $fa0, $fa0279; LA64F-NEXT: movfr2gr.s $a2, $fa0280; LA64F-NEXT: maskeqz $a1, $a2, $a1281; LA64F-NEXT: or $a0, $a1, $a0282; LA64F-NEXT: ret283;284; LA64D-LABEL: convert_float_to_u64:285; LA64D: # %bb.0:286; LA64D-NEXT: lu12i.w $a0, 389120287; LA64D-NEXT: movgr2fr.w $fa1, $a0288; LA64D-NEXT: fcmp.clt.s $fcc0, $fa0, $fa1289; LA64D-NEXT: fsub.s $fa1, $fa0, $fa1290; LA64D-NEXT: ftintrz.l.s $fa1, $fa1291; LA64D-NEXT: movfr2gr.d $a0, $fa1292; LA64D-NEXT: lu52i.d $a1, $zero, -2048293; LA64D-NEXT: xor $a0, $a0, $a1294; LA64D-NEXT: movcf2gr $a1, $fcc0295; LA64D-NEXT: masknez $a0, $a0, $a1296; LA64D-NEXT: ftintrz.l.s $fa0, $fa0297; LA64D-NEXT: movfr2gr.d $a2, $fa0298; LA64D-NEXT: maskeqz $a1, $a2, $a1299; LA64D-NEXT: or $a0, $a1, $a0300; LA64D-NEXT: ret301 %1 = fptoui float %a to i64302 ret i64 %1303}304 305define float @convert_i8_to_float(i8 signext %a) nounwind {306; LA32F-LABEL: convert_i8_to_float:307; LA32F: # %bb.0:308; LA32F-NEXT: movgr2fr.w $fa0, $a0309; LA32F-NEXT: ffint.s.w $fa0, $fa0310; LA32F-NEXT: ret311;312; LA32D-LABEL: convert_i8_to_float:313; LA32D: # %bb.0:314; LA32D-NEXT: movgr2fr.w $fa0, $a0315; LA32D-NEXT: ffint.s.w $fa0, $fa0316; LA32D-NEXT: ret317;318; LA64F-LABEL: convert_i8_to_float:319; LA64F: # %bb.0:320; LA64F-NEXT: movgr2fr.w $fa0, $a0321; LA64F-NEXT: ffint.s.w $fa0, $fa0322; LA64F-NEXT: ret323;324; LA64D-LABEL: convert_i8_to_float:325; LA64D: # %bb.0:326; LA64D-NEXT: movgr2fr.w $fa0, $a0327; LA64D-NEXT: ffint.s.w $fa0, $fa0328; LA64D-NEXT: ret329 %1 = sitofp i8 %a to float330 ret float %1331}332 333define float @convert_i16_to_float(i16 signext %a) nounwind {334; LA32F-LABEL: convert_i16_to_float:335; LA32F: # %bb.0:336; LA32F-NEXT: movgr2fr.w $fa0, $a0337; LA32F-NEXT: ffint.s.w $fa0, $fa0338; LA32F-NEXT: ret339;340; LA32D-LABEL: convert_i16_to_float:341; LA32D: # %bb.0:342; LA32D-NEXT: movgr2fr.w $fa0, $a0343; LA32D-NEXT: ffint.s.w $fa0, $fa0344; LA32D-NEXT: ret345;346; LA64F-LABEL: convert_i16_to_float:347; LA64F: # %bb.0:348; LA64F-NEXT: movgr2fr.w $fa0, $a0349; LA64F-NEXT: ffint.s.w $fa0, $fa0350; LA64F-NEXT: ret351;352; LA64D-LABEL: convert_i16_to_float:353; LA64D: # %bb.0:354; LA64D-NEXT: movgr2fr.w $fa0, $a0355; LA64D-NEXT: ffint.s.w $fa0, $fa0356; LA64D-NEXT: ret357 %1 = sitofp i16 %a to float358 ret float %1359}360 361define float @convert_i32_to_float(i32 %a) nounwind {362; LA32F-LABEL: convert_i32_to_float:363; LA32F: # %bb.0:364; LA32F-NEXT: movgr2fr.w $fa0, $a0365; LA32F-NEXT: ffint.s.w $fa0, $fa0366; LA32F-NEXT: ret367;368; LA32D-LABEL: convert_i32_to_float:369; LA32D: # %bb.0:370; LA32D-NEXT: movgr2fr.w $fa0, $a0371; LA32D-NEXT: ffint.s.w $fa0, $fa0372; LA32D-NEXT: ret373;374; LA64F-LABEL: convert_i32_to_float:375; LA64F: # %bb.0:376; LA64F-NEXT: movgr2fr.w $fa0, $a0377; LA64F-NEXT: ffint.s.w $fa0, $fa0378; LA64F-NEXT: ret379;380; LA64D-LABEL: convert_i32_to_float:381; LA64D: # %bb.0:382; LA64D-NEXT: movgr2fr.w $fa0, $a0383; LA64D-NEXT: ffint.s.w $fa0, $fa0384; LA64D-NEXT: ret385 %1 = sitofp i32 %a to float386 ret float %1387}388 389define float @convert_i64_to_float(i64 %a) nounwind {390; LA32F-LABEL: convert_i64_to_float:391; LA32F: # %bb.0:392; LA32F-NEXT: addi.w $sp, $sp, -16393; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill394; LA32F-NEXT: bl __floatdisf395; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload396; LA32F-NEXT: addi.w $sp, $sp, 16397; LA32F-NEXT: ret398;399; LA32D-LABEL: convert_i64_to_float:400; LA32D: # %bb.0:401; LA32D-NEXT: addi.w $sp, $sp, -16402; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill403; LA32D-NEXT: bl __floatdisf404; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload405; LA32D-NEXT: addi.w $sp, $sp, 16406; LA32D-NEXT: ret407;408; LA64F-LABEL: convert_i64_to_float:409; LA64F: # %bb.0:410; LA64F-NEXT: addi.d $sp, $sp, -16411; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill412; LA64F-NEXT: pcaddu18i $ra, %call36(__floatdisf)413; LA64F-NEXT: jirl $ra, $ra, 0414; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload415; LA64F-NEXT: addi.d $sp, $sp, 16416; LA64F-NEXT: ret417;418; LA64D-LABEL: convert_i64_to_float:419; LA64D: # %bb.0:420; LA64D-NEXT: movgr2fr.d $fa0, $a0421; LA64D-NEXT: ffint.s.l $fa0, $fa0422; LA64D-NEXT: ret423 %1 = sitofp i64 %a to float424 ret float %1425}426 427define float @convert_u8_to_float(i8 zeroext %a) nounwind {428; LA32F-LABEL: convert_u8_to_float:429; LA32F: # %bb.0:430; LA32F-NEXT: movgr2fr.w $fa0, $a0431; LA32F-NEXT: ffint.s.w $fa0, $fa0432; LA32F-NEXT: ret433;434; LA32D-LABEL: convert_u8_to_float:435; LA32D: # %bb.0:436; LA32D-NEXT: movgr2fr.w $fa0, $a0437; LA32D-NEXT: ffint.s.w $fa0, $fa0438; LA32D-NEXT: ret439;440; LA64F-LABEL: convert_u8_to_float:441; LA64F: # %bb.0:442; LA64F-NEXT: movgr2fr.w $fa0, $a0443; LA64F-NEXT: ffint.s.w $fa0, $fa0444; LA64F-NEXT: ret445;446; LA64D-LABEL: convert_u8_to_float:447; LA64D: # %bb.0:448; LA64D-NEXT: movgr2fr.w $fa0, $a0449; LA64D-NEXT: ffint.s.w $fa0, $fa0450; LA64D-NEXT: ret451 %1 = uitofp i8 %a to float452 ret float %1453}454 455define float @convert_u16_to_float(i16 zeroext %a) nounwind {456; LA32F-LABEL: convert_u16_to_float:457; LA32F: # %bb.0:458; LA32F-NEXT: movgr2fr.w $fa0, $a0459; LA32F-NEXT: ffint.s.w $fa0, $fa0460; LA32F-NEXT: ret461;462; LA32D-LABEL: convert_u16_to_float:463; LA32D: # %bb.0:464; LA32D-NEXT: movgr2fr.w $fa0, $a0465; LA32D-NEXT: ffint.s.w $fa0, $fa0466; LA32D-NEXT: ret467;468; LA64F-LABEL: convert_u16_to_float:469; LA64F: # %bb.0:470; LA64F-NEXT: movgr2fr.w $fa0, $a0471; LA64F-NEXT: ffint.s.w $fa0, $fa0472; LA64F-NEXT: ret473;474; LA64D-LABEL: convert_u16_to_float:475; LA64D: # %bb.0:476; LA64D-NEXT: movgr2fr.w $fa0, $a0477; LA64D-NEXT: ffint.s.w $fa0, $fa0478; LA64D-NEXT: ret479 %1 = uitofp i16 %a to float480 ret float %1481}482 483define float @convert_u32_to_float(i32 %a) nounwind {484; LA32F-LABEL: convert_u32_to_float:485; LA32F: # %bb.0:486; LA32F-NEXT: srli.w $a1, $a0, 1487; LA32F-NEXT: andi $a2, $a0, 1488; LA32F-NEXT: or $a1, $a2, $a1489; LA32F-NEXT: movgr2fr.w $fa0, $a1490; LA32F-NEXT: ffint.s.w $fa0, $fa0491; LA32F-NEXT: fadd.s $fa0, $fa0, $fa0492; LA32F-NEXT: slti $a1, $a0, 0493; LA32F-NEXT: movgr2fr.w $fa1, $a0494; LA32F-NEXT: ffint.s.w $fa1, $fa1495; LA32F-NEXT: movgr2cf $fcc0, $a1496; LA32F-NEXT: fsel $fa0, $fa1, $fa0, $fcc0497; LA32F-NEXT: ret498;499; LA32D-LABEL: convert_u32_to_float:500; LA32D: # %bb.0:501; LA32D-NEXT: addi.w $sp, $sp, -16502; LA32D-NEXT: lu12i.w $a1, 275200503; LA32D-NEXT: st.w $a1, $sp, 12504; LA32D-NEXT: st.w $a0, $sp, 8505; LA32D-NEXT: fld.d $fa0, $sp, 8506; LA32D-NEXT: movgr2fr.w $fa1, $zero507; LA32D-NEXT: movgr2frh.w $fa1, $a1508; LA32D-NEXT: fsub.d $fa0, $fa0, $fa1509; LA32D-NEXT: fcvt.s.d $fa0, $fa0510; LA32D-NEXT: addi.w $sp, $sp, 16511; LA32D-NEXT: ret512;513; LA64F-LABEL: convert_u32_to_float:514; LA64F: # %bb.0:515; LA64F-NEXT: addi.d $sp, $sp, -16516; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill517; LA64F-NEXT: bstrpick.d $a0, $a0, 31, 0518; LA64F-NEXT: pcaddu18i $ra, %call36(__floatundisf)519; LA64F-NEXT: jirl $ra, $ra, 0520; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload521; LA64F-NEXT: addi.d $sp, $sp, 16522; LA64F-NEXT: ret523;524; LA64D-LABEL: convert_u32_to_float:525; LA64D: # %bb.0:526; LA64D-NEXT: bstrpick.d $a0, $a0, 31, 0527; LA64D-NEXT: movgr2fr.d $fa0, $a0528; LA64D-NEXT: ffint.s.l $fa0, $fa0529; LA64D-NEXT: ret530 %1 = uitofp i32 %a to float531 ret float %1532}533 534define float @convert_u64_to_float(i64 %a) nounwind {535; LA32F-LABEL: convert_u64_to_float:536; LA32F: # %bb.0:537; LA32F-NEXT: addi.w $sp, $sp, -16538; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill539; LA32F-NEXT: bl __floatundisf540; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload541; LA32F-NEXT: addi.w $sp, $sp, 16542; LA32F-NEXT: ret543;544; LA32D-LABEL: convert_u64_to_float:545; LA32D: # %bb.0:546; LA32D-NEXT: addi.w $sp, $sp, -16547; LA32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill548; LA32D-NEXT: bl __floatundisf549; LA32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload550; LA32D-NEXT: addi.w $sp, $sp, 16551; LA32D-NEXT: ret552;553; LA64F-LABEL: convert_u64_to_float:554; LA64F: # %bb.0:555; LA64F-NEXT: addi.d $sp, $sp, -16556; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill557; LA64F-NEXT: pcaddu18i $ra, %call36(__floatundisf)558; LA64F-NEXT: jirl $ra, $ra, 0559; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload560; LA64F-NEXT: addi.d $sp, $sp, 16561; LA64F-NEXT: ret562;563; LA64D-LABEL: convert_u64_to_float:564; LA64D: # %bb.0:565; LA64D-NEXT: srli.d $a1, $a0, 1566; LA64D-NEXT: andi $a2, $a0, 1567; LA64D-NEXT: or $a1, $a2, $a1568; LA64D-NEXT: movgr2fr.d $fa0, $a1569; LA64D-NEXT: ffint.s.l $fa0, $fa0570; LA64D-NEXT: fadd.s $fa0, $fa0, $fa0571; LA64D-NEXT: slti $a1, $a0, 0572; LA64D-NEXT: movgr2fr.d $fa1, $a0573; LA64D-NEXT: ffint.s.l $fa1, $fa1574; LA64D-NEXT: movgr2cf $fcc0, $a1575; LA64D-NEXT: fsel $fa0, $fa1, $fa0, $fcc0576; LA64D-NEXT: ret577 %1 = uitofp i64 %a to float578 ret float %1579}580 581define i32 @bitcast_float_to_i32(float %a) nounwind {582; LA32F-LABEL: bitcast_float_to_i32:583; LA32F: # %bb.0:584; LA32F-NEXT: movfr2gr.s $a0, $fa0585; LA32F-NEXT: ret586;587; LA32D-LABEL: bitcast_float_to_i32:588; LA32D: # %bb.0:589; LA32D-NEXT: movfr2gr.s $a0, $fa0590; LA32D-NEXT: ret591;592; LA64F-LABEL: bitcast_float_to_i32:593; LA64F: # %bb.0:594; LA64F-NEXT: movfr2gr.s $a0, $fa0595; LA64F-NEXT: ret596;597; LA64D-LABEL: bitcast_float_to_i32:598; LA64D: # %bb.0:599; LA64D-NEXT: movfr2gr.s $a0, $fa0600; LA64D-NEXT: ret601 %1 = bitcast float %a to i32602 ret i32 %1603}604 605define float @bitcast_i32_to_float(i32 %a) nounwind {606; LA32F-LABEL: bitcast_i32_to_float:607; LA32F: # %bb.0:608; LA32F-NEXT: movgr2fr.w $fa0, $a0609; LA32F-NEXT: ret610;611; LA32D-LABEL: bitcast_i32_to_float:612; LA32D: # %bb.0:613; LA32D-NEXT: movgr2fr.w $fa0, $a0614; LA32D-NEXT: ret615;616; LA64F-LABEL: bitcast_i32_to_float:617; LA64F: # %bb.0:618; LA64F-NEXT: movgr2fr.w $fa0, $a0619; LA64F-NEXT: ret620;621; LA64D-LABEL: bitcast_i32_to_float:622; LA64D: # %bb.0:623; LA64D-NEXT: movgr2fr.w $fa0, $a0624; LA64D-NEXT: ret625 %1 = bitcast i32 %a to float626 ret float %1627}628