Chris Lattner | bbe664c | 2004-08-01 03:23:34 +0000 | [diff] [blame] | 1 | //===- Target.td - Target Independent TableGen interface ---*- tablegen -*-===// |
John Criswell | 856ba76 | 2003-10-21 15:17:13 +0000 | [diff] [blame] | 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file was developed by the LLVM research group and is distributed under |
| 6 | // the University of Illinois Open Source License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
Chris Lattner | ee6b5f6 | 2003-07-29 23:07:13 +0000 | [diff] [blame] | 9 | // |
| 10 | // This file defines the target-independent interfaces which should be |
| 11 | // implemented by each target which is using a TableGen based code generator. |
| 12 | // |
Misha Brukman | 01c1638 | 2003-05-29 18:48:17 +0000 | [diff] [blame] | 13 | //===----------------------------------------------------------------------===// |
| 14 | |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 15 | |
| 16 | //===----------------------------------------------------------------------===// |
| 17 | // |
Chris Lattner | b3aa319 | 2003-07-28 04:24:59 +0000 | [diff] [blame] | 18 | // Value types - These values correspond to the register types defined in the |
Chris Lattner | ec4f523 | 2003-08-07 13:52:22 +0000 | [diff] [blame] | 19 | // ValueTypes.h file. If you update anything here, you must update it there as |
| 20 | // well! |
Chris Lattner | 0ad1361 | 2003-07-30 22:16:41 +0000 | [diff] [blame] | 21 | // |
Chris Lattner | ec4f523 | 2003-08-07 13:52:22 +0000 | [diff] [blame] | 22 | class ValueType<int size, int value> { |
| 23 | string Namespace = "MVT"; |
| 24 | int Size = size; |
| 25 | int Value = value; |
| 26 | } |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 27 | |
Chris Lattner | 6565043 | 2004-02-11 03:08:45 +0000 | [diff] [blame] | 28 | def OtherVT: ValueType<0 , 0>; // "Other" value |
Chris Lattner | ec4f523 | 2003-08-07 13:52:22 +0000 | [diff] [blame] | 29 | def i1 : ValueType<1 , 1>; // One bit boolean value |
| 30 | def i8 : ValueType<8 , 2>; // 8-bit integer value |
| 31 | def i16 : ValueType<16 , 3>; // 16-bit integer value |
| 32 | def i32 : ValueType<32 , 4>; // 32-bit integer value |
| 33 | def i64 : ValueType<64 , 5>; // 64-bit integer value |
Chris Lattner | eedf3b5 | 2005-11-29 00:42:30 +0000 | [diff] [blame] | 34 | def i128 : ValueType<128, 6>; // 128-bit integer value |
Chris Lattner | ec4f523 | 2003-08-07 13:52:22 +0000 | [diff] [blame] | 35 | def f32 : ValueType<32 , 7>; // 32-bit floating point value |
| 36 | def f64 : ValueType<64 , 8>; // 64-bit floating point value |
| 37 | def f80 : ValueType<80 , 9>; // 80-bit floating point value |
Chris Lattner | a64d4cd | 2005-08-25 17:07:09 +0000 | [diff] [blame] | 38 | def f128 : ValueType<128, 10>; // 128-bit floating point value |
| 39 | def FlagVT : ValueType<0 , 11>; // Condition code or machine flag |
| 40 | def isVoid : ValueType<0 , 12>; // Produces no value |
Nate Begeman | 6a64861 | 2005-11-29 05:45:29 +0000 | [diff] [blame] | 41 | def Vector : ValueType<0 , 13>; // Abstract vector value |
| 42 | def v16i8 : ValueType<128, 14>; // 16 x i8 vector value |
| 43 | def v8i16 : ValueType<128, 15>; // 8 x i16 vector value |
| 44 | def v4i32 : ValueType<128, 16>; // 4 x i32 vector value |
| 45 | def v2i64 : ValueType<128, 17>; // 2 x i64 vector value |
| 46 | def v4f32 : ValueType<128, 18>; // 4 x f32 vector value |
| 47 | def v2f64 : ValueType<128, 19>; // 2 x f64 vector value |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 48 | |
| 49 | //===----------------------------------------------------------------------===// |
| 50 | // Register file description - These classes are used to fill in the target |
Chris Lattner | ccc8ed7 | 2005-10-04 05:09:20 +0000 | [diff] [blame] | 51 | // description classes. |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 52 | |
Chris Lattner | ccc8ed7 | 2005-10-04 05:09:20 +0000 | [diff] [blame] | 53 | class RegisterClass; // Forward def |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 54 | |
Chris Lattner | b228657 | 2004-09-14 04:17:02 +0000 | [diff] [blame] | 55 | // Register - You should define one instance of this class for each register |
| 56 | // in the target machine. String n will become the "name" of the register. |
Chris Lattner | ef242b1 | 2005-09-30 04:13:23 +0000 | [diff] [blame] | 57 | class Register<string n> { |
Misha Brukman | 01c1638 | 2003-05-29 18:48:17 +0000 | [diff] [blame] | 58 | string Namespace = ""; |
Chris Lattner | b228657 | 2004-09-14 04:17:02 +0000 | [diff] [blame] | 59 | string Name = n; |
Chris Lattner | b4d83c1 | 2004-08-21 02:17:39 +0000 | [diff] [blame] | 60 | |
| 61 | // SpillSize - If this value is set to a non-zero value, it is the size in |
| 62 | // bits of the spill slot required to hold this register. If this value is |
| 63 | // set to zero, the information is inferred from any register classes the |
| 64 | // register belongs to. |
| 65 | int SpillSize = 0; |
| 66 | |
| 67 | // SpillAlignment - This value is used to specify the alignment required for |
| 68 | // spilling the register. Like SpillSize, this should only be explicitly |
| 69 | // specified if the register is not in a register class. |
| 70 | int SpillAlignment = 0; |
Chris Lattner | 76bf868 | 2003-08-03 22:12:37 +0000 | [diff] [blame] | 71 | |
Chris Lattner | ef242b1 | 2005-09-30 04:13:23 +0000 | [diff] [blame] | 72 | // Aliases - A list of registers that this register overlaps with. A read or |
| 73 | // modification of this register can potentially read or modifie the aliased |
| 74 | // registers. |
| 75 | // |
| 76 | list<Register> Aliases = []; |
Misha Brukman | 01c1638 | 2003-05-29 18:48:17 +0000 | [diff] [blame] | 77 | } |
| 78 | |
Chris Lattner | b228657 | 2004-09-14 04:17:02 +0000 | [diff] [blame] | 79 | // RegisterGroup - This can be used to define instances of Register which |
| 80 | // need to specify aliases. |
| 81 | // List "aliases" specifies which registers are aliased to this one. This |
| 82 | // allows the code generator to be careful not to put two values with |
| 83 | // overlapping live ranges into registers which alias. |
| 84 | class RegisterGroup<string n, list<Register> aliases> : Register<n> { |
| 85 | let Aliases = aliases; |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 86 | } |
| 87 | |
| 88 | // RegisterClass - Now that all of the registers are defined, and aliases |
| 89 | // between registers are defined, specify which registers belong to which |
| 90 | // register classes. This also defines the default allocation order of |
| 91 | // registers by register allocators. |
| 92 | // |
Nate Begeman | 6510b22 | 2005-12-01 04:51:06 +0000 | [diff] [blame] | 93 | class RegisterClass<string namespace, list<ValueType> regTypes, int alignment, |
Chris Lattner | 1ff9540 | 2005-08-19 18:48:48 +0000 | [diff] [blame] | 94 | list<Register> regList> { |
| 95 | string Namespace = namespace; |
| 96 | |
Chris Lattner | 0ad1361 | 2003-07-30 22:16:41 +0000 | [diff] [blame] | 97 | // RegType - Specify the ValueType of the registers in this register class. |
| 98 | // Note that all registers in a register class must have the same ValueType. |
| 99 | // |
Nate Begeman | 6510b22 | 2005-12-01 04:51:06 +0000 | [diff] [blame] | 100 | list<ValueType> RegTypes = regTypes; |
| 101 | |
| 102 | // Size - Specify the spill size in bits of the registers. A default value of |
| 103 | // zero lets tablgen pick an appropriate size. |
| 104 | int Size = 0; |
Chris Lattner | 0ad1361 | 2003-07-30 22:16:41 +0000 | [diff] [blame] | 105 | |
| 106 | // Alignment - Specify the alignment required of the registers when they are |
| 107 | // stored or loaded to memory. |
| 108 | // |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 109 | int Alignment = alignment; |
Chris Lattner | 0ad1361 | 2003-07-30 22:16:41 +0000 | [diff] [blame] | 110 | |
| 111 | // MemberList - Specify which registers are in this class. If the |
| 112 | // allocation_order_* method are not specified, this also defines the order of |
| 113 | // allocation used by the register allocator. |
| 114 | // |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 115 | list<Register> MemberList = regList; |
Chris Lattner | 0ad1361 | 2003-07-30 22:16:41 +0000 | [diff] [blame] | 116 | |
Chris Lattner | ecbce61 | 2005-08-19 19:13:20 +0000 | [diff] [blame] | 117 | // MethodProtos/MethodBodies - These members can be used to insert arbitrary |
| 118 | // code into a generated register class. The normal usage of this is to |
| 119 | // overload virtual methods. |
| 120 | code MethodProtos = [{}]; |
| 121 | code MethodBodies = [{}]; |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 122 | } |
| 123 | |
| 124 | |
| 125 | //===----------------------------------------------------------------------===// |
Jim Laskey | 5384214 | 2005-10-19 19:51:16 +0000 | [diff] [blame] | 126 | // Pull in the common support for scheduling |
| 127 | // |
| 128 | include "../TargetSchedule.td" |
| 129 | |
Evan Cheng | 58e84a6 | 2005-12-14 22:02:59 +0000 | [diff] [blame^] | 130 | class Predicate; // Forward def |
Jim Laskey | 5384214 | 2005-10-19 19:51:16 +0000 | [diff] [blame] | 131 | |
| 132 | //===----------------------------------------------------------------------===// |
Chris Lattner | a5100d9 | 2003-08-03 18:18:31 +0000 | [diff] [blame] | 133 | // Instruction set description - These classes correspond to the C++ classes in |
| 134 | // the Target/TargetInstrInfo.h file. |
Chris Lattner | 7c28952 | 2003-07-30 05:50:12 +0000 | [diff] [blame] | 135 | // |
Misha Brukman | 01c1638 | 2003-05-29 18:48:17 +0000 | [diff] [blame] | 136 | class Instruction { |
Chris Lattner | 33c23dd | 2004-08-01 09:36:44 +0000 | [diff] [blame] | 137 | string Name = ""; // The opcode string for this instruction |
Misha Brukman | 01c1638 | 2003-05-29 18:48:17 +0000 | [diff] [blame] | 138 | string Namespace = ""; |
| 139 | |
Chris Lattner | bbe664c | 2004-08-01 03:23:34 +0000 | [diff] [blame] | 140 | dag OperandList; // An dag containing the MI operand list. |
Chris Lattner | c139203 | 2004-08-01 04:40:43 +0000 | [diff] [blame] | 141 | string AsmString = ""; // The .s format to print the instruction with. |
Chris Lattner | bbe664c | 2004-08-01 03:23:34 +0000 | [diff] [blame] | 142 | |
| 143 | // Pattern - Set to the DAG pattern for this instruction, if we know of one, |
| 144 | // otherwise, uninitialized. |
| 145 | list<dag> Pattern; |
| 146 | |
| 147 | // The follow state will eventually be inferred automatically from the |
| 148 | // instruction pattern. |
| 149 | |
| 150 | list<Register> Uses = []; // Default to using no non-operand registers |
| 151 | list<Register> Defs = []; // Default to modifying no non-operand registers |
Misha Brukman | 01c1638 | 2003-05-29 18:48:17 +0000 | [diff] [blame] | 152 | |
Evan Cheng | 58e84a6 | 2005-12-14 22:02:59 +0000 | [diff] [blame^] | 153 | // Predicates - List of predicates which will be turned into isel matching |
| 154 | // code. |
| 155 | list<Predicate> Predicates = []; |
| 156 | |
Misha Brukman | 01c1638 | 2003-05-29 18:48:17 +0000 | [diff] [blame] | 157 | // These bits capture information about the high-level semantics of the |
| 158 | // instruction. |
Chris Lattner | 84c40c1 | 2003-07-29 23:02:49 +0000 | [diff] [blame] | 159 | bit isReturn = 0; // Is this instruction a return instruction? |
| 160 | bit isBranch = 0; // Is this instruction a branch instruction? |
Chris Lattner | 2a809f6 | 2004-07-31 02:07:07 +0000 | [diff] [blame] | 161 | bit isBarrier = 0; // Can control flow fall through this instruction? |
Chris Lattner | 84c40c1 | 2003-07-29 23:02:49 +0000 | [diff] [blame] | 162 | bit isCall = 0; // Is this instruction a call instruction? |
Nate Begeman | 8d5c503 | 2004-09-28 21:29:00 +0000 | [diff] [blame] | 163 | bit isLoad = 0; // Is this instruction a load instruction? |
| 164 | bit isStore = 0; // Is this instruction a store instruction? |
Chris Lattner | 84c40c1 | 2003-07-29 23:02:49 +0000 | [diff] [blame] | 165 | bit isTwoAddress = 0; // Is this a two address instruction? |
Chris Lattner | 273f228 | 2005-01-02 02:27:48 +0000 | [diff] [blame] | 166 | bit isConvertibleToThreeAddress = 0; // Can this 2-addr instruction promote? |
| 167 | bit isCommutable = 0; // Is this 3 operand instruction commutable? |
Chris Lattner | 84c40c1 | 2003-07-29 23:02:49 +0000 | [diff] [blame] | 168 | bit isTerminator = 0; // Is this part of the terminator for a basic block? |
Chris Lattner | 7baaf09 | 2004-09-28 18:34:14 +0000 | [diff] [blame] | 169 | bit hasDelaySlot = 0; // Does this instruction have an delay slot? |
Chris Lattner | e3cbf82 | 2005-08-26 20:55:40 +0000 | [diff] [blame] | 170 | bit usesCustomDAGSchedInserter = 0; // Pseudo instr needing special help. |
Evan Cheng | f8ac814 | 2005-12-04 08:13:17 +0000 | [diff] [blame] | 171 | bit hasCtrlDep = 0; // Does this instruction r/w ctrl-flow chains? |
Jim Laskey | 5384214 | 2005-10-19 19:51:16 +0000 | [diff] [blame] | 172 | |
| 173 | InstrItinClass Itinerary; // Execution steps used for scheduling. |
Chris Lattner | 3e77d6e | 2003-08-06 15:31:02 +0000 | [diff] [blame] | 174 | } |
| 175 | |
Evan Cheng | 58e84a6 | 2005-12-14 22:02:59 +0000 | [diff] [blame^] | 176 | /// Predicates - These are extra conditionals which are turned into instruction |
| 177 | /// selector matching code. Currently each predicate is just a string. |
| 178 | class Predicate<string cond> { |
| 179 | string CondString = cond; |
| 180 | } |
| 181 | |
| 182 | class Requires<list<Predicate> preds> { |
| 183 | list<Predicate> Predicates = preds; |
| 184 | } |
Chris Lattner | 3e77d6e | 2003-08-06 15:31:02 +0000 | [diff] [blame] | 185 | |
Chris Lattner | c139203 | 2004-08-01 04:40:43 +0000 | [diff] [blame] | 186 | /// ops definition - This is just a simple marker used to identify the operands |
| 187 | /// list for an instruction. This should be used like this: |
| 188 | /// (ops R32:$dst, R32:$src) or something similar. |
| 189 | def ops; |
Chris Lattner | 52d2f14 | 2004-08-11 01:53:34 +0000 | [diff] [blame] | 190 | |
Chris Lattner | 329cdc3 | 2005-08-18 23:17:07 +0000 | [diff] [blame] | 191 | /// variable_ops definition - Mark this instruction as taking a variable number |
| 192 | /// of operands. |
| 193 | def variable_ops; |
| 194 | |
Chris Lattner | 52d2f14 | 2004-08-11 01:53:34 +0000 | [diff] [blame] | 195 | /// Operand Types - These provide the built-in operand types that may be used |
| 196 | /// by a target. Targets can optionally provide their own operand types as |
| 197 | /// needed, though this should not be needed for RISC targets. |
| 198 | class Operand<ValueType ty> { |
Chris Lattner | 52d2f14 | 2004-08-11 01:53:34 +0000 | [diff] [blame] | 199 | ValueType Type = ty; |
| 200 | string PrintMethod = "printOperand"; |
Chris Lattner | be7a2ff | 2005-11-19 07:00:10 +0000 | [diff] [blame] | 201 | int NumMIOperands = 1; |
| 202 | dag MIOperandInfo = (ops); |
Chris Lattner | 52d2f14 | 2004-08-11 01:53:34 +0000 | [diff] [blame] | 203 | } |
| 204 | |
Chris Lattner | fa14683 | 2004-08-15 05:37:00 +0000 | [diff] [blame] | 205 | def i1imm : Operand<i1>; |
Chris Lattner | 52d2f14 | 2004-08-11 01:53:34 +0000 | [diff] [blame] | 206 | def i8imm : Operand<i8>; |
| 207 | def i16imm : Operand<i16>; |
| 208 | def i32imm : Operand<i32>; |
| 209 | def i64imm : Operand<i64>; |
Chris Lattner | a5100d9 | 2003-08-03 18:18:31 +0000 | [diff] [blame] | 210 | |
Chris Lattner | 175580c | 2004-08-14 22:50:53 +0000 | [diff] [blame] | 211 | // InstrInfo - This class should only be instantiated once to provide parameters |
| 212 | // which are global to the the target machine. |
| 213 | // |
| 214 | class InstrInfo { |
| 215 | Instruction PHIInst; |
| 216 | |
| 217 | // If the target wants to associate some target-specific information with each |
| 218 | // instruction, it should provide these two lists to indicate how to assemble |
| 219 | // the target specific information into the 32 bits available. |
| 220 | // |
| 221 | list<string> TSFlagsFields = []; |
| 222 | list<int> TSFlagsShifts = []; |
Misha Brukman | 99ee67a | 2004-10-14 05:53:40 +0000 | [diff] [blame] | 223 | |
| 224 | // Target can specify its instructions in either big or little-endian formats. |
| 225 | // For instance, while both Sparc and PowerPC are big-endian platforms, the |
| 226 | // Sparc manual specifies its instructions in the format [31..0] (big), while |
| 227 | // PowerPC specifies them using the format [0..31] (little). |
| 228 | bit isLittleEndianEncoding = 0; |
Chris Lattner | 175580c | 2004-08-14 22:50:53 +0000 | [diff] [blame] | 229 | } |
| 230 | |
| 231 | //===----------------------------------------------------------------------===// |
| 232 | // AsmWriter - This class can be implemented by targets that need to customize |
| 233 | // the format of the .s file writer. |
| 234 | // |
| 235 | // Subtargets can have multiple different asmwriters (e.g. AT&T vs Intel syntax |
| 236 | // on X86 for example). |
| 237 | // |
| 238 | class AsmWriter { |
| 239 | // AsmWriterClassName - This specifies the suffix to use for the asmwriter |
| 240 | // class. Generated AsmWriter classes are always prefixed with the target |
| 241 | // name. |
| 242 | string AsmWriterClassName = "AsmPrinter"; |
| 243 | |
| 244 | // InstFormatName - AsmWriters can specify the name of the format string to |
| 245 | // print instructions with. |
| 246 | string InstFormatName = "AsmString"; |
Chris Lattner | 0fa2066 | 2004-10-03 19:34:18 +0000 | [diff] [blame] | 247 | |
| 248 | // Variant - AsmWriters can be of multiple different variants. Variants are |
| 249 | // used to support targets that need to emit assembly code in ways that are |
| 250 | // mostly the same for different targets, but have minor differences in |
| 251 | // syntax. If the asmstring contains {|} characters in them, this integer |
| 252 | // will specify which alternative to use. For example "{x|y|z}" with Variant |
| 253 | // == 1, will expand to "y". |
| 254 | int Variant = 0; |
Chris Lattner | 175580c | 2004-08-14 22:50:53 +0000 | [diff] [blame] | 255 | } |
| 256 | def DefaultAsmWriter : AsmWriter; |
| 257 | |
| 258 | |
Chris Lattner | a5100d9 | 2003-08-03 18:18:31 +0000 | [diff] [blame] | 259 | //===----------------------------------------------------------------------===// |
| 260 | // Target - This class contains the "global" target information |
| 261 | // |
| 262 | class Target { |
| 263 | // CalleeSavedRegisters - As you might guess, this is a list of the callee |
| 264 | // saved registers for a target. |
| 265 | list<Register> CalleeSavedRegisters = []; |
| 266 | |
| 267 | // PointerType - Specify the value type to be used to represent pointers in |
| 268 | // this target. Typically this is an i32 or i64 type. |
| 269 | ValueType PointerType; |
| 270 | |
Chris Lattner | 175580c | 2004-08-14 22:50:53 +0000 | [diff] [blame] | 271 | // InstructionSet - Instruction set description for this target. |
Chris Lattner | a5100d9 | 2003-08-03 18:18:31 +0000 | [diff] [blame] | 272 | InstrInfo InstructionSet; |
Chris Lattner | 175580c | 2004-08-14 22:50:53 +0000 | [diff] [blame] | 273 | |
Chris Lattner | 0fa2066 | 2004-10-03 19:34:18 +0000 | [diff] [blame] | 274 | // AssemblyWriters - The AsmWriter instances available for this target. |
| 275 | list<AsmWriter> AssemblyWriters = [DefaultAsmWriter]; |
Misha Brukman | 01c1638 | 2003-05-29 18:48:17 +0000 | [diff] [blame] | 276 | } |
Chris Lattner | 244883e | 2003-08-04 21:07:37 +0000 | [diff] [blame] | 277 | |
Chris Lattner | 244883e | 2003-08-04 21:07:37 +0000 | [diff] [blame] | 278 | //===----------------------------------------------------------------------===// |
Jim Laskey | 0de8796 | 2005-10-19 13:34:52 +0000 | [diff] [blame] | 279 | // SubtargetFeature - A characteristic of the chip set. |
| 280 | // |
Jim Laskey | f0c2be4 | 2005-10-26 17:28:23 +0000 | [diff] [blame] | 281 | class SubtargetFeature<string n, string t, string a, string d> { |
Jim Laskey | 0de8796 | 2005-10-19 13:34:52 +0000 | [diff] [blame] | 282 | // Name - Feature name. Used by command line (-mattr=) to determine the |
| 283 | // appropriate target chip. |
| 284 | // |
| 285 | string Name = n; |
| 286 | |
Jim Laskey | f0c2be4 | 2005-10-26 17:28:23 +0000 | [diff] [blame] | 287 | // Type - Type of attribute to be set by feature. |
| 288 | // |
| 289 | string Type = t; |
| 290 | |
| 291 | // Attribute - Attribute to be set by feature. |
| 292 | // |
| 293 | string Attribute = a; |
| 294 | |
Jim Laskey | 0de8796 | 2005-10-19 13:34:52 +0000 | [diff] [blame] | 295 | // Desc - Feature description. Used by command line (-mattr=) to display help |
| 296 | // information. |
| 297 | // |
| 298 | string Desc = d; |
| 299 | } |
| 300 | |
| 301 | //===----------------------------------------------------------------------===// |
| 302 | // Processor chip sets - These values represent each of the chip sets supported |
| 303 | // by the scheduler. Each Processor definition requires corresponding |
| 304 | // instruction itineraries. |
| 305 | // |
| 306 | class Processor<string n, ProcessorItineraries pi, list<SubtargetFeature> f> { |
| 307 | // Name - Chip set name. Used by command line (-mcpu=) to determine the |
| 308 | // appropriate target chip. |
| 309 | // |
| 310 | string Name = n; |
| 311 | |
| 312 | // ProcItin - The scheduling information for the target processor. |
| 313 | // |
| 314 | ProcessorItineraries ProcItin = pi; |
| 315 | |
| 316 | // Features - list of |
Jim Laskey | f5fc2cb | 2005-10-21 19:05:19 +0000 | [diff] [blame] | 317 | list<SubtargetFeature> Features = f; |
Jim Laskey | 0de8796 | 2005-10-19 13:34:52 +0000 | [diff] [blame] | 318 | } |
| 319 | |
| 320 | //===----------------------------------------------------------------------===// |
Chris Lattner | 17f2cf0 | 2005-10-10 06:00:30 +0000 | [diff] [blame] | 321 | // Pull in the common support for DAG isel generation |
Chris Lattner | 244883e | 2003-08-04 21:07:37 +0000 | [diff] [blame] | 322 | // |
Chris Lattner | 17f2cf0 | 2005-10-10 06:00:30 +0000 | [diff] [blame] | 323 | include "../TargetSelectionDAG.td" |