aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2012-05-30 17:50:14 +0000
committerChris Lattner <sabre@nondot.org>2012-05-30 17:50:14 +0000
commit5aaabbfe62f9f92e1ad0c18b1a5b823230aa41ef (patch)
tree1461e409e949d0eafcf623e59bad698a25f3dfea /test
parentada759d5fa8a3ecc0e97d88761badfba9193587f (diff)
downloadexternal_llvm-5aaabbfe62f9f92e1ad0c18b1a5b823230aa41ef.zip
external_llvm-5aaabbfe62f9f92e1ad0c18b1a5b823230aa41ef.tar.gz
external_llvm-5aaabbfe62f9f92e1ad0c18b1a5b823230aa41ef.tar.bz2
Extend the (abi-irrelevant) return convention to be able to return more than two values in
integer registers. This is already supported by the fastcc convention, but it doesn't hurt to support it in the standard conventions as well. In cases where we can cheat at the calling convention, this allows us to avoid returning things through memory in more cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157698 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/CodeGen/X86/pass-four.ll17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/CodeGen/X86/pass-four.ll b/test/CodeGen/X86/pass-four.ll
new file mode 100644
index 0000000..fd4e1e9
--- /dev/null
+++ b/test/CodeGen/X86/pass-four.ll
@@ -0,0 +1,17 @@
+; RUN: llc < %s | FileCheck %s
+target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+target triple = "x86_64-apple-darwin11.3.0"
+
+
+define { i8*, i64, i64*, i64 } @copy_4(i8* %a, i64 %b, i64* %c, i64 %d) nounwind {
+entry:
+ %0 = insertvalue { i8*, i64, i64*, i64 } undef, i8* %a, 0
+ %1 = insertvalue { i8*, i64, i64*, i64 } %0, i64 %b, 1
+ %2 = insertvalue { i8*, i64, i64*, i64 } %1, i64* %c, 2
+ %3 = insertvalue { i8*, i64, i64*, i64 } %2, i64 %d, 3
+ ret { i8*, i64, i64*, i64 } %3
+}
+
+; CHECK: copy_4:
+; CHECK-NOT: (%rdi)
+; CHECK: ret