brintos

brintos / llvm-project-archived public Read only

0
0
Text · 39.5 KiB · e580bcc Raw
1049 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2;; For `double` parameters and return values, compiling on loongarch32 with `-mattr=+d` and3;; `-target-abi=ilp32s` is incompatible, resulting in the error 'Passing f64 with GPR on LA32 is undefined'.4;; Therefore, such case is currently skipped in testing.5; RUN: llc -mtriple=loongarch32 -verify-machineinstrs < %s | FileCheck %s -check-prefix=LA326; RUN: llc -mtriple=loongarch64 -verify-machineinstrs < %s | FileCheck %s -check-prefix=LA647; RUN: llc -mtriple=loongarch32 -mattr=+f -target-abi=ilp32s -verify-machineinstrs < %s | FileCheck %s -check-prefix=LA32F-ILP32S8; RUN: llc -mtriple=loongarch32 -mattr=+f -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s -check-prefix=LA32F-ILP32D9; RUN: llc -mtriple=loongarch32 -mattr=+d -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s -check-prefix=LA32D-ILP32D10; RUN: llc -mtriple=loongarch64 -mattr=+f -target-abi=lp64s -verify-machineinstrs < %s | FileCheck %s -check-prefix=LA64F-LP64S11; RUN: llc -mtriple=loongarch64 -mattr=+f -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s -check-prefix=LA64F-LP64D12; RUN: llc -mtriple=loongarch64 -mattr=+d -target-abi=lp64s -verify-machineinstrs < %s  | FileCheck %s -check-prefix=LA64D-LP64S13; RUN: llc -mtriple=loongarch64 -mattr=+d -target-abi=lp64d -verify-machineinstrs < %s  | FileCheck %s -check-prefix=LA64D-LP64D14 15define bfloat @float_to_bfloat(float %a) nounwind {16; LA32-LABEL: float_to_bfloat:17; LA32:       # %bb.0:18; LA32-NEXT:    addi.w $sp, $sp, -1619; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill20; LA32-NEXT:    bl __truncsfbf221; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload22; LA32-NEXT:    addi.w $sp, $sp, 1623; LA32-NEXT:    ret24;25; LA64-LABEL: float_to_bfloat:26; LA64:       # %bb.0:27; LA64-NEXT:    addi.d $sp, $sp, -1628; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill29; LA64-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)30; LA64-NEXT:    jirl $ra, $ra, 031; LA64-NEXT:    movfr2gr.s $a0, $fa032; LA64-NEXT:    lu12i.w $a1, -1633; LA64-NEXT:    or $a0, $a0, $a134; LA64-NEXT:    movgr2fr.w $fa0, $a035; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload36; LA64-NEXT:    addi.d $sp, $sp, 1637; LA64-NEXT:    ret38;39; LA32F-ILP32S-LABEL: float_to_bfloat:40; LA32F-ILP32S:       # %bb.0:41; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, -1642; LA32F-ILP32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill43; LA32F-ILP32S-NEXT:    bl __truncsfbf244; LA32F-ILP32S-NEXT:    lu12i.w $a1, -1645; LA32F-ILP32S-NEXT:    or $a0, $a0, $a146; LA32F-ILP32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload47; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, 1648; LA32F-ILP32S-NEXT:    ret49;50; LA32F-ILP32D-LABEL: float_to_bfloat:51; LA32F-ILP32D:       # %bb.0:52; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, -1653; LA32F-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill54; LA32F-ILP32D-NEXT:    bl __truncsfbf255; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa056; LA32F-ILP32D-NEXT:    lu12i.w $a1, -1657; LA32F-ILP32D-NEXT:    or $a0, $a0, $a158; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a059; LA32F-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload60; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, 1661; LA32F-ILP32D-NEXT:    ret62;63; LA32D-ILP32D-LABEL: float_to_bfloat:64; LA32D-ILP32D:       # %bb.0:65; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, -1666; LA32D-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill67; LA32D-ILP32D-NEXT:    bl __truncsfbf268; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa069; LA32D-ILP32D-NEXT:    lu12i.w $a1, -1670; LA32D-ILP32D-NEXT:    or $a0, $a0, $a171; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a072; LA32D-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload73; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, 1674; LA32D-ILP32D-NEXT:    ret75;76; LA64F-LP64S-LABEL: float_to_bfloat:77; LA64F-LP64S:       # %bb.0:78; LA64F-LP64S-NEXT:    addi.d $sp, $sp, -1679; LA64F-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill80; LA64F-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)81; LA64F-LP64S-NEXT:    jirl $ra, $ra, 082; LA64F-LP64S-NEXT:    lu12i.w $a1, -1683; LA64F-LP64S-NEXT:    or $a0, $a0, $a184; LA64F-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload85; LA64F-LP64S-NEXT:    addi.d $sp, $sp, 1686; LA64F-LP64S-NEXT:    ret87;88; LA64F-LP64D-LABEL: float_to_bfloat:89; LA64F-LP64D:       # %bb.0:90; LA64F-LP64D-NEXT:    addi.d $sp, $sp, -1691; LA64F-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill92; LA64F-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)93; LA64F-LP64D-NEXT:    jirl $ra, $ra, 094; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa095; LA64F-LP64D-NEXT:    lu12i.w $a1, -1696; LA64F-LP64D-NEXT:    or $a0, $a0, $a197; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a098; LA64F-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload99; LA64F-LP64D-NEXT:    addi.d $sp, $sp, 16100; LA64F-LP64D-NEXT:    ret101;102; LA64D-LP64S-LABEL: float_to_bfloat:103; LA64D-LP64S:       # %bb.0:104; LA64D-LP64S-NEXT:    addi.d $sp, $sp, -16105; LA64D-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill106; LA64D-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)107; LA64D-LP64S-NEXT:    jirl $ra, $ra, 0108; LA64D-LP64S-NEXT:    lu12i.w $a1, -16109; LA64D-LP64S-NEXT:    or $a0, $a0, $a1110; LA64D-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload111; LA64D-LP64S-NEXT:    addi.d $sp, $sp, 16112; LA64D-LP64S-NEXT:    ret113;114; LA64D-LP64D-LABEL: float_to_bfloat:115; LA64D-LP64D:       # %bb.0:116; LA64D-LP64D-NEXT:    addi.d $sp, $sp, -16117; LA64D-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill118; LA64D-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)119; LA64D-LP64D-NEXT:    jirl $ra, $ra, 0120; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa0121; LA64D-LP64D-NEXT:    lu12i.w $a1, -16122; LA64D-LP64D-NEXT:    or $a0, $a0, $a1123; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a0124; LA64D-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload125; LA64D-LP64D-NEXT:    addi.d $sp, $sp, 16126; LA64D-LP64D-NEXT:    ret127  %1 = fptrunc float %a to bfloat128  ret bfloat %1129}130 131define bfloat @double_to_bfloat(double %a) nounwind {132; LA32-LABEL: double_to_bfloat:133; LA32:       # %bb.0:134; LA32-NEXT:    addi.w $sp, $sp, -16135; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill136; LA32-NEXT:    bl __truncdfbf2137; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload138; LA32-NEXT:    addi.w $sp, $sp, 16139; LA32-NEXT:    ret140;141; LA64-LABEL: double_to_bfloat:142; LA64:       # %bb.0:143; LA64-NEXT:    addi.d $sp, $sp, -16144; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill145; LA64-NEXT:    pcaddu18i $ra, %call36(__truncdfbf2)146; LA64-NEXT:    jirl $ra, $ra, 0147; LA64-NEXT:    movfr2gr.s $a0, $fa0148; LA64-NEXT:    lu12i.w $a1, -16149; LA64-NEXT:    or $a0, $a0, $a1150; LA64-NEXT:    movgr2fr.w $fa0, $a0151; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload152; LA64-NEXT:    addi.d $sp, $sp, 16153; LA64-NEXT:    ret154;155; LA32F-ILP32S-LABEL: double_to_bfloat:156; LA32F-ILP32S:       # %bb.0:157; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, -16158; LA32F-ILP32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill159; LA32F-ILP32S-NEXT:    bl __truncdfbf2160; LA32F-ILP32S-NEXT:    lu12i.w $a1, -16161; LA32F-ILP32S-NEXT:    or $a0, $a0, $a1162; LA32F-ILP32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload163; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, 16164; LA32F-ILP32S-NEXT:    ret165;166; LA32F-ILP32D-LABEL: double_to_bfloat:167; LA32F-ILP32D:       # %bb.0:168; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, -16169; LA32F-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill170; LA32F-ILP32D-NEXT:    bl __truncdfbf2171; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0172; LA32F-ILP32D-NEXT:    lu12i.w $a1, -16173; LA32F-ILP32D-NEXT:    or $a0, $a0, $a1174; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a0175; LA32F-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload176; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, 16177; LA32F-ILP32D-NEXT:    ret178;179; LA32D-ILP32D-LABEL: double_to_bfloat:180; LA32D-ILP32D:       # %bb.0:181; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, -16182; LA32D-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill183; LA32D-ILP32D-NEXT:    bl __truncdfbf2184; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0185; LA32D-ILP32D-NEXT:    lu12i.w $a1, -16186; LA32D-ILP32D-NEXT:    or $a0, $a0, $a1187; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a0188; LA32D-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload189; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, 16190; LA32D-ILP32D-NEXT:    ret191;192; LA64F-LP64S-LABEL: double_to_bfloat:193; LA64F-LP64S:       # %bb.0:194; LA64F-LP64S-NEXT:    addi.d $sp, $sp, -16195; LA64F-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill196; LA64F-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncdfbf2)197; LA64F-LP64S-NEXT:    jirl $ra, $ra, 0198; LA64F-LP64S-NEXT:    lu12i.w $a1, -16199; LA64F-LP64S-NEXT:    or $a0, $a0, $a1200; LA64F-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload201; LA64F-LP64S-NEXT:    addi.d $sp, $sp, 16202; LA64F-LP64S-NEXT:    ret203;204; LA64F-LP64D-LABEL: double_to_bfloat:205; LA64F-LP64D:       # %bb.0:206; LA64F-LP64D-NEXT:    addi.d $sp, $sp, -16207; LA64F-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill208; LA64F-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncdfbf2)209; LA64F-LP64D-NEXT:    jirl $ra, $ra, 0210; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0211; LA64F-LP64D-NEXT:    lu12i.w $a1, -16212; LA64F-LP64D-NEXT:    or $a0, $a0, $a1213; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a0214; LA64F-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload215; LA64F-LP64D-NEXT:    addi.d $sp, $sp, 16216; LA64F-LP64D-NEXT:    ret217;218; LA64D-LP64S-LABEL: double_to_bfloat:219; LA64D-LP64S:       # %bb.0:220; LA64D-LP64S-NEXT:    addi.d $sp, $sp, -16221; LA64D-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill222; LA64D-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncdfbf2)223; LA64D-LP64S-NEXT:    jirl $ra, $ra, 0224; LA64D-LP64S-NEXT:    lu12i.w $a1, -16225; LA64D-LP64S-NEXT:    or $a0, $a0, $a1226; LA64D-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload227; LA64D-LP64S-NEXT:    addi.d $sp, $sp, 16228; LA64D-LP64S-NEXT:    ret229;230; LA64D-LP64D-LABEL: double_to_bfloat:231; LA64D-LP64D:       # %bb.0:232; LA64D-LP64D-NEXT:    addi.d $sp, $sp, -16233; LA64D-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill234; LA64D-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncdfbf2)235; LA64D-LP64D-NEXT:    jirl $ra, $ra, 0236; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa0237; LA64D-LP64D-NEXT:    lu12i.w $a1, -16238; LA64D-LP64D-NEXT:    or $a0, $a0, $a1239; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a0240; LA64D-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload241; LA64D-LP64D-NEXT:    addi.d $sp, $sp, 16242; LA64D-LP64D-NEXT:    ret243  %1 = fptrunc double %a to bfloat244  ret bfloat %1245}246 247define float @bfloat_to_float(bfloat %a) nounwind {248; LA32-LABEL: bfloat_to_float:249; LA32:       # %bb.0:250; LA32-NEXT:    slli.w $a0, $a0, 16251; LA32-NEXT:    ret252;253; LA64-LABEL: bfloat_to_float:254; LA64:       # %bb.0:255; LA64-NEXT:    movfr2gr.s $a0, $fa0256; LA64-NEXT:    slli.d $a0, $a0, 16257; LA64-NEXT:    movgr2fr.w $fa0, $a0258; LA64-NEXT:    ret259;260; LA32F-ILP32S-LABEL: bfloat_to_float:261; LA32F-ILP32S:       # %bb.0:262; LA32F-ILP32S-NEXT:    slli.w $a0, $a0, 16263; LA32F-ILP32S-NEXT:    ret264;265; LA32F-ILP32D-LABEL: bfloat_to_float:266; LA32F-ILP32D:       # %bb.0:267; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0268; LA32F-ILP32D-NEXT:    slli.w $a0, $a0, 16269; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a0270; LA32F-ILP32D-NEXT:    ret271;272; LA32D-ILP32D-LABEL: bfloat_to_float:273; LA32D-ILP32D:       # %bb.0:274; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0275; LA32D-ILP32D-NEXT:    slli.w $a0, $a0, 16276; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a0277; LA32D-ILP32D-NEXT:    ret278;279; LA64F-LP64S-LABEL: bfloat_to_float:280; LA64F-LP64S:       # %bb.0:281; LA64F-LP64S-NEXT:    slli.d $a0, $a0, 16282; LA64F-LP64S-NEXT:    ret283;284; LA64F-LP64D-LABEL: bfloat_to_float:285; LA64F-LP64D:       # %bb.0:286; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0287; LA64F-LP64D-NEXT:    slli.d $a0, $a0, 16288; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a0289; LA64F-LP64D-NEXT:    ret290;291; LA64D-LP64S-LABEL: bfloat_to_float:292; LA64D-LP64S:       # %bb.0:293; LA64D-LP64S-NEXT:    slli.d $a0, $a0, 16294; LA64D-LP64S-NEXT:    ret295;296; LA64D-LP64D-LABEL: bfloat_to_float:297; LA64D-LP64D:       # %bb.0:298; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa0299; LA64D-LP64D-NEXT:    slli.d $a0, $a0, 16300; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a0301; LA64D-LP64D-NEXT:    ret302  %1 = fpext bfloat %a to float303  ret float %1304}305 306define double @bfloat_to_double(bfloat %a) nounwind {307; LA32-LABEL: bfloat_to_double:308; LA32:       # %bb.0:309; LA32-NEXT:    addi.w $sp, $sp, -16310; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill311; LA32-NEXT:    slli.w $a0, $a0, 16312; LA32-NEXT:    bl __extendsfdf2313; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload314; LA32-NEXT:    addi.w $sp, $sp, 16315; LA32-NEXT:    ret316;317; LA64-LABEL: bfloat_to_double:318; LA64:       # %bb.0:319; LA64-NEXT:    movfr2gr.s $a0, $fa0320; LA64-NEXT:    slli.d $a0, $a0, 16321; LA64-NEXT:    movgr2fr.w $fa0, $a0322; LA64-NEXT:    fcvt.d.s $fa0, $fa0323; LA64-NEXT:    ret324;325; LA32F-ILP32S-LABEL: bfloat_to_double:326; LA32F-ILP32S:       # %bb.0:327; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, -16328; LA32F-ILP32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill329; LA32F-ILP32S-NEXT:    slli.w $a0, $a0, 16330; LA32F-ILP32S-NEXT:    bl __extendsfdf2331; LA32F-ILP32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload332; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, 16333; LA32F-ILP32S-NEXT:    ret334;335; LA32F-ILP32D-LABEL: bfloat_to_double:336; LA32F-ILP32D:       # %bb.0:337; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, -16338; LA32F-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill339; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0340; LA32F-ILP32D-NEXT:    slli.w $a0, $a0, 16341; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a0342; LA32F-ILP32D-NEXT:    bl __extendsfdf2343; LA32F-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload344; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, 16345; LA32F-ILP32D-NEXT:    ret346;347; LA32D-ILP32D-LABEL: bfloat_to_double:348; LA32D-ILP32D:       # %bb.0:349; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0350; LA32D-ILP32D-NEXT:    slli.w $a0, $a0, 16351; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a0352; LA32D-ILP32D-NEXT:    fcvt.d.s $fa0, $fa0353; LA32D-ILP32D-NEXT:    ret354;355; LA64F-LP64S-LABEL: bfloat_to_double:356; LA64F-LP64S:       # %bb.0:357; LA64F-LP64S-NEXT:    slli.d $a0, $a0, 16358; LA64F-LP64S-NEXT:    movgr2fr.w $fa0, $a0359; LA64F-LP64S-NEXT:    fcvt.d.s $fa0, $fa0360; LA64F-LP64S-NEXT:    movfr2gr.d $a0, $fa0361; LA64F-LP64S-NEXT:    ret362;363; LA64F-LP64D-LABEL: bfloat_to_double:364; LA64F-LP64D:       # %bb.0:365; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0366; LA64F-LP64D-NEXT:    slli.d $a0, $a0, 16367; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a0368; LA64F-LP64D-NEXT:    fcvt.d.s $fa0, $fa0369; LA64F-LP64D-NEXT:    ret370;371; LA64D-LP64S-LABEL: bfloat_to_double:372; LA64D-LP64S:       # %bb.0:373; LA64D-LP64S-NEXT:    slli.d $a0, $a0, 16374; LA64D-LP64S-NEXT:    movgr2fr.w $fa0, $a0375; LA64D-LP64S-NEXT:    fcvt.d.s $fa0, $fa0376; LA64D-LP64S-NEXT:    movfr2gr.d $a0, $fa0377; LA64D-LP64S-NEXT:    ret378;379; LA64D-LP64D-LABEL: bfloat_to_double:380; LA64D-LP64D:       # %bb.0:381; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa0382; LA64D-LP64D-NEXT:    slli.d $a0, $a0, 16383; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a0384; LA64D-LP64D-NEXT:    fcvt.d.s $fa0, $fa0385; LA64D-LP64D-NEXT:    ret386  %1 = fpext bfloat %a to double387  ret double %1388}389 390define bfloat @i16_to_bfloat(i16 %a) nounwind {391; LA32-LABEL: i16_to_bfloat:392; LA32:       # %bb.0:393; LA32-NEXT:    ret394;395; LA64-LABEL: i16_to_bfloat:396; LA64:       # %bb.0:397; LA64-NEXT:    lu12i.w $a1, -16398; LA64-NEXT:    or $a0, $a0, $a1399; LA64-NEXT:    movgr2fr.w $fa0, $a0400; LA64-NEXT:    ret401;402; LA32F-ILP32S-LABEL: i16_to_bfloat:403; LA32F-ILP32S:       # %bb.0:404; LA32F-ILP32S-NEXT:    lu12i.w $a1, -16405; LA32F-ILP32S-NEXT:    or $a0, $a0, $a1406; LA32F-ILP32S-NEXT:    ret407;408; LA32F-ILP32D-LABEL: i16_to_bfloat:409; LA32F-ILP32D:       # %bb.0:410; LA32F-ILP32D-NEXT:    lu12i.w $a1, -16411; LA32F-ILP32D-NEXT:    or $a0, $a0, $a1412; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a0413; LA32F-ILP32D-NEXT:    ret414;415; LA32D-ILP32D-LABEL: i16_to_bfloat:416; LA32D-ILP32D:       # %bb.0:417; LA32D-ILP32D-NEXT:    lu12i.w $a1, -16418; LA32D-ILP32D-NEXT:    or $a0, $a0, $a1419; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a0420; LA32D-ILP32D-NEXT:    ret421;422; LA64F-LP64S-LABEL: i16_to_bfloat:423; LA64F-LP64S:       # %bb.0:424; LA64F-LP64S-NEXT:    lu12i.w $a1, -16425; LA64F-LP64S-NEXT:    or $a0, $a0, $a1426; LA64F-LP64S-NEXT:    ret427;428; LA64F-LP64D-LABEL: i16_to_bfloat:429; LA64F-LP64D:       # %bb.0:430; LA64F-LP64D-NEXT:    lu12i.w $a1, -16431; LA64F-LP64D-NEXT:    or $a0, $a0, $a1432; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a0433; LA64F-LP64D-NEXT:    ret434;435; LA64D-LP64S-LABEL: i16_to_bfloat:436; LA64D-LP64S:       # %bb.0:437; LA64D-LP64S-NEXT:    lu12i.w $a1, -16438; LA64D-LP64S-NEXT:    or $a0, $a0, $a1439; LA64D-LP64S-NEXT:    ret440;441; LA64D-LP64D-LABEL: i16_to_bfloat:442; LA64D-LP64D:       # %bb.0:443; LA64D-LP64D-NEXT:    lu12i.w $a1, -16444; LA64D-LP64D-NEXT:    or $a0, $a0, $a1445; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a0446; LA64D-LP64D-NEXT:    ret447  %1 = bitcast i16 %a to bfloat448  ret bfloat %1449}450 451define i16 @bfloat_to_i16(bfloat %a) nounwind {452; LA32-LABEL: bfloat_to_i16:453; LA32:       # %bb.0:454; LA32-NEXT:    ret455;456; LA64-LABEL: bfloat_to_i16:457; LA64:       # %bb.0:458; LA64-NEXT:    movfr2gr.s $a0, $fa0459; LA64-NEXT:    ret460;461; LA32F-ILP32S-LABEL: bfloat_to_i16:462; LA32F-ILP32S:       # %bb.0:463; LA32F-ILP32S-NEXT:    ret464;465; LA32F-ILP32D-LABEL: bfloat_to_i16:466; LA32F-ILP32D:       # %bb.0:467; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0468; LA32F-ILP32D-NEXT:    ret469;470; LA32D-ILP32D-LABEL: bfloat_to_i16:471; LA32D-ILP32D:       # %bb.0:472; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0473; LA32D-ILP32D-NEXT:    ret474;475; LA64F-LP64S-LABEL: bfloat_to_i16:476; LA64F-LP64S:       # %bb.0:477; LA64F-LP64S-NEXT:    ret478;479; LA64F-LP64D-LABEL: bfloat_to_i16:480; LA64F-LP64D:       # %bb.0:481; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0482; LA64F-LP64D-NEXT:    ret483;484; LA64D-LP64S-LABEL: bfloat_to_i16:485; LA64D-LP64S:       # %bb.0:486; LA64D-LP64S-NEXT:    ret487;488; LA64D-LP64D-LABEL: bfloat_to_i16:489; LA64D-LP64D:       # %bb.0:490; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa0491; LA64D-LP64D-NEXT:    ret492  %1 = bitcast bfloat %a to i16493  ret i16 %1494}495 496define bfloat @bfloat_add(bfloat %a, bfloat %b) nounwind {497; LA32-LABEL: bfloat_add:498; LA32:       # %bb.0:499; LA32-NEXT:    addi.w $sp, $sp, -16500; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill501; LA32-NEXT:    slli.w $a0, $a0, 16502; LA32-NEXT:    slli.w $a1, $a1, 16503; LA32-NEXT:    bl __addsf3504; LA32-NEXT:    bl __truncsfbf2505; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload506; LA32-NEXT:    addi.w $sp, $sp, 16507; LA32-NEXT:    ret508;509; LA64-LABEL: bfloat_add:510; LA64:       # %bb.0:511; LA64-NEXT:    addi.d $sp, $sp, -16512; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill513; LA64-NEXT:    movfr2gr.s $a0, $fa0514; LA64-NEXT:    movfr2gr.s $a1, $fa1515; LA64-NEXT:    slli.d $a1, $a1, 16516; LA64-NEXT:    movgr2fr.w $fa0, $a1517; LA64-NEXT:    slli.d $a0, $a0, 16518; LA64-NEXT:    movgr2fr.w $fa1, $a0519; LA64-NEXT:    fadd.s $fa0, $fa1, $fa0520; LA64-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)521; LA64-NEXT:    jirl $ra, $ra, 0522; LA64-NEXT:    movfr2gr.s $a0, $fa0523; LA64-NEXT:    lu12i.w $a1, -16524; LA64-NEXT:    or $a0, $a0, $a1525; LA64-NEXT:    movgr2fr.w $fa0, $a0526; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload527; LA64-NEXT:    addi.d $sp, $sp, 16528; LA64-NEXT:    ret529;530; LA32F-ILP32S-LABEL: bfloat_add:531; LA32F-ILP32S:       # %bb.0:532; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, -16533; LA32F-ILP32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill534; LA32F-ILP32S-NEXT:    slli.w $a1, $a1, 16535; LA32F-ILP32S-NEXT:    movgr2fr.w $fa0, $a1536; LA32F-ILP32S-NEXT:    slli.w $a0, $a0, 16537; LA32F-ILP32S-NEXT:    movgr2fr.w $fa1, $a0538; LA32F-ILP32S-NEXT:    fadd.s $fa0, $fa1, $fa0539; LA32F-ILP32S-NEXT:    movfr2gr.s $a0, $fa0540; LA32F-ILP32S-NEXT:    bl __truncsfbf2541; LA32F-ILP32S-NEXT:    lu12i.w $a1, -16542; LA32F-ILP32S-NEXT:    or $a0, $a0, $a1543; LA32F-ILP32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload544; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, 16545; LA32F-ILP32S-NEXT:    ret546;547; LA32F-ILP32D-LABEL: bfloat_add:548; LA32F-ILP32D:       # %bb.0:549; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, -16550; LA32F-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill551; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0552; LA32F-ILP32D-NEXT:    movfr2gr.s $a1, $fa1553; LA32F-ILP32D-NEXT:    slli.w $a1, $a1, 16554; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a1555; LA32F-ILP32D-NEXT:    slli.w $a0, $a0, 16556; LA32F-ILP32D-NEXT:    movgr2fr.w $fa1, $a0557; LA32F-ILP32D-NEXT:    fadd.s $fa0, $fa1, $fa0558; LA32F-ILP32D-NEXT:    bl __truncsfbf2559; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0560; LA32F-ILP32D-NEXT:    lu12i.w $a1, -16561; LA32F-ILP32D-NEXT:    or $a0, $a0, $a1562; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a0563; LA32F-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload564; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, 16565; LA32F-ILP32D-NEXT:    ret566;567; LA32D-ILP32D-LABEL: bfloat_add:568; LA32D-ILP32D:       # %bb.0:569; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, -16570; LA32D-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill571; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0572; LA32D-ILP32D-NEXT:    movfr2gr.s $a1, $fa1573; LA32D-ILP32D-NEXT:    slli.w $a1, $a1, 16574; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a1575; LA32D-ILP32D-NEXT:    slli.w $a0, $a0, 16576; LA32D-ILP32D-NEXT:    movgr2fr.w $fa1, $a0577; LA32D-ILP32D-NEXT:    fadd.s $fa0, $fa1, $fa0578; LA32D-ILP32D-NEXT:    bl __truncsfbf2579; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0580; LA32D-ILP32D-NEXT:    lu12i.w $a1, -16581; LA32D-ILP32D-NEXT:    or $a0, $a0, $a1582; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a0583; LA32D-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload584; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, 16585; LA32D-ILP32D-NEXT:    ret586;587; LA64F-LP64S-LABEL: bfloat_add:588; LA64F-LP64S:       # %bb.0:589; LA64F-LP64S-NEXT:    addi.d $sp, $sp, -16590; LA64F-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill591; LA64F-LP64S-NEXT:    slli.d $a1, $a1, 16592; LA64F-LP64S-NEXT:    movgr2fr.w $fa0, $a1593; LA64F-LP64S-NEXT:    slli.d $a0, $a0, 16594; LA64F-LP64S-NEXT:    movgr2fr.w $fa1, $a0595; LA64F-LP64S-NEXT:    fadd.s $fa0, $fa1, $fa0596; LA64F-LP64S-NEXT:    movfr2gr.s $a0, $fa0597; LA64F-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)598; LA64F-LP64S-NEXT:    jirl $ra, $ra, 0599; LA64F-LP64S-NEXT:    lu12i.w $a1, -16600; LA64F-LP64S-NEXT:    or $a0, $a0, $a1601; LA64F-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload602; LA64F-LP64S-NEXT:    addi.d $sp, $sp, 16603; LA64F-LP64S-NEXT:    ret604;605; LA64F-LP64D-LABEL: bfloat_add:606; LA64F-LP64D:       # %bb.0:607; LA64F-LP64D-NEXT:    addi.d $sp, $sp, -16608; LA64F-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill609; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0610; LA64F-LP64D-NEXT:    movfr2gr.s $a1, $fa1611; LA64F-LP64D-NEXT:    slli.d $a1, $a1, 16612; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a1613; LA64F-LP64D-NEXT:    slli.d $a0, $a0, 16614; LA64F-LP64D-NEXT:    movgr2fr.w $fa1, $a0615; LA64F-LP64D-NEXT:    fadd.s $fa0, $fa1, $fa0616; LA64F-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)617; LA64F-LP64D-NEXT:    jirl $ra, $ra, 0618; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0619; LA64F-LP64D-NEXT:    lu12i.w $a1, -16620; LA64F-LP64D-NEXT:    or $a0, $a0, $a1621; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a0622; LA64F-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload623; LA64F-LP64D-NEXT:    addi.d $sp, $sp, 16624; LA64F-LP64D-NEXT:    ret625;626; LA64D-LP64S-LABEL: bfloat_add:627; LA64D-LP64S:       # %bb.0:628; LA64D-LP64S-NEXT:    addi.d $sp, $sp, -16629; LA64D-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill630; LA64D-LP64S-NEXT:    slli.d $a1, $a1, 16631; LA64D-LP64S-NEXT:    movgr2fr.w $fa0, $a1632; LA64D-LP64S-NEXT:    slli.d $a0, $a0, 16633; LA64D-LP64S-NEXT:    movgr2fr.w $fa1, $a0634; LA64D-LP64S-NEXT:    fadd.s $fa0, $fa1, $fa0635; LA64D-LP64S-NEXT:    movfr2gr.s $a0, $fa0636; LA64D-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)637; LA64D-LP64S-NEXT:    jirl $ra, $ra, 0638; LA64D-LP64S-NEXT:    lu12i.w $a1, -16639; LA64D-LP64S-NEXT:    or $a0, $a0, $a1640; LA64D-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload641; LA64D-LP64S-NEXT:    addi.d $sp, $sp, 16642; LA64D-LP64S-NEXT:    ret643;644; LA64D-LP64D-LABEL: bfloat_add:645; LA64D-LP64D:       # %bb.0:646; LA64D-LP64D-NEXT:    addi.d $sp, $sp, -16647; LA64D-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill648; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa0649; LA64D-LP64D-NEXT:    movfr2gr.s $a1, $fa1650; LA64D-LP64D-NEXT:    slli.d $a1, $a1, 16651; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a1652; LA64D-LP64D-NEXT:    slli.d $a0, $a0, 16653; LA64D-LP64D-NEXT:    movgr2fr.w $fa1, $a0654; LA64D-LP64D-NEXT:    fadd.s $fa0, $fa1, $fa0655; LA64D-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)656; LA64D-LP64D-NEXT:    jirl $ra, $ra, 0657; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa0658; LA64D-LP64D-NEXT:    lu12i.w $a1, -16659; LA64D-LP64D-NEXT:    or $a0, $a0, $a1660; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a0661; LA64D-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload662; LA64D-LP64D-NEXT:    addi.d $sp, $sp, 16663; LA64D-LP64D-NEXT:    ret664  %1 = fadd bfloat %a, %b665  ret bfloat %1666}667 668define bfloat @bfloat_load(ptr %a) nounwind {669; LA32-LABEL: bfloat_load:670; LA32:       # %bb.0:671; LA32-NEXT:    addi.w $sp, $sp, -16672; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill673; LA32-NEXT:    ld.h $a1, $a0, 0674; LA32-NEXT:    ld.h $a2, $a0, 6675; LA32-NEXT:    slli.w $a0, $a1, 16676; LA32-NEXT:    slli.w $a1, $a2, 16677; LA32-NEXT:    bl __addsf3678; LA32-NEXT:    bl __truncsfbf2679; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload680; LA32-NEXT:    addi.w $sp, $sp, 16681; LA32-NEXT:    ret682;683; LA64-LABEL: bfloat_load:684; LA64:       # %bb.0:685; LA64-NEXT:    addi.d $sp, $sp, -16686; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill687; LA64-NEXT:    ld.hu $a1, $a0, 6688; LA64-NEXT:    ld.hu $a0, $a0, 0689; LA64-NEXT:    slli.d $a1, $a1, 16690; LA64-NEXT:    movgr2fr.w $fa0, $a1691; LA64-NEXT:    slli.d $a0, $a0, 16692; LA64-NEXT:    movgr2fr.w $fa1, $a0693; LA64-NEXT:    fadd.s $fa0, $fa1, $fa0694; LA64-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)695; LA64-NEXT:    jirl $ra, $ra, 0696; LA64-NEXT:    movfr2gr.s $a0, $fa0697; LA64-NEXT:    lu12i.w $a1, -16698; LA64-NEXT:    or $a0, $a0, $a1699; LA64-NEXT:    movgr2fr.w $fa0, $a0700; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload701; LA64-NEXT:    addi.d $sp, $sp, 16702; LA64-NEXT:    ret703;704; LA32F-ILP32S-LABEL: bfloat_load:705; LA32F-ILP32S:       # %bb.0:706; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, -16707; LA32F-ILP32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill708; LA32F-ILP32S-NEXT:    ld.hu $a1, $a0, 6709; LA32F-ILP32S-NEXT:    ld.hu $a0, $a0, 0710; LA32F-ILP32S-NEXT:    slli.w $a1, $a1, 16711; LA32F-ILP32S-NEXT:    movgr2fr.w $fa0, $a1712; LA32F-ILP32S-NEXT:    slli.w $a0, $a0, 16713; LA32F-ILP32S-NEXT:    movgr2fr.w $fa1, $a0714; LA32F-ILP32S-NEXT:    fadd.s $fa0, $fa1, $fa0715; LA32F-ILP32S-NEXT:    movfr2gr.s $a0, $fa0716; LA32F-ILP32S-NEXT:    bl __truncsfbf2717; LA32F-ILP32S-NEXT:    lu12i.w $a1, -16718; LA32F-ILP32S-NEXT:    or $a0, $a0, $a1719; LA32F-ILP32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload720; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, 16721; LA32F-ILP32S-NEXT:    ret722;723; LA32F-ILP32D-LABEL: bfloat_load:724; LA32F-ILP32D:       # %bb.0:725; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, -16726; LA32F-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill727; LA32F-ILP32D-NEXT:    ld.hu $a1, $a0, 6728; LA32F-ILP32D-NEXT:    ld.hu $a0, $a0, 0729; LA32F-ILP32D-NEXT:    slli.w $a1, $a1, 16730; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a1731; LA32F-ILP32D-NEXT:    slli.w $a0, $a0, 16732; LA32F-ILP32D-NEXT:    movgr2fr.w $fa1, $a0733; LA32F-ILP32D-NEXT:    fadd.s $fa0, $fa1, $fa0734; LA32F-ILP32D-NEXT:    bl __truncsfbf2735; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0736; LA32F-ILP32D-NEXT:    lu12i.w $a1, -16737; LA32F-ILP32D-NEXT:    or $a0, $a0, $a1738; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a0739; LA32F-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload740; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, 16741; LA32F-ILP32D-NEXT:    ret742;743; LA32D-ILP32D-LABEL: bfloat_load:744; LA32D-ILP32D:       # %bb.0:745; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, -16746; LA32D-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill747; LA32D-ILP32D-NEXT:    ld.hu $a1, $a0, 6748; LA32D-ILP32D-NEXT:    ld.hu $a0, $a0, 0749; LA32D-ILP32D-NEXT:    slli.w $a1, $a1, 16750; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a1751; LA32D-ILP32D-NEXT:    slli.w $a0, $a0, 16752; LA32D-ILP32D-NEXT:    movgr2fr.w $fa1, $a0753; LA32D-ILP32D-NEXT:    fadd.s $fa0, $fa1, $fa0754; LA32D-ILP32D-NEXT:    bl __truncsfbf2755; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0756; LA32D-ILP32D-NEXT:    lu12i.w $a1, -16757; LA32D-ILP32D-NEXT:    or $a0, $a0, $a1758; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a0759; LA32D-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload760; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, 16761; LA32D-ILP32D-NEXT:    ret762;763; LA64F-LP64S-LABEL: bfloat_load:764; LA64F-LP64S:       # %bb.0:765; LA64F-LP64S-NEXT:    addi.d $sp, $sp, -16766; LA64F-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill767; LA64F-LP64S-NEXT:    ld.hu $a1, $a0, 6768; LA64F-LP64S-NEXT:    ld.hu $a0, $a0, 0769; LA64F-LP64S-NEXT:    slli.d $a1, $a1, 16770; LA64F-LP64S-NEXT:    movgr2fr.w $fa0, $a1771; LA64F-LP64S-NEXT:    slli.d $a0, $a0, 16772; LA64F-LP64S-NEXT:    movgr2fr.w $fa1, $a0773; LA64F-LP64S-NEXT:    fadd.s $fa0, $fa1, $fa0774; LA64F-LP64S-NEXT:    movfr2gr.s $a0, $fa0775; LA64F-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)776; LA64F-LP64S-NEXT:    jirl $ra, $ra, 0777; LA64F-LP64S-NEXT:    lu12i.w $a1, -16778; LA64F-LP64S-NEXT:    or $a0, $a0, $a1779; LA64F-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload780; LA64F-LP64S-NEXT:    addi.d $sp, $sp, 16781; LA64F-LP64S-NEXT:    ret782;783; LA64F-LP64D-LABEL: bfloat_load:784; LA64F-LP64D:       # %bb.0:785; LA64F-LP64D-NEXT:    addi.d $sp, $sp, -16786; LA64F-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill787; LA64F-LP64D-NEXT:    ld.hu $a1, $a0, 6788; LA64F-LP64D-NEXT:    ld.hu $a0, $a0, 0789; LA64F-LP64D-NEXT:    slli.d $a1, $a1, 16790; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a1791; LA64F-LP64D-NEXT:    slli.d $a0, $a0, 16792; LA64F-LP64D-NEXT:    movgr2fr.w $fa1, $a0793; LA64F-LP64D-NEXT:    fadd.s $fa0, $fa1, $fa0794; LA64F-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)795; LA64F-LP64D-NEXT:    jirl $ra, $ra, 0796; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0797; LA64F-LP64D-NEXT:    lu12i.w $a1, -16798; LA64F-LP64D-NEXT:    or $a0, $a0, $a1799; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a0800; LA64F-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload801; LA64F-LP64D-NEXT:    addi.d $sp, $sp, 16802; LA64F-LP64D-NEXT:    ret803;804; LA64D-LP64S-LABEL: bfloat_load:805; LA64D-LP64S:       # %bb.0:806; LA64D-LP64S-NEXT:    addi.d $sp, $sp, -16807; LA64D-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill808; LA64D-LP64S-NEXT:    ld.hu $a1, $a0, 6809; LA64D-LP64S-NEXT:    ld.hu $a0, $a0, 0810; LA64D-LP64S-NEXT:    slli.d $a1, $a1, 16811; LA64D-LP64S-NEXT:    movgr2fr.w $fa0, $a1812; LA64D-LP64S-NEXT:    slli.d $a0, $a0, 16813; LA64D-LP64S-NEXT:    movgr2fr.w $fa1, $a0814; LA64D-LP64S-NEXT:    fadd.s $fa0, $fa1, $fa0815; LA64D-LP64S-NEXT:    movfr2gr.s $a0, $fa0816; LA64D-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)817; LA64D-LP64S-NEXT:    jirl $ra, $ra, 0818; LA64D-LP64S-NEXT:    lu12i.w $a1, -16819; LA64D-LP64S-NEXT:    or $a0, $a0, $a1820; LA64D-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload821; LA64D-LP64S-NEXT:    addi.d $sp, $sp, 16822; LA64D-LP64S-NEXT:    ret823;824; LA64D-LP64D-LABEL: bfloat_load:825; LA64D-LP64D:       # %bb.0:826; LA64D-LP64D-NEXT:    addi.d $sp, $sp, -16827; LA64D-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill828; LA64D-LP64D-NEXT:    ld.hu $a1, $a0, 6829; LA64D-LP64D-NEXT:    ld.hu $a0, $a0, 0830; LA64D-LP64D-NEXT:    slli.d $a1, $a1, 16831; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a1832; LA64D-LP64D-NEXT:    slli.d $a0, $a0, 16833; LA64D-LP64D-NEXT:    movgr2fr.w $fa1, $a0834; LA64D-LP64D-NEXT:    fadd.s $fa0, $fa1, $fa0835; LA64D-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)836; LA64D-LP64D-NEXT:    jirl $ra, $ra, 0837; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa0838; LA64D-LP64D-NEXT:    lu12i.w $a1, -16839; LA64D-LP64D-NEXT:    or $a0, $a0, $a1840; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a0841; LA64D-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload842; LA64D-LP64D-NEXT:    addi.d $sp, $sp, 16843; LA64D-LP64D-NEXT:    ret844  %1 = load bfloat, ptr %a845  %2 = getelementptr bfloat, ptr %a, i32 3846  %3 = load bfloat, ptr %2847  %4 = fadd bfloat %1, %3848  ret bfloat %4849}850 851define void @bfloat_store(ptr %a, bfloat %b, bfloat %c) nounwind {852; LA32-LABEL: bfloat_store:853; LA32:       # %bb.0:854; LA32-NEXT:    addi.w $sp, $sp, -16855; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill856; LA32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill857; LA32-NEXT:    move $fp, $a0858; LA32-NEXT:    slli.w $a0, $a1, 16859; LA32-NEXT:    slli.w $a1, $a2, 16860; LA32-NEXT:    bl __addsf3861; LA32-NEXT:    bl __truncsfbf2862; LA32-NEXT:    st.h $a0, $fp, 0863; LA32-NEXT:    st.h $a0, $fp, 16864; LA32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload865; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload866; LA32-NEXT:    addi.w $sp, $sp, 16867; LA32-NEXT:    ret868;869; LA64-LABEL: bfloat_store:870; LA64:       # %bb.0:871; LA64-NEXT:    addi.d $sp, $sp, -16872; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill873; LA64-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill874; LA64-NEXT:    move $fp, $a0875; LA64-NEXT:    movfr2gr.s $a0, $fa0876; LA64-NEXT:    movfr2gr.s $a1, $fa1877; LA64-NEXT:    slli.d $a1, $a1, 16878; LA64-NEXT:    movgr2fr.w $fa0, $a1879; LA64-NEXT:    slli.d $a0, $a0, 16880; LA64-NEXT:    movgr2fr.w $fa1, $a0881; LA64-NEXT:    fadd.s $fa0, $fa1, $fa0882; LA64-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)883; LA64-NEXT:    jirl $ra, $ra, 0884; LA64-NEXT:    movfr2gr.s $a0, $fa0885; LA64-NEXT:    st.h $a0, $fp, 0886; LA64-NEXT:    st.h $a0, $fp, 16887; LA64-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload888; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload889; LA64-NEXT:    addi.d $sp, $sp, 16890; LA64-NEXT:    ret891;892; LA32F-ILP32S-LABEL: bfloat_store:893; LA32F-ILP32S:       # %bb.0:894; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, -16895; LA32F-ILP32S-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill896; LA32F-ILP32S-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill897; LA32F-ILP32S-NEXT:    move $fp, $a0898; LA32F-ILP32S-NEXT:    slli.w $a0, $a2, 16899; LA32F-ILP32S-NEXT:    movgr2fr.w $fa0, $a0900; LA32F-ILP32S-NEXT:    slli.w $a0, $a1, 16901; LA32F-ILP32S-NEXT:    movgr2fr.w $fa1, $a0902; LA32F-ILP32S-NEXT:    fadd.s $fa0, $fa1, $fa0903; LA32F-ILP32S-NEXT:    movfr2gr.s $a0, $fa0904; LA32F-ILP32S-NEXT:    bl __truncsfbf2905; LA32F-ILP32S-NEXT:    st.h $a0, $fp, 0906; LA32F-ILP32S-NEXT:    st.h $a0, $fp, 16907; LA32F-ILP32S-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload908; LA32F-ILP32S-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload909; LA32F-ILP32S-NEXT:    addi.w $sp, $sp, 16910; LA32F-ILP32S-NEXT:    ret911;912; LA32F-ILP32D-LABEL: bfloat_store:913; LA32F-ILP32D:       # %bb.0:914; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, -16915; LA32F-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill916; LA32F-ILP32D-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill917; LA32F-ILP32D-NEXT:    move $fp, $a0918; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0919; LA32F-ILP32D-NEXT:    movfr2gr.s $a1, $fa1920; LA32F-ILP32D-NEXT:    slli.w $a1, $a1, 16921; LA32F-ILP32D-NEXT:    movgr2fr.w $fa0, $a1922; LA32F-ILP32D-NEXT:    slli.w $a0, $a0, 16923; LA32F-ILP32D-NEXT:    movgr2fr.w $fa1, $a0924; LA32F-ILP32D-NEXT:    fadd.s $fa0, $fa1, $fa0925; LA32F-ILP32D-NEXT:    bl __truncsfbf2926; LA32F-ILP32D-NEXT:    movfr2gr.s $a0, $fa0927; LA32F-ILP32D-NEXT:    st.h $a0, $fp, 0928; LA32F-ILP32D-NEXT:    st.h $a0, $fp, 16929; LA32F-ILP32D-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload930; LA32F-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload931; LA32F-ILP32D-NEXT:    addi.w $sp, $sp, 16932; LA32F-ILP32D-NEXT:    ret933;934; LA32D-ILP32D-LABEL: bfloat_store:935; LA32D-ILP32D:       # %bb.0:936; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, -16937; LA32D-ILP32D-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill938; LA32D-ILP32D-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill939; LA32D-ILP32D-NEXT:    move $fp, $a0940; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0941; LA32D-ILP32D-NEXT:    movfr2gr.s $a1, $fa1942; LA32D-ILP32D-NEXT:    slli.w $a1, $a1, 16943; LA32D-ILP32D-NEXT:    movgr2fr.w $fa0, $a1944; LA32D-ILP32D-NEXT:    slli.w $a0, $a0, 16945; LA32D-ILP32D-NEXT:    movgr2fr.w $fa1, $a0946; LA32D-ILP32D-NEXT:    fadd.s $fa0, $fa1, $fa0947; LA32D-ILP32D-NEXT:    bl __truncsfbf2948; LA32D-ILP32D-NEXT:    movfr2gr.s $a0, $fa0949; LA32D-ILP32D-NEXT:    st.h $a0, $fp, 0950; LA32D-ILP32D-NEXT:    st.h $a0, $fp, 16951; LA32D-ILP32D-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload952; LA32D-ILP32D-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload953; LA32D-ILP32D-NEXT:    addi.w $sp, $sp, 16954; LA32D-ILP32D-NEXT:    ret955;956; LA64F-LP64S-LABEL: bfloat_store:957; LA64F-LP64S:       # %bb.0:958; LA64F-LP64S-NEXT:    addi.d $sp, $sp, -16959; LA64F-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill960; LA64F-LP64S-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill961; LA64F-LP64S-NEXT:    move $fp, $a0962; LA64F-LP64S-NEXT:    slli.d $a0, $a2, 16963; LA64F-LP64S-NEXT:    movgr2fr.w $fa0, $a0964; LA64F-LP64S-NEXT:    slli.d $a0, $a1, 16965; LA64F-LP64S-NEXT:    movgr2fr.w $fa1, $a0966; LA64F-LP64S-NEXT:    fadd.s $fa0, $fa1, $fa0967; LA64F-LP64S-NEXT:    movfr2gr.s $a0, $fa0968; LA64F-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)969; LA64F-LP64S-NEXT:    jirl $ra, $ra, 0970; LA64F-LP64S-NEXT:    st.h $a0, $fp, 0971; LA64F-LP64S-NEXT:    st.h $a0, $fp, 16972; LA64F-LP64S-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload973; LA64F-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload974; LA64F-LP64S-NEXT:    addi.d $sp, $sp, 16975; LA64F-LP64S-NEXT:    ret976;977; LA64F-LP64D-LABEL: bfloat_store:978; LA64F-LP64D:       # %bb.0:979; LA64F-LP64D-NEXT:    addi.d $sp, $sp, -16980; LA64F-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill981; LA64F-LP64D-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill982; LA64F-LP64D-NEXT:    move $fp, $a0983; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0984; LA64F-LP64D-NEXT:    movfr2gr.s $a1, $fa1985; LA64F-LP64D-NEXT:    slli.d $a1, $a1, 16986; LA64F-LP64D-NEXT:    movgr2fr.w $fa0, $a1987; LA64F-LP64D-NEXT:    slli.d $a0, $a0, 16988; LA64F-LP64D-NEXT:    movgr2fr.w $fa1, $a0989; LA64F-LP64D-NEXT:    fadd.s $fa0, $fa1, $fa0990; LA64F-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)991; LA64F-LP64D-NEXT:    jirl $ra, $ra, 0992; LA64F-LP64D-NEXT:    movfr2gr.s $a0, $fa0993; LA64F-LP64D-NEXT:    st.h $a0, $fp, 0994; LA64F-LP64D-NEXT:    st.h $a0, $fp, 16995; LA64F-LP64D-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload996; LA64F-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload997; LA64F-LP64D-NEXT:    addi.d $sp, $sp, 16998; LA64F-LP64D-NEXT:    ret999;1000; LA64D-LP64S-LABEL: bfloat_store:1001; LA64D-LP64S:       # %bb.0:1002; LA64D-LP64S-NEXT:    addi.d $sp, $sp, -161003; LA64D-LP64S-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill1004; LA64D-LP64S-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill1005; LA64D-LP64S-NEXT:    move $fp, $a01006; LA64D-LP64S-NEXT:    slli.d $a0, $a2, 161007; LA64D-LP64S-NEXT:    movgr2fr.w $fa0, $a01008; LA64D-LP64S-NEXT:    slli.d $a0, $a1, 161009; LA64D-LP64S-NEXT:    movgr2fr.w $fa1, $a01010; LA64D-LP64S-NEXT:    fadd.s $fa0, $fa1, $fa01011; LA64D-LP64S-NEXT:    movfr2gr.s $a0, $fa01012; LA64D-LP64S-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)1013; LA64D-LP64S-NEXT:    jirl $ra, $ra, 01014; LA64D-LP64S-NEXT:    st.h $a0, $fp, 01015; LA64D-LP64S-NEXT:    st.h $a0, $fp, 161016; LA64D-LP64S-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload1017; LA64D-LP64S-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload1018; LA64D-LP64S-NEXT:    addi.d $sp, $sp, 161019; LA64D-LP64S-NEXT:    ret1020;1021; LA64D-LP64D-LABEL: bfloat_store:1022; LA64D-LP64D:       # %bb.0:1023; LA64D-LP64D-NEXT:    addi.d $sp, $sp, -161024; LA64D-LP64D-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill1025; LA64D-LP64D-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill1026; LA64D-LP64D-NEXT:    move $fp, $a01027; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa01028; LA64D-LP64D-NEXT:    movfr2gr.s $a1, $fa11029; LA64D-LP64D-NEXT:    slli.d $a1, $a1, 161030; LA64D-LP64D-NEXT:    movgr2fr.w $fa0, $a11031; LA64D-LP64D-NEXT:    slli.d $a0, $a0, 161032; LA64D-LP64D-NEXT:    movgr2fr.w $fa1, $a01033; LA64D-LP64D-NEXT:    fadd.s $fa0, $fa1, $fa01034; LA64D-LP64D-NEXT:    pcaddu18i $ra, %call36(__truncsfbf2)1035; LA64D-LP64D-NEXT:    jirl $ra, $ra, 01036; LA64D-LP64D-NEXT:    movfr2gr.s $a0, $fa01037; LA64D-LP64D-NEXT:    st.h $a0, $fp, 01038; LA64D-LP64D-NEXT:    st.h $a0, $fp, 161039; LA64D-LP64D-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload1040; LA64D-LP64D-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload1041; LA64D-LP64D-NEXT:    addi.d $sp, $sp, 161042; LA64D-LP64D-NEXT:    ret1043  %1 = fadd bfloat %b, %c1044  store bfloat %1, ptr %a1045  %2 = getelementptr bfloat, ptr %a, i32 81046  store bfloat %1, ptr %21047  ret void1048}1049