341 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32,FP323; RUN: llc -O0 -mtriple=mipsel-linux-gnu -mattr=+fp64,+mips32r2 -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32,FP644 5define float @i64tof32(i64 signext %a) {6; MIPS32-LABEL: i64tof32:7; MIPS32: # %bb.0: # %entry8; MIPS32-NEXT: addiu $sp, $sp, -249; MIPS32-NEXT: .cfi_def_cfa_offset 2410; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill11; MIPS32-NEXT: .cfi_offset 31, -412; MIPS32-NEXT: jal __floatdisf13; MIPS32-NEXT: nop14; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload15; MIPS32-NEXT: addiu $sp, $sp, 2416; MIPS32-NEXT: jr $ra17; MIPS32-NEXT: nop18entry:19 %conv = sitofp i64 %a to float20 ret float %conv21}22 23define float @i32tof32(i32 signext %a) {24; MIPS32-LABEL: i32tof32:25; MIPS32: # %bb.0: # %entry26; MIPS32-NEXT: mtc1 $4, $f027; MIPS32-NEXT: cvt.s.w $f0, $f028; MIPS32-NEXT: jr $ra29; MIPS32-NEXT: nop30entry:31 %conv = sitofp i32 %a to float32 ret float %conv33}34 35define float @i16tof32(i16 signext %a) {36; MIPS32-LABEL: i16tof32:37; MIPS32: # %bb.0: # %entry38; MIPS32-NEXT: mtc1 $4, $f039; MIPS32-NEXT: cvt.s.w $f0, $f040; MIPS32-NEXT: jr $ra41; MIPS32-NEXT: nop42entry:43 %conv = sitofp i16 %a to float44 ret float %conv45}46 47define float @i8tof32(i8 signext %a) {48; MIPS32-LABEL: i8tof32:49; MIPS32: # %bb.0: # %entry50; MIPS32-NEXT: mtc1 $4, $f051; MIPS32-NEXT: cvt.s.w $f0, $f052; MIPS32-NEXT: jr $ra53; MIPS32-NEXT: nop54entry:55 %conv = sitofp i8 %a to float56 ret float %conv57}58 59define double @i64tof64(i64 signext %a) {60; MIPS32-LABEL: i64tof64:61; MIPS32: # %bb.0: # %entry62; MIPS32-NEXT: addiu $sp, $sp, -2463; MIPS32-NEXT: .cfi_def_cfa_offset 2464; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill65; MIPS32-NEXT: .cfi_offset 31, -466; MIPS32-NEXT: jal __floatdidf67; MIPS32-NEXT: nop68; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload69; MIPS32-NEXT: addiu $sp, $sp, 2470; MIPS32-NEXT: jr $ra71; MIPS32-NEXT: nop72entry:73 %conv = sitofp i64 %a to double74 ret double %conv75}76 77define double @i32tof64(i32 signext %a) {78; MIPS32-LABEL: i32tof64:79; MIPS32: # %bb.0: # %entry80; MIPS32-NEXT: mtc1 $4, $f081; MIPS32-NEXT: cvt.d.w $f0, $f082; MIPS32-NEXT: jr $ra83; MIPS32-NEXT: nop84entry:85 %conv = sitofp i32 %a to double86 ret double %conv87}88 89define double @i16tof64(i16 signext %a) {90; MIPS32-LABEL: i16tof64:91; MIPS32: # %bb.0: # %entry92; MIPS32-NEXT: mtc1 $4, $f093; MIPS32-NEXT: cvt.d.w $f0, $f094; MIPS32-NEXT: jr $ra95; MIPS32-NEXT: nop96entry:97 %conv = sitofp i16 %a to double98 ret double %conv99}100 101define double @i8tof64(i8 signext %a) {102; MIPS32-LABEL: i8tof64:103; MIPS32: # %bb.0: # %entry104; MIPS32-NEXT: mtc1 $4, $f0105; MIPS32-NEXT: cvt.d.w $f0, $f0106; MIPS32-NEXT: jr $ra107; MIPS32-NEXT: nop108entry:109 %conv = sitofp i8 %a to double110 ret double %conv111}112 113define float @u64tof32(i64 zeroext %a) {114; MIPS32-LABEL: u64tof32:115; MIPS32: # %bb.0: # %entry116; MIPS32-NEXT: addiu $sp, $sp, -24117; MIPS32-NEXT: .cfi_def_cfa_offset 24118; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill119; MIPS32-NEXT: .cfi_offset 31, -4120; MIPS32-NEXT: jal __floatundisf121; MIPS32-NEXT: nop122; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload123; MIPS32-NEXT: addiu $sp, $sp, 24124; MIPS32-NEXT: jr $ra125; MIPS32-NEXT: nop126entry:127 %conv = uitofp i64 %a to float128 ret float %conv129}130 131 132define float @u32tof32(i32 zeroext %a) {133; FP32-LABEL: u32tof32:134; FP32: # %bb.0: # %entry135; FP32-NEXT: lui $1, 17200136; FP32-NEXT: mtc1 $4, $f0137; FP32-NEXT: mtc1 $1, $f1138; FP32-NEXT: lui $2, 17200139; FP32-NEXT: ori $1, $zero, 0140; FP32-NEXT: mtc1 $1, $f2141; FP32-NEXT: mtc1 $2, $f3142; FP32-NEXT: sub.d $f0, $f0, $f2143; FP32-NEXT: cvt.s.d $f0, $f0144; FP32-NEXT: jr $ra145; FP32-NEXT: nop146;147; FP64-LABEL: u32tof32:148; FP64: # %bb.0: # %entry149; FP64-NEXT: lui $1, 17200150; FP64-NEXT: mtc1 $4, $f0151; FP64-NEXT: mthc1 $1, $f0152; FP64-NEXT: lui $2, 17200153; FP64-NEXT: ori $1, $zero, 0154; FP64-NEXT: mtc1 $1, $f1155; FP64-NEXT: mthc1 $2, $f1156; FP64-NEXT: sub.d $f0, $f0, $f1157; FP64-NEXT: cvt.s.d $f0, $f0158; FP64-NEXT: jr $ra159; FP64-NEXT: nop160entry:161 %conv = uitofp i32 %a to float162 ret float %conv163}164 165define float @u16tof32(i16 zeroext %a) {166; FP32-LABEL: u16tof32:167; FP32: # %bb.0: # %entry168; FP32-NEXT: lui $1, 17200169; FP32-NEXT: mtc1 $4, $f0170; FP32-NEXT: mtc1 $1, $f1171; FP32-NEXT: lui $2, 17200172; FP32-NEXT: ori $1, $zero, 0173; FP32-NEXT: mtc1 $1, $f2174; FP32-NEXT: mtc1 $2, $f3175; FP32-NEXT: sub.d $f0, $f0, $f2176; FP32-NEXT: cvt.s.d $f0, $f0177; FP32-NEXT: jr $ra178; FP32-NEXT: nop179;180; FP64-LABEL: u16tof32:181; FP64: # %bb.0: # %entry182; FP64-NEXT: lui $1, 17200183; FP64-NEXT: mtc1 $4, $f0184; FP64-NEXT: mthc1 $1, $f0185; FP64-NEXT: lui $2, 17200186; FP64-NEXT: ori $1, $zero, 0187; FP64-NEXT: mtc1 $1, $f1188; FP64-NEXT: mthc1 $2, $f1189; FP64-NEXT: sub.d $f0, $f0, $f1190; FP64-NEXT: cvt.s.d $f0, $f0191; FP64-NEXT: jr $ra192; FP64-NEXT: nop193entry:194 %conv = uitofp i16 %a to float195 ret float %conv196}197 198define float @u8tof32(i8 zeroext %a) {199; FP32-LABEL: u8tof32:200; FP32: # %bb.0: # %entry201; FP32-NEXT: lui $1, 17200202; FP32-NEXT: mtc1 $4, $f0203; FP32-NEXT: mtc1 $1, $f1204; FP32-NEXT: lui $2, 17200205; FP32-NEXT: ori $1, $zero, 0206; FP32-NEXT: mtc1 $1, $f2207; FP32-NEXT: mtc1 $2, $f3208; FP32-NEXT: sub.d $f0, $f0, $f2209; FP32-NEXT: cvt.s.d $f0, $f0210; FP32-NEXT: jr $ra211; FP32-NEXT: nop212;213; FP64-LABEL: u8tof32:214; FP64: # %bb.0: # %entry215; FP64-NEXT: lui $1, 17200216; FP64-NEXT: mtc1 $4, $f0217; FP64-NEXT: mthc1 $1, $f0218; FP64-NEXT: lui $2, 17200219; FP64-NEXT: ori $1, $zero, 0220; FP64-NEXT: mtc1 $1, $f1221; FP64-NEXT: mthc1 $2, $f1222; FP64-NEXT: sub.d $f0, $f0, $f1223; FP64-NEXT: cvt.s.d $f0, $f0224; FP64-NEXT: jr $ra225; FP64-NEXT: nop226entry:227 %conv = uitofp i8 %a to float228 ret float %conv229}230 231define double @u64tof64(i64 zeroext %a) {232; MIPS32-LABEL: u64tof64:233; MIPS32: # %bb.0: # %entry234; MIPS32-NEXT: addiu $sp, $sp, -24235; MIPS32-NEXT: .cfi_def_cfa_offset 24236; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill237; MIPS32-NEXT: .cfi_offset 31, -4238; MIPS32-NEXT: jal __floatundidf239; MIPS32-NEXT: nop240; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload241; MIPS32-NEXT: addiu $sp, $sp, 24242; MIPS32-NEXT: jr $ra243; MIPS32-NEXT: nop244entry:245 %conv = uitofp i64 %a to double246 ret double %conv247}248 249define double @u32tof64(i32 zeroext %a) {250; FP32-LABEL: u32tof64:251; FP32: # %bb.0: # %entry252; FP32-NEXT: lui $1, 17200253; FP32-NEXT: mtc1 $4, $f0254; FP32-NEXT: mtc1 $1, $f1255; FP32-NEXT: lui $2, 17200256; FP32-NEXT: ori $1, $zero, 0257; FP32-NEXT: mtc1 $1, $f2258; FP32-NEXT: mtc1 $2, $f3259; FP32-NEXT: sub.d $f0, $f0, $f2260; FP32-NEXT: jr $ra261; FP32-NEXT: nop262;263; FP64-LABEL: u32tof64:264; FP64: # %bb.0: # %entry265; FP64-NEXT: lui $1, 17200266; FP64-NEXT: mtc1 $4, $f0267; FP64-NEXT: mthc1 $1, $f0268; FP64-NEXT: lui $2, 17200269; FP64-NEXT: ori $1, $zero, 0270; FP64-NEXT: mtc1 $1, $f1271; FP64-NEXT: mthc1 $2, $f1272; FP64-NEXT: sub.d $f0, $f0, $f1273; FP64-NEXT: jr $ra274; FP64-NEXT: nop275entry:276 %conv = uitofp i32 %a to double277 ret double %conv278}279 280define double @u16tof64(i16 zeroext %a) {281; FP32-LABEL: u16tof64:282; FP32: # %bb.0: # %entry283; FP32-NEXT: lui $1, 17200284; FP32-NEXT: mtc1 $4, $f0285; FP32-NEXT: mtc1 $1, $f1286; FP32-NEXT: lui $2, 17200287; FP32-NEXT: ori $1, $zero, 0288; FP32-NEXT: mtc1 $1, $f2289; FP32-NEXT: mtc1 $2, $f3290; FP32-NEXT: sub.d $f0, $f0, $f2291; FP32-NEXT: jr $ra292; FP32-NEXT: nop293;294; FP64-LABEL: u16tof64:295; FP64: # %bb.0: # %entry296; FP64-NEXT: lui $1, 17200297; FP64-NEXT: mtc1 $4, $f0298; FP64-NEXT: mthc1 $1, $f0299; FP64-NEXT: lui $2, 17200300; FP64-NEXT: ori $1, $zero, 0301; FP64-NEXT: mtc1 $1, $f1302; FP64-NEXT: mthc1 $2, $f1303; FP64-NEXT: sub.d $f0, $f0, $f1304; FP64-NEXT: jr $ra305; FP64-NEXT: nop306entry:307 %conv = uitofp i16 %a to double308 ret double %conv309}310 311define double @u8tof64(i8 zeroext %a) {312; FP32-LABEL: u8tof64:313; FP32: # %bb.0: # %entry314; FP32-NEXT: lui $1, 17200315; FP32-NEXT: mtc1 $4, $f0316; FP32-NEXT: mtc1 $1, $f1317; FP32-NEXT: lui $2, 17200318; FP32-NEXT: ori $1, $zero, 0319; FP32-NEXT: mtc1 $1, $f2320; FP32-NEXT: mtc1 $2, $f3321; FP32-NEXT: sub.d $f0, $f0, $f2322; FP32-NEXT: jr $ra323; FP32-NEXT: nop324;325; FP64-LABEL: u8tof64:326; FP64: # %bb.0: # %entry327; FP64-NEXT: lui $1, 17200328; FP64-NEXT: mtc1 $4, $f0329; FP64-NEXT: mthc1 $1, $f0330; FP64-NEXT: lui $2, 17200331; FP64-NEXT: ori $1, $zero, 0332; FP64-NEXT: mtc1 $1, $f1333; FP64-NEXT: mthc1 $2, $f1334; FP64-NEXT: sub.d $f0, $f0, $f1335; FP64-NEXT: jr $ra336; FP64-NEXT: nop337entry:338 %conv = uitofp i8 %a to double339 ret double %conv340}341