summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Mips/nomips16.ll
diff options
context:
space:
mode:
authorReed Kotler <rkotler@mips.com>2013-08-30 19:40:56 +0000
committerReed Kotler <rkotler@mips.com>2013-08-30 19:40:56 +0000
commitc03807a3a5b1180aa704c496f256c62876d2fbf2 (patch)
tree957779795c20be40a3e36abdf443c2c8c6254d7d /llvm/test/CodeGen/Mips/nomips16.ll
parent0acd502afe118a82f480d184271fe60e5551746f (diff)
downloadbcm5719-llvm-c03807a3a5b1180aa704c496f256c62876d2fbf2.tar.gz
bcm5719-llvm-c03807a3a5b1180aa704c496f256c62876d2fbf2.zip
Fix a problem with dual mips16/mips32 mode. When the underlying processor
has hard float, when you compile the mips32 code you have to make sure that it knows to compile any mips32 routines as hard float. I need to clean up the way mips16 hard float is specified but I need to first think through all the details. Mips16 always has a form of soft float, the difference being whether the underlying hardware has floating point. So it's not really necessary to pass the -soft-float to llvm since soft-float is always true for mips16 by virtue of the fact that it will not register floating point registers. By using this fact, I can simplify the way this is all handled. llvm-svn: 189690
Diffstat (limited to 'llvm/test/CodeGen/Mips/nomips16.ll')
-rw-r--r--llvm/test/CodeGen/Mips/nomips16.ll38
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Mips/nomips16.ll b/llvm/test/CodeGen/Mips/nomips16.ll
new file mode 100644
index 00000000000..bf7c667d057
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/nomips16.ll
@@ -0,0 +1,38 @@
+; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -mips16-hard-float -soft-float -relocation-model=static < %s | FileCheck %s
+
+@x = global float 0.000000e+00, align 4
+@.str = private unnamed_addr constant [20 x i8] c"in main: mips16 %f\0A\00", align 1
+
+; Function Attrs: nounwind
+define void @foo() #0 {
+entry:
+ %0 = load float* @x, align 4
+ %conv = fpext float %0 to double
+ %add = fadd double %conv, 1.500000e+00
+ %conv1 = fptrunc double %add to float
+ store float %conv1, float* @x, align 4
+ ret void
+}
+; CHECK: .ent foo
+; CHECK: jal __mips16_extendsfdf2
+; CHECK: .end foo
+
+; Function Attrs: nounwind
+define void @nofoo() #1 {
+entry:
+ %0 = load float* @x, align 4
+ %conv = fpext float %0 to double
+ %add = fadd double %conv, 3.900000e+00
+ %conv1 = fptrunc double %add to float
+ store float %conv1, float* @x, align 4
+ ret void
+}
+
+; CHECK: .ent nofoo
+; CHECK: cvt.d.s $f{{.+}}, $f{{.+}}
+; CHECK: .end nofoo
+
+
+attributes #0 = { nounwind "less-precise-fpmad"="false" "mips16" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" }
+attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "nomips16" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" }
+
OpenPOWER on IntegriCloud