372 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2 3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv2_sf -mattr=+fpuv2_df | FileCheck %s --check-prefix=CHECK-DF4; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -float-abi=hard -mattr=+hard-float -mattr=+2e3 -mattr=+fpuv3_sf -mattr=+fpuv3_df | FileCheck %s --check-prefix=CHECK-DF25 6 7; double --> float8define float @fptruncR_double_0(double %x) {9;10; CHECK-DF-LABEL: fptruncR_double_0:11; CHECK-DF: # %bb.0: # %entry12; CHECK-DF-NEXT: fdtos vr0, vr013; CHECK-DF-NEXT: rts1614;15; CHECK-DF2-LABEL: fptruncR_double_0:16; CHECK-DF2: # %bb.0: # %entry17; CHECK-DF2-NEXT: fdtos vr0, vr018; CHECK-DF2-NEXT: rts1619entry:20 %fptrunc = fptrunc double %x to float21 ret float %fptrunc22}23 24define double @fpextR_double_0(float %x) {25;26; CHECK-DF-LABEL: fpextR_double_0:27; CHECK-DF: # %bb.0: # %entry28; CHECK-DF-NEXT: fstod vr0, vr029; CHECK-DF-NEXT: rts1630;31; CHECK-DF2-LABEL: fpextR_double_0:32; CHECK-DF2: # %bb.0: # %entry33; CHECK-DF2-NEXT: fstod vr0, vr034; CHECK-DF2-NEXT: rts1635entry:36 %fpext = fpext float %x to double37 ret double %fpext38}39 40; double --> i3241define i32 @fptosiR_double_1(double %x) {42;43;44; CHECK-DF-LABEL: fptosiR_double_1:45; CHECK-DF: # %bb.0: # %entry46; CHECK-DF-NEXT: fdtosi.rz vr0, vr047; CHECK-DF-NEXT: fmfvrl a0, vr048; CHECK-DF-NEXT: rts1649;50; CHECK-DF2-LABEL: fptosiR_double_1:51; CHECK-DF2: # %bb.0: # %entry52; CHECK-DF2-NEXT: fftoi.f64.s32.rz vr0, vr053; CHECK-DF2-NEXT: fmfvr.32.1 a0, vr054; CHECK-DF2-NEXT: rts1655entry:56 %fptosi = fptosi double %x to i3257 ret i32 %fptosi58}59 60 61; double --> i1662define i16 @fptosiR_double_2(double %x) {63;64;65; CHECK-DF-LABEL: fptosiR_double_2:66; CHECK-DF: # %bb.0: # %entry67; CHECK-DF-NEXT: fdtosi.rz vr0, vr068; CHECK-DF-NEXT: fmfvrl a0, vr069; CHECK-DF-NEXT: rts1670;71; CHECK-DF2-LABEL: fptosiR_double_2:72; CHECK-DF2: # %bb.0: # %entry73; CHECK-DF2-NEXT: fftoi.f64.s32.rz vr0, vr074; CHECK-DF2-NEXT: fmfvr.32.1 a0, vr075; CHECK-DF2-NEXT: rts1676entry:77 %fptosi = fptosi double %x to i1678 ret i16 %fptosi79}80 81 82; double --> i883define i8 @fptosiR_double_3(double %x) {84;85;86; CHECK-DF-LABEL: fptosiR_double_3:87; CHECK-DF: # %bb.0: # %entry88; CHECK-DF-NEXT: fdtosi.rz vr0, vr089; CHECK-DF-NEXT: fmfvrl a0, vr090; CHECK-DF-NEXT: rts1691;92; CHECK-DF2-LABEL: fptosiR_double_3:93; CHECK-DF2: # %bb.0: # %entry94; CHECK-DF2-NEXT: fftoi.f64.s32.rz vr0, vr095; CHECK-DF2-NEXT: fmfvr.32.1 a0, vr096; CHECK-DF2-NEXT: rts1697entry:98 %fptosi = fptosi double %x to i899 ret i8 %fptosi100}101 102; double --> i1103define i1 @fptosiR_double_4(double %x) {104;105;106; CHECK-DF-LABEL: fptosiR_double_4:107; CHECK-DF: # %bb.0: # %entry108; CHECK-DF-NEXT: fdtosi.rz vr0, vr0109; CHECK-DF-NEXT: fmfvrl a0, vr0110; CHECK-DF-NEXT: rts16111;112; CHECK-DF2-LABEL: fptosiR_double_4:113; CHECK-DF2: # %bb.0: # %entry114; CHECK-DF2-NEXT: fftoi.f64.s32.rz vr0, vr0115; CHECK-DF2-NEXT: fmfvr.32.1 a0, vr0116; CHECK-DF2-NEXT: rts16117entry:118 %fptosi = fptosi double %x to i1119 ret i1 %fptosi120}121 122; double --> i32123define i32 @fptouiR_double_1(double %x) {124;125; CHECK-DF-LABEL: fptouiR_double_1:126; CHECK-DF: # %bb.0: # %entry127; CHECK-DF-NEXT: fdtoui.rz vr0, vr0128; CHECK-DF-NEXT: fmfvrl a0, vr0129; CHECK-DF-NEXT: rts16130;131; CHECK-DF2-LABEL: fptouiR_double_1:132; CHECK-DF2: # %bb.0: # %entry133; CHECK-DF2-NEXT: fftoi.f64.u32.rz vr0, vr0134; CHECK-DF2-NEXT: fmfvr.32.1 a0, vr0135; CHECK-DF2-NEXT: rts16136 137entry:138 %fptoui = fptoui double %x to i32139 ret i32 %fptoui140}141 142 143; double --> i16144define i16 @fptouiR_double_2(double %x) {145;146; CHECK-DF-LABEL: fptouiR_double_2:147; CHECK-DF: # %bb.0: # %entry148; CHECK-DF-NEXT: fdtoui.rz vr0, vr0149; CHECK-DF-NEXT: fmfvrl a0, vr0150; CHECK-DF-NEXT: rts16151;152; CHECK-DF2-LABEL: fptouiR_double_2:153; CHECK-DF2: # %bb.0: # %entry154; CHECK-DF2-NEXT: fftoi.f64.u32.rz vr0, vr0155; CHECK-DF2-NEXT: fmfvr.32.1 a0, vr0156; CHECK-DF2-NEXT: rts16157 158entry:159 %fptoui = fptoui double %x to i16160 ret i16 %fptoui161}162 163 164; double --> i8165define i8 @fptouiR_double_3(double %x) {166;167; CHECK-DF-LABEL: fptouiR_double_3:168; CHECK-DF: # %bb.0: # %entry169; CHECK-DF-NEXT: fdtoui.rz vr0, vr0170; CHECK-DF-NEXT: fmfvrl a0, vr0171; CHECK-DF-NEXT: rts16172;173; CHECK-DF2-LABEL: fptouiR_double_3:174; CHECK-DF2: # %bb.0: # %entry175; CHECK-DF2-NEXT: fftoi.f64.u32.rz vr0, vr0176; CHECK-DF2-NEXT: fmfvr.32.1 a0, vr0177; CHECK-DF2-NEXT: rts16178entry:179 %fptoui = fptoui double %x to i8180 ret i8 %fptoui181}182 183 184; double --> i1185define i1 @fptouiR_double_4(double %x) {186;187;188; CHECK-DF-LABEL: fptouiR_double_4:189; CHECK-DF: # %bb.0: # %entry190; CHECK-DF-NEXT: fdtoui.rz vr0, vr0191; CHECK-DF-NEXT: fmfvrl a0, vr0192; CHECK-DF-NEXT: rts16193;194; CHECK-DF2-LABEL: fptouiR_double_4:195; CHECK-DF2: # %bb.0: # %entry196; CHECK-DF2-NEXT: fftoi.f64.u32.rz vr0, vr0197; CHECK-DF2-NEXT: fmfvr.32.1 a0, vr0198; CHECK-DF2-NEXT: rts16199entry:200 %fptoui = fptoui double %x to i1201 ret i1 %fptoui202}203 204 205; i32/i16/i8/i1 --> double206 207define double @sitofpR_double_0(i32 %x) {208;209;210; CHECK-DF-LABEL: sitofpR_double_0:211; CHECK-DF: # %bb.0: # %entry212; CHECK-DF-NEXT: fmtvrl vr0, a0213; CHECK-DF-NEXT: fsitod vr0, vr0214; CHECK-DF-NEXT: rts16215;216; CHECK-DF2-LABEL: sitofpR_double_0:217; CHECK-DF2: # %bb.0: # %entry218; CHECK-DF2-NEXT: fmtvr.32.1 vr0, a0219; CHECK-DF2-NEXT: fitof.s32.f64 vr0, vr0220; CHECK-DF2-NEXT: rts16221entry:222 %sitofp = sitofp i32 %x to double223 ret double %sitofp224}225 226define double @sitofpR_double_1(i16 %x) {227;228;229; CHECK-DF-LABEL: sitofpR_double_1:230; CHECK-DF: # %bb.0: # %entry231; CHECK-DF-NEXT: sexth16 a0, a0232; CHECK-DF-NEXT: fmtvrl vr0, a0233; CHECK-DF-NEXT: fsitod vr0, vr0234; CHECK-DF-NEXT: rts16235;236; CHECK-DF2-LABEL: sitofpR_double_1:237; CHECK-DF2: # %bb.0: # %entry238; CHECK-DF2-NEXT: sexth16 a0, a0239; CHECK-DF2-NEXT: fmtvr.32.1 vr0, a0240; CHECK-DF2-NEXT: fitof.s32.f64 vr0, vr0241; CHECK-DF2-NEXT: rts16242entry:243 %sitofp = sitofp i16 %x to double244 ret double %sitofp245}246 247define double @sitofpR_double_2(i8 %x) {248;249;250; CHECK-DF-LABEL: sitofpR_double_2:251; CHECK-DF: # %bb.0: # %entry252; CHECK-DF-NEXT: sextb16 a0, a0253; CHECK-DF-NEXT: fmtvrl vr0, a0254; CHECK-DF-NEXT: fsitod vr0, vr0255; CHECK-DF-NEXT: rts16256;257; CHECK-DF2-LABEL: sitofpR_double_2:258; CHECK-DF2: # %bb.0: # %entry259; CHECK-DF2-NEXT: sextb16 a0, a0260; CHECK-DF2-NEXT: fmtvr.32.1 vr0, a0261; CHECK-DF2-NEXT: fitof.s32.f64 vr0, vr0262; CHECK-DF2-NEXT: rts16263entry:264 %sitofp = sitofp i8 %x to double265 ret double %sitofp266}267 268define double @sitofpR_double_3(i1 %x) {269;270;271; CHECK-DF-LABEL: sitofpR_double_3:272; CHECK-DF: # %bb.0: # %entry273; CHECK-DF-NEXT: sext32 a0, a0, 0, 0274; CHECK-DF-NEXT: fmtvrl vr0, a0275; CHECK-DF-NEXT: fsitod vr0, vr0276; CHECK-DF-NEXT: rts16277;278; CHECK-DF2-LABEL: sitofpR_double_3:279; CHECK-DF2: # %bb.0: # %entry280; CHECK-DF2-NEXT: sext32 a0, a0, 0, 0281; CHECK-DF2-NEXT: fmtvr.32.1 vr0, a0282; CHECK-DF2-NEXT: fitof.s32.f64 vr0, vr0283; CHECK-DF2-NEXT: rts16284entry:285 %sitofp = sitofp i1 %x to double286 ret double %sitofp287}288 289; i32/i16/i8/i1 --> double290 291define double @uitofpR_double_0(i32 %x) {292;293;294; CHECK-DF-LABEL: uitofpR_double_0:295; CHECK-DF: # %bb.0: # %entry296; CHECK-DF-NEXT: fmtvrl vr0, a0297; CHECK-DF-NEXT: fuitod vr0, vr0298; CHECK-DF-NEXT: rts16299;300; CHECK-DF2-LABEL: uitofpR_double_0:301; CHECK-DF2: # %bb.0: # %entry302; CHECK-DF2-NEXT: fmtvr.32.1 vr0, a0303; CHECK-DF2-NEXT: fitof.u32.f64 vr0, vr0304; CHECK-DF2-NEXT: rts16305entry:306 %uitofp = uitofp i32 %x to double307 ret double %uitofp308}309 310define double @uitofpR_double_1(i16 %x) {311;312;313; CHECK-DF-LABEL: uitofpR_double_1:314; CHECK-DF: # %bb.0: # %entry315; CHECK-DF-NEXT: zexth16 a0, a0316; CHECK-DF-NEXT: fmtvrl vr0, a0317; CHECK-DF-NEXT: fuitod vr0, vr0318; CHECK-DF-NEXT: rts16319;320; CHECK-DF2-LABEL: uitofpR_double_1:321; CHECK-DF2: # %bb.0: # %entry322; CHECK-DF2-NEXT: zexth16 a0, a0323; CHECK-DF2-NEXT: fmtvr.32.1 vr0, a0324; CHECK-DF2-NEXT: fitof.u32.f64 vr0, vr0325; CHECK-DF2-NEXT: rts16326entry:327 %uitofp = uitofp i16 %x to double328 ret double %uitofp329}330 331define double @uitofpR_double_2(i8 %x) {332;333;334; CHECK-DF-LABEL: uitofpR_double_2:335; CHECK-DF: # %bb.0: # %entry336; CHECK-DF-NEXT: zextb16 a0, a0337; CHECK-DF-NEXT: fmtvrl vr0, a0338; CHECK-DF-NEXT: fuitod vr0, vr0339; CHECK-DF-NEXT: rts16340;341; CHECK-DF2-LABEL: uitofpR_double_2:342; CHECK-DF2: # %bb.0: # %entry343; CHECK-DF2-NEXT: zextb16 a0, a0344; CHECK-DF2-NEXT: fmtvr.32.1 vr0, a0345; CHECK-DF2-NEXT: fitof.u32.f64 vr0, vr0346; CHECK-DF2-NEXT: rts16347entry:348 %uitofp = uitofp i8 %x to double349 ret double %uitofp350}351 352define double @uitofpR_double_3(i1 %x) {353;354;355; CHECK-DF-LABEL: uitofpR_double_3:356; CHECK-DF: # %bb.0: # %entry357; CHECK-DF-NEXT: andi32 a0, a0, 1358; CHECK-DF-NEXT: fmtvrl vr0, a0359; CHECK-DF-NEXT: fuitod vr0, vr0360; CHECK-DF-NEXT: rts16361;362; CHECK-DF2-LABEL: uitofpR_double_3:363; CHECK-DF2: # %bb.0: # %entry364; CHECK-DF2-NEXT: andi32 a0, a0, 1365; CHECK-DF2-NEXT: fmtvr.32.1 vr0, a0366; CHECK-DF2-NEXT: fitof.u32.f64 vr0, vr0367; CHECK-DF2-NEXT: rts16368entry:369 %uitofp = uitofp i1 %x to double370 ret double %uitofp371}372