1ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//===-- llvm/Target/TargetCallingConv.h - Calling Convention ----*- C++ -*-===//
2ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//
3ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//                     The LLVM Compiler Infrastructure
4ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//
5ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman// This file is distributed under the University of Illinois Open Source
6ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman// License. See LICENSE.TXT for details.
7ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//
8ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//===----------------------------------------------------------------------===//
9ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//
10ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman// This file defines types for working with calling-convention information.
11ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//
12ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman//===----------------------------------------------------------------------===//
13ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
14ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman#ifndef LLVM_TARGET_TARGETCALLINGCONV_H
15ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman#define LLVM_TARGET_TARGETCALLINGCONV_H
16ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/CodeGen/ValueTypes.h"
1884a61269370138b68ae2bcd6711a9ae8004fd77aEli Friedman#include "llvm/Support/DataTypes.h"
1984a61269370138b68ae2bcd6711a9ae8004fd77aEli Friedman#include "llvm/Support/MathExtras.h"
20de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#include <climits>
2184a61269370138b68ae2bcd6711a9ae8004fd77aEli Friedman
22ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohmannamespace llvm {
23ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
24ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohmannamespace ISD {
25ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  struct ArgFlagsTy {
26ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  private:
27ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t NoFlagSet      = 0ULL;
28ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t ZExt           = 1ULL<<0;  ///< Zero extended
29ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t ZExtOffs       = 0;
30ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t SExt           = 1ULL<<1;  ///< Sign extended
31ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t SExtOffs       = 1;
32ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t InReg          = 1ULL<<2;  ///< Passed in register
33ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t InRegOffs      = 2;
34ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t SRet           = 1ULL<<3;  ///< Hidden struct-ret ptr
35ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t SRetOffs       = 3;
36ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t ByVal          = 1ULL<<4;  ///< Struct passed by value
37ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t ByValOffs      = 4;
38ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t Nest           = 1ULL<<5;  ///< Nested fn static chain
39ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t NestOffs       = 5;
4094a720c73e11f8b2f532d3dfb4e145c6b35a2ea2Stephen Lin    static const uint64_t Returned       = 1ULL<<6;  ///< Always returned
41456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    static const uint64_t ReturnedOffs   = 6;
42456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    static const uint64_t ByValAlign     = 0xFULL<<7; ///< Struct alignment
43456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    static const uint64_t ByValAlignOffs = 7;
44456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    static const uint64_t Split          = 1ULL<<11;
45456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    static const uint64_t SplitOffs      = 11;
4636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    static const uint64_t InAlloca       = 1ULL<<12; ///< Passed with inalloca
4736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    static const uint64_t InAllocaOffs   = 12;
48de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    static const uint64_t SplitEnd       = 1ULL<<13; ///< Last part of a split
49de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    static const uint64_t SplitEndOffs   = 13;
50de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    static const uint64_t SwiftSelf      = 1ULL<<14; ///< Swift self parameter
51de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    static const uint64_t SwiftSelfOffs  = 14;
52de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    static const uint64_t SwiftError     = 1ULL<<15; ///< Swift error parameter
53de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    static const uint64_t SwiftErrorOffs = 15;
54ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t OrigAlign      = 0x1FULL<<27;
55ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t OrigAlignOffs  = 27;
56dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    static const uint64_t ByValSize      = 0x3fffffffULL<<32; ///< Struct size
57ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    static const uint64_t ByValSizeOffs  = 32;
58dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    static const uint64_t InConsecutiveRegsLast      = 0x1ULL<<62; ///< Struct size
59dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    static const uint64_t InConsecutiveRegsLastOffs  = 62;
60dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    static const uint64_t InConsecutiveRegs      = 0x1ULL<<63; ///< Struct size
61dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    static const uint64_t InConsecutiveRegsOffs  = 63;
62ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
6377592fe39c404f3c48b06fae48b965058b3a5ee8Dmitri Gribenko    static const uint64_t One            = 1ULL; ///< 1 of this type, for shifts
64ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
65ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    uint64_t Flags;
66de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
67ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  public:
68ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    ArgFlagsTy() : Flags(0) { }
69ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
70456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    bool isZExt()      const { return Flags & ZExt; }
71456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    void setZExt()     { Flags |= One << ZExtOffs; }
72ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
73456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    bool isSExt()      const { return Flags & SExt; }
74456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    void setSExt()     { Flags |= One << SExtOffs; }
75ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
76456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    bool isInReg()     const { return Flags & InReg; }
77456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    void setInReg()    { Flags |= One << InRegOffs; }
78ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
79456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    bool isSRet()      const { return Flags & SRet; }
80456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    void setSRet()     { Flags |= One << SRetOffs; }
81ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
82456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    bool isByVal()     const { return Flags & ByVal; }
83456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    void setByVal()    { Flags |= One << ByValOffs; }
84ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool isInAlloca()  const { return Flags & InAlloca; }
8636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    void setInAlloca() { Flags |= One << InAllocaOffs; }
8736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
88de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    bool isSwiftSelf() const { return Flags & SwiftSelf; }
89de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    void setSwiftSelf() { Flags |= One << SwiftSelfOffs; }
90de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
91de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    bool isSwiftError() const { return Flags & SwiftError; }
92de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    void setSwiftError() { Flags |= One << SwiftErrorOffs; }
93de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
94456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    bool isNest()      const { return Flags & Nest; }
95456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    void setNest()     { Flags |= One << NestOffs; }
96456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin
97456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    bool isReturned()  const { return Flags & Returned; }
98456ca048af35163b9f52187e92a23ee0a9f059e8Stephen Lin    void setReturned() { Flags |= One << ReturnedOffs; }
99ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
100dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    bool isInConsecutiveRegs()  const { return Flags & InConsecutiveRegs; }
101dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    void setInConsecutiveRegs() { Flags |= One << InConsecutiveRegsOffs; }
102dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
103dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    bool isInConsecutiveRegsLast()  const { return Flags & InConsecutiveRegsLast; }
104dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines    void setInConsecutiveRegsLast() { Flags |= One << InConsecutiveRegsLastOffs; }
105dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines
106ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    unsigned getByValAlign() const {
107ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman      return (unsigned)
108ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman        ((One << ((Flags & ByValAlign) >> ByValAlignOffs)) / 2);
109ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    }
110ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    void setByValAlign(unsigned A) {
111ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman      Flags = (Flags & ~ByValAlign) |
112ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman        (uint64_t(Log2_32(A) + 1) << ByValAlignOffs);
113ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    }
114ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
115ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    bool isSplit()   const { return Flags & Split; }
116ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    void setSplit()  { Flags |= One << SplitOffs; }
117ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
118de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    bool isSplitEnd()   const { return Flags & SplitEnd; }
119de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar    void setSplitEnd()  { Flags |= One << SplitEndOffs; }
120de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar
121ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    unsigned getOrigAlign() const {
122ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman      return (unsigned)
123ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman        ((One << ((Flags & OrigAlign) >> OrigAlignOffs)) / 2);
124ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    }
125ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    void setOrigAlign(unsigned A) {
126ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman      Flags = (Flags & ~OrigAlign) |
127ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman        (uint64_t(Log2_32(A) + 1) << OrigAlignOffs);
128ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    }
129ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
130ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    unsigned getByValSize() const {
131ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman      return (unsigned)((Flags & ByValSize) >> ByValSizeOffs);
132ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    }
133ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    void setByValSize(unsigned S) {
134ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman      Flags = (Flags & ~ByValSize) | (uint64_t(S) << ByValSizeOffs);
135ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    }
136ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
137ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    /// getRawBits - Represent the flags as a bunch of bits.
138ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    uint64_t getRawBits() const { return Flags; }
139ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  };
140ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
141ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  /// InputArg - This struct carries flags and type information about a
142ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  /// single incoming (formal) argument or incoming (from the perspective
143ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  /// of the caller) return value virtual register.
144ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  ///
145ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  struct InputArg {
146ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    ArgFlagsTy Flags;
1471440e8b918d7116c3587cb95f4f7ac7a0a0b65adDuncan Sands    MVT VT;
148d0716b064744598ba7df33b8b47de0375c450570Tom Stellard    EVT ArgVT;
149ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    bool Used;
150ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
151661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy    /// Index original Function's argument.
152661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy    unsigned OrigArgIndex;
153ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    /// Sentinel value for implicit machine-level input arguments.
154ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    static const unsigned NoArgIndex = UINT_MAX;
155661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy
156661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy    /// Offset in bytes of current input value relative to the beginning of
157661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy    /// original argument. E.g. if argument was splitted into four 32 bit
158661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy    /// registers, we got 4 InputArgs with PartOffsets 0, 4, 8 and 12.
159661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy    unsigned PartOffset;
160661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy
161ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    InputArg() : VT(MVT::Other), Used(false) {}
162d0716b064744598ba7df33b8b47de0375c450570Tom Stellard    InputArg(ArgFlagsTy flags, EVT vt, EVT argvt, bool used,
163661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy             unsigned origIdx, unsigned partOffs)
164661afe75e81431a66de3ed8e22d5aa91443367b3Stepan Dyatkovskiy      : Flags(flags), Used(used), OrigArgIndex(origIdx), PartOffset(partOffs) {
1651440e8b918d7116c3587cb95f4f7ac7a0a0b65adDuncan Sands      VT = vt.getSimpleVT();
166d0716b064744598ba7df33b8b47de0375c450570Tom Stellard      ArgVT = argvt;
167ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    }
168ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
169ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    bool isOrigArg() const {
170ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return OrigArgIndex != NoArgIndex;
171ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
172ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines
173ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    unsigned getOrigArgIndex() const {
174ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      assert(OrigArgIndex != NoArgIndex && "Implicit machine-level argument");
175ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines      return OrigArgIndex;
176ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines    }
177ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  };
178ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
179ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  /// OutputArg - This struct carries flags and a value for a
180ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  /// single outgoing (actual) argument or outgoing (from the perspective
181ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  /// of the caller) return value virtual register.
182ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  ///
183ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  struct OutputArg {
184ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    ArgFlagsTy Flags;
1851440e8b918d7116c3587cb95f4f7ac7a0a0b65adDuncan Sands    MVT VT;
186d0716b064744598ba7df33b8b47de0375c450570Tom Stellard    EVT ArgVT;
187ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
188ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    /// IsFixed - Is this a "fixed" value, ie not passed through a vararg "...".
189ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    bool IsFixed;
190ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
1910a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren    /// Index original Function's argument.
1920a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren    unsigned OrigArgIndex;
1930a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren
1940a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren    /// Offset in bytes of current output value relative to the beginning of
1950a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren    /// original argument. E.g. if argument was splitted into four 32 bit
1960a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren    /// registers, we got 4 OutputArgs with PartOffsets 0, 4, 8 and 12.
1970a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren    unsigned PartOffset;
1980a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren
199ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    OutputArg() : IsFixed(false) {}
200d0716b064744598ba7df33b8b47de0375c450570Tom Stellard    OutputArg(ArgFlagsTy flags, EVT vt, EVT argvt, bool isfixed,
2010a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren              unsigned origIdx, unsigned partOffs)
2020a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren      : Flags(flags), IsFixed(isfixed), OrigArgIndex(origIdx),
2030a1544d2fd63d8101dc7d50974e65c95a0f6f98dManman Ren        PartOffset(partOffs) {
2041440e8b918d7116c3587cb95f4f7ac7a0a0b65adDuncan Sands      VT = vt.getSimpleVT();
205d0716b064744598ba7df33b8b47de0375c450570Tom Stellard      ArgVT = argvt;
206ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman    }
207ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman  };
208de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar} // end namespace ISD
209ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
210ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman} // end llvm namespace
211ce5172098d5eaae22244c925b608fe62a23baaf2Dan Gohman
212de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar#endif // LLVM_TARGET_TARGETCALLINGCONV_H
213