diff options
author | Dan Gohman <gohman@apple.com> | 2008-12-03 01:28:04 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-12-03 01:28:04 +0000 |
commit | e4300e271afd663ada8b808c6d0c4878fb0256ef (patch) | |
tree | 34a70fedf0b7a4b0710999472e2d5c50333b032e /lib/Target/X86/X86CallingConv.td | |
parent | 7f9b35200bf442c6d8978213f6117fe0d712325e (diff) | |
download | llvm-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.td | 5 |
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>>, |