summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86CallingConv.td
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-12-03 01:28:04 +0000
committerDan Gohman <gohman@apple.com>2008-12-03 01:28:04 +0000
commite4300e271afd663ada8b808c6d0c4878fb0256ef (patch)
tree34a70fedf0b7a4b0710999472e2d5c50333b032e /lib/Target/X86/X86CallingConv.td
parent7f9b35200bf442c6d8978213f6117fe0d712325e (diff)
downloadllvm-e4300e271afd663ada8b808c6d0c4878fb0256ef.tar.gz
llvm-e4300e271afd663ada8b808c6d0c4878fb0256ef.tar.bz2
llvm-e4300e271afd663ada8b808c6d0c4878fb0256ef.tar.xz
Fix byval arguments in the fastcc calling convention. The fastcc convention
delegates to the regular x86-32 convention which handles byval, but only after it handles a few cases, and it's necessary to handle byval before handling those cases. This fixes PR3122 (and rdar://6400815), llvm-gcc miscompiling LLVM. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60453 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86CallingConv.td')
-rw-r--r--lib/Target/X86/X86CallingConv.td5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/Target/X86/X86CallingConv.td b/lib/Target/X86/X86CallingConv.td
index 385bd91618..0bda72d919 100644
--- a/lib/Target/X86/X86CallingConv.td
+++ b/lib/Target/X86/X86CallingConv.td
@@ -321,6 +321,11 @@ def CC_X86_32_FastCall : CallingConv<[
]>;
def CC_X86_32_FastCC : CallingConv<[
+ // Handles byval parameters. Note that we can't rely on the delegation
+ // to CC_X86_32_Common for this because that happens after code that
+ // handles i32 arguments.
+ CCIfByVal<CCPassByVal<4, 4>>,
+
// Promote i8/i16 arguments to i32.
CCIfType<[i8, i16], CCPromoteToType<i32>>,