diff options
author | Reid Kleckner <rnk@google.com> | 2017-10-16 20:31:16 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2017-10-16 20:31:16 +0000 |
commit | cfdd4a26995c46ce27ad9c40099d47f1d004daa1 (patch) | |
tree | c01e7176c28cda36ea48c8ce90ffc88746853cf9 | |
parent | a98a2be8695bc56c64a66a681954b86afa2227a9 (diff) | |
download | bcm5719-llvm-cfdd4a26995c46ce27ad9c40099d47f1d004daa1.tar.gz bcm5719-llvm-cfdd4a26995c46ce27ad9c40099d47f1d004daa1.zip |
Revert MSVC 2017 build fix and fix it by moving the method that implicitly instantiates addPredicate out of line
llvm-svn: 315932
-rw-r--r-- | llvm/utils/TableGen/GlobalISelEmitter.cpp | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/llvm/utils/TableGen/GlobalISelEmitter.cpp b/llvm/utils/TableGen/GlobalISelEmitter.cpp index addd548314f..a0bc6526646 100644 --- a/llvm/utils/TableGen/GlobalISelEmitter.cpp +++ b/llvm/utils/TableGen/GlobalISelEmitter.cpp @@ -715,18 +715,6 @@ public: virtual unsigned countRendererFns() const { return 0; } }; -// Specialize OperandMatcher::addPredicate() to refrain from adding redundant -// predicates. -template <> -template <class Kind, class... Args> -Optional<Kind *> -PredicateListMatcher<OperandPredicateMatcher>::addPredicate(Args &&... args) { - if (static_cast<OperandMatcher *>(this)->isSameAsAnotherOperand()) - return None; - Predicates.emplace_back(llvm::make_unique<Kind>(std::forward<Args>(args)...)); - return static_cast<Kind *>(Predicates.back().get()); -} - template <> std::string PredicateListMatcher<OperandPredicateMatcher>::getNoPredicateComment() const { @@ -990,26 +978,7 @@ public: InstructionMatcher &getInstructionMatcher() const { return Insn; } Error addTypeCheckPredicate(const TypeSetByHwMode &VTy, - bool OperandIsAPointer) { - if (!VTy.isMachineValueType()) - return failedImport("unsupported typeset"); - - if (VTy.getMachineValueType() == MVT::iPTR && OperandIsAPointer) { - addPredicate<PointerToAnyOperandMatcher>(0); - return Error::success(); - } - - auto OpTyOrNone = MVTToLLT(VTy.getMachineValueType().SimpleTy); - if (!OpTyOrNone) - return failedImport("unsupported type"); - - if (OperandIsAPointer) - addPredicate<PointerToAnyOperandMatcher>( - OpTyOrNone->get().getSizeInBits()); - else - addPredicate<LLTOperandMatcher>(*OpTyOrNone); - return Error::success(); - } + bool OperandIsAPointer); /// Emit MatchTable opcodes to capture instructions into the MIs table. void emitCaptureOpcodes(MatchTable &Table, RuleMatcher &Rule, @@ -1078,6 +1047,39 @@ public: } }; +// Specialize OperandMatcher::addPredicate() to refrain from adding redundant +// predicates. +template <> +template <class Kind, class... Args> +Optional<Kind *> +PredicateListMatcher<OperandPredicateMatcher>::addPredicate(Args &&... args) { + if (static_cast<OperandMatcher *>(this)->isSameAsAnotherOperand()) + return None; + Predicates.emplace_back(llvm::make_unique<Kind>(std::forward<Args>(args)...)); + return static_cast<Kind *>(Predicates.back().get()); +} + +Error OperandMatcher::addTypeCheckPredicate(const TypeSetByHwMode &VTy, + bool OperandIsAPointer) { + if (!VTy.isMachineValueType()) + return failedImport("unsupported typeset"); + + if (VTy.getMachineValueType() == MVT::iPTR && OperandIsAPointer) { + addPredicate<PointerToAnyOperandMatcher>(0); + return Error::success(); + } + + auto OpTyOrNone = MVTToLLT(VTy.getMachineValueType().SimpleTy); + if (!OpTyOrNone) + return failedImport("unsupported type"); + + if (OperandIsAPointer) + addPredicate<PointerToAnyOperandMatcher>(OpTyOrNone->get().getSizeInBits()); + else + addPredicate<LLTOperandMatcher>(*OpTyOrNone); + return Error::success(); +} + unsigned ComplexPatternOperandMatcher::getAllocatedTemporariesBaseID() const { return Operand.getAllocatedTemporariesBaseID(); } |