brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.2 KiB · 8328bb0 Raw
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