summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReed Kotler <rkotler@mips.com>2013-02-07 04:34:51 +0000
committerReed Kotler <rkotler@mips.com>2013-02-07 04:34:51 +0000
commit24b339dcdc2411bc3305e6f58964caa393fd9ea0 (patch)
tree12320d63f8b61e6d729d500a032b63f1e598b785
parenta170f520a990a50c35f72d81b4415dc4c3ec50de (diff)
downloadllvm-24b339dcdc2411bc3305e6f58964caa393fd9ea0.tar.gz
llvm-24b339dcdc2411bc3305e6f58964caa393fd9ea0.tar.bz2
llvm-24b339dcdc2411bc3305e6f58964caa393fd9ea0.tar.xz
Make sure we call externals from libraries properly when -static.
For example, when we are doing mips16 hard float or soft float. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174583 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/Mips/Mips16InstrInfo.td3
-rw-r--r--test/CodeGen/Mips/fp16static.ll13
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/Target/Mips/Mips16InstrInfo.td b/lib/Target/Mips/Mips16InstrInfo.td
index f0d6a2ace1..135df75693 100644
--- a/lib/Target/Mips/Mips16InstrInfo.td
+++ b/lib/Target/Mips/Mips16InstrInfo.td
@@ -1094,6 +1094,9 @@ class UncondBranch16_pat<SDNode OpNode, Instruction I>:
def : Mips16Pat<(MipsJmpLink (i32 tglobaladdr:$dst)),
(Jal16 tglobaladdr:$dst)>;
+def : Mips16Pat<(MipsJmpLink (i32 texternalsym:$dst)),
+ (Jal16 texternalsym:$dst)>;
+
// Indirect branch
def: Mips16Pat<
(brind CPU16Regs:$rs),
diff --git a/test/CodeGen/Mips/fp16static.ll b/test/CodeGen/Mips/fp16static.ll
new file mode 100644
index 0000000000..240ec75a36
--- /dev/null
+++ b/test/CodeGen/Mips/fp16static.ll
@@ -0,0 +1,13 @@
+; RUN: llc -march=mipsel -mcpu=mips16 -mips16-hard-float -soft-float -relocation-model=static < %s | FileCheck %s -check-prefix=CHECK-STATIC16
+
+@x = common global float 0.000000e+00, align 4
+
+define void @foo() nounwind {
+entry:
+ %0 = load float* @x, align 4
+ %1 = load float* @x, align 4
+ %mul = fmul float %0, %1
+ store float %mul, float* @x, align 4
+; CHECK-STATIC16: jal __mips16_mulsf3
+ ret void
+}