1 //===---- PPCCCState.h - CCState with PowerPC specific extensions -----------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 #include "PPCISelLowering.h"
13 #include "llvm/ADT/BitVector.h"
14 #include "llvm/ADT/SmallVector.h"
15 #include "llvm/CodeGen/CallingConvLower.h"
19 class PPCCCState
: public CCState
{
23 PreAnalyzeCallOperands(const SmallVectorImpl
<ISD::OutputArg
> &Outs
);
25 PreAnalyzeFormalArguments(const SmallVectorImpl
<ISD::InputArg
> &Ins
);
29 // Records whether the value has been lowered from an ppcf128.
30 SmallVector
<bool, 4> OriginalArgWasPPCF128
;
33 PPCCCState(CallingConv::ID CC
, bool isVarArg
, MachineFunction
&MF
,
34 SmallVectorImpl
<CCValAssign
> &locs
, LLVMContext
&C
)
35 : CCState(CC
, isVarArg
, MF
, locs
, C
) {}
37 bool WasOriginalArgPPCF128(unsigned ValNo
) { return OriginalArgWasPPCF128
[ValNo
]; }
38 void clearWasPPCF128() { OriginalArgWasPPCF128
.clear(); }
41 class AIXCCState
: public CCState
{
46 AIXCCState(CallingConv::ID CC
, bool IsVarArg
, MachineFunction
&MF
,
47 SmallVectorImpl
<CCValAssign
> &Locs
, LLVMContext
&C
)
48 : CCState(CC
, IsVarArg
, MF
, Locs
, C
) {}
50 void AnalyzeFormalArguments(const SmallVectorImpl
<ISD::InputArg
> &Ins
,
52 // All formal arguments are fixed.
53 IsFixed
.resize(Ins
.size(), true);
54 CCState::AnalyzeFormalArguments(Ins
, Fn
);
57 void AnalyzeCallOperands(const SmallVectorImpl
<ISD::OutputArg
> &Outs
,
59 // Record whether the call operand was a fixed argument.
60 IsFixed
.resize(Outs
.size(), false);
61 for (unsigned ValNo
= 0, E
= Outs
.size(); ValNo
!= E
; ++ValNo
)
62 if (Outs
[ValNo
].IsFixed
)
65 CCState::AnalyzeCallOperands(Outs
, Fn
);
68 bool isFixed(unsigned ValNo
) const { return IsFixed
.test(ValNo
); }
71 } // end namespace llvm