LLVM  3.7.0
SystemZCallingConv.h
Go to the documentation of this file.
1 //===-- SystemZCallingConv.h - Calling conventions for SystemZ --*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZCALLINGCONV_H
11 #define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZCALLINGCONV_H
12 
13 #include "llvm/ADT/SmallVector.h"
15 
16 namespace llvm {
17 namespace SystemZ {
18  const unsigned NumArgGPRs = 5;
19  extern const unsigned ArgGPRs[NumArgGPRs];
20 
21  const unsigned NumArgFPRs = 4;
22  extern const unsigned ArgFPRs[NumArgFPRs];
23 } // end namespace SystemZ
24 
25 class SystemZCCState : public CCState {
26 private:
27  /// Records whether the value was a fixed argument.
28  /// See ISD::OutputArg::IsFixed.
29  SmallVector<bool, 4> ArgIsFixed;
30 
31  /// Records whether the value was widened from a short vector type.
32  SmallVector<bool, 4> ArgIsShortVector;
33 
34  // Check whether ArgVT is a short vector type.
35  bool IsShortVectorType(EVT ArgVT) {
36  return ArgVT.isVector() && ArgVT.getStoreSize() <= 8;
37  }
38 
39 public:
42  : CCState(CC, isVarArg, MF, locs, C) {}
43 
45  CCAssignFn Fn) {
46  // Formal arguments are always fixed.
47  ArgIsFixed.clear();
48  for (unsigned i = 0; i < Ins.size(); ++i)
49  ArgIsFixed.push_back(true);
50  // Record whether the call operand was a short vector.
51  ArgIsShortVector.clear();
52  for (unsigned i = 0; i < Ins.size(); ++i)
53  ArgIsShortVector.push_back(IsShortVectorType(Ins[i].ArgVT));
54 
56  }
57 
59  CCAssignFn Fn) {
60  // Record whether the call operand was a fixed argument.
61  ArgIsFixed.clear();
62  for (unsigned i = 0; i < Outs.size(); ++i)
63  ArgIsFixed.push_back(Outs[i].IsFixed);
64  // Record whether the call operand was a short vector.
65  ArgIsShortVector.clear();
66  for (unsigned i = 0; i < Outs.size(); ++i)
67  ArgIsShortVector.push_back(IsShortVectorType(Outs[i].ArgVT));
68 
70  }
71 
72  // This version of AnalyzeCallOperands in the base class is not usable
73  // since we must provide a means of accessing ISD::OutputArg::IsFixed.
76  CCAssignFn Fn) = delete;
77 
78  bool IsFixed(unsigned ValNo) { return ArgIsFixed[ValNo]; }
79  bool IsShortVector(unsigned ValNo) { return ArgIsShortVector[ValNo]; }
80 };
81 
82 } // end namespace llvm
83 
84 #endif
void push_back(const T &Elt)
Definition: SmallVector.h:222
const unsigned ArgGPRs[NumArgGPRs]
void AnalyzeFormalArguments(const SmallVectorImpl< ISD::InputArg > &Ins, CCAssignFn Fn)
void AnalyzeFormalArguments(const SmallVectorImpl< ISD::InputArg > &Ins, CCAssignFn Fn)
AnalyzeFormalArguments - Analyze an array of argument values, incorporating info about the formals in...
bool CCAssignFn(unsigned ValNo, MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, CCState &State)
CCAssignFn - This function assigns a location for Val, updating State to reflect the change...
const unsigned NumArgGPRs
bool isVector() const
isVector - Return true if this is a vector value type.
Definition: ValueTypes.h:115
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition: APInt.h:33
const unsigned NumArgFPRs
unsigned getStoreSize() const
getStoreSize - Return the number of bytes overwritten by a store of the specified value type...
Definition: ValueTypes.h:245
This is an important class for using LLVM in a threaded context.
Definition: LLVMContext.h:41
void AnalyzeCallOperands(const SmallVectorImpl< ISD::OutputArg > &Outs, CCAssignFn Fn)
bool isVarArg() const
EVT - Extended Value Type.
Definition: ValueTypes.h:31
bool IsShortVector(unsigned ValNo)
CCState - This class holds information needed while lowering arguments and return values...
bool IsFixed(unsigned ValNo)
const unsigned ArgFPRs[NumArgFPRs]
SystemZCCState(CallingConv::ID CC, bool isVarArg, MachineFunction &MF, SmallVectorImpl< CCValAssign > &locs, LLVMContext &C)
void AnalyzeCallOperands(const SmallVectorImpl< ISD::OutputArg > &Outs, CCAssignFn Fn)
AnalyzeCallOperands - Analyze the outgoing arguments to a call, incorporating info about the passed v...