aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanak@gmail.com>2011-05-04 17:54:27 +0000
committerAkira Hatanaka <ahatanak@gmail.com>2011-05-04 17:54:27 +0000
commit6b7588e6c4f6f1a9ab2b5182fafaa95eeb56ca8d (patch)
treece8641b51bd329cebd7bb0043678e9a43d1f3f38 /test
parent597a7664e1bbe2ea5f757eb6e853bd1d2fe98d6c (diff)
downloadexternal_llvm-6b7588e6c4f6f1a9ab2b5182fafaa95eeb56ca8d.zip
external_llvm-6b7588e6c4f6f1a9ab2b5182fafaa95eeb56ca8d.tar.gz
external_llvm-6b7588e6c4f6f1a9ab2b5182fafaa95eeb56ca8d.tar.bz2
Prevent instructions using $gp from being placed between a jalr and the instruction that restores the clobbered $gp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130847 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/Mips/gprestore.ll35
-rw-r--r--test/CodeGen/Mips/internalfunc.ll2
2 files changed, 36 insertions, 1 deletions
diff --git a/test/CodeGen/Mips/gprestore.ll b/test/CodeGen/Mips/gprestore.ll
new file mode 100644
index 0000000..0e69a7b
--- /dev/null
+++ b/test/CodeGen/Mips/gprestore.ll
@@ -0,0 +1,35 @@
+; RUN: llc -march=mips < %s | FileCheck %s
+
+@p = external global i32
+@q = external global i32
+@r = external global i32
+
+define void @f0() nounwind {
+entry:
+; CHECK: jalr
+; CHECK-NOT: got({{.*}})($gp)
+; CHECK: lw $gp
+; CHECK: jalr
+; CHECK-NOT: got({{.*}})($gp)
+; CHECK: lw $gp
+; CHECK: jalr
+; CHECK-NOT: got({{.*}})($gp)
+; CHECK: lw $gp
+ tail call void (...)* @f1() nounwind
+ %tmp = load i32* @p, align 4, !tbaa !0
+ tail call void @f2(i32 %tmp) nounwind
+ %tmp1 = load i32* @q, align 4, !tbaa !0
+ %tmp2 = load i32* @r, align 4, !tbaa !0
+ tail call void @f3(i32 %tmp1, i32 %tmp2) nounwind
+ ret void
+}
+
+declare void @f1(...)
+
+declare void @f2(i32)
+
+declare void @f3(i32, i32)
+
+!0 = metadata !{metadata !"int", metadata !1}
+!1 = metadata !{metadata !"omnipotent char", metadata !2}
+!2 = metadata !{metadata !"Simple C/C++ TBAA", null}
diff --git a/test/CodeGen/Mips/internalfunc.ll b/test/CodeGen/Mips/internalfunc.ll
index fdfa01a..50d0993 100644
--- a/test/CodeGen/Mips/internalfunc.ll
+++ b/test/CodeGen/Mips/internalfunc.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s -march=mips | FileCheck %s
+; RUN: llc < %s -march=mipsel -mcpu=4ke | FileCheck %s
@caller.sf1 = internal unnamed_addr global void (...)* null, align 4
@gf1 = external global void (...)*