[PATCH] D13978: [X86] Support MCU psABI when marking inregs
Michael Kuperstein via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 25 01:00:43 PDT 2015
mkuper added inline comments.
================
Comment at: lib/CodeGen/TargetInfo.cpp:857
@@ -854,3 +856,3 @@
IsWin32StructABI(Win32StructABI),
- IsSoftFloatABI(SoftFloatABI),
+ IsSoftFloatABI(SoftFloatABI), IsMCUABI(MCUABI),
DefaultNumRegisterParameters(NumRegisterParameters) {}
----------------
rnk wrote:
> Rather than taking this as a parameter, how about initializing IsMCUABI with `getTarget().getTriple().isEnvironmentIAMCU()`? Then you can drop a level of parameters.
Sure, will do.
================
Comment at: test/CodeGen/x86_32-arguments-iamcu.c:1
@@ +1,2 @@
+// RUN: %clang_cc1 -w -triple i386-pc-elfiamcu -mfloat-abi soft -emit-llvm -o - %s | FileCheck %s
+
----------------
DavidKreitzer wrote:
> Good test!
>
> I think it would be a good idea to add a varargs function & verify that the args do not get marked inreg.
They do get marked inreg, actually.
The varargs handling for -mregparm - and that means for IAMCU as well - happens on the CG level.
```
def CC_X86_32_C : CallingConv<[
...
// The first 3 integer arguments, if marked 'inreg' and if the call is not
// a vararg call, are passed in integer registers.
**CCIfNotVarArg**<CCIfInReg<CCIfType<[i32], CCAssignToReg<[EAX, EDX, ECX]>>>>,
...
]>;
```
(Yes, this is incredibly ugly. We should probably fix that in a separate patch.)
http://reviews.llvm.org/D13978
More information about the cfe-commits
mailing list