1597 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32S3; RUN: llc --mtriple=loongarch32 --mattr=+f -target-abi=ilp32s --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32F-ILP32S4; RUN: llc --mtriple=loongarch32 --mattr=+f -target-abi=ilp32d --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32F-ILP32D5; RUN: llc --mtriple=loongarch32 --mattr=+d -target-abi=ilp32s --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32D-ILP32S6; RUN: llc --mtriple=loongarch32 --mattr=+d -target-abi=ilp32d --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA32D-ILP32D7; RUN: llc --mtriple=loongarch64 --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64S8; RUN: llc --mtriple=loongarch64 --mattr=+f -target-abi=lp64s --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64F-LP64S9; RUN: llc --mtriple=loongarch64 --mattr=+f -target-abi=lp64d --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64F-LP64D10; RUN: llc --mtriple=loongarch64 --mattr=+d -target-abi=lp64s --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64D-LP64S11; RUN: llc --mtriple=loongarch64 --mattr=+d -target-abi=lp64d --verify-machineinstrs < %s | FileCheck %s --check-prefix=LA64D-LP64D12 13define i32 @callee_half_in_fregs(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h, half %i) nounwind {14; LA32S-LABEL: callee_half_in_fregs:15; LA32S: # %bb.0:16; LA32S-NEXT: addi.w $sp, $sp, -1617; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill18; LA32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill19; LA32S-NEXT: ld.hu $a1, $sp, 1620; LA32S-NEXT: move $fp, $a021; LA32S-NEXT: move $a0, $a122; LA32S-NEXT: bl __extendhfsf223; LA32S-NEXT: bl __fixsfsi24; LA32S-NEXT: add.w $a0, $fp, $a025; LA32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload26; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload27; LA32S-NEXT: addi.w $sp, $sp, 1628; LA32S-NEXT: ret29;30; LA32F-ILP32S-LABEL: callee_half_in_fregs:31; LA32F-ILP32S: # %bb.0:32; LA32F-ILP32S-NEXT: addi.w $sp, $sp, -1633; LA32F-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill34; LA32F-ILP32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill35; LA32F-ILP32S-NEXT: ld.hu $a1, $sp, 1636; LA32F-ILP32S-NEXT: move $fp, $a037; LA32F-ILP32S-NEXT: move $a0, $a138; LA32F-ILP32S-NEXT: bl __extendhfsf239; LA32F-ILP32S-NEXT: movgr2fr.w $fa0, $a040; LA32F-ILP32S-NEXT: ftintrz.w.s $fa0, $fa041; LA32F-ILP32S-NEXT: movfr2gr.s $a0, $fa042; LA32F-ILP32S-NEXT: add.w $a0, $fp, $a043; LA32F-ILP32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload44; LA32F-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload45; LA32F-ILP32S-NEXT: addi.w $sp, $sp, 1646; LA32F-ILP32S-NEXT: ret47;48; LA32F-ILP32D-LABEL: callee_half_in_fregs:49; LA32F-ILP32D: # %bb.0:50; LA32F-ILP32D-NEXT: addi.w $sp, $sp, -1651; LA32F-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill52; LA32F-ILP32D-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill53; LA32F-ILP32D-NEXT: move $fp, $a054; LA32F-ILP32D-NEXT: bl __extendhfsf255; LA32F-ILP32D-NEXT: ftintrz.w.s $fa0, $fa056; LA32F-ILP32D-NEXT: movfr2gr.s $a0, $fa057; LA32F-ILP32D-NEXT: add.w $a0, $fp, $a058; LA32F-ILP32D-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload59; 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-ILP32S-LABEL: callee_half_in_fregs:64; LA32D-ILP32S: # %bb.0:65; LA32D-ILP32S-NEXT: addi.w $sp, $sp, -1666; LA32D-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill67; LA32D-ILP32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill68; LA32D-ILP32S-NEXT: ld.hu $a1, $sp, 1669; LA32D-ILP32S-NEXT: move $fp, $a070; LA32D-ILP32S-NEXT: move $a0, $a171; LA32D-ILP32S-NEXT: bl __extendhfsf272; LA32D-ILP32S-NEXT: movgr2fr.w $fa0, $a073; LA32D-ILP32S-NEXT: ftintrz.w.s $fa0, $fa074; LA32D-ILP32S-NEXT: movfr2gr.s $a0, $fa075; LA32D-ILP32S-NEXT: add.w $a0, $fp, $a076; LA32D-ILP32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload77; LA32D-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload78; LA32D-ILP32S-NEXT: addi.w $sp, $sp, 1679; LA32D-ILP32S-NEXT: ret80;81; LA32D-ILP32D-LABEL: callee_half_in_fregs:82; LA32D-ILP32D: # %bb.0:83; LA32D-ILP32D-NEXT: addi.w $sp, $sp, -1684; LA32D-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill85; LA32D-ILP32D-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill86; LA32D-ILP32D-NEXT: move $fp, $a087; LA32D-ILP32D-NEXT: bl __extendhfsf288; LA32D-ILP32D-NEXT: ftintrz.w.s $fa0, $fa089; LA32D-ILP32D-NEXT: movfr2gr.s $a0, $fa090; LA32D-ILP32D-NEXT: add.w $a0, $fp, $a091; LA32D-ILP32D-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload92; LA32D-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload93; LA32D-ILP32D-NEXT: addi.w $sp, $sp, 1694; LA32D-ILP32D-NEXT: ret95;96; LA64S-LABEL: callee_half_in_fregs:97; LA64S: # %bb.0:98; LA64S-NEXT: addi.d $sp, $sp, -1699; LA64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill100; LA64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill101; LA64S-NEXT: move $fp, $a0102; LA64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)103; LA64S-NEXT: jirl $ra, $ra, 0104; LA64S-NEXT: ftintrz.l.s $fa0, $fa0105; LA64S-NEXT: movfr2gr.d $a0, $fa0106; LA64S-NEXT: add.w $a0, $fp, $a0107; LA64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload108; LA64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload109; LA64S-NEXT: addi.d $sp, $sp, 16110; LA64S-NEXT: ret111;112; LA64F-LP64S-LABEL: callee_half_in_fregs:113; LA64F-LP64S: # %bb.0:114; LA64F-LP64S-NEXT: addi.d $sp, $sp, -16115; LA64F-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill116; LA64F-LP64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill117; LA64F-LP64S-NEXT: ld.hu $a1, $sp, 16118; LA64F-LP64S-NEXT: move $fp, $a0119; LA64F-LP64S-NEXT: move $a0, $a1120; LA64F-LP64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)121; LA64F-LP64S-NEXT: jirl $ra, $ra, 0122; LA64F-LP64S-NEXT: movgr2fr.w $fa0, $a0123; LA64F-LP64S-NEXT: ftintrz.l.s $fa0, $fa0124; LA64F-LP64S-NEXT: movfr2gr.d $a0, $fa0125; LA64F-LP64S-NEXT: add.w $a0, $fp, $a0126; LA64F-LP64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload127; LA64F-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload128; LA64F-LP64S-NEXT: addi.d $sp, $sp, 16129; LA64F-LP64S-NEXT: ret130;131; LA64F-LP64D-LABEL: callee_half_in_fregs:132; LA64F-LP64D: # %bb.0:133; LA64F-LP64D-NEXT: addi.d $sp, $sp, -16134; LA64F-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill135; LA64F-LP64D-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill136; LA64F-LP64D-NEXT: move $fp, $a0137; LA64F-LP64D-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)138; LA64F-LP64D-NEXT: jirl $ra, $ra, 0139; LA64F-LP64D-NEXT: ftintrz.l.s $fa0, $fa0140; LA64F-LP64D-NEXT: movfr2gr.d $a0, $fa0141; LA64F-LP64D-NEXT: add.w $a0, $fp, $a0142; LA64F-LP64D-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload143; LA64F-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload144; LA64F-LP64D-NEXT: addi.d $sp, $sp, 16145; LA64F-LP64D-NEXT: ret146;147; LA64D-LP64S-LABEL: callee_half_in_fregs:148; LA64D-LP64S: # %bb.0:149; LA64D-LP64S-NEXT: addi.d $sp, $sp, -16150; LA64D-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill151; LA64D-LP64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill152; LA64D-LP64S-NEXT: ld.hu $a1, $sp, 16153; LA64D-LP64S-NEXT: move $fp, $a0154; LA64D-LP64S-NEXT: move $a0, $a1155; LA64D-LP64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)156; LA64D-LP64S-NEXT: jirl $ra, $ra, 0157; LA64D-LP64S-NEXT: movgr2fr.w $fa0, $a0158; LA64D-LP64S-NEXT: ftintrz.l.s $fa0, $fa0159; LA64D-LP64S-NEXT: movfr2gr.d $a0, $fa0160; LA64D-LP64S-NEXT: add.w $a0, $fp, $a0161; LA64D-LP64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload162; LA64D-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload163; LA64D-LP64S-NEXT: addi.d $sp, $sp, 16164; LA64D-LP64S-NEXT: ret165;166; LA64D-LP64D-LABEL: callee_half_in_fregs:167; LA64D-LP64D: # %bb.0:168; LA64D-LP64D-NEXT: addi.d $sp, $sp, -16169; LA64D-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill170; LA64D-LP64D-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill171; LA64D-LP64D-NEXT: move $fp, $a0172; LA64D-LP64D-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)173; LA64D-LP64D-NEXT: jirl $ra, $ra, 0174; LA64D-LP64D-NEXT: ftintrz.l.s $fa0, $fa0175; LA64D-LP64D-NEXT: movfr2gr.d $a0, $fa0176; LA64D-LP64D-NEXT: add.w $a0, $fp, $a0177; LA64D-LP64D-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload178; LA64D-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload179; LA64D-LP64D-NEXT: addi.d $sp, $sp, 16180; LA64D-LP64D-NEXT: ret181 %1 = fptosi half %i to i32182 %2 = add i32 %a, %1183 ret i32 %2184}185 186define i32 @caller_half_in_fregs() nounwind {187; LA32S-LABEL: caller_half_in_fregs:188; LA32S: # %bb.0:189; LA32S-NEXT: addi.w $sp, $sp, -16190; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill191; LA32S-NEXT: lu12i.w $t0, 4192; LA32S-NEXT: ori $a0, $zero, 1193; LA32S-NEXT: ori $a1, $zero, 2194; LA32S-NEXT: ori $a2, $zero, 3195; LA32S-NEXT: ori $a3, $zero, 4196; LA32S-NEXT: ori $a4, $zero, 5197; LA32S-NEXT: ori $a5, $zero, 6198; LA32S-NEXT: ori $a6, $zero, 7199; LA32S-NEXT: ori $a7, $zero, 8200; LA32S-NEXT: st.w $t0, $sp, 0201; LA32S-NEXT: bl callee_half_in_fregs202; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload203; LA32S-NEXT: addi.w $sp, $sp, 16204; LA32S-NEXT: ret205;206; LA32F-ILP32S-LABEL: caller_half_in_fregs:207; LA32F-ILP32S: # %bb.0:208; LA32F-ILP32S-NEXT: addi.w $sp, $sp, -16209; LA32F-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill210; LA32F-ILP32S-NEXT: lu12i.w $t0, -12211; LA32F-ILP32S-NEXT: ori $a0, $zero, 1212; LA32F-ILP32S-NEXT: ori $a1, $zero, 2213; LA32F-ILP32S-NEXT: ori $a2, $zero, 3214; LA32F-ILP32S-NEXT: ori $a3, $zero, 4215; LA32F-ILP32S-NEXT: ori $a4, $zero, 5216; LA32F-ILP32S-NEXT: ori $a5, $zero, 6217; LA32F-ILP32S-NEXT: ori $a6, $zero, 7218; LA32F-ILP32S-NEXT: ori $a7, $zero, 8219; LA32F-ILP32S-NEXT: st.w $t0, $sp, 0220; LA32F-ILP32S-NEXT: bl callee_half_in_fregs221; LA32F-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload222; LA32F-ILP32S-NEXT: addi.w $sp, $sp, 16223; LA32F-ILP32S-NEXT: ret224;225; LA32F-ILP32D-LABEL: caller_half_in_fregs:226; LA32F-ILP32D: # %bb.0:227; LA32F-ILP32D-NEXT: addi.w $sp, $sp, -16228; LA32F-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill229; LA32F-ILP32D-NEXT: lu12i.w $a0, -12230; LA32F-ILP32D-NEXT: movgr2fr.w $fa0, $a0231; LA32F-ILP32D-NEXT: ori $a0, $zero, 1232; LA32F-ILP32D-NEXT: ori $a1, $zero, 2233; LA32F-ILP32D-NEXT: ori $a2, $zero, 3234; LA32F-ILP32D-NEXT: ori $a3, $zero, 4235; LA32F-ILP32D-NEXT: ori $a4, $zero, 5236; LA32F-ILP32D-NEXT: ori $a5, $zero, 6237; LA32F-ILP32D-NEXT: ori $a6, $zero, 7238; LA32F-ILP32D-NEXT: ori $a7, $zero, 8239; LA32F-ILP32D-NEXT: bl callee_half_in_fregs240; LA32F-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload241; LA32F-ILP32D-NEXT: addi.w $sp, $sp, 16242; LA32F-ILP32D-NEXT: ret243;244; LA32D-ILP32S-LABEL: caller_half_in_fregs:245; LA32D-ILP32S: # %bb.0:246; LA32D-ILP32S-NEXT: addi.w $sp, $sp, -16247; LA32D-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill248; LA32D-ILP32S-NEXT: lu12i.w $t0, -12249; LA32D-ILP32S-NEXT: ori $a0, $zero, 1250; LA32D-ILP32S-NEXT: ori $a1, $zero, 2251; LA32D-ILP32S-NEXT: ori $a2, $zero, 3252; LA32D-ILP32S-NEXT: ori $a3, $zero, 4253; LA32D-ILP32S-NEXT: ori $a4, $zero, 5254; LA32D-ILP32S-NEXT: ori $a5, $zero, 6255; LA32D-ILP32S-NEXT: ori $a6, $zero, 7256; LA32D-ILP32S-NEXT: ori $a7, $zero, 8257; LA32D-ILP32S-NEXT: st.w $t0, $sp, 0258; LA32D-ILP32S-NEXT: bl callee_half_in_fregs259; LA32D-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload260; LA32D-ILP32S-NEXT: addi.w $sp, $sp, 16261; LA32D-ILP32S-NEXT: ret262;263; LA32D-ILP32D-LABEL: caller_half_in_fregs:264; LA32D-ILP32D: # %bb.0:265; LA32D-ILP32D-NEXT: addi.w $sp, $sp, -16266; LA32D-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill267; LA32D-ILP32D-NEXT: lu12i.w $a0, -12268; LA32D-ILP32D-NEXT: movgr2fr.w $fa0, $a0269; LA32D-ILP32D-NEXT: ori $a0, $zero, 1270; LA32D-ILP32D-NEXT: ori $a1, $zero, 2271; LA32D-ILP32D-NEXT: ori $a2, $zero, 3272; LA32D-ILP32D-NEXT: ori $a3, $zero, 4273; LA32D-ILP32D-NEXT: ori $a4, $zero, 5274; LA32D-ILP32D-NEXT: ori $a5, $zero, 6275; LA32D-ILP32D-NEXT: ori $a6, $zero, 7276; LA32D-ILP32D-NEXT: ori $a7, $zero, 8277; LA32D-ILP32D-NEXT: bl callee_half_in_fregs278; LA32D-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload279; LA32D-ILP32D-NEXT: addi.w $sp, $sp, 16280; LA32D-ILP32D-NEXT: ret281;282; LA64S-LABEL: caller_half_in_fregs:283; LA64S: # %bb.0:284; LA64S-NEXT: addi.d $sp, $sp, -16285; LA64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill286; LA64S-NEXT: lu12i.w $a0, -12287; LA64S-NEXT: movgr2fr.w $fa0, $a0288; LA64S-NEXT: ori $a0, $zero, 1289; LA64S-NEXT: ori $a1, $zero, 2290; LA64S-NEXT: ori $a2, $zero, 3291; LA64S-NEXT: ori $a3, $zero, 4292; LA64S-NEXT: ori $a4, $zero, 5293; LA64S-NEXT: ori $a5, $zero, 6294; LA64S-NEXT: ori $a6, $zero, 7295; LA64S-NEXT: ori $a7, $zero, 8296; LA64S-NEXT: pcaddu18i $ra, %call36(callee_half_in_fregs)297; LA64S-NEXT: jirl $ra, $ra, 0298; LA64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload299; LA64S-NEXT: addi.d $sp, $sp, 16300; LA64S-NEXT: ret301;302; LA64F-LP64S-LABEL: caller_half_in_fregs:303; LA64F-LP64S: # %bb.0:304; LA64F-LP64S-NEXT: addi.d $sp, $sp, -16305; LA64F-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill306; LA64F-LP64S-NEXT: lu12i.w $t0, -12307; LA64F-LP64S-NEXT: lu32i.d $t0, 0308; LA64F-LP64S-NEXT: ori $a0, $zero, 1309; LA64F-LP64S-NEXT: ori $a1, $zero, 2310; LA64F-LP64S-NEXT: ori $a2, $zero, 3311; LA64F-LP64S-NEXT: ori $a3, $zero, 4312; LA64F-LP64S-NEXT: ori $a4, $zero, 5313; LA64F-LP64S-NEXT: ori $a5, $zero, 6314; LA64F-LP64S-NEXT: ori $a6, $zero, 7315; LA64F-LP64S-NEXT: ori $a7, $zero, 8316; LA64F-LP64S-NEXT: st.w $t0, $sp, 0317; LA64F-LP64S-NEXT: pcaddu18i $ra, %call36(callee_half_in_fregs)318; LA64F-LP64S-NEXT: jirl $ra, $ra, 0319; LA64F-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload320; LA64F-LP64S-NEXT: addi.d $sp, $sp, 16321; LA64F-LP64S-NEXT: ret322;323; LA64F-LP64D-LABEL: caller_half_in_fregs:324; LA64F-LP64D: # %bb.0:325; LA64F-LP64D-NEXT: addi.d $sp, $sp, -16326; LA64F-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill327; LA64F-LP64D-NEXT: lu12i.w $a0, -12328; LA64F-LP64D-NEXT: movgr2fr.w $fa0, $a0329; LA64F-LP64D-NEXT: ori $a0, $zero, 1330; LA64F-LP64D-NEXT: ori $a1, $zero, 2331; LA64F-LP64D-NEXT: ori $a2, $zero, 3332; LA64F-LP64D-NEXT: ori $a3, $zero, 4333; LA64F-LP64D-NEXT: ori $a4, $zero, 5334; LA64F-LP64D-NEXT: ori $a5, $zero, 6335; LA64F-LP64D-NEXT: ori $a6, $zero, 7336; LA64F-LP64D-NEXT: ori $a7, $zero, 8337; LA64F-LP64D-NEXT: pcaddu18i $ra, %call36(callee_half_in_fregs)338; LA64F-LP64D-NEXT: jirl $ra, $ra, 0339; LA64F-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload340; LA64F-LP64D-NEXT: addi.d $sp, $sp, 16341; LA64F-LP64D-NEXT: ret342;343; LA64D-LP64S-LABEL: caller_half_in_fregs:344; LA64D-LP64S: # %bb.0:345; LA64D-LP64S-NEXT: addi.d $sp, $sp, -16346; LA64D-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill347; LA64D-LP64S-NEXT: lu12i.w $t0, -12348; LA64D-LP64S-NEXT: lu32i.d $t0, 0349; LA64D-LP64S-NEXT: ori $a0, $zero, 1350; LA64D-LP64S-NEXT: ori $a1, $zero, 2351; LA64D-LP64S-NEXT: ori $a2, $zero, 3352; LA64D-LP64S-NEXT: ori $a3, $zero, 4353; LA64D-LP64S-NEXT: ori $a4, $zero, 5354; LA64D-LP64S-NEXT: ori $a5, $zero, 6355; LA64D-LP64S-NEXT: ori $a6, $zero, 7356; LA64D-LP64S-NEXT: ori $a7, $zero, 8357; LA64D-LP64S-NEXT: st.w $t0, $sp, 0358; LA64D-LP64S-NEXT: pcaddu18i $ra, %call36(callee_half_in_fregs)359; LA64D-LP64S-NEXT: jirl $ra, $ra, 0360; LA64D-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload361; LA64D-LP64S-NEXT: addi.d $sp, $sp, 16362; LA64D-LP64S-NEXT: ret363;364; LA64D-LP64D-LABEL: caller_half_in_fregs:365; LA64D-LP64D: # %bb.0:366; LA64D-LP64D-NEXT: addi.d $sp, $sp, -16367; LA64D-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill368; LA64D-LP64D-NEXT: lu12i.w $a0, -12369; LA64D-LP64D-NEXT: movgr2fr.w $fa0, $a0370; LA64D-LP64D-NEXT: ori $a0, $zero, 1371; LA64D-LP64D-NEXT: ori $a1, $zero, 2372; LA64D-LP64D-NEXT: ori $a2, $zero, 3373; LA64D-LP64D-NEXT: ori $a3, $zero, 4374; LA64D-LP64D-NEXT: ori $a4, $zero, 5375; LA64D-LP64D-NEXT: ori $a5, $zero, 6376; LA64D-LP64D-NEXT: ori $a6, $zero, 7377; LA64D-LP64D-NEXT: ori $a7, $zero, 8378; LA64D-LP64D-NEXT: pcaddu18i $ra, %call36(callee_half_in_fregs)379; LA64D-LP64D-NEXT: jirl $ra, $ra, 0380; LA64D-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload381; LA64D-LP64D-NEXT: addi.d $sp, $sp, 16382; LA64D-LP64D-NEXT: ret383 %1 = call i32 @callee_half_in_fregs(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, half 2.0)384 ret i32 %1385}386 387define i32 @callee_half_in_gregs(half %a, half %b, half %c, half %d, half %e, half %f, half %g, half %h, half %i, i32 %j) nounwind {388; LA32S-LABEL: callee_half_in_gregs:389; LA32S: # %bb.0:390; LA32S-NEXT: addi.w $sp, $sp, -16391; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill392; LA32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill393; LA32S-NEXT: ld.w $fp, $sp, 20394; LA32S-NEXT: ld.hu $a0, $sp, 16395; LA32S-NEXT: bl __extendhfsf2396; LA32S-NEXT: bl __fixsfsi397; LA32S-NEXT: add.w $a0, $fp, $a0398; LA32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload399; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload400; LA32S-NEXT: addi.w $sp, $sp, 16401; LA32S-NEXT: ret402;403; LA32F-ILP32S-LABEL: callee_half_in_gregs:404; LA32F-ILP32S: # %bb.0:405; LA32F-ILP32S-NEXT: addi.w $sp, $sp, -16406; LA32F-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill407; LA32F-ILP32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill408; LA32F-ILP32S-NEXT: ld.w $fp, $sp, 20409; LA32F-ILP32S-NEXT: ld.hu $a0, $sp, 16410; LA32F-ILP32S-NEXT: bl __extendhfsf2411; LA32F-ILP32S-NEXT: movgr2fr.w $fa0, $a0412; LA32F-ILP32S-NEXT: ftintrz.w.s $fa0, $fa0413; LA32F-ILP32S-NEXT: movfr2gr.s $a0, $fa0414; LA32F-ILP32S-NEXT: add.w $a0, $fp, $a0415; LA32F-ILP32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload416; LA32F-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload417; LA32F-ILP32S-NEXT: addi.w $sp, $sp, 16418; LA32F-ILP32S-NEXT: ret419;420; LA32F-ILP32D-LABEL: callee_half_in_gregs:421; LA32F-ILP32D: # %bb.0:422; LA32F-ILP32D-NEXT: addi.w $sp, $sp, -16423; LA32F-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill424; LA32F-ILP32D-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill425; LA32F-ILP32D-NEXT: move $fp, $a1426; LA32F-ILP32D-NEXT: movgr2fr.w $fa0, $a0427; LA32F-ILP32D-NEXT: bl __extendhfsf2428; LA32F-ILP32D-NEXT: ftintrz.w.s $fa0, $fa0429; LA32F-ILP32D-NEXT: movfr2gr.s $a0, $fa0430; LA32F-ILP32D-NEXT: add.w $a0, $fp, $a0431; LA32F-ILP32D-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload432; LA32F-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload433; LA32F-ILP32D-NEXT: addi.w $sp, $sp, 16434; LA32F-ILP32D-NEXT: ret435;436; LA32D-ILP32S-LABEL: callee_half_in_gregs:437; LA32D-ILP32S: # %bb.0:438; LA32D-ILP32S-NEXT: addi.w $sp, $sp, -16439; LA32D-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill440; LA32D-ILP32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill441; LA32D-ILP32S-NEXT: ld.w $fp, $sp, 20442; LA32D-ILP32S-NEXT: ld.hu $a0, $sp, 16443; LA32D-ILP32S-NEXT: bl __extendhfsf2444; LA32D-ILP32S-NEXT: movgr2fr.w $fa0, $a0445; LA32D-ILP32S-NEXT: ftintrz.w.s $fa0, $fa0446; LA32D-ILP32S-NEXT: movfr2gr.s $a0, $fa0447; LA32D-ILP32S-NEXT: add.w $a0, $fp, $a0448; LA32D-ILP32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload449; LA32D-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload450; LA32D-ILP32S-NEXT: addi.w $sp, $sp, 16451; LA32D-ILP32S-NEXT: ret452;453; LA32D-ILP32D-LABEL: callee_half_in_gregs:454; LA32D-ILP32D: # %bb.0:455; LA32D-ILP32D-NEXT: addi.w $sp, $sp, -16456; LA32D-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill457; LA32D-ILP32D-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill458; LA32D-ILP32D-NEXT: move $fp, $a1459; LA32D-ILP32D-NEXT: movgr2fr.w $fa0, $a0460; LA32D-ILP32D-NEXT: bl __extendhfsf2461; LA32D-ILP32D-NEXT: ftintrz.w.s $fa0, $fa0462; LA32D-ILP32D-NEXT: movfr2gr.s $a0, $fa0463; LA32D-ILP32D-NEXT: add.w $a0, $fp, $a0464; LA32D-ILP32D-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload465; LA32D-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload466; LA32D-ILP32D-NEXT: addi.w $sp, $sp, 16467; LA32D-ILP32D-NEXT: ret468;469; LA64S-LABEL: callee_half_in_gregs:470; LA64S: # %bb.0:471; LA64S-NEXT: addi.d $sp, $sp, -16472; LA64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill473; LA64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill474; LA64S-NEXT: move $fp, $a1475; LA64S-NEXT: movgr2fr.w $fa0, $a0476; LA64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)477; LA64S-NEXT: jirl $ra, $ra, 0478; LA64S-NEXT: ftintrz.l.s $fa0, $fa0479; LA64S-NEXT: movfr2gr.d $a0, $fa0480; LA64S-NEXT: add.w $a0, $fp, $a0481; LA64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload482; LA64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload483; LA64S-NEXT: addi.d $sp, $sp, 16484; LA64S-NEXT: ret485;486; LA64F-LP64S-LABEL: callee_half_in_gregs:487; LA64F-LP64S: # %bb.0:488; LA64F-LP64S-NEXT: addi.d $sp, $sp, -16489; LA64F-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill490; LA64F-LP64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill491; LA64F-LP64S-NEXT: ld.w $fp, $sp, 24492; LA64F-LP64S-NEXT: ld.hu $a0, $sp, 16493; LA64F-LP64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)494; LA64F-LP64S-NEXT: jirl $ra, $ra, 0495; LA64F-LP64S-NEXT: movgr2fr.w $fa0, $a0496; LA64F-LP64S-NEXT: ftintrz.l.s $fa0, $fa0497; LA64F-LP64S-NEXT: movfr2gr.d $a0, $fa0498; LA64F-LP64S-NEXT: add.w $a0, $fp, $a0499; LA64F-LP64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload500; LA64F-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload501; LA64F-LP64S-NEXT: addi.d $sp, $sp, 16502; LA64F-LP64S-NEXT: ret503;504; LA64F-LP64D-LABEL: callee_half_in_gregs:505; LA64F-LP64D: # %bb.0:506; LA64F-LP64D-NEXT: addi.d $sp, $sp, -16507; LA64F-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill508; LA64F-LP64D-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill509; LA64F-LP64D-NEXT: move $fp, $a1510; LA64F-LP64D-NEXT: movgr2fr.w $fa0, $a0511; LA64F-LP64D-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)512; LA64F-LP64D-NEXT: jirl $ra, $ra, 0513; LA64F-LP64D-NEXT: ftintrz.l.s $fa0, $fa0514; LA64F-LP64D-NEXT: movfr2gr.d $a0, $fa0515; LA64F-LP64D-NEXT: add.w $a0, $fp, $a0516; LA64F-LP64D-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload517; LA64F-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload518; LA64F-LP64D-NEXT: addi.d $sp, $sp, 16519; LA64F-LP64D-NEXT: ret520;521; LA64D-LP64S-LABEL: callee_half_in_gregs:522; LA64D-LP64S: # %bb.0:523; LA64D-LP64S-NEXT: addi.d $sp, $sp, -16524; LA64D-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill525; LA64D-LP64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill526; LA64D-LP64S-NEXT: ld.w $fp, $sp, 24527; LA64D-LP64S-NEXT: ld.hu $a0, $sp, 16528; LA64D-LP64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)529; LA64D-LP64S-NEXT: jirl $ra, $ra, 0530; LA64D-LP64S-NEXT: movgr2fr.w $fa0, $a0531; LA64D-LP64S-NEXT: ftintrz.l.s $fa0, $fa0532; LA64D-LP64S-NEXT: movfr2gr.d $a0, $fa0533; LA64D-LP64S-NEXT: add.w $a0, $fp, $a0534; LA64D-LP64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload535; LA64D-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload536; LA64D-LP64S-NEXT: addi.d $sp, $sp, 16537; LA64D-LP64S-NEXT: ret538;539; LA64D-LP64D-LABEL: callee_half_in_gregs:540; LA64D-LP64D: # %bb.0:541; LA64D-LP64D-NEXT: addi.d $sp, $sp, -16542; LA64D-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill543; LA64D-LP64D-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill544; LA64D-LP64D-NEXT: move $fp, $a1545; LA64D-LP64D-NEXT: movgr2fr.w $fa0, $a0546; LA64D-LP64D-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)547; LA64D-LP64D-NEXT: jirl $ra, $ra, 0548; LA64D-LP64D-NEXT: ftintrz.l.s $fa0, $fa0549; LA64D-LP64D-NEXT: movfr2gr.d $a0, $fa0550; LA64D-LP64D-NEXT: add.w $a0, $fp, $a0551; LA64D-LP64D-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload552; LA64D-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload553; LA64D-LP64D-NEXT: addi.d $sp, $sp, 16554; LA64D-LP64D-NEXT: ret555 %1 = fptosi half %i to i32556 %2 = add i32 %j, %1557 ret i32 %2558}559 560define i32 @caller_half_in_gregs() nounwind {561; LA32S-LABEL: caller_half_in_gregs:562; LA32S: # %bb.0:563; LA32S-NEXT: addi.w $sp, $sp, -16564; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill565; LA32S-NEXT: ori $a0, $zero, 10566; LA32S-NEXT: st.w $a0, $sp, 4567; LA32S-NEXT: lu12i.w $a1, 4568; LA32S-NEXT: ori $t0, $a1, 2176569; LA32S-NEXT: lu12i.w $a0, 3570; LA32S-NEXT: ori $a0, $a0, 3072571; LA32S-NEXT: ori $a2, $a1, 512572; LA32S-NEXT: ori $a3, $a1, 1024573; LA32S-NEXT: ori $a4, $a1, 1280574; LA32S-NEXT: ori $a5, $a1, 1536575; LA32S-NEXT: ori $a6, $a1, 1792576; LA32S-NEXT: ori $a7, $a1, 2048577; LA32S-NEXT: st.w $t0, $sp, 0578; LA32S-NEXT: bl callee_half_in_gregs579; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload580; LA32S-NEXT: addi.w $sp, $sp, 16581; LA32S-NEXT: ret582;583; LA32F-ILP32S-LABEL: caller_half_in_gregs:584; LA32F-ILP32S: # %bb.0:585; LA32F-ILP32S-NEXT: addi.w $sp, $sp, -16586; LA32F-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill587; LA32F-ILP32S-NEXT: ori $a0, $zero, 10588; LA32F-ILP32S-NEXT: st.w $a0, $sp, 4589; LA32F-ILP32S-NEXT: lu12i.w $a1, -12590; LA32F-ILP32S-NEXT: ori $t0, $a1, 2176591; LA32F-ILP32S-NEXT: lu12i.w $a0, -13592; LA32F-ILP32S-NEXT: ori $a0, $a0, 3072593; LA32F-ILP32S-NEXT: ori $a2, $a1, 512594; LA32F-ILP32S-NEXT: ori $a3, $a1, 1024595; LA32F-ILP32S-NEXT: ori $a4, $a1, 1280596; LA32F-ILP32S-NEXT: ori $a5, $a1, 1536597; LA32F-ILP32S-NEXT: ori $a6, $a1, 1792598; LA32F-ILP32S-NEXT: ori $a7, $a1, 2048599; LA32F-ILP32S-NEXT: st.w $t0, $sp, 0600; LA32F-ILP32S-NEXT: bl callee_half_in_gregs601; LA32F-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload602; LA32F-ILP32S-NEXT: addi.w $sp, $sp, 16603; LA32F-ILP32S-NEXT: ret604;605; LA32F-ILP32D-LABEL: caller_half_in_gregs:606; LA32F-ILP32D: # %bb.0:607; LA32F-ILP32D-NEXT: addi.w $sp, $sp, -16608; LA32F-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill609; LA32F-ILP32D-NEXT: lu12i.w $a1, -12610; LA32F-ILP32D-NEXT: movgr2fr.w $fa1, $a1611; LA32F-ILP32D-NEXT: ori $a0, $a1, 2176612; LA32F-ILP32D-NEXT: lu12i.w $a2, -13613; LA32F-ILP32D-NEXT: ori $a2, $a2, 3072614; LA32F-ILP32D-NEXT: movgr2fr.w $fa0, $a2615; LA32F-ILP32D-NEXT: ori $a2, $a1, 512616; LA32F-ILP32D-NEXT: movgr2fr.w $fa2, $a2617; LA32F-ILP32D-NEXT: ori $a2, $a1, 1024618; LA32F-ILP32D-NEXT: movgr2fr.w $fa3, $a2619; LA32F-ILP32D-NEXT: ori $a2, $a1, 1280620; LA32F-ILP32D-NEXT: movgr2fr.w $fa4, $a2621; LA32F-ILP32D-NEXT: ori $a2, $a1, 1536622; LA32F-ILP32D-NEXT: movgr2fr.w $fa5, $a2623; LA32F-ILP32D-NEXT: ori $a2, $a1, 1792624; LA32F-ILP32D-NEXT: movgr2fr.w $fa6, $a2625; LA32F-ILP32D-NEXT: ori $a1, $a1, 2048626; LA32F-ILP32D-NEXT: movgr2fr.w $fa7, $a1627; LA32F-ILP32D-NEXT: ori $a1, $zero, 10628; LA32F-ILP32D-NEXT: bl callee_half_in_gregs629; LA32F-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload630; LA32F-ILP32D-NEXT: addi.w $sp, $sp, 16631; LA32F-ILP32D-NEXT: ret632;633; LA32D-ILP32S-LABEL: caller_half_in_gregs:634; LA32D-ILP32S: # %bb.0:635; LA32D-ILP32S-NEXT: addi.w $sp, $sp, -16636; LA32D-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill637; LA32D-ILP32S-NEXT: ori $a0, $zero, 10638; LA32D-ILP32S-NEXT: st.w $a0, $sp, 4639; LA32D-ILP32S-NEXT: lu12i.w $a1, -12640; LA32D-ILP32S-NEXT: ori $t0, $a1, 2176641; LA32D-ILP32S-NEXT: lu12i.w $a0, -13642; LA32D-ILP32S-NEXT: ori $a0, $a0, 3072643; LA32D-ILP32S-NEXT: ori $a2, $a1, 512644; LA32D-ILP32S-NEXT: ori $a3, $a1, 1024645; LA32D-ILP32S-NEXT: ori $a4, $a1, 1280646; LA32D-ILP32S-NEXT: ori $a5, $a1, 1536647; LA32D-ILP32S-NEXT: ori $a6, $a1, 1792648; LA32D-ILP32S-NEXT: ori $a7, $a1, 2048649; LA32D-ILP32S-NEXT: st.w $t0, $sp, 0650; LA32D-ILP32S-NEXT: bl callee_half_in_gregs651; LA32D-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload652; LA32D-ILP32S-NEXT: addi.w $sp, $sp, 16653; LA32D-ILP32S-NEXT: ret654;655; LA32D-ILP32D-LABEL: caller_half_in_gregs:656; LA32D-ILP32D: # %bb.0:657; LA32D-ILP32D-NEXT: addi.w $sp, $sp, -16658; LA32D-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill659; LA32D-ILP32D-NEXT: lu12i.w $a1, -12660; LA32D-ILP32D-NEXT: movgr2fr.w $fa1, $a1661; LA32D-ILP32D-NEXT: ori $a0, $a1, 2176662; LA32D-ILP32D-NEXT: lu12i.w $a2, -13663; LA32D-ILP32D-NEXT: ori $a2, $a2, 3072664; LA32D-ILP32D-NEXT: movgr2fr.w $fa0, $a2665; LA32D-ILP32D-NEXT: ori $a2, $a1, 512666; LA32D-ILP32D-NEXT: movgr2fr.w $fa2, $a2667; LA32D-ILP32D-NEXT: ori $a2, $a1, 1024668; LA32D-ILP32D-NEXT: movgr2fr.w $fa3, $a2669; LA32D-ILP32D-NEXT: ori $a2, $a1, 1280670; LA32D-ILP32D-NEXT: movgr2fr.w $fa4, $a2671; LA32D-ILP32D-NEXT: ori $a2, $a1, 1536672; LA32D-ILP32D-NEXT: movgr2fr.w $fa5, $a2673; LA32D-ILP32D-NEXT: ori $a2, $a1, 1792674; LA32D-ILP32D-NEXT: movgr2fr.w $fa6, $a2675; LA32D-ILP32D-NEXT: ori $a1, $a1, 2048676; LA32D-ILP32D-NEXT: movgr2fr.w $fa7, $a1677; LA32D-ILP32D-NEXT: ori $a1, $zero, 10678; LA32D-ILP32D-NEXT: bl callee_half_in_gregs679; LA32D-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload680; LA32D-ILP32D-NEXT: addi.w $sp, $sp, 16681; LA32D-ILP32D-NEXT: ret682;683; LA64S-LABEL: caller_half_in_gregs:684; LA64S: # %bb.0:685; LA64S-NEXT: addi.d $sp, $sp, -16686; LA64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill687; LA64S-NEXT: lu12i.w $a1, -12688; LA64S-NEXT: movgr2fr.w $fa1, $a1689; LA64S-NEXT: ori $a0, $a1, 2176690; LA64S-NEXT: lu12i.w $a2, -13691; LA64S-NEXT: ori $a2, $a2, 3072692; LA64S-NEXT: movgr2fr.w $fa0, $a2693; LA64S-NEXT: ori $a2, $a1, 512694; LA64S-NEXT: movgr2fr.w $fa2, $a2695; LA64S-NEXT: ori $a2, $a1, 1024696; LA64S-NEXT: movgr2fr.w $fa3, $a2697; LA64S-NEXT: ori $a2, $a1, 1280698; LA64S-NEXT: movgr2fr.w $fa4, $a2699; LA64S-NEXT: ori $a2, $a1, 1536700; LA64S-NEXT: movgr2fr.w $fa5, $a2701; LA64S-NEXT: ori $a2, $a1, 1792702; LA64S-NEXT: movgr2fr.w $fa6, $a2703; LA64S-NEXT: ori $a1, $a1, 2048704; LA64S-NEXT: movgr2fr.w $fa7, $a1705; LA64S-NEXT: ori $a1, $zero, 10706; LA64S-NEXT: pcaddu18i $ra, %call36(callee_half_in_gregs)707; LA64S-NEXT: jirl $ra, $ra, 0708; LA64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload709; LA64S-NEXT: addi.d $sp, $sp, 16710; LA64S-NEXT: ret711;712; LA64F-LP64S-LABEL: caller_half_in_gregs:713; LA64F-LP64S: # %bb.0:714; LA64F-LP64S-NEXT: addi.d $sp, $sp, -32715; LA64F-LP64S-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill716; LA64F-LP64S-NEXT: ori $a0, $zero, 10717; LA64F-LP64S-NEXT: st.d $a0, $sp, 8718; LA64F-LP64S-NEXT: lu12i.w $a1, -12719; LA64F-LP64S-NEXT: ori $t0, $a1, 2176720; LA64F-LP64S-NEXT: lu32i.d $t0, 0721; LA64F-LP64S-NEXT: lu12i.w $a0, -13722; LA64F-LP64S-NEXT: ori $a0, $a0, 3072723; LA64F-LP64S-NEXT: ori $a2, $a1, 512724; LA64F-LP64S-NEXT: ori $a3, $a1, 1024725; LA64F-LP64S-NEXT: ori $a4, $a1, 1280726; LA64F-LP64S-NEXT: ori $a5, $a1, 1536727; LA64F-LP64S-NEXT: ori $a6, $a1, 1792728; LA64F-LP64S-NEXT: ori $a7, $a1, 2048729; LA64F-LP64S-NEXT: st.w $t0, $sp, 0730; LA64F-LP64S-NEXT: pcaddu18i $ra, %call36(callee_half_in_gregs)731; LA64F-LP64S-NEXT: jirl $ra, $ra, 0732; LA64F-LP64S-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload733; LA64F-LP64S-NEXT: addi.d $sp, $sp, 32734; LA64F-LP64S-NEXT: ret735;736; LA64F-LP64D-LABEL: caller_half_in_gregs:737; LA64F-LP64D: # %bb.0:738; LA64F-LP64D-NEXT: addi.d $sp, $sp, -16739; LA64F-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill740; LA64F-LP64D-NEXT: lu12i.w $a1, -12741; LA64F-LP64D-NEXT: movgr2fr.w $fa1, $a1742; LA64F-LP64D-NEXT: ori $a0, $a1, 2176743; LA64F-LP64D-NEXT: lu12i.w $a2, -13744; LA64F-LP64D-NEXT: ori $a2, $a2, 3072745; LA64F-LP64D-NEXT: movgr2fr.w $fa0, $a2746; LA64F-LP64D-NEXT: ori $a2, $a1, 512747; LA64F-LP64D-NEXT: movgr2fr.w $fa2, $a2748; LA64F-LP64D-NEXT: ori $a2, $a1, 1024749; LA64F-LP64D-NEXT: movgr2fr.w $fa3, $a2750; LA64F-LP64D-NEXT: ori $a2, $a1, 1280751; LA64F-LP64D-NEXT: movgr2fr.w $fa4, $a2752; LA64F-LP64D-NEXT: ori $a2, $a1, 1536753; LA64F-LP64D-NEXT: movgr2fr.w $fa5, $a2754; LA64F-LP64D-NEXT: ori $a2, $a1, 1792755; LA64F-LP64D-NEXT: movgr2fr.w $fa6, $a2756; LA64F-LP64D-NEXT: ori $a1, $a1, 2048757; LA64F-LP64D-NEXT: movgr2fr.w $fa7, $a1758; LA64F-LP64D-NEXT: ori $a1, $zero, 10759; LA64F-LP64D-NEXT: pcaddu18i $ra, %call36(callee_half_in_gregs)760; LA64F-LP64D-NEXT: jirl $ra, $ra, 0761; LA64F-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload762; LA64F-LP64D-NEXT: addi.d $sp, $sp, 16763; LA64F-LP64D-NEXT: ret764;765; LA64D-LP64S-LABEL: caller_half_in_gregs:766; LA64D-LP64S: # %bb.0:767; LA64D-LP64S-NEXT: addi.d $sp, $sp, -32768; LA64D-LP64S-NEXT: st.d $ra, $sp, 24 # 8-byte Folded Spill769; LA64D-LP64S-NEXT: ori $a0, $zero, 10770; LA64D-LP64S-NEXT: st.d $a0, $sp, 8771; LA64D-LP64S-NEXT: lu12i.w $a1, -12772; LA64D-LP64S-NEXT: ori $t0, $a1, 2176773; LA64D-LP64S-NEXT: lu32i.d $t0, 0774; LA64D-LP64S-NEXT: lu12i.w $a0, -13775; LA64D-LP64S-NEXT: ori $a0, $a0, 3072776; LA64D-LP64S-NEXT: ori $a2, $a1, 512777; LA64D-LP64S-NEXT: ori $a3, $a1, 1024778; LA64D-LP64S-NEXT: ori $a4, $a1, 1280779; LA64D-LP64S-NEXT: ori $a5, $a1, 1536780; LA64D-LP64S-NEXT: ori $a6, $a1, 1792781; LA64D-LP64S-NEXT: ori $a7, $a1, 2048782; LA64D-LP64S-NEXT: st.w $t0, $sp, 0783; LA64D-LP64S-NEXT: pcaddu18i $ra, %call36(callee_half_in_gregs)784; LA64D-LP64S-NEXT: jirl $ra, $ra, 0785; LA64D-LP64S-NEXT: ld.d $ra, $sp, 24 # 8-byte Folded Reload786; LA64D-LP64S-NEXT: addi.d $sp, $sp, 32787; LA64D-LP64S-NEXT: ret788;789; LA64D-LP64D-LABEL: caller_half_in_gregs:790; LA64D-LP64D: # %bb.0:791; LA64D-LP64D-NEXT: addi.d $sp, $sp, -16792; LA64D-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill793; LA64D-LP64D-NEXT: lu12i.w $a1, -12794; LA64D-LP64D-NEXT: movgr2fr.w $fa1, $a1795; LA64D-LP64D-NEXT: ori $a0, $a1, 2176796; LA64D-LP64D-NEXT: lu12i.w $a2, -13797; LA64D-LP64D-NEXT: ori $a2, $a2, 3072798; LA64D-LP64D-NEXT: movgr2fr.w $fa0, $a2799; LA64D-LP64D-NEXT: ori $a2, $a1, 512800; LA64D-LP64D-NEXT: movgr2fr.w $fa2, $a2801; LA64D-LP64D-NEXT: ori $a2, $a1, 1024802; LA64D-LP64D-NEXT: movgr2fr.w $fa3, $a2803; LA64D-LP64D-NEXT: ori $a2, $a1, 1280804; LA64D-LP64D-NEXT: movgr2fr.w $fa4, $a2805; LA64D-LP64D-NEXT: ori $a2, $a1, 1536806; LA64D-LP64D-NEXT: movgr2fr.w $fa5, $a2807; LA64D-LP64D-NEXT: ori $a2, $a1, 1792808; LA64D-LP64D-NEXT: movgr2fr.w $fa6, $a2809; LA64D-LP64D-NEXT: ori $a1, $a1, 2048810; LA64D-LP64D-NEXT: movgr2fr.w $fa7, $a1811; LA64D-LP64D-NEXT: ori $a1, $zero, 10812; LA64D-LP64D-NEXT: pcaddu18i $ra, %call36(callee_half_in_gregs)813; LA64D-LP64D-NEXT: jirl $ra, $ra, 0814; LA64D-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload815; LA64D-LP64D-NEXT: addi.d $sp, $sp, 16816; LA64D-LP64D-NEXT: ret817 %1 = call i32 @callee_half_in_gregs(half 1.0, half 2.0, half 3.0, half 4.0, half 5.0, half 6.0, half 7.0, half 8.0, half 9.0, i32 10)818 ret i32 %1819}820 821define i32 @callee_half_on_stack(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h, half %i, half %j, half %k, half %l, half %m, half %n, half %o, half %p, half %q) nounwind {822; LA32S-LABEL: callee_half_on_stack:823; LA32S: # %bb.0:824; LA32S-NEXT: addi.w $sp, $sp, -16825; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill826; LA32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill827; LA32S-NEXT: ld.hu $a0, $sp, 48828; LA32S-NEXT: move $fp, $a7829; LA32S-NEXT: bl __extendhfsf2830; LA32S-NEXT: bl __fixsfsi831; LA32S-NEXT: add.w $a0, $fp, $a0832; LA32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload833; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload834; LA32S-NEXT: addi.w $sp, $sp, 16835; LA32S-NEXT: ret836;837; LA32F-ILP32S-LABEL: callee_half_on_stack:838; LA32F-ILP32S: # %bb.0:839; LA32F-ILP32S-NEXT: addi.w $sp, $sp, -16840; LA32F-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill841; LA32F-ILP32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill842; LA32F-ILP32S-NEXT: ld.hu $a0, $sp, 48843; LA32F-ILP32S-NEXT: move $fp, $a7844; LA32F-ILP32S-NEXT: bl __extendhfsf2845; LA32F-ILP32S-NEXT: movgr2fr.w $fa0, $a0846; LA32F-ILP32S-NEXT: ftintrz.w.s $fa0, $fa0847; LA32F-ILP32S-NEXT: movfr2gr.s $a0, $fa0848; LA32F-ILP32S-NEXT: add.w $a0, $fp, $a0849; LA32F-ILP32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload850; LA32F-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload851; LA32F-ILP32S-NEXT: addi.w $sp, $sp, 16852; LA32F-ILP32S-NEXT: ret853;854; LA32F-ILP32D-LABEL: callee_half_on_stack:855; LA32F-ILP32D: # %bb.0:856; LA32F-ILP32D-NEXT: addi.w $sp, $sp, -16857; LA32F-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill858; LA32F-ILP32D-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill859; LA32F-ILP32D-NEXT: ld.hu $a0, $sp, 16860; LA32F-ILP32D-NEXT: move $fp, $a7861; LA32F-ILP32D-NEXT: movgr2fr.w $fa0, $a0862; LA32F-ILP32D-NEXT: bl __extendhfsf2863; LA32F-ILP32D-NEXT: ftintrz.w.s $fa0, $fa0864; LA32F-ILP32D-NEXT: movfr2gr.s $a0, $fa0865; LA32F-ILP32D-NEXT: add.w $a0, $fp, $a0866; LA32F-ILP32D-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload867; LA32F-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload868; LA32F-ILP32D-NEXT: addi.w $sp, $sp, 16869; LA32F-ILP32D-NEXT: ret870;871; LA32D-ILP32S-LABEL: callee_half_on_stack:872; LA32D-ILP32S: # %bb.0:873; LA32D-ILP32S-NEXT: addi.w $sp, $sp, -16874; LA32D-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill875; LA32D-ILP32S-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill876; LA32D-ILP32S-NEXT: ld.hu $a0, $sp, 48877; LA32D-ILP32S-NEXT: move $fp, $a7878; LA32D-ILP32S-NEXT: bl __extendhfsf2879; LA32D-ILP32S-NEXT: movgr2fr.w $fa0, $a0880; LA32D-ILP32S-NEXT: ftintrz.w.s $fa0, $fa0881; LA32D-ILP32S-NEXT: movfr2gr.s $a0, $fa0882; LA32D-ILP32S-NEXT: add.w $a0, $fp, $a0883; LA32D-ILP32S-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload884; LA32D-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload885; LA32D-ILP32S-NEXT: addi.w $sp, $sp, 16886; LA32D-ILP32S-NEXT: ret887;888; LA32D-ILP32D-LABEL: callee_half_on_stack:889; LA32D-ILP32D: # %bb.0:890; LA32D-ILP32D-NEXT: addi.w $sp, $sp, -16891; LA32D-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill892; LA32D-ILP32D-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill893; LA32D-ILP32D-NEXT: ld.hu $a0, $sp, 16894; LA32D-ILP32D-NEXT: move $fp, $a7895; LA32D-ILP32D-NEXT: movgr2fr.w $fa0, $a0896; LA32D-ILP32D-NEXT: bl __extendhfsf2897; LA32D-ILP32D-NEXT: ftintrz.w.s $fa0, $fa0898; LA32D-ILP32D-NEXT: movfr2gr.s $a0, $fa0899; LA32D-ILP32D-NEXT: add.w $a0, $fp, $a0900; LA32D-ILP32D-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload901; LA32D-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload902; LA32D-ILP32D-NEXT: addi.w $sp, $sp, 16903; LA32D-ILP32D-NEXT: ret904;905; LA64S-LABEL: callee_half_on_stack:906; LA64S: # %bb.0:907; LA64S-NEXT: addi.d $sp, $sp, -16908; LA64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill909; LA64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill910; LA64S-NEXT: ld.hu $a0, $sp, 16911; LA64S-NEXT: move $fp, $a7912; LA64S-NEXT: movgr2fr.w $fa0, $a0913; LA64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)914; LA64S-NEXT: jirl $ra, $ra, 0915; LA64S-NEXT: ftintrz.l.s $fa0, $fa0916; LA64S-NEXT: movfr2gr.d $a0, $fa0917; LA64S-NEXT: add.w $a0, $fp, $a0918; LA64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload919; LA64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload920; LA64S-NEXT: addi.d $sp, $sp, 16921; LA64S-NEXT: ret922;923; LA64F-LP64S-LABEL: callee_half_on_stack:924; LA64F-LP64S: # %bb.0:925; LA64F-LP64S-NEXT: addi.d $sp, $sp, -16926; LA64F-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill927; LA64F-LP64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill928; LA64F-LP64S-NEXT: ld.hu $a0, $sp, 80929; LA64F-LP64S-NEXT: move $fp, $a7930; LA64F-LP64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)931; LA64F-LP64S-NEXT: jirl $ra, $ra, 0932; LA64F-LP64S-NEXT: movgr2fr.w $fa0, $a0933; LA64F-LP64S-NEXT: ftintrz.l.s $fa0, $fa0934; LA64F-LP64S-NEXT: movfr2gr.d $a0, $fa0935; LA64F-LP64S-NEXT: add.w $a0, $fp, $a0936; LA64F-LP64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload937; LA64F-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload938; LA64F-LP64S-NEXT: addi.d $sp, $sp, 16939; LA64F-LP64S-NEXT: ret940;941; LA64F-LP64D-LABEL: callee_half_on_stack:942; LA64F-LP64D: # %bb.0:943; LA64F-LP64D-NEXT: addi.d $sp, $sp, -16944; LA64F-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill945; LA64F-LP64D-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill946; LA64F-LP64D-NEXT: ld.hu $a0, $sp, 16947; LA64F-LP64D-NEXT: move $fp, $a7948; LA64F-LP64D-NEXT: movgr2fr.w $fa0, $a0949; LA64F-LP64D-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)950; LA64F-LP64D-NEXT: jirl $ra, $ra, 0951; LA64F-LP64D-NEXT: ftintrz.l.s $fa0, $fa0952; LA64F-LP64D-NEXT: movfr2gr.d $a0, $fa0953; LA64F-LP64D-NEXT: add.w $a0, $fp, $a0954; LA64F-LP64D-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload955; LA64F-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload956; LA64F-LP64D-NEXT: addi.d $sp, $sp, 16957; LA64F-LP64D-NEXT: ret958;959; LA64D-LP64S-LABEL: callee_half_on_stack:960; LA64D-LP64S: # %bb.0:961; LA64D-LP64S-NEXT: addi.d $sp, $sp, -16962; LA64D-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill963; LA64D-LP64S-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill964; LA64D-LP64S-NEXT: ld.hu $a0, $sp, 80965; LA64D-LP64S-NEXT: move $fp, $a7966; LA64D-LP64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)967; LA64D-LP64S-NEXT: jirl $ra, $ra, 0968; LA64D-LP64S-NEXT: movgr2fr.w $fa0, $a0969; LA64D-LP64S-NEXT: ftintrz.l.s $fa0, $fa0970; LA64D-LP64S-NEXT: movfr2gr.d $a0, $fa0971; LA64D-LP64S-NEXT: add.w $a0, $fp, $a0972; LA64D-LP64S-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload973; LA64D-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload974; LA64D-LP64S-NEXT: addi.d $sp, $sp, 16975; LA64D-LP64S-NEXT: ret976;977; LA64D-LP64D-LABEL: callee_half_on_stack:978; LA64D-LP64D: # %bb.0:979; LA64D-LP64D-NEXT: addi.d $sp, $sp, -16980; LA64D-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill981; LA64D-LP64D-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill982; LA64D-LP64D-NEXT: ld.hu $a0, $sp, 16983; LA64D-LP64D-NEXT: move $fp, $a7984; LA64D-LP64D-NEXT: movgr2fr.w $fa0, $a0985; LA64D-LP64D-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)986; LA64D-LP64D-NEXT: jirl $ra, $ra, 0987; LA64D-LP64D-NEXT: ftintrz.l.s $fa0, $fa0988; LA64D-LP64D-NEXT: movfr2gr.d $a0, $fa0989; LA64D-LP64D-NEXT: add.w $a0, $fp, $a0990; LA64D-LP64D-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload991; LA64D-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload992; LA64D-LP64D-NEXT: addi.d $sp, $sp, 16993; LA64D-LP64D-NEXT: ret994 %1 = fptosi half %q to i32995 %2 = add i32 %h, %1996 ret i32 %2997}998 999define i32 @caller_half_on_stack() nounwind {1000; LA32S-LABEL: caller_half_on_stack:1001; LA32S: # %bb.0:1002; LA32S-NEXT: addi.w $sp, $sp, -481003; LA32S-NEXT: st.w $ra, $sp, 44 # 4-byte Folded Spill1004; LA32S-NEXT: lu12i.w $a0, 41005; LA32S-NEXT: ori $a1, $a0, 32001006; LA32S-NEXT: st.w $a1, $sp, 321007; LA32S-NEXT: ori $a1, $a0, 31361008; LA32S-NEXT: st.w $a1, $sp, 281009; LA32S-NEXT: ori $a1, $a0, 30721010; LA32S-NEXT: st.w $a1, $sp, 241011; LA32S-NEXT: ori $a1, $a0, 29441012; LA32S-NEXT: st.w $a1, $sp, 201013; LA32S-NEXT: ori $a1, $a0, 28161014; LA32S-NEXT: st.w $a1, $sp, 161015; LA32S-NEXT: ori $a1, $a0, 26881016; LA32S-NEXT: st.w $a1, $sp, 121017; LA32S-NEXT: ori $a1, $a0, 25601018; LA32S-NEXT: st.w $a1, $sp, 81019; LA32S-NEXT: ori $a1, $a0, 24321020; LA32S-NEXT: st.w $a1, $sp, 41021; LA32S-NEXT: ori $t0, $a0, 23041022; LA32S-NEXT: ori $a0, $zero, 11023; LA32S-NEXT: ori $a1, $zero, 21024; LA32S-NEXT: ori $a2, $zero, 31025; LA32S-NEXT: ori $a3, $zero, 41026; LA32S-NEXT: ori $a4, $zero, 51027; LA32S-NEXT: ori $a5, $zero, 61028; LA32S-NEXT: ori $a6, $zero, 71029; LA32S-NEXT: ori $a7, $zero, 81030; LA32S-NEXT: st.w $t0, $sp, 01031; LA32S-NEXT: bl callee_half_on_stack1032; LA32S-NEXT: ld.w $ra, $sp, 44 # 4-byte Folded Reload1033; LA32S-NEXT: addi.w $sp, $sp, 481034; LA32S-NEXT: ret1035;1036; LA32F-ILP32S-LABEL: caller_half_on_stack:1037; LA32F-ILP32S: # %bb.0:1038; LA32F-ILP32S-NEXT: addi.w $sp, $sp, -481039; LA32F-ILP32S-NEXT: st.w $ra, $sp, 44 # 4-byte Folded Spill1040; LA32F-ILP32S-NEXT: lu12i.w $a0, -121041; LA32F-ILP32S-NEXT: ori $a1, $a0, 32001042; LA32F-ILP32S-NEXT: st.w $a1, $sp, 321043; LA32F-ILP32S-NEXT: ori $a1, $a0, 31361044; LA32F-ILP32S-NEXT: st.w $a1, $sp, 281045; LA32F-ILP32S-NEXT: ori $a1, $a0, 30721046; LA32F-ILP32S-NEXT: st.w $a1, $sp, 241047; LA32F-ILP32S-NEXT: ori $a1, $a0, 29441048; LA32F-ILP32S-NEXT: st.w $a1, $sp, 201049; LA32F-ILP32S-NEXT: ori $a1, $a0, 28161050; LA32F-ILP32S-NEXT: st.w $a1, $sp, 161051; LA32F-ILP32S-NEXT: ori $a1, $a0, 26881052; LA32F-ILP32S-NEXT: st.w $a1, $sp, 121053; LA32F-ILP32S-NEXT: ori $a1, $a0, 25601054; LA32F-ILP32S-NEXT: st.w $a1, $sp, 81055; LA32F-ILP32S-NEXT: ori $a1, $a0, 24321056; LA32F-ILP32S-NEXT: st.w $a1, $sp, 41057; LA32F-ILP32S-NEXT: ori $t0, $a0, 23041058; LA32F-ILP32S-NEXT: ori $a0, $zero, 11059; LA32F-ILP32S-NEXT: ori $a1, $zero, 21060; LA32F-ILP32S-NEXT: ori $a2, $zero, 31061; LA32F-ILP32S-NEXT: ori $a3, $zero, 41062; LA32F-ILP32S-NEXT: ori $a4, $zero, 51063; LA32F-ILP32S-NEXT: ori $a5, $zero, 61064; LA32F-ILP32S-NEXT: ori $a6, $zero, 71065; LA32F-ILP32S-NEXT: ori $a7, $zero, 81066; LA32F-ILP32S-NEXT: st.w $t0, $sp, 01067; LA32F-ILP32S-NEXT: bl callee_half_on_stack1068; LA32F-ILP32S-NEXT: ld.w $ra, $sp, 44 # 4-byte Folded Reload1069; LA32F-ILP32S-NEXT: addi.w $sp, $sp, 481070; LA32F-ILP32S-NEXT: ret1071;1072; LA32F-ILP32D-LABEL: caller_half_on_stack:1073; LA32F-ILP32D: # %bb.0:1074; LA32F-ILP32D-NEXT: addi.w $sp, $sp, -161075; LA32F-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1076; LA32F-ILP32D-NEXT: lu12i.w $a0, -121077; LA32F-ILP32D-NEXT: ori $t0, $a0, 32001078; LA32F-ILP32D-NEXT: ori $a1, $a0, 23041079; LA32F-ILP32D-NEXT: movgr2fr.w $fa0, $a11080; LA32F-ILP32D-NEXT: ori $a1, $a0, 24321081; LA32F-ILP32D-NEXT: movgr2fr.w $fa1, $a11082; LA32F-ILP32D-NEXT: ori $a1, $a0, 25601083; LA32F-ILP32D-NEXT: movgr2fr.w $fa2, $a11084; LA32F-ILP32D-NEXT: ori $a1, $a0, 26881085; LA32F-ILP32D-NEXT: movgr2fr.w $fa3, $a11086; LA32F-ILP32D-NEXT: ori $a1, $a0, 28161087; LA32F-ILP32D-NEXT: movgr2fr.w $fa4, $a11088; LA32F-ILP32D-NEXT: ori $a1, $a0, 29441089; LA32F-ILP32D-NEXT: movgr2fr.w $fa5, $a11090; LA32F-ILP32D-NEXT: ori $a1, $a0, 30721091; LA32F-ILP32D-NEXT: movgr2fr.w $fa6, $a11092; LA32F-ILP32D-NEXT: ori $a0, $a0, 31361093; LA32F-ILP32D-NEXT: movgr2fr.w $fa7, $a01094; LA32F-ILP32D-NEXT: ori $a0, $zero, 11095; LA32F-ILP32D-NEXT: ori $a1, $zero, 21096; LA32F-ILP32D-NEXT: ori $a2, $zero, 31097; LA32F-ILP32D-NEXT: ori $a3, $zero, 41098; LA32F-ILP32D-NEXT: ori $a4, $zero, 51099; LA32F-ILP32D-NEXT: ori $a5, $zero, 61100; LA32F-ILP32D-NEXT: ori $a6, $zero, 71101; LA32F-ILP32D-NEXT: ori $a7, $zero, 81102; LA32F-ILP32D-NEXT: st.w $t0, $sp, 01103; LA32F-ILP32D-NEXT: bl callee_half_on_stack1104; LA32F-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1105; LA32F-ILP32D-NEXT: addi.w $sp, $sp, 161106; LA32F-ILP32D-NEXT: ret1107;1108; LA32D-ILP32S-LABEL: caller_half_on_stack:1109; LA32D-ILP32S: # %bb.0:1110; LA32D-ILP32S-NEXT: addi.w $sp, $sp, -481111; LA32D-ILP32S-NEXT: st.w $ra, $sp, 44 # 4-byte Folded Spill1112; LA32D-ILP32S-NEXT: lu12i.w $a0, -121113; LA32D-ILP32S-NEXT: ori $a1, $a0, 32001114; LA32D-ILP32S-NEXT: st.w $a1, $sp, 321115; LA32D-ILP32S-NEXT: ori $a1, $a0, 31361116; LA32D-ILP32S-NEXT: st.w $a1, $sp, 281117; LA32D-ILP32S-NEXT: ori $a1, $a0, 30721118; LA32D-ILP32S-NEXT: st.w $a1, $sp, 241119; LA32D-ILP32S-NEXT: ori $a1, $a0, 29441120; LA32D-ILP32S-NEXT: st.w $a1, $sp, 201121; LA32D-ILP32S-NEXT: ori $a1, $a0, 28161122; LA32D-ILP32S-NEXT: st.w $a1, $sp, 161123; LA32D-ILP32S-NEXT: ori $a1, $a0, 26881124; LA32D-ILP32S-NEXT: st.w $a1, $sp, 121125; LA32D-ILP32S-NEXT: ori $a1, $a0, 25601126; LA32D-ILP32S-NEXT: st.w $a1, $sp, 81127; LA32D-ILP32S-NEXT: ori $a1, $a0, 24321128; LA32D-ILP32S-NEXT: st.w $a1, $sp, 41129; LA32D-ILP32S-NEXT: ori $t0, $a0, 23041130; LA32D-ILP32S-NEXT: ori $a0, $zero, 11131; LA32D-ILP32S-NEXT: ori $a1, $zero, 21132; LA32D-ILP32S-NEXT: ori $a2, $zero, 31133; LA32D-ILP32S-NEXT: ori $a3, $zero, 41134; LA32D-ILP32S-NEXT: ori $a4, $zero, 51135; LA32D-ILP32S-NEXT: ori $a5, $zero, 61136; LA32D-ILP32S-NEXT: ori $a6, $zero, 71137; LA32D-ILP32S-NEXT: ori $a7, $zero, 81138; LA32D-ILP32S-NEXT: st.w $t0, $sp, 01139; LA32D-ILP32S-NEXT: bl callee_half_on_stack1140; LA32D-ILP32S-NEXT: ld.w $ra, $sp, 44 # 4-byte Folded Reload1141; LA32D-ILP32S-NEXT: addi.w $sp, $sp, 481142; LA32D-ILP32S-NEXT: ret1143;1144; LA32D-ILP32D-LABEL: caller_half_on_stack:1145; LA32D-ILP32D: # %bb.0:1146; LA32D-ILP32D-NEXT: addi.w $sp, $sp, -161147; LA32D-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1148; LA32D-ILP32D-NEXT: lu12i.w $a0, -121149; LA32D-ILP32D-NEXT: ori $t0, $a0, 32001150; LA32D-ILP32D-NEXT: ori $a1, $a0, 23041151; LA32D-ILP32D-NEXT: movgr2fr.w $fa0, $a11152; LA32D-ILP32D-NEXT: ori $a1, $a0, 24321153; LA32D-ILP32D-NEXT: movgr2fr.w $fa1, $a11154; LA32D-ILP32D-NEXT: ori $a1, $a0, 25601155; LA32D-ILP32D-NEXT: movgr2fr.w $fa2, $a11156; LA32D-ILP32D-NEXT: ori $a1, $a0, 26881157; LA32D-ILP32D-NEXT: movgr2fr.w $fa3, $a11158; LA32D-ILP32D-NEXT: ori $a1, $a0, 28161159; LA32D-ILP32D-NEXT: movgr2fr.w $fa4, $a11160; LA32D-ILP32D-NEXT: ori $a1, $a0, 29441161; LA32D-ILP32D-NEXT: movgr2fr.w $fa5, $a11162; LA32D-ILP32D-NEXT: ori $a1, $a0, 30721163; LA32D-ILP32D-NEXT: movgr2fr.w $fa6, $a11164; LA32D-ILP32D-NEXT: ori $a0, $a0, 31361165; LA32D-ILP32D-NEXT: movgr2fr.w $fa7, $a01166; LA32D-ILP32D-NEXT: ori $a0, $zero, 11167; LA32D-ILP32D-NEXT: ori $a1, $zero, 21168; LA32D-ILP32D-NEXT: ori $a2, $zero, 31169; LA32D-ILP32D-NEXT: ori $a3, $zero, 41170; LA32D-ILP32D-NEXT: ori $a4, $zero, 51171; LA32D-ILP32D-NEXT: ori $a5, $zero, 61172; LA32D-ILP32D-NEXT: ori $a6, $zero, 71173; LA32D-ILP32D-NEXT: ori $a7, $zero, 81174; LA32D-ILP32D-NEXT: st.w $t0, $sp, 01175; LA32D-ILP32D-NEXT: bl callee_half_on_stack1176; LA32D-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1177; LA32D-ILP32D-NEXT: addi.w $sp, $sp, 161178; LA32D-ILP32D-NEXT: ret1179;1180; LA64S-LABEL: caller_half_on_stack:1181; LA64S: # %bb.0:1182; LA64S-NEXT: addi.d $sp, $sp, -161183; LA64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1184; LA64S-NEXT: lu12i.w $a0, -121185; LA64S-NEXT: ori $t0, $a0, 32001186; LA64S-NEXT: lu32i.d $t0, 01187; LA64S-NEXT: ori $a1, $a0, 23041188; LA64S-NEXT: movgr2fr.w $fa0, $a11189; LA64S-NEXT: ori $a1, $a0, 24321190; LA64S-NEXT: movgr2fr.w $fa1, $a11191; LA64S-NEXT: ori $a1, $a0, 25601192; LA64S-NEXT: movgr2fr.w $fa2, $a11193; LA64S-NEXT: ori $a1, $a0, 26881194; LA64S-NEXT: movgr2fr.w $fa3, $a11195; LA64S-NEXT: ori $a1, $a0, 28161196; LA64S-NEXT: movgr2fr.w $fa4, $a11197; LA64S-NEXT: ori $a1, $a0, 29441198; LA64S-NEXT: movgr2fr.w $fa5, $a11199; LA64S-NEXT: ori $a1, $a0, 30721200; LA64S-NEXT: movgr2fr.w $fa6, $a11201; LA64S-NEXT: ori $a0, $a0, 31361202; LA64S-NEXT: movgr2fr.w $fa7, $a01203; LA64S-NEXT: ori $a0, $zero, 11204; LA64S-NEXT: ori $a1, $zero, 21205; LA64S-NEXT: ori $a2, $zero, 31206; LA64S-NEXT: ori $a3, $zero, 41207; LA64S-NEXT: ori $a4, $zero, 51208; LA64S-NEXT: ori $a5, $zero, 61209; LA64S-NEXT: ori $a6, $zero, 71210; LA64S-NEXT: ori $a7, $zero, 81211; LA64S-NEXT: st.w $t0, $sp, 01212; LA64S-NEXT: pcaddu18i $ra, %call36(callee_half_on_stack)1213; LA64S-NEXT: jirl $ra, $ra, 01214; LA64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1215; LA64S-NEXT: addi.d $sp, $sp, 161216; LA64S-NEXT: ret1217;1218; LA64F-LP64S-LABEL: caller_half_on_stack:1219; LA64F-LP64S: # %bb.0:1220; LA64F-LP64S-NEXT: addi.d $sp, $sp, -961221; LA64F-LP64S-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill1222; LA64F-LP64S-NEXT: lu12i.w $a0, -121223; LA64F-LP64S-NEXT: ori $a1, $a0, 32001224; LA64F-LP64S-NEXT: lu32i.d $a1, 01225; LA64F-LP64S-NEXT: st.w $a1, $sp, 641226; LA64F-LP64S-NEXT: ori $a1, $a0, 31361227; LA64F-LP64S-NEXT: lu32i.d $a1, 01228; LA64F-LP64S-NEXT: st.w $a1, $sp, 561229; LA64F-LP64S-NEXT: ori $a1, $a0, 30721230; LA64F-LP64S-NEXT: lu32i.d $a1, 01231; LA64F-LP64S-NEXT: st.w $a1, $sp, 481232; LA64F-LP64S-NEXT: ori $a1, $a0, 29441233; LA64F-LP64S-NEXT: lu32i.d $a1, 01234; LA64F-LP64S-NEXT: st.w $a1, $sp, 401235; LA64F-LP64S-NEXT: ori $a1, $a0, 28161236; LA64F-LP64S-NEXT: lu32i.d $a1, 01237; LA64F-LP64S-NEXT: st.w $a1, $sp, 321238; LA64F-LP64S-NEXT: ori $a1, $a0, 26881239; LA64F-LP64S-NEXT: lu32i.d $a1, 01240; LA64F-LP64S-NEXT: st.w $a1, $sp, 241241; LA64F-LP64S-NEXT: ori $a1, $a0, 25601242; LA64F-LP64S-NEXT: lu32i.d $a1, 01243; LA64F-LP64S-NEXT: st.w $a1, $sp, 161244; LA64F-LP64S-NEXT: ori $a1, $a0, 24321245; LA64F-LP64S-NEXT: lu32i.d $a1, 01246; LA64F-LP64S-NEXT: st.w $a1, $sp, 81247; LA64F-LP64S-NEXT: ori $t0, $a0, 23041248; LA64F-LP64S-NEXT: lu32i.d $t0, 01249; LA64F-LP64S-NEXT: ori $a0, $zero, 11250; LA64F-LP64S-NEXT: ori $a1, $zero, 21251; LA64F-LP64S-NEXT: ori $a2, $zero, 31252; LA64F-LP64S-NEXT: ori $a3, $zero, 41253; LA64F-LP64S-NEXT: ori $a4, $zero, 51254; LA64F-LP64S-NEXT: ori $a5, $zero, 61255; LA64F-LP64S-NEXT: ori $a6, $zero, 71256; LA64F-LP64S-NEXT: ori $a7, $zero, 81257; LA64F-LP64S-NEXT: st.w $t0, $sp, 01258; LA64F-LP64S-NEXT: pcaddu18i $ra, %call36(callee_half_on_stack)1259; LA64F-LP64S-NEXT: jirl $ra, $ra, 01260; LA64F-LP64S-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload1261; LA64F-LP64S-NEXT: addi.d $sp, $sp, 961262; LA64F-LP64S-NEXT: ret1263;1264; LA64F-LP64D-LABEL: caller_half_on_stack:1265; LA64F-LP64D: # %bb.0:1266; LA64F-LP64D-NEXT: addi.d $sp, $sp, -161267; LA64F-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1268; LA64F-LP64D-NEXT: lu12i.w $a0, -121269; LA64F-LP64D-NEXT: ori $t0, $a0, 32001270; LA64F-LP64D-NEXT: lu32i.d $t0, 01271; LA64F-LP64D-NEXT: ori $a1, $a0, 23041272; LA64F-LP64D-NEXT: movgr2fr.w $fa0, $a11273; LA64F-LP64D-NEXT: ori $a1, $a0, 24321274; LA64F-LP64D-NEXT: movgr2fr.w $fa1, $a11275; LA64F-LP64D-NEXT: ori $a1, $a0, 25601276; LA64F-LP64D-NEXT: movgr2fr.w $fa2, $a11277; LA64F-LP64D-NEXT: ori $a1, $a0, 26881278; LA64F-LP64D-NEXT: movgr2fr.w $fa3, $a11279; LA64F-LP64D-NEXT: ori $a1, $a0, 28161280; LA64F-LP64D-NEXT: movgr2fr.w $fa4, $a11281; LA64F-LP64D-NEXT: ori $a1, $a0, 29441282; LA64F-LP64D-NEXT: movgr2fr.w $fa5, $a11283; LA64F-LP64D-NEXT: ori $a1, $a0, 30721284; LA64F-LP64D-NEXT: movgr2fr.w $fa6, $a11285; LA64F-LP64D-NEXT: ori $a0, $a0, 31361286; LA64F-LP64D-NEXT: movgr2fr.w $fa7, $a01287; LA64F-LP64D-NEXT: ori $a0, $zero, 11288; LA64F-LP64D-NEXT: ori $a1, $zero, 21289; LA64F-LP64D-NEXT: ori $a2, $zero, 31290; LA64F-LP64D-NEXT: ori $a3, $zero, 41291; LA64F-LP64D-NEXT: ori $a4, $zero, 51292; LA64F-LP64D-NEXT: ori $a5, $zero, 61293; LA64F-LP64D-NEXT: ori $a6, $zero, 71294; LA64F-LP64D-NEXT: ori $a7, $zero, 81295; LA64F-LP64D-NEXT: st.w $t0, $sp, 01296; LA64F-LP64D-NEXT: pcaddu18i $ra, %call36(callee_half_on_stack)1297; LA64F-LP64D-NEXT: jirl $ra, $ra, 01298; LA64F-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1299; LA64F-LP64D-NEXT: addi.d $sp, $sp, 161300; LA64F-LP64D-NEXT: ret1301;1302; LA64D-LP64S-LABEL: caller_half_on_stack:1303; LA64D-LP64S: # %bb.0:1304; LA64D-LP64S-NEXT: addi.d $sp, $sp, -961305; LA64D-LP64S-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill1306; LA64D-LP64S-NEXT: lu12i.w $a0, -121307; LA64D-LP64S-NEXT: ori $a1, $a0, 32001308; LA64D-LP64S-NEXT: lu32i.d $a1, 01309; LA64D-LP64S-NEXT: st.w $a1, $sp, 641310; LA64D-LP64S-NEXT: ori $a1, $a0, 31361311; LA64D-LP64S-NEXT: lu32i.d $a1, 01312; LA64D-LP64S-NEXT: st.w $a1, $sp, 561313; LA64D-LP64S-NEXT: ori $a1, $a0, 30721314; LA64D-LP64S-NEXT: lu32i.d $a1, 01315; LA64D-LP64S-NEXT: st.w $a1, $sp, 481316; LA64D-LP64S-NEXT: ori $a1, $a0, 29441317; LA64D-LP64S-NEXT: lu32i.d $a1, 01318; LA64D-LP64S-NEXT: st.w $a1, $sp, 401319; LA64D-LP64S-NEXT: ori $a1, $a0, 28161320; LA64D-LP64S-NEXT: lu32i.d $a1, 01321; LA64D-LP64S-NEXT: st.w $a1, $sp, 321322; LA64D-LP64S-NEXT: ori $a1, $a0, 26881323; LA64D-LP64S-NEXT: lu32i.d $a1, 01324; LA64D-LP64S-NEXT: st.w $a1, $sp, 241325; LA64D-LP64S-NEXT: ori $a1, $a0, 25601326; LA64D-LP64S-NEXT: lu32i.d $a1, 01327; LA64D-LP64S-NEXT: st.w $a1, $sp, 161328; LA64D-LP64S-NEXT: ori $a1, $a0, 24321329; LA64D-LP64S-NEXT: lu32i.d $a1, 01330; LA64D-LP64S-NEXT: st.w $a1, $sp, 81331; LA64D-LP64S-NEXT: ori $t0, $a0, 23041332; LA64D-LP64S-NEXT: lu32i.d $t0, 01333; LA64D-LP64S-NEXT: ori $a0, $zero, 11334; LA64D-LP64S-NEXT: ori $a1, $zero, 21335; LA64D-LP64S-NEXT: ori $a2, $zero, 31336; LA64D-LP64S-NEXT: ori $a3, $zero, 41337; LA64D-LP64S-NEXT: ori $a4, $zero, 51338; LA64D-LP64S-NEXT: ori $a5, $zero, 61339; LA64D-LP64S-NEXT: ori $a6, $zero, 71340; LA64D-LP64S-NEXT: ori $a7, $zero, 81341; LA64D-LP64S-NEXT: st.w $t0, $sp, 01342; LA64D-LP64S-NEXT: pcaddu18i $ra, %call36(callee_half_on_stack)1343; LA64D-LP64S-NEXT: jirl $ra, $ra, 01344; LA64D-LP64S-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload1345; LA64D-LP64S-NEXT: addi.d $sp, $sp, 961346; LA64D-LP64S-NEXT: ret1347;1348; LA64D-LP64D-LABEL: caller_half_on_stack:1349; LA64D-LP64D: # %bb.0:1350; LA64D-LP64D-NEXT: addi.d $sp, $sp, -161351; LA64D-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1352; LA64D-LP64D-NEXT: lu12i.w $a0, -121353; LA64D-LP64D-NEXT: ori $t0, $a0, 32001354; LA64D-LP64D-NEXT: lu32i.d $t0, 01355; LA64D-LP64D-NEXT: ori $a1, $a0, 23041356; LA64D-LP64D-NEXT: movgr2fr.w $fa0, $a11357; LA64D-LP64D-NEXT: ori $a1, $a0, 24321358; LA64D-LP64D-NEXT: movgr2fr.w $fa1, $a11359; LA64D-LP64D-NEXT: ori $a1, $a0, 25601360; LA64D-LP64D-NEXT: movgr2fr.w $fa2, $a11361; LA64D-LP64D-NEXT: ori $a1, $a0, 26881362; LA64D-LP64D-NEXT: movgr2fr.w $fa3, $a11363; LA64D-LP64D-NEXT: ori $a1, $a0, 28161364; LA64D-LP64D-NEXT: movgr2fr.w $fa4, $a11365; LA64D-LP64D-NEXT: ori $a1, $a0, 29441366; LA64D-LP64D-NEXT: movgr2fr.w $fa5, $a11367; LA64D-LP64D-NEXT: ori $a1, $a0, 30721368; LA64D-LP64D-NEXT: movgr2fr.w $fa6, $a11369; LA64D-LP64D-NEXT: ori $a0, $a0, 31361370; LA64D-LP64D-NEXT: movgr2fr.w $fa7, $a01371; LA64D-LP64D-NEXT: ori $a0, $zero, 11372; LA64D-LP64D-NEXT: ori $a1, $zero, 21373; LA64D-LP64D-NEXT: ori $a2, $zero, 31374; LA64D-LP64D-NEXT: ori $a3, $zero, 41375; LA64D-LP64D-NEXT: ori $a4, $zero, 51376; LA64D-LP64D-NEXT: ori $a5, $zero, 61377; LA64D-LP64D-NEXT: ori $a6, $zero, 71378; LA64D-LP64D-NEXT: ori $a7, $zero, 81379; LA64D-LP64D-NEXT: st.w $t0, $sp, 01380; LA64D-LP64D-NEXT: pcaddu18i $ra, %call36(callee_half_on_stack)1381; LA64D-LP64D-NEXT: jirl $ra, $ra, 01382; LA64D-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1383; LA64D-LP64D-NEXT: addi.d $sp, $sp, 161384; LA64D-LP64D-NEXT: ret1385 %1 = call i32 @callee_half_on_stack(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, half 10.0, half 11.0, half 12.0, half 13.0, half 14.0, half 15.0, half 16.0, half 17.0, half 18.0)1386 ret i32 %11387}1388 1389define half @callee_half_ret() nounwind {1390; LA32S-LABEL: callee_half_ret:1391; LA32S: # %bb.0:1392; LA32S-NEXT: lu12i.w $a0, 31393; LA32S-NEXT: ori $a0, $a0, 30721394; LA32S-NEXT: ret1395;1396; LA32F-ILP32S-LABEL: callee_half_ret:1397; LA32F-ILP32S: # %bb.0:1398; LA32F-ILP32S-NEXT: lu12i.w $a0, -131399; LA32F-ILP32S-NEXT: ori $a0, $a0, 30721400; LA32F-ILP32S-NEXT: ret1401;1402; LA32F-ILP32D-LABEL: callee_half_ret:1403; LA32F-ILP32D: # %bb.0:1404; LA32F-ILP32D-NEXT: lu12i.w $a0, -131405; LA32F-ILP32D-NEXT: ori $a0, $a0, 30721406; LA32F-ILP32D-NEXT: movgr2fr.w $fa0, $a01407; LA32F-ILP32D-NEXT: ret1408;1409; LA32D-ILP32S-LABEL: callee_half_ret:1410; LA32D-ILP32S: # %bb.0:1411; LA32D-ILP32S-NEXT: lu12i.w $a0, -131412; LA32D-ILP32S-NEXT: ori $a0, $a0, 30721413; LA32D-ILP32S-NEXT: ret1414;1415; LA32D-ILP32D-LABEL: callee_half_ret:1416; LA32D-ILP32D: # %bb.0:1417; LA32D-ILP32D-NEXT: lu12i.w $a0, -131418; LA32D-ILP32D-NEXT: ori $a0, $a0, 30721419; LA32D-ILP32D-NEXT: movgr2fr.w $fa0, $a01420; LA32D-ILP32D-NEXT: ret1421;1422; LA64S-LABEL: callee_half_ret:1423; LA64S: # %bb.0:1424; LA64S-NEXT: lu12i.w $a0, -131425; LA64S-NEXT: ori $a0, $a0, 30721426; LA64S-NEXT: movgr2fr.w $fa0, $a01427; LA64S-NEXT: ret1428;1429; LA64F-LP64S-LABEL: callee_half_ret:1430; LA64F-LP64S: # %bb.0:1431; LA64F-LP64S-NEXT: lu12i.w $a0, -131432; LA64F-LP64S-NEXT: ori $a0, $a0, 30721433; LA64F-LP64S-NEXT: ret1434;1435; LA64F-LP64D-LABEL: callee_half_ret:1436; LA64F-LP64D: # %bb.0:1437; LA64F-LP64D-NEXT: lu12i.w $a0, -131438; LA64F-LP64D-NEXT: ori $a0, $a0, 30721439; LA64F-LP64D-NEXT: movgr2fr.w $fa0, $a01440; LA64F-LP64D-NEXT: ret1441;1442; LA64D-LP64S-LABEL: callee_half_ret:1443; LA64D-LP64S: # %bb.0:1444; LA64D-LP64S-NEXT: lu12i.w $a0, -131445; LA64D-LP64S-NEXT: ori $a0, $a0, 30721446; LA64D-LP64S-NEXT: ret1447;1448; LA64D-LP64D-LABEL: callee_half_ret:1449; LA64D-LP64D: # %bb.0:1450; LA64D-LP64D-NEXT: lu12i.w $a0, -131451; LA64D-LP64D-NEXT: ori $a0, $a0, 30721452; LA64D-LP64D-NEXT: movgr2fr.w $fa0, $a01453; LA64D-LP64D-NEXT: ret1454 ret half 1.01455}1456 1457define i32 @caller_half_ret() nounwind {1458; LA32S-LABEL: caller_half_ret:1459; LA32S: # %bb.0:1460; LA32S-NEXT: addi.w $sp, $sp, -161461; LA32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1462; LA32S-NEXT: bl callee_half_ret1463; LA32S-NEXT: lu12i.w $a1, 151464; LA32S-NEXT: ori $a1, $a1, 40951465; LA32S-NEXT: and $a0, $a0, $a11466; LA32S-NEXT: bl __extendhfsf21467; LA32S-NEXT: bl __fixsfsi1468; LA32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1469; LA32S-NEXT: addi.w $sp, $sp, 161470; LA32S-NEXT: ret1471;1472; LA32F-ILP32S-LABEL: caller_half_ret:1473; LA32F-ILP32S: # %bb.0:1474; LA32F-ILP32S-NEXT: addi.w $sp, $sp, -161475; LA32F-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1476; LA32F-ILP32S-NEXT: bl callee_half_ret1477; LA32F-ILP32S-NEXT: bl __extendhfsf21478; LA32F-ILP32S-NEXT: movgr2fr.w $fa0, $a01479; LA32F-ILP32S-NEXT: ftintrz.w.s $fa0, $fa01480; LA32F-ILP32S-NEXT: movfr2gr.s $a0, $fa01481; LA32F-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1482; LA32F-ILP32S-NEXT: addi.w $sp, $sp, 161483; LA32F-ILP32S-NEXT: ret1484;1485; LA32F-ILP32D-LABEL: caller_half_ret:1486; LA32F-ILP32D: # %bb.0:1487; LA32F-ILP32D-NEXT: addi.w $sp, $sp, -161488; LA32F-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1489; LA32F-ILP32D-NEXT: bl callee_half_ret1490; LA32F-ILP32D-NEXT: bl __extendhfsf21491; LA32F-ILP32D-NEXT: ftintrz.w.s $fa0, $fa01492; LA32F-ILP32D-NEXT: movfr2gr.s $a0, $fa01493; LA32F-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1494; LA32F-ILP32D-NEXT: addi.w $sp, $sp, 161495; LA32F-ILP32D-NEXT: ret1496;1497; LA32D-ILP32S-LABEL: caller_half_ret:1498; LA32D-ILP32S: # %bb.0:1499; LA32D-ILP32S-NEXT: addi.w $sp, $sp, -161500; LA32D-ILP32S-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1501; LA32D-ILP32S-NEXT: bl callee_half_ret1502; LA32D-ILP32S-NEXT: bl __extendhfsf21503; LA32D-ILP32S-NEXT: movgr2fr.w $fa0, $a01504; LA32D-ILP32S-NEXT: ftintrz.w.s $fa0, $fa01505; LA32D-ILP32S-NEXT: movfr2gr.s $a0, $fa01506; LA32D-ILP32S-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1507; LA32D-ILP32S-NEXT: addi.w $sp, $sp, 161508; LA32D-ILP32S-NEXT: ret1509;1510; LA32D-ILP32D-LABEL: caller_half_ret:1511; LA32D-ILP32D: # %bb.0:1512; LA32D-ILP32D-NEXT: addi.w $sp, $sp, -161513; LA32D-ILP32D-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill1514; LA32D-ILP32D-NEXT: bl callee_half_ret1515; LA32D-ILP32D-NEXT: bl __extendhfsf21516; LA32D-ILP32D-NEXT: ftintrz.w.s $fa0, $fa01517; LA32D-ILP32D-NEXT: movfr2gr.s $a0, $fa01518; LA32D-ILP32D-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload1519; LA32D-ILP32D-NEXT: addi.w $sp, $sp, 161520; LA32D-ILP32D-NEXT: ret1521;1522; LA64S-LABEL: caller_half_ret:1523; LA64S: # %bb.0:1524; LA64S-NEXT: addi.d $sp, $sp, -161525; LA64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1526; LA64S-NEXT: pcaddu18i $ra, %call36(callee_half_ret)1527; LA64S-NEXT: jirl $ra, $ra, 01528; LA64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)1529; LA64S-NEXT: jirl $ra, $ra, 01530; LA64S-NEXT: ftintrz.l.s $fa0, $fa01531; LA64S-NEXT: movfr2gr.d $a0, $fa01532; LA64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1533; LA64S-NEXT: addi.d $sp, $sp, 161534; LA64S-NEXT: ret1535;1536; LA64F-LP64S-LABEL: caller_half_ret:1537; LA64F-LP64S: # %bb.0:1538; LA64F-LP64S-NEXT: addi.d $sp, $sp, -161539; LA64F-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1540; LA64F-LP64S-NEXT: pcaddu18i $ra, %call36(callee_half_ret)1541; LA64F-LP64S-NEXT: jirl $ra, $ra, 01542; LA64F-LP64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)1543; LA64F-LP64S-NEXT: jirl $ra, $ra, 01544; LA64F-LP64S-NEXT: movgr2fr.w $fa0, $a01545; LA64F-LP64S-NEXT: ftintrz.l.s $fa0, $fa01546; LA64F-LP64S-NEXT: movfr2gr.d $a0, $fa01547; LA64F-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1548; LA64F-LP64S-NEXT: addi.d $sp, $sp, 161549; LA64F-LP64S-NEXT: ret1550;1551; LA64F-LP64D-LABEL: caller_half_ret:1552; LA64F-LP64D: # %bb.0:1553; LA64F-LP64D-NEXT: addi.d $sp, $sp, -161554; LA64F-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1555; LA64F-LP64D-NEXT: pcaddu18i $ra, %call36(callee_half_ret)1556; LA64F-LP64D-NEXT: jirl $ra, $ra, 01557; LA64F-LP64D-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)1558; LA64F-LP64D-NEXT: jirl $ra, $ra, 01559; LA64F-LP64D-NEXT: ftintrz.l.s $fa0, $fa01560; LA64F-LP64D-NEXT: movfr2gr.d $a0, $fa01561; LA64F-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1562; LA64F-LP64D-NEXT: addi.d $sp, $sp, 161563; LA64F-LP64D-NEXT: ret1564;1565; LA64D-LP64S-LABEL: caller_half_ret:1566; LA64D-LP64S: # %bb.0:1567; LA64D-LP64S-NEXT: addi.d $sp, $sp, -161568; LA64D-LP64S-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1569; LA64D-LP64S-NEXT: pcaddu18i $ra, %call36(callee_half_ret)1570; LA64D-LP64S-NEXT: jirl $ra, $ra, 01571; LA64D-LP64S-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)1572; LA64D-LP64S-NEXT: jirl $ra, $ra, 01573; LA64D-LP64S-NEXT: movgr2fr.w $fa0, $a01574; LA64D-LP64S-NEXT: ftintrz.l.s $fa0, $fa01575; LA64D-LP64S-NEXT: movfr2gr.d $a0, $fa01576; LA64D-LP64S-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1577; LA64D-LP64S-NEXT: addi.d $sp, $sp, 161578; LA64D-LP64S-NEXT: ret1579;1580; LA64D-LP64D-LABEL: caller_half_ret:1581; LA64D-LP64D: # %bb.0:1582; LA64D-LP64D-NEXT: addi.d $sp, $sp, -161583; LA64D-LP64D-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill1584; LA64D-LP64D-NEXT: pcaddu18i $ra, %call36(callee_half_ret)1585; LA64D-LP64D-NEXT: jirl $ra, $ra, 01586; LA64D-LP64D-NEXT: pcaddu18i $ra, %call36(__extendhfsf2)1587; LA64D-LP64D-NEXT: jirl $ra, $ra, 01588; LA64D-LP64D-NEXT: ftintrz.l.s $fa0, $fa01589; LA64D-LP64D-NEXT: movfr2gr.d $a0, $fa01590; LA64D-LP64D-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload1591; LA64D-LP64D-NEXT: addi.d $sp, $sp, 161592; LA64D-LP64D-NEXT: ret1593 %1 = call half @callee_half_ret()1594 %2 = fptosi half %1 to i321595 ret i32 %21596}1597