83 lines · plain
1; Test the MSA floating point conversion intrinsics (e.g. float->double) that2; are encoded with the 2RF instruction format.3 4; RUN: llc -mtriple=mips-elf -mattr=+msa,+fp64,+mips32r2 < %s | FileCheck %s5; RUN: llc -mtriple=mipsel-elf -mattr=+msa,+fp64,+mips32r2 < %s | FileCheck %s6 7@llvm_mips_fexupl_w_ARG1 = global <8 x half> <half 0.000000e+00, half 1.000000e+00, half 2.000000e+00, half 3.000000e+00, half 4.000000e+00, half 5.000000e+00, half 6.000000e+00, half 7.000000e+00>, align 168@llvm_mips_fexupl_w_RES = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 169 10define void @llvm_mips_fexupl_w_test() nounwind {11entry:12 %0 = load <8 x half>, ptr @llvm_mips_fexupl_w_ARG113 %1 = tail call <4 x float> @llvm.mips.fexupl.w(<8 x half> %0)14 store <4 x float> %1, ptr @llvm_mips_fexupl_w_RES15 ret void16}17 18declare <4 x float> @llvm.mips.fexupl.w(<8 x half>) nounwind19 20; CHECK: llvm_mips_fexupl_w_test:21; CHECK: ld.h22; CHECK: fexupl.w23; CHECK: st.w24; CHECK: .size llvm_mips_fexupl_w_test25;26@llvm_mips_fexupl_d_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 1627@llvm_mips_fexupl_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 1628 29define void @llvm_mips_fexupl_d_test() nounwind {30entry:31 %0 = load <4 x float>, ptr @llvm_mips_fexupl_d_ARG132 %1 = tail call <2 x double> @llvm.mips.fexupl.d(<4 x float> %0)33 store <2 x double> %1, ptr @llvm_mips_fexupl_d_RES34 ret void35}36 37declare <2 x double> @llvm.mips.fexupl.d(<4 x float>) nounwind38 39; CHECK: llvm_mips_fexupl_d_test:40; CHECK: ld.w41; CHECK: fexupl.d42; CHECK: st.d43; CHECK: .size llvm_mips_fexupl_d_test44;45@llvm_mips_fexupr_w_ARG1 = global <8 x half> <half 0.000000e+00, half 1.000000e+00, half 2.000000e+00, half 3.000000e+00, half 4.000000e+00, half 5.000000e+00, half 6.000000e+00, half 7.000000e+00>, align 1646@llvm_mips_fexupr_w_RES = global <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, align 1647 48define void @llvm_mips_fexupr_w_test() nounwind {49entry:50 %0 = load <8 x half>, ptr @llvm_mips_fexupr_w_ARG151 %1 = tail call <4 x float> @llvm.mips.fexupr.w(<8 x half> %0)52 store <4 x float> %1, ptr @llvm_mips_fexupr_w_RES53 ret void54}55 56declare <4 x float> @llvm.mips.fexupr.w(<8 x half>) nounwind57 58; CHECK: llvm_mips_fexupr_w_test:59; CHECK: ld.h60; CHECK: fexupr.w61; CHECK: st.w62; CHECK: .size llvm_mips_fexupr_w_test63;64@llvm_mips_fexupr_d_ARG1 = global <4 x float> <float 0.000000e+00, float 1.000000e+00, float 2.000000e+00, float 3.000000e+00>, align 1665@llvm_mips_fexupr_d_RES = global <2 x double> <double 0.000000e+00, double 0.000000e+00>, align 1666 67define void @llvm_mips_fexupr_d_test() nounwind {68entry:69 %0 = load <4 x float>, ptr @llvm_mips_fexupr_d_ARG170 %1 = tail call <2 x double> @llvm.mips.fexupr.d(<4 x float> %0)71 store <2 x double> %1, ptr @llvm_mips_fexupr_d_RES72 ret void73}74 75declare <2 x double> @llvm.mips.fexupr.d(<4 x float>) nounwind76 77; CHECK: llvm_mips_fexupr_d_test:78; CHECK: ld.w79; CHECK: fexupr.d80; CHECK: st.d81; CHECK: .size llvm_mips_fexupr_d_test82;83