OpenASIP 2.2
Loading...
Searching...
No Matches
TDGen.hh
Go to the documentation of this file.
1/*
2 Copyright (c) 2002-2020 Tampere University.
3
4 This file is part of TTA-Based Codesign Environment (TCE).
5
6 Permission is hereby granted, free of charge, to any person obtaining a
7 copy of this software and associated documentation files (the "Software"),
8 to deal in the Software without restriction, including without limitation
9 the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 and/or sell copies of the Software, and to permit persons to whom the
11 Software is furnished to do so, subject to the following conditions:
12
13 The above copyright notice and this permission notice shall be included in
14 all copies or substantial portions of the Software.
15
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 DEALINGS IN THE SOFTWARE.
23 */
24/**
25 * @file TDGen.hh
26 *
27 * Declaration of TDGen class.
28 *
29 * @author Veli-Pekka Jääskeläinen 2008 (vjaaskel-no.spam-cs.tut.fi)
30 * @author Pekka Jääskeläinen 2010
31 * @author Heikki Kultala 2012
32 */
33
34#ifndef TTA_TDGEN_HH
35#define TTA_TDGEN_HH
36
37#include <iostream>
38#include <map>
39#include <set>
40#include <string>
41#include <vector>
42
43#include "Exception.hh"
44#include "ImmInfo.hh"
45#include "MachinePart.hh"
46#include "Operand.hh"
48#include "TCEString.hh"
49
50class Operation;
51class Operand;
52class OperationDAG;
53class OperationNode;
55class TerminalNode;
56class ConstantNode;
57
58namespace TTAMachine {
59 class Machine;
60 class RegisterFile;
61}
62
63namespace TDGenerator {
64struct RegisterInfo;
65struct InstructionInfo;
66class ValueType;
67class RegisterClass;
68} // namespace TDGenerator
69
70/**
71 * TCE Backend plugin source code and .td definition generator.
72 *
73 * Generates files for building target architecture plugin for LLVM-TCE
74 * backend. This version generates the backend files for the "RISC
75 * instruction set style" output and provides useful methods.
76 */
77class TDGen {
78public:
79 TDGen(const TTAMachine::Machine& mach, bool initialize=true);
80 virtual ~TDGen();
81 virtual void generateBackend(const std::string& path) const;
82 virtual std::string generateBackend() const;
83 // todo clear out virtual functions. they are a remaind of removed
84 // TDGenSIMD.
85protected:
86 bool writeRegisterInfo(std::ostream& o);
87 void writeStartOfRegisterInfo(std::ostream& o);
88 void writeOperandDefs(std::ostream& o);
89 void writeIntegerImmediateDefs(std::ostream& o, const ImmInfo& iivis);
90 void writeMoveImmediateDefs(std::ostream& o);
91
92 void writeInstrInfo(std::ostream& o);
93 void writeBackendCode(std::ostream& o);
94 void writeTopLevelTD(std::ostream& o);
95 void writeInstrFormats(std::ostream& o);
96
103
104 struct TerminalDef {
105 std::string registerPat;
106 std::string registerDag;
107 std::string immPat;
108 std::string immDag;
109 };
110
111 struct RegInfo {
112 std::string rf;
113 unsigned idx;
114
115 // Comparison operator for ordering in set.
116 bool operator<(const RegInfo& other) const {
117 if (rf < other.rf ||
118 (rf == other.rf && idx < other.idx)) {
119
120 return true;
121 }
122
123 return false;
124 }
125 };
126
133 // Gather & associate machine information
134 // TODO maybe remove this comment, because in TDGenSIMD made sense, but
135 // here is more confusing
137 void analyzeRegisters();
139 void analyzeRegisters(RegsToProcess regsToProcess);
145
146 void verbose(const TCEString& msg) const;
147
148 // Helper functions.
149 bool isVectorLoadOperation(const Operation& op) const;
150 bool isVectorStoreOperation(const Operation& op) const;
151 bool isWrongEndianessVectorOp(const Operation& op) const;
152 bool isVectorBitwiseOperation(const Operation& op) const;
153 bool hasRawOperands(const Operation& op) const;
154 int subwordWidthOfRawData(const Operation& op) const;
155 bool hasRegisterClassSupport(const Operation& op) const;
157 TCEString associatedVectorRegisterClass(const Operand& operand) const;
159 std::ostream& o, const TCEString& origPat,
160 const TCEString& replacerPat) const;
162 std::ostream& o, Operation& op, bool skipPattern,
163 std::vector<TDGenerator::ValueType> inputs,
164 std::vector<TDGenerator::ValueType> outputs,
165 TCEString instrSuffix = "");
166
167 void writeRegisterDef(
168 std::ostream& o,
169 const RegInfo& reg,
170 const std::string regName,
171 const std::string regTemplate,
172 const std::string aliases,
173 RegType type);
174
175 void write64bitRegisterInfo(std::ostream& o);
176 void write32bitRegisterInfo(std::ostream& o);
177 void write16bitRegisterInfo(std::ostream& o);
178 void write8bitRegisterInfo(std::ostream& o);
179 void write1bitRegisterInfo(std::ostream& o);
180 void writeRARegisterInfo(std::ostream& o);
181// void writeVectorRegisterInfo(std::ostream& o);
182// void writeVectorRegisterInfo(std::ostream& o, int width);
183 void writeGuardRegisterClassInfo(std::ostream& o);
184
185 // these generate vectorregister info in the GenRegisterInfo.td
186 // definitions
187 void writeVectorRegisterBaseClasses(std::ostream& o) const;
188 void writeVectorRegisterNames(std::ostream& o);
189 void writeVectorRegisterClasses(std::ostream& o) const;
190
191 // These generate vector GenInstrInfo.td definitions.
193 std::ostream& o, Operation& op, bool skipPattern);
195 std::ostream& o, Operation& op, TCEString valueTypes,
196 const TCEString& attributes, bool skipPattern);
198 const Operation& op, const TCEString& valueTypes, bool isRegisterOp);
200 std::ostream& o, Operation& op, bool skipPattern);
202 std::ostream& o, Operation& op, bool skipPattern);
203
204 void writeVectorRegisterMoveDefs(std::ostream& o);
205 void writeVectorTruncStoreDefs(std::ostream& o) const;
206 void writeScalarToVectorDefs(std::ostream& o) const;
207 void writeVectorBitConversions(std::ostream& o) const;
208 void writeScalarOperationExploitations(std::ostream& o);
209 void writeVectorLoadStoreOperationExploitations(std::ostream& o);
210 void writeWiderVectorOperationExploitations(std::ostream& o);
211
212 // These generate vector Backend.inc definitions.
213 void genGeneratedTCEPlugin_getStore(std::ostream& o) const;
214 void genGeneratedTCEPlugin_getLoad(std::ostream& o) const;
216 void genGeneratedTCEPlugin_getVectorValueType(std::ostream& o) const;
218 std::ostream& o) const;
219 void genGeneratedTCEPlugin_getVectorPackOpcode(std::ostream& o) const;
224 std::ostream& o) const;
233 std::ostream& o) const;
235 std::ostream& o) const;
236 void genTCETargetLoweringSIMD_getSetCCResultVT(std::ostream& o) const;
237 void genTCEInstrInfoSIMD_copyPhysVectorReg(std::ostream& o) const;
238
240 std::ostream& o) const;
241 void genGeneratedTCEPlugin_getGatherOpcode(std::ostream& o) const;
242 void genGeneratedTCEPlugin_getLoadOpcode(std::ostream& o) const;
243 void genGeneratedTCEPlugin_getAddOpcode(std::ostream& o) const;
244 void genGeneratedTCEPlugin_getShlOpcode(std::ostream& o) const;
245 void genGeneratedTCEPlugin_getIorOpcode(std::ostream& o) const;
246
247 void writeVectorImmediateWriteDefs(std::ostream& instrInfoTD);
248
249 void createMinMaxDef(
250 const TCEString& opName, const TCEString& valueName, std::ostream&os);
251
253 const TCEString& opName,
254 int bits,
255 char llvmTypeChar,
256 const TCEString& postFix,
257 std::ostream& os);
258
259 void writeOperationDefs(std::ostream& o, Operation& op, bool skipPattern);
260
262 std::ostream& o, Operation& op, const std::string& operandTypes,
263 const std::string& attrs, bool skipPattern,
264 std::string backendPrefix = "");
265
266 std::string emulatingOpNodeLLVMName(
267 const Operation& op, const OperationDAG& dag, const OperationNode& node,
268 const std::string& operandTypes);
269
271 std::ostream& o, const Operation& op, const OperationDAG& dag);
272
273 void write64bitMoveDefs(std::ostream& o);
274
275 void writeControlFlowInstrDefs(std::ostream& os);
276 void writeCondBranchDefs(std::ostream& os);
277 void writeCallDef(std::ostream& o);
278 void writeHWLoopDef(std::ostream& o);
279 virtual void writeCallDefRegs(std::ostream& o);
280
281 void writeRegisterClasses(std::ostream& o);
282
284 const Operation& op, char operandType = ' ') const;
285
286 virtual TCEString
287 llvmOperationName(const TCEString& opName) const;
288
290 const Operation& op,
291 std::set<std::string>* recursionCycleCheck = NULL,
292 bool recursionHasStore = false);
294 const OperationDAG& op,
295 std::set<std::string>* recursionCycleCheck = NULL,
296 bool recursionHasStore = false);
298 const Operation& op);
299
300 const std::vector<OperationDAG*> getMatchableOperationDAGs(
301 const Operation& op);
302
303 std::string tceOperationPattern(const Operation& op);
304
305 std::string patOutputs(const Operation& op, const std::string& oprTypes);
306 std::string patInputs(const Operation& op, const std::string& oprTypes);
307
308 virtual std::string operandToString(
309 const Operand& operand,
310 bool match,
311 char operandType,
312 const std::string& immDefName = "");
313
314 std::string operationNodeToString(
315 const Operation& op, const OperationDAG& dag,
316 const OperationNode& node, bool emulationPattern,
317 const std::string& operandTypes);
318
319 std::string constantNodeString(
320 const Operation& op,
321 const OperationDAG& dag,
322 const ConstantNode& node,
323 const std::string& operandTypes,
324 const OperationDAGNode* successor = nullptr);
325
326 std::string dagNodeToString(
327 const Operation& op, const OperationDAG& dag,
328 const OperationDAGNode& node, bool emulationPattern,
329 const std::string& operandTypes, const Operation* emulatingOp = nullptr,
330 const OperationDAGNode* successor = nullptr);
331
332 std::string operationPattern(
333 const Operation& op, const OperationDAG& dag,
334 const std::string& operandTypes);
335
336 virtual char operandChar(Operand& operand);
337
338 std::string createDefaultOperandTypeString(const Operation& op);
339
341 std::ostream& o,
342 const TCEString& opName,
343 const TCEString& opNameSuffix,
344 bool addrImm,
345 const TCEString& dataType,
346 bool writePredicatedVersions);
347
348 void genTCEInstrInfo_copyPhys64bitReg(std::ostream&o) const;
349
350 void writeArgRegsArray(std::ostream& os);
351 virtual void createSelectPatterns(std::ostream& os);
352 void writeAddressingModeDefs(std::ostream& o);
353
354 void createByteExtLoadPatterns(std::ostream& os);
355 void createShortExtLoadPatterns(std::ostream& os);
356 void create32BitExtLoadPatterns(std::ostream& os);
357
358 void createEndiannesQuery(std::ostream& os);
359 void createConstantMaterializationQuery(std::ostream& os);
360 void createConstShiftPatterns(std::ostream& os);
361
363 std::ostream& o, Operation& op, const std::string& operandTypes,
364 const std::string& attrs, bool skipPattern,
365 std::string backendPrefix = "");
366
367 void writeVectorStoreDefs(std::ostream& o, Operation& op, int vectorLen);
368
370 std::ostream& o, Operation& op, int bitsize, int vectorLen);
371
372 void createGetMaxMemoryAlignment(std::ostream& os) const;
373
375 std::ostream& o, Operation& op, const TCEString& loadPatternName,
376 int vectorLen);
377
379 std::ostream& o, const TCEString& opName, const TCEString& opNameSuffix,
380 bool addrImm, const TCEString& resultType,
381 const TCEString& loadPatternName, bool writePredicatedVersions);
382
383 virtual void writeImmediateDef(
384 std::ostream& o, const std::string& defName,
385 const std::string& operandType, const std::string& predicate);
386 void writeInstrDef(
387 std::ostream& o, const std::string& instrDefName,
388 const std::string& outs, const std::string& ins,
389 const std::string& asmString, const std::string& pattern);
390
392 std::ostream& o, Operation& op, const TCEString& loadPatternName,
393 int vectorLen);
394
395 void writeBooleanStorePatterns(std::ostream& os);
396
397 std::string immediatePredicate(
398 int64_t lowerBoundInclusive,
399 uint64_t upperBoundInclusive);
401 const OperationDAG&,
402 const Operand& operand);
404 const Operation& operation,
405 const std::string& operandTypes) const;
406
407 void writeBroadcastDefs(std::ostream& o, Operation& op, int vectorLen);
408
410 std::ostream& os, const TCEString& tceop1, const TCEString& tceop2,
411 bool fp = false);
412
413 std::string subPattern(const Operation& op, const OperationDAG& dag);
414
416 bool canBeImmediate(const OperationDAG& dag, const TerminalNode& node);
417
418 virtual void createMinMaxGenerator(std::ostream& os);
419
420 void writeCallSeqStart(std::ostream& os);
421 void writeMiscPatterns(std::ostream& o);
422 void generateLoadStoreCopyGenerator(std::ostream& os);
423
424 void createParamDRegNums(std::ostream& os);
425 virtual void createVectorRVDRegNums(std::ostream& os);
426
427 void writeCallingConv(std::ostream& os);
428 void writeCallingConvLicenceText(std::ostream& os);
429
431 std::ostream& os, const TCEString& nodeName,
432 const TCEString& opNameBase, int i);
433
434 /// Maps (operation, operand) pairs to i32 immediate operand definition
435 /// names.
436 std::map<ImmInfoKey, std::string> immOperandDefs_;
437
438 void createBoolAndHalfLoadPatterns(std::ostream& os);
439
440 virtual void createConstantMaterializationPatterns(std::ostream& os);
441
442 void createBranchAnalysis(std::ostream& os);
443
444 void genTCERegisterInfo_setReservedVectorRegs(std::ostream& os) const;
445
446 void writeGetPointerAdjustmentQuery(std::ostream& os) const;
447
448 bool canBePredicated(Operation& op, const std::string& operandTypes);
449 static std::vector<std::string> supportedStackAccessOperations(
450 const TTAMachine::Machine& mach);
451
453 const Operation& op, const std::string& operandTypes,
454 const std::string& operand0, const std::string& operand1) const;
455
456 std::string operandTypesToRegisters(const std::string& opdTypes) const;
457 char operandTypeToRegister(const char& opdType) const;
458
460 const char& opdType, const std::string& inputPattern) const;
461
464
466
467 // Current dwarf register number.
468 unsigned dregNum_;
469 std::string registerInfo_;
471 std::string operandDefs_;
472 std::string instrInfo_;
473 std::string instrFormats_;
474 std::string callingConv_;
475 std::string argRegsArray_;
476 std::string backendCode_;
477 std::string topLevelTD_;
478
479 /// Float type subword width.
480 static const int FP_SUBW_WIDTH;
481 /// Half float type subword width.
482 static const int HFP_SUBW_WIDTH;
483 /// Bool type subword width.
484 static const int BOOL_SUBW_WIDTH;
485 /// Distincts wide vs scalar registers.
486 static const int MAX_SCALAR_WIDTH;
487 /// Maximum number of subwords that any SIMD operation can have.
488 static const int MAX_SUBW_COUNT;
489
490 /// If set to true, smaller vector value types can be stored to larger
491 /// register files, e.g. v4i8 vectors can be stored to registers that
492 /// are over 32 bits in size.
493 static const bool EXPLOIT_BIGGER_REGISTERS;
494
495public:
496 // Characters for differend operand types.
497 static const char OT_REG_BOOL;
498 static const char OT_REG_INT;
499 static const char OT_REG_LONG;
500 static const char OT_REG_FP;
501 static const char OT_REG_HFP;
502 static const char OT_REG_DOUBLE;
503 static const char OT_IMM_BOOL;
504 static const char OT_IMM_INT;
505 static const char OT_IMM_FP;
506 static const char OT_IMM_HFP;
507 static const char OT_IMM_LONG;
508 static const char OT_VREG_BOOL;
509 static const char OT_VREG_INT8;
510 static const char OT_VREG_INT16;
511 static const char OT_VREG_INT32;
512 static const char OT_VREG_FP;
513 static const char OT_VREG_HFP;
514
515protected:
516 /// Contains <BaseOpName, OpPattern> key-value pairs.
517 static const std::map<TCEString, TCEString> OPERATION_PATTERNS_;
518
519 /// Contains all operation names in upper case.
521
522 /// Contains all scalar operations (<Name, Operation>).
523 std::map<TCEString, Operation*> scalarOps_;
524
525 /// Contains all vector operations (<Name, Operation>).
526 std::map<TCEString, Operation*> vectorOps_;
527
528 /// Contains vector base classes for register files (<Width, Name>).
529 std::map<int, TCEString> baseClasses_;
530
531 /// Contains registers fit for being vector registers (<Width, Registers>).
532 std::map<int, std::vector<TDGenerator::RegisterInfo> > registers_;
533
534 /// Contains required vector register classes (<ValueType, RegClass>).
535 std::map<TCEString, TDGenerator::RegisterClass> vRegClasses_;
536
537 /// All register store operations (<ValueType, InstrInfo>).
538 std::map<TCEString, TDGenerator::InstructionInfo> registerStores_;
539 /// All register load operations (<ValueType, InstrInfo>).
540 std::map<TCEString, TDGenerator::InstructionInfo> registerLoads_;
541 /// All immediate store operations (<ValueType, InstrInfo>).
542 std::map<TCEString, TDGenerator::InstructionInfo> immediateStores_;
543 /// All immediate load operations (<ValueType, InstrInfo>).
544 std::map<TCEString, TDGenerator::InstructionInfo> immediateLoads_;
545
546 /// Contains machine's PACK instructions (<ValueType, InstrName>).
547 std::map<TCEString, TCEString> packOperations_;
548 /// Contains machine's VBCAST instructions (<ValueType, InstrName>).
549 std::map<TCEString, TCEString> vbcastOperations_;
550 /// Contains machine's TRUNCxx/CFH instructions (<ValueType, InstrName>).
551 std::vector<std::pair<const Operation*, TCEString> > truncOperations_;
552 /// Contains machine's VSELECT instructions (<instrName, ValueType>).
553 std::map<TCEString, TCEString> vselectOperations_;
554 /// Contains machine's VSHUFFLE1 instructions (<ValueType, InstrName>).
555 std::map<TCEString, TCEString> vshuffle1Operations_;
556 /// Contains machine's VSHUFFLE2 instructions (<ValueType, InstrName>).
557 std::map<TCEString, TCEString> vshuffle2Operations_;
558 /// Contains machine's VCSHUFFLE instructions
559 /// (<<ValueType, ConstantSelects>, InstrName>).
560 std::map<std::pair<TCEString, std::vector<int>>, TCEString>
562 /// Contains machine's EXTRACTELEM instructions (<ValueType, InstrName>).
563 std::map<TCEString, TCEString> extractElemOperations_;
564 /// Contains machine's SHLSAME instructions (<ValueType, InstrName>).
565 std::map<TCEString, TCEString> shlSameOperations_;
566 /// Contains machine's SHRSAME instructions (<ValueType, InstrName>).
567 std::map<TCEString, TCEString> shrSameOperations_;
568 /// Contains machine's SHRUSAME instructions (<ValueType, InstrName>).
569 std::map<TCEString, TCEString> shruSameOperations_;
570 /// Contains machine's ANDSAME instructions (<ValueType, InstrName>).
571 std::map<TCEString, TCEString> andSameOperations_;
572 /// Contains machine's IORSAME instructions (<ValueType, InstrName>).
573 std::map<TCEString, TCEString> iorSameOperations_;
574 /// Contains machine's XORSAME instructions (<ValueType, InstrName>).
575 std::map<TCEString, TCEString> xorSameOperations_;
576 /// Contains machine's GATHER instructions (<ValueType, InstrName>).
577 std::map<TCEString, TCEString> gatherOperations_;
578 /// Contains machine's add instructions (<ValueType, InstrName>).
579 std::map<TCEString, TCEString> addOperations_;
580 /// Contains machine's shl instructions (<ValueType, InstrName>).
581 std::map<TCEString, TCEString> shlOperations_;
582 /// Contains machine's shl instructions (<ValueType, InstrName>).
583 std::map<TCEString, TCEString> iorOperations_;
584
585 /// Contains all moves between register classes (<InstrName>).
586 std::set<TCEString> movOperations_;
587
588 // List of all 1-bit registers in the target machine.
589 std::vector<RegInfo> regs1bit_;
590 // List of 8-bit registers in the target machine.
591 std::vector<RegInfo> regs8bit_;
592 // List of 16-bit registers in the target machine.
593 std::vector<RegInfo> regs16bit_;
594 // List of 32-bit registers in the target machine.
595 std::vector<RegInfo> regs32bit_;
596 // List of 64-bit registers in the target machine.
597 std::vector<RegInfo> regs64bit_;
598 /// The LLVM register defs used as guards.
599 std::vector<std::string> llvmGuardRegs_;
600
601 /// Map of generated llvm register names to
602 /// physical register in the machine.
603 std::map<std::string, RegInfo> regs_;
604
605 std::vector<std::string> argRegNames_;
606 std::vector<std::string> resRegNames_;
607 std::vector<std::string> gprRegNames_;
608
609 std::map<std::string, std::string> opNames_;
610
611 std::map<std::string, std::string> truePredOps_;
612 std::map<std::string, std::string> falsePredOps_;
613
615
618
622
624
626
628 unsigned int argRegCount_;
629 /// Minimum number of 32 bit registers.
630 unsigned int requiredI32Regs_;
631 unsigned int requiredI64Regs_;
634
635 /// List of register that are associated with a guard on a bus.
636 std::set<RegInfo> guardedRegs_;
637
638 /// Register files whose last reg reserved for temp reg copies.
639 std::set<
642
643 typedef std::map<std::string, std::vector<std::string> > RegClassMap;
644 /// All registers in certain group
646 // Registers grouped by corresponding RFs
648 /// All predicates used in constant materialization patterns.
649 std::vector<std::string> constantMaterializationPredicates_;
650
651 static const std::string guardRegTemplateName;
652};
653
654namespace TDGenerator {
655
656/**
657 * Class to represent info of a single register in a register file.
658 */
661 const TCEString& regName, const TCEString& regFileName,
662 unsigned regIndex, unsigned regWidth)
663 : regName_(regName),
664 regFileName_(regFileName),
665 regIndex_(regIndex),
666 regWidth_(regWidth) {}
667
668 /// Register name in GenRegisterInfo.td, e.g. "KLUDGE_REGISTER".
670 /// Name of the register file the register belongs to, e.g. "RF".
672 /// Register index in the register file.
673 unsigned regIndex_;
674 /// Register width in bits.
675 unsigned regWidth_;
676};
677
678/**
679 * Class to represent information of an instruction record.
680 */
682 InstructionInfo(const TCEString& osalOpName, const TCEString& instrName)
683 : osalOpName_(osalOpName), instrName_(instrName) {}
684
685 /// The OSAL operation used to create the record, e.g. "ADD32X4".
687 /// The instruction record name, e.g. "ADD32X4uuu"
689};
690
691/**
692 * Represents an LLVM value type to express different value types.
693 */
695public:
696 ValueType(int subwWidth, int subwCount, bool isFloat);
697 ValueType(const TCEString& vtStr);
698 ValueType(const Operand& opnd);
699
700 ValueType(const ValueType& other);
701 ValueType& operator=(const ValueType& other);
702
703 bool isSupportedByLLVM() const;
704 int width() const;
705 int subwordWidth() const;
706 int subwordCount() const;
707 bool isFloat() const;
708 bool isVector() const;
710 TCEString valueTypeStr() const;
711
712 static TCEString valueTypeStr(const Operand& operand);
713 static ValueType valueType(const TCEString& vtStr);
714 static ValueType valueType(const Operand& operand);
715 static std::vector<ValueType> vectorTypesOfWidth(
716 int width, bool onlyInts = false);
717 static std::vector<ValueType> vectorTypesOfSubwordWidth(
718 int subwordWidth, bool onlyInt = false);
719
720 // Public for faster access.
721
722 /// Subword width of the value type.
724 /// Subword count of the value type.
726 /// If true, the value type is a floating point type.
728
729 /// Contains all supported LLVM value types (<ValueType>).
730 static const std::set<TCEString> SUPPORTED_LLVM_VALUE_TYPES;
731};
732
733/**
734 * Represents TableGen RegisterClass class.
735 */
737public:
738 RegisterClass(const ValueType& vt, const TCEString& name);
739
740 RegisterClass(const RegisterClass& other);
742
743 TCEString name() const;
744 ValueType valueType() const;
745 int alignment() const;
746 std::vector<RegisterInfo> registers() const;
747 RegisterInfo registerInfo(int index) const;
748 size_t numberOfRegisters() const;
749
750 void addRegisters(const std::vector<RegisterInfo>& registers);
751
752private:
753 /// RegisterClass name.
755 /// Value type that is supported by this RegisterClass, e.g. v4i32.
757 /// RegisterClass alignment in bits, at least 8.
759 /// Register file registers that this RegisterClass uses.
760 std::vector<RegisterInfo> registers_;
761};
762} // namespace TDGenerator
763
764#endif
OperandType
Definition Operand.hh:58
TCETools::CIStringSet OperationSet
Definition TDGen.hh:77
void write32bitRegisterInfo(std::ostream &o)
Definition TDGen.cc:1021
void write64bitMoveDefs(std::ostream &o)
Definition TDGen.cc:8378
static const char OT_VREG_INT32
Definition TDGen.hh:511
std::map< TCEString, TDGenerator::InstructionInfo > immediateLoads_
All immediate load operations (<ValueType, InstrInfo>).
Definition TDGen.hh:544
static const char OT_REG_LONG
Definition TDGen.hh:499
virtual TCEString llvmOperationName(const TCEString &opName) const
Definition TDGen.cc:5109
void writeInstrFormats(std::ostream &o)
Definition TDGen.cc:4255
std::map< TCEString, TCEString > shlOperations_
Contains machine's shl instructions (<ValueType, InstrName>).
Definition TDGen.hh:581
void writeVectorStoreDefs(std::ostream &o, const TCEString &opName, const TCEString &opNameSuffix, bool addrImm, const TCEString &dataType, bool writePredicatedVersions)
void writeVectorLoadStoreOperationExploitations(std::ostream &o)
Definition TDGen.cc:2704
std::string operandDefs_
Definition TDGen.hh:471
static const int MAX_SUBW_COUNT
Maximum number of subwords that any SIMD operation can have.
Definition TDGen.hh:488
std::map< TCEString, TCEString > shrSameOperations_
Contains machine's SHRSAME instructions (<ValueType, InstrName>).
Definition TDGen.hh:567
void genTCETargetLoweringSIMD_addVectorRegisterClasses(std::ostream &o) const
Definition TDGen.cc:3053
std::vector< std::string > argRegNames_
Definition TDGen.hh:605
std::string subPattern(const Operation &op, const OperationDAG &dag)
Definition TDGen.cc:5468
static std::vector< std::string > supportedStackAccessOperations(const TTAMachine::Machine &mach)
Definition TDGen.cc:7685
std::map< TCEString, TCEString > packOperations_
Contains machine's PACK instructions (<ValueType, InstrName>).
Definition TDGen.hh:547
int highestLaneBool_
Definition TDGen.hh:617
std::string operationNodeToString(const Operation &op, const OperationDAG &dag, const OperationNode &node, bool emulationPattern, const std::string &operandTypes)
Definition TDGen.cc:5785
void writeVectorBitwiseOperationDefs(std::ostream &o, Operation &op, bool skipPattern)
Definition TDGen.cc:2657
std::vector< std::pair< const Operation *, TCEString > > truncOperations_
Contains machine's TRUNCxx/CFH instructions (<ValueType, InstrName>).
Definition TDGen.hh:551
void writeVectorOperationDef(std::ostream &o, Operation &op, TCEString valueTypes, const TCEString &attributes, bool skipPattern)
Definition TDGen.cc:2181
virtual void createSelectPatterns(std::ostream &os)
Definition TDGen.cc:7065
int highestLaneInt_
Definition TDGen.hh:616
std::string immediateOperandNameForEmulatedOperation(const OperationDAG &, const Operand &operand)
Definition TDGen.cc:7584
bool writePortGuardedJumpDefPair(std::ostream &os, const TCEString &tceop1, const TCEString &tceop2, bool fp=false)
Definition TDGen.cc:3897
void writeVectorRegisterNames(std::ostream &o)
Definition TDGen.cc:2070
std::map< std::string, std::vector< std::string > > RegClassMap
Definition TDGen.hh:643
std::map< TCEString, Operation * > scalarOps_
Contains all scalar operations (<Name, Operation>).
Definition TDGen.hh:523
virtual std::string generateBackend() const
Definition TDGen.cc:486
virtual ~TDGen()
Definition TDGen.cc:383
bool canBeImmediate(const OperationDAG &dag, const TerminalNode &node)
Definition TDGen.cc:6123
std::string dagNodeToString(const Operation &op, const OperationDAG &dag, const OperationDAGNode &node, bool emulationPattern, const std::string &operandTypes, const Operation *emulatingOp=nullptr, const OperationDAGNode *successor=nullptr)
Definition TDGen.cc:5506
void associateRegistersWithVectorRegisterClasses()
Definition TDGen.cc:1709
bool hasConditionalMoves_
Definition TDGen.hh:623
bool isVectorStoreOperation(const Operation &op) const
Definition TDGen.cc:1977
void writeVectorLoadDefs(std::ostream &o, const TCEString &opName, const TCEString &opNameSuffix, bool addrImm, const TCEString &resultType, const TCEString &loadPatternName, bool writePredicatedVersions)
void genGeneratedTCEPlugin_getVectorImmediateOpcode(std::ostream &o) const
Definition TDGen.cc:3235
const std::vector< OperationDAG * > getMatchableOperationDAGs(const Operation &op)
Definition TDGen.cc:5391
bool isWrongEndianessVectorOp(const Operation &op) const
Definition TDGen.cc:1983
void writeGuardRegisterClassInfo(std::ostream &o)
Definition TDGen.cc:2008
void writeHWLoopDef(std::ostream &o)
Definition TDGen.cc:3627
OperationDAG * createTrivialDAG(Operation &op)
Definition TDGen.cc:6093
static const char OT_VREG_INT16
Definition TDGen.hh:510
static const char OT_REG_BOOL
Definition TDGen.hh:497
std::map< TCEString, TCEString > xorSameOperations_
Contains machine's XORSAME instructions (<ValueType, InstrName>).
Definition TDGen.hh:575
void genGeneratedTCEPlugin_getStore(std::ostream &o) const
Definition TDGen.cc:2839
void genGeneratedTCEPlugin_getShlOpcode(std::ostream &o) const
Definition TDGen.cc:3300
bool use64bitForFP_
Definition TDGen.hh:633
std::vector< RegInfo > regs32bit_
Definition TDGen.hh:595
void writeAddressingModeDefs(std::ostream &o)
Definition TDGen.cc:8419
void genTCETargetLoweringSIMD_associatedVectorRegClass(std::ostream &o) const
Definition TDGen.cc:3098
std::vector< std::string > constantMaterializationPredicates_
All predicates used in constant materialization patterns.
Definition TDGen.hh:649
void writeArgRegsArray(std::ostream &os)
Definition TDGen.cc:6996
std::string argRegsArray_
Definition TDGen.hh:475
void analyzeRegisters()
Definition TDGen.cc:838
std::string createDefaultOperandTypeString(const Operation &op)
Definition TDGen.cc:5439
void writeOperationDef(std::ostream &o, Operation &op, const std::string &operandTypes, const std::string &attrs, bool skipPattern, std::string backendPrefix="")
Definition TDGen.cc:4649
static const int MAX_SCALAR_WIDTH
Distincts wide vs scalar registers.
Definition TDGen.hh:486
void verbose(const TCEString &msg) const
Definition TDGen.cc:1862
std::map< ImmInfoKey, std::string > immOperandDefs_
Maps (operation, operand) pairs to i32 immediate operand definition names.
Definition TDGen.hh:436
const TTAMachine::Machine & mach_
Definition TDGen.hh:463
void writeBooleanStorePatterns(std::ostream &os)
Definition TDGen.cc:4568
std::map< TCEString, TCEString > vselectOperations_
Contains machine's VSELECT instructions (<instrName, ValueType>).
Definition TDGen.hh:553
void writeControlFlowInstrDefs(std::ostream &os)
Definition TDGen.cc:3616
std::string addressingModeDefs_
Definition TDGen.hh:470
static const bool EXPLOIT_BIGGER_REGISTERS
If set to true, smaller vector value types can be stored to larger register files,...
Definition TDGen.hh:493
std::string operandTypesToRegisters(const std::string &opdTypes) const
Definition TDGen.cc:7885
static const char OT_IMM_LONG
Definition TDGen.hh:507
virtual TCEString llvmOperationPattern(const Operation &op, char operandType=' ') const
Definition TDGen.cc:4895
std::map< TCEString, TCEString > iorOperations_
Contains machine's shl instructions (<ValueType, InstrName>).
Definition TDGen.hh:583
virtual void writeCallDefRegs(std::ostream &o)
Definition TDGen.cc:3580
std::map< std::string, std::string > falsePredOps_
Definition TDGen.hh:612
int maxVectorSize_
Definition TDGen.hh:614
std::map< TCEString, TCEString > vbcastOperations_
Contains machine's VBCAST instructions (<ValueType, InstrName>).
Definition TDGen.hh:549
std::set< TCEString > movOperations_
Contains all moves between register classes (<InstrName>).
Definition TDGen.hh:586
std::map< TCEString, TDGenerator::RegisterClass > vRegClasses_
Contains required vector register classes (<ValueType, RegClass>).
Definition TDGen.hh:535
virtual void writeImmediateDef(std::ostream &o, const std::string &defName, const std::string &operandType, const std::string &predicate)
Definition TDGen.cc:4610
std::map< TCEString, TCEString > shruSameOperations_
Contains machine's SHRUSAME instructions (<ValueType, InstrName>).
Definition TDGen.hh:569
bool operationDAGCanBeMatched(const OperationDAG &op, std::set< std::string > *recursionCycleCheck=NULL, bool recursionHasStore=false)
Definition TDGen.cc:5315
RegClassMap regsInClasses_
All registers in certain group.
Definition TDGen.hh:645
static const char OT_VREG_FP
Definition TDGen.hh:512
bool hasRawOperands(const Operation &op) const
Definition TDGen.cc:1755
std::vector< RegInfo > regs64bit_
Definition TDGen.hh:597
void writeBroadcastDefs(std::ostream &o, Operation &op, int vectorLen)
bool canBePredicated(Operation &op, const std::string &operandTypes)
Definition TDGen.cc:7665
std::vector< std::string > llvmGuardRegs_
The LLVM register defs used as guards.
Definition TDGen.hh:599
std::map< std::string, std::string > truePredOps_
Definition TDGen.hh:611
void writeIntegerImmediateDefs(std::ostream &o, const ImmInfo &iivis)
Definition TDGen.cc:649
void createMinMaxDef(const TCEString &opName, const TCEString &valueName, std::ostream &os)
Definition TDGen.cc:6370
unsigned dregNum_
Definition TDGen.hh:468
ImmInfo * immInfo_
Definition TDGen.hh:465
void createConstantMaterializationQuery(std::ostream &os)
Definition TDGen.cc:6501
bool isVectorLoadOperation(const Operation &op) const
Definition TDGen.cc:1965
static const char OT_REG_FP
Definition TDGen.hh:500
std::string patOutputs(const Operation &op, const std::string &oprTypes)
Definition TDGen.cc:6074
unsigned int requiredI64Regs_
Definition TDGen.hh:631
void writeScalarToVectorDefs(std::ostream &o) const
Definition TDGen.cc:2388
void writeRegisterDef(std::ostream &o, const RegInfo &reg, const std::string regName, const std::string regTemplate, const std::string aliases, RegType type)
Definition TDGen.cc:503
virtual char operandChar(Operand &operand)
Definition TDGen.cc:4755
void write8bitRegisterInfo(std::ostream &o)
void analyzeMachineRegisters()
Definition TDGen.cc:1478
bool isVectorBitwiseOperation(const Operation &op) const
Definition TDGen.cc:1995
static const int BOOL_SUBW_WIDTH
Bool type subword width.
Definition TDGen.hh:484
static const char OT_VREG_BOOL
Definition TDGen.hh:508
void genGeneratedTCEPlugin_isVectorRegisterMove(std::ostream &o) const
void genGeneratedTCEPlugin_getVectorShlSameOpcode(std::ostream &o) const
void generateLoadStoreCopyGenerator(std::ostream &os)
Definition TDGen.cc:6365
TCEString associatedVectorRegisterClass(const Operand &operand) const
Definition TDGen.cc:1842
void writeCallingConvLicenceText(std::ostream &os)
Definition TDGen.cc:6975
void writeWiderVectorOperationExploitations(std::ostream &o)
Definition TDGen.cc:2831
std::map< TCEString, TCEString > iorSameOperations_
Contains machine's IORSAME instructions (<ValueType, InstrName>).
Definition TDGen.hh:573
void writeInstrDef(std::ostream &o, const std::string &instrDefName, const std::string &outs, const std::string &ins, const std::string &asmString, const std::string &pattern)
Definition TDGen.cc:4626
std::set< const TTAMachine::RegisterFile *, TTAMachine::MachinePart::Comparator > tempRegFiles_
Register files whose last reg reserved for temp reg copies.
Definition TDGen.hh:641
virtual void createMinMaxGenerator(std::ostream &os)
Definition TDGen.cc:6398
TCEString getLLVMPatternWithConstants(const Operation &op, const std::string &operandTypes, const std::string &operand0, const std::string &operand1) const
Definition TDGen.cc:7756
std::string tceOperationPattern(const Operation &op)
Definition TDGen.cc:5266
static const char OT_IMM_INT
Definition TDGen.hh:504
std::map< int, TCEString > baseClasses_
Contains vector base classes for register files (<Width, Name>).
Definition TDGen.hh:529
void writeConstShiftPat(std::ostream &os, const TCEString &nodeName, const TCEString &opNameBase, int i)
Definition TDGen.cc:8577
void writeVectorStoreDefs(std::ostream &o, Operation &op, int vectorLen)
static const char OT_VREG_HFP
Definition TDGen.hh:513
int subwordWidthOfRawData(const Operation &op) const
Definition TDGen.cc:1778
std::string constantNodeString(const Operation &op, const OperationDAG &dag, const ConstantNode &node, const std::string &operandTypes, const OperationDAGNode *successor=nullptr)
Definition TDGen.cc:5611
static const int FP_SUBW_WIDTH
Float type subword width.
Definition TDGen.hh:480
std::map< TCEString, TCEString > vshuffle1Operations_
Contains machine's VSHUFFLE1 instructions (<ValueType, InstrName>).
Definition TDGen.hh:555
static const char OT_REG_HFP
Definition TDGen.hh:501
void writeOperandDefs(std::ostream &o)
Definition TDGen.cc:621
void writePatternReplacement(std::ostream &o, const TCEString &origPat, const TCEString &replacerPat) const
Definition TDGen.cc:1875
static const char OT_IMM_FP
Definition TDGen.hh:505
void genGeneratedTCEPlugin_getVectorAndSameOpcode(std::ostream &o) const
std::map< TCEString, TCEString > andSameOperations_
Contains machine's ANDSAME instructions (<ValueType, InstrName>).
Definition TDGen.hh:571
void genGeneratedTCEPlugin_getVectorShuffle2Opcode(std::ostream &o) const
std::map< TCEString, TCEString > extractElemOperations_
Contains machine's EXTRACTELEM instructions (<ValueType, InstrName>).
Definition TDGen.hh:563
void writeCallDef(std::ostream &o)
Definition TDGen.cc:3955
std::string instrInfo_
Definition TDGen.hh:472
void writeCallSeqStart(std::ostream &os)
Definition TDGen.cc:7944
void writeTopLevelTD(std::ostream &o)
Definition TDGen.cc:4231
std::map< int, std::vector< TDGenerator::RegisterInfo > > registers_
Contains registers fit for being vector registers (<Width, Registers>).
Definition TDGen.hh:532
unsigned int argRegCount_
Definition TDGen.hh:628
std::map< TCEString, Operation * > vectorOps_
Contains all vector operations (<Name, Operation>).
Definition TDGen.hh:526
std::map< TCEString, TCEString > shlSameOperations_
Contains machine's SHLSAME instructions (<ValueType, InstrName>).
Definition TDGen.hh:565
void genGeneratedTCEPlugin_getGatherOpcode(std::ostream &o) const
Definition TDGen.cc:3255
void createByteExtLoadPatterns(std::ostream &os)
Definition TDGen.cc:6531
void writeVectorAnyextPattern(std::ostream &o, Operation &op, const TCEString &loadPatternName, int vectorLen)
void writeVectorImmediateWriteDefs(std::ostream &instrInfoTD)
Definition TDGen.cc:3216
void writeVectorMemoryOperationDefs(std::ostream &o, Operation &op, bool skipPattern)
Definition TDGen.cc:2261
bool hasSelect_
Definition TDGen.hh:621
void initializeBackendContents()
Definition TDGen.cc:394
std::map< TCEString, TCEString > gatherOperations_
Contains machine's GATHER instructions (<ValueType, InstrName>).
Definition TDGen.hh:577
void writeRARegisterInfo(std::ostream &o)
Definition TDGen.cc:3157
void writeRegisterClasses(std::ostream &o)
Definition TDGen.cc:816
bool operationCanBeMatched(const Operation &op, std::set< std::string > *recursionCycleCheck=NULL, bool recursionHasStore=false)
Definition TDGen.cc:5281
void genGeneratedTCEPlugin_getLoadOpcode(std::ostream &o) const
Definition TDGen.cc:3271
bool prebypassStackIndeces_
Definition TDGen.hh:632
void writeCallingConv(std::ostream &os)
Definition TDGen.cc:6870
std::set< RegInfo > guardedRegs_
List of register that are associated with a guard on a bus.
Definition TDGen.hh:636
void writeVectorLoadDefs(std::ostream &o, Operation &op, const TCEString &loadPatternName, int vectorLen)
void saveAdditionalVectorOperationInfo(const Operation &op, const TCEString &valueTypes, bool isRegisterOp)
Definition TDGen.cc:2246
virtual std::string operandToString(const Operand &operand, bool match, char operandType, const std::string &immDefName="")
Definition TDGen.cc:5870
std::map< std::string, std::string > opNames_
Definition TDGen.hh:609
char operandTypeToRegister(const char &opdType) const
Definition TDGen.cc:7894
virtual void createVectorRVDRegNums(std::ostream &os)
Definition TDGen.cc:7022
std::map< std::string, RegInfo > regs_
Map of generated llvm register names to physical register in the machine.
Definition TDGen.hh:603
static const char OT_IMM_BOOL
Definition TDGen.hh:503
void writeVectorTruncStoreDefs(std::ostream &o, Operation &op, int bitsize, int vectorLen)
static const std::map< TCEString, TCEString > OPERATION_PATTERNS_
Contains <BaseOpName, OpPattern> key-value pairs.
Definition TDGen.hh:517
void genGeneratedTCEPlugin_getExtractElemOpcode(std::ostream &o) const
void createEndiannesQuery(std::ostream &os)
Definition TDGen.cc:6487
void genTCEInstrInfoSIMD_copyPhysVectorReg(std::ostream &o) const
Definition TDGen.cc:3187
unsigned int requiredI32Regs_
Minimum number of 32 bit registers.
Definition TDGen.hh:630
virtual void createConstantMaterializationPatterns(std::ostream &os)
Definition TDGen.cc:7458
std::vector< RegInfo > regs8bit_
Definition TDGen.hh:591
std::string emulatingOpNodeLLVMName(const Operation &op, const OperationDAG &dag, const OperationNode &node, const std::string &operandTypes)
Definition TDGen.cc:5674
void writeVectorOperationDefs(std::ostream &o, Operation &op, bool skipPattern)
Definition TDGen.cc:2164
void writeBackendCode(std::ostream &o)
Definition TDGen.cc:3997
void writeVectorTruncStoreDefs(std::ostream &o) const
Definition TDGen.cc:2318
void genGeneratedTCEPlugin_getVectorShuffle1Opcode(std::ostream &o) const
std::string operationPattern(const Operation &op, const OperationDAG &dag, const std::string &operandTypes)
Definition TDGen.cc:5421
bool areImmediateOperandsLegal(const Operation &operation, const std::string &operandTypes) const
Definition TDGen.cc:7617
bool littleEndian_
Definition TDGen.hh:627
void genGeneratedTCEPlugin_getVectorShrSameOpcode(std::ostream &o) const
bool hasExIntRegs_
Definition TDGen.hh:620
std::map< TCEString, TDGenerator::InstructionInfo > immediateStores_
All immediate store operations (<ValueType, InstrInfo>).
Definition TDGen.hh:542
std::string instrFormats_
Definition TDGen.hh:473
void writeVectorRegisterMoveDefs(std::ostream &o)
Definition TDGen.cc:2270
void write1bitRegisterInfo(std::ostream &o)
Definition TDGen.cc:961
void createShortExtLoadPatterns(std::ostream &os)
Definition TDGen.cc:6691
std::map< std::pair< TCEString, std::vector< int > >, TCEString > vcshuffleOperations_
Contains machine's VCSHUFFLE instructions (<<ValueType, ConstantSelects>, InstrName>).
Definition TDGen.hh:561
void orderEqualWidthRegistersToRoundRobin()
Definition TDGen.cc:1674
RegClassMap regsInRFClasses_
Definition TDGen.hh:647
std::string backendCode_
Definition TDGen.hh:476
std::map< TCEString, TDGenerator::InstructionInfo > registerStores_
All register store operations (<ValueType, InstrInfo>).
Definition TDGen.hh:538
void writeVectorBitConversions(std::ostream &o) const
Definition TDGen.cc:2418
void writeInstrInfo(std::ostream &o)
Definition TDGen.cc:3384
void createParamDRegNums(std::ostream &os)
Definition TDGen.cc:7010
void writeOperationDefs(std::ostream &o, Operation &op, bool skipPattern)
Definition TDGen.cc:4312
bool checkRequiredRegisters()
Definition TDGen.cc:3336
void genGeneratedTCEPlugin_getVectorSelectOpcode(std::ostream &o) const
void writeVectorRegisterClasses(std::ostream &o) const
Definition TDGen.cc:2102
void genGeneratedTCEPlugin_getVectorIorSameOpcode(std::ostream &o) const
void writeCondBranchDefs(std::ostream &os)
Definition TDGen.cc:3661
void writeScalarOperationExploitations(std::ostream &o)
Definition TDGen.cc:2475
std::map< TCEString, TCEString > addOperations_
Contains machine's add instructions (<ValueType, InstrName>).
Definition TDGen.hh:579
void genGeneratedTCEPlugin_getLoad(std::ostream &o) const
Definition TDGen.cc:2939
void genGeneratedTCEPlugin_getIorOpcode(std::ostream &o) const
Definition TDGen.cc:3315
std::string callingConv_
Definition TDGen.hh:474
std::vector< RegInfo > regs16bit_
Definition TDGen.hh:593
void writeMiscPatterns(std::ostream &o)
Definition TDGen.cc:8465
void analyzeRegisters(RegsToProcess regsToProcess)
void gatherAllMachineOperations()
Definition TDGen.cc:997
std::string registerInfo_
Definition TDGen.hh:469
TCEString getMovePattern(const char &opdType, const std::string &inputPattern) const
Definition TDGen.cc:7909
void write16bitRegisterInfo(std::ostream &o)
Definition TDGen.cc:1211
void genGeneratedTCEPlugin_getVectorShruSameOpcode(std::ostream &o) const
std::string topLevelTD_
Definition TDGen.hh:477
static const char OT_REG_DOUBLE
Definition TDGen.hh:502
void createBoolAndHalfLoadPatterns(std::ostream &os)
Definition TDGen.cc:8608
void genTCERegisterInfo_setReservedVectorRegs(std::ostream &os) const
Definition TDGen.cc:4203
void create32BitExtLoadPatterns(std::ostream &os)
Definition TDGen.cc:6808
void analyzeRegisterFileClasses()
const OperationDAG * getMatchableOperationDAG(const Operation &op)
Definition TDGen.cc:5361
void write64bitRegisterInfo(std::ostream &o)
Definition TDGen.cc:1363
std::map< TCEString, TCEString > vshuffle2Operations_
Contains machine's VSHUFFLE2 instructions (<ValueType, InstrName>).
Definition TDGen.hh:557
std::map< TCEString, TDGenerator::InstructionInfo > registerLoads_
All register load operations (<ValueType, InstrInfo>).
Definition TDGen.hh:540
OperationDAGSelector::OperationSet allOpNames_
Contains all operation names in upper case.
Definition TDGen.hh:520
void genGeneratedTCEPlugin_getVectorBroadcastOpcode(std::ostream &o) const
bool writeRegisterInfo(std::ostream &o)
Definition TDGen.cc:551
std::vector< std::string > gprRegNames_
Definition TDGen.hh:607
void analyzeMachineVectorRegisterClasses()
Definition TDGen.cc:1282
void writeVectorRegisterBaseClasses(std::ostream &o) const
Definition TDGen.cc:2047
RegsToProcess
Definition TDGen.hh:127
@ ONLY_LANES
Definition TDGen.hh:130
@ ALL_REGISTERS
Definition TDGen.hh:128
@ ONLY_NORMAL
Definition TDGen.hh:131
@ ONLY_EXTRAS
Definition TDGen.hh:129
bool hasRegisterClassSupport(const Operation &op) const
Definition TDGen.cc:1805
void writeStartOfRegisterInfo(std::ostream &o)
Definition TDGen.cc:594
void writeGetPointerAdjustmentQuery(std::ostream &os) const
Definition TDGen.cc:7522
void writeEmulationPattern(std::ostream &o, const Operation &op, const OperationDAG &dag)
Definition TDGen.cc:4800
static const int HFP_SUBW_WIDTH
Half float type subword width.
Definition TDGen.hh:482
static const char OT_VREG_INT8
Definition TDGen.hh:509
void createGetMaxMemoryAlignment(std::ostream &os) const
Definition TDGen.cc:7048
void createBranchAnalysis(std::ostream &os)
Definition TDGen.cc:7970
void createVectorMinMaxDef(const TCEString &opName, int bits, char llvmTypeChar, const TCEString &postFix, std::ostream &os)
Definition TDGen.cc:6380
static const std::string guardRegTemplateName
Definition TDGen.hh:651
static const char OT_IMM_HFP
Definition TDGen.hh:506
std::string immediatePredicate(int64_t lowerBoundInclusive, uint64_t upperBoundInclusive)
Definition TDGen.cc:7560
void genGeneratedTCEPlugin_getConstantVectorShuffleOpcode(std::ostream &o) const
void createConstShiftPatterns(std::ostream &os)
Definition TDGen.cc:8599
bool hasExBoolRegs_
Definition TDGen.hh:619
static const char OT_REG_INT
Definition TDGen.hh:498
void genTCEInstrInfo_copyPhys64bitReg(std::ostream &o) const
Definition TDGen.cc:8396
void writeMoveImmediateDefs(std::ostream &o)
Definition TDGen.cc:756
std::vector< RegInfo > regs1bit_
Definition TDGen.hh:589
void genGeneratedTCEPlugin_getVectorValueType(std::ostream &o) const
void genGeneratedTCEPlugin_getAddOpcode(std::ostream &o) const
Definition TDGen.cc:3285
std::string patInputs(const Operation &op, const std::string &oprTypes)
Definition TDGen.cc:6043
void genGeneratedTCEPlugin_getVectorPackOpcode(std::ostream &o) const
int maxScalarWidth_
Definition TDGen.hh:625
RegType
Definition TDGen.hh:97
@ RESERVED
Definition TDGen.hh:99
@ ARGUMENT
Definition TDGen.hh:100
@ RESULT
Definition TDGen.hh:101
@ GPR
Definition TDGen.hh:98
void genTCETargetLoweringSIMD_getSetCCResultVT(std::ostream &o) const
Definition TDGen.cc:3128
void genGeneratedTCEPlugin_getVectorXorSameOpcode(std::ostream &o) const
void writeOperationDefUsingGivenOperandTypes(std::ostream &o, Operation &op, bool skipPattern, std::vector< TDGenerator::ValueType > inputs, std::vector< TDGenerator::ValueType > outputs, TCEString instrSuffix="")
Definition TDGen.cc:1896
std::vector< std::string > resRegNames_
Definition TDGen.hh:606
int alignment_
RegisterClass alignment in bits, at least 8.
Definition TDGen.hh:758
std::vector< RegisterInfo > registers_
Register file registers that this RegisterClass uses.
Definition TDGen.hh:760
TCEString name() const
Definition TDGen.cc:9054
ValueType valueType() const
Definition TDGen.cc:9064
RegisterClass & operator=(const RegisterClass &other)
Definition TDGen.cc:9040
std::vector< RegisterInfo > registers() const
RegisterInfo registerInfo(int index) const
Definition TDGen.cc:9084
ValueType vt_
Value type that is supported by this RegisterClass, e.g. v4i32.
Definition TDGen.hh:756
size_t numberOfRegisters() const
Definition TDGen.cc:9097
void addRegisters(const std::vector< RegisterInfo > &registers)
Definition TDGen.cc:9107
TCEString name_
RegisterClass name.
Definition TDGen.hh:754
static std::vector< ValueType > vectorTypesOfWidth(int width, bool onlyInts=false)
Definition TDGen.cc:8941
bool isFloat() const
Definition TDGen.cc:8806
ValueType & operator=(const ValueType &other)
Definition TDGen.cc:8749
int subwordCount() const
Definition TDGen.cc:8796
int subwCount_
Subword count of the value type.
Definition TDGen.hh:725
bool isFloat_
If true, the value type is a floating point type.
Definition TDGen.hh:727
bool isSupportedByLLVM() const
Definition TDGen.cc:8762
bool isVector() const
Definition TDGen.cc:8816
static const std::set< TCEString > SUPPORTED_LLVM_VALUE_TYPES
Contains all supported LLVM value types (<ValueType>).
Definition TDGen.hh:730
static std::vector< ValueType > vectorTypesOfSubwordWidth(int subwordWidth, bool onlyInt=false)
Definition TDGen.cc:8977
TCEString valueTypeStr() const
Definition TDGen.cc:8846
Operand::OperandType operandType() const
Definition TDGen.cc:8826
static ValueType valueType(const TCEString &vtStr)
Definition TDGen.cc:8891
int subwWidth_
Subword width of the value type.
Definition TDGen.hh:723
int width() const
Definition TDGen.cc:8776
int subwordWidth() const
Definition TDGen.cc:8786
unsigned idx
Definition TDGen.hh:113
bool operator<(const RegInfo &other) const
Definition TDGen.hh:116
std::string rf
Definition TDGen.hh:112
std::string registerDag
Definition TDGen.hh:106
std::string immDag
Definition TDGen.hh:108
std::string immPat
Definition TDGen.hh:107
std::string registerPat
Definition TDGen.hh:105
TCEString osalOpName_
The OSAL operation used to create the record, e.g. "ADD32X4".
Definition TDGen.hh:686
TCEString instrName_
The instruction record name, e.g. "ADD32X4uuu".
Definition TDGen.hh:688
InstructionInfo(const TCEString &osalOpName, const TCEString &instrName)
Definition TDGen.hh:682
RegisterInfo(const TCEString &regName, const TCEString &regFileName, unsigned regIndex, unsigned regWidth)
Definition TDGen.hh:660
TCEString regFileName_
Name of the register file the register belongs to, e.g. "RF".
Definition TDGen.hh:671
TCEString regName_
Register name in GenRegisterInfo.td, e.g. "KLUDGE_REGISTER".
Definition TDGen.hh:669
unsigned regIndex_
Register index in the register file.
Definition TDGen.hh:673
unsigned regWidth_
Register width in bits.
Definition TDGen.hh:675