summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-06-27 03:19:40 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-06-27 03:19:40 +0000
commit1ac1fa818e7a4b4a9f0483c07c0b9f9e5a1b0c72 (patch)
tree43aa5f19b3bb604190b3f987d82d64a80814072d
parent596eba86bc0dfcca3d3d39e8ec24c98a39bda8f5 (diff)
downloadbcm5719-llvm-1ac1fa818e7a4b4a9f0483c07c0b9f9e5a1b0c72.tar.gz
bcm5719-llvm-1ac1fa818e7a4b4a9f0483c07c0b9f9e5a1b0c72.zip
Mips: Fix access to private functions.
llvm-svn: 273843
-rw-r--r--llvm/lib/Target/Mips/MipsISelLowering.cpp2
-rw-r--r--llvm/test/CodeGen/Mips/private-addr.ll14
2 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/Target/Mips/MipsISelLowering.cpp b/llvm/lib/Target/Mips/MipsISelLowering.cpp
index 0c43cc07634..1e640e17379 100644
--- a/llvm/lib/Target/Mips/MipsISelLowering.cpp
+++ b/llvm/lib/Target/Mips/MipsISelLowering.cpp
@@ -1764,7 +1764,7 @@ SDValue MipsTargetLowering::lowerGlobalAddress(SDValue Op,
return getAddrNonPIC(N, SDLoc(N), Ty, DAG);
}
- if (GV->hasInternalLinkage() || (GV->hasLocalLinkage() && !isa<Function>(GV)))
+ if (GV->hasLocalLinkage())
return getAddrLocal(N, SDLoc(N), Ty, DAG, ABI.IsN32() || ABI.IsN64());
if (LargeGOT)
diff --git a/llvm/test/CodeGen/Mips/private-addr.ll b/llvm/test/CodeGen/Mips/private-addr.ll
new file mode 100644
index 00000000000..37dd6fe53c4
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/private-addr.ll
@@ -0,0 +1,14 @@
+; RUN: llc -mtriple=mips-pc-linux -relocation-model=pic < %s | FileCheck %s
+
+define private void @bar() {
+ ret void
+}
+
+define void()* @foo() {
+; CHECK: foo:
+; CHECK: lw $[[REG:.*]], %got($bar)($1)
+; CHECK-NEXT: jr $ra
+; CHECK-NEXT: addiu $2, $[[REG]], %lo($bar)
+
+ ret void()* @bar
+}
OpenPOWER on IntegriCloud