[llvm-commits] [llvm] r158183 - in /llvm/trunk/utils/TableGen: CodeGenInstruction.cpp CodeGenInstruction.h
Jim Grosbach
grosbach at apple.com
Thu Jun 7 17:57:38 PDT 2012
Nice! Glad this worked out.
-Jim
On Jun 7, 2012, at 5:25 PM, Owen Anderson wrote:
> Author: resistor
> Date: Thu Jun 7 19:25:03 2012
> New Revision: 158183
>
> URL: http://llvm.org/viewvc/llvm-project?rev=158183&view=rev
> Log:
> Teach the AsmMatcherEmitter to allow InstAlias' where the suboperands of a complex operand are called out explicitly in the asm string.
>
> Modified:
> llvm/trunk/utils/TableGen/CodeGenInstruction.cpp
> llvm/trunk/utils/TableGen/CodeGenInstruction.h
>
> Modified: llvm/trunk/utils/TableGen/CodeGenInstruction.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenInstruction.cpp?rev=158183&r1=158182&r2=158183&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/CodeGenInstruction.cpp (original)
> +++ llvm/trunk/utils/TableGen/CodeGenInstruction.cpp Thu Jun 7 19:25:03 2012
> @@ -556,9 +556,31 @@
> ResultOperand ResOp(static_cast<int64_t>(0));
> if (tryAliasOpMatch(Result, AliasOpNo, InstOpRec, (NumSubOps > 1),
> R->getLoc(), T, ResOp)) {
> - ResultOperands.push_back(ResOp);
> - ResultInstOperandIndex.push_back(std::make_pair(i, -1));
> - ++AliasOpNo;
> + // If this is a simple operand, or a complex operand with a custom match
> + // class, then we can match is verbatim.
"can match it verbatim"
> + if (NumSubOps == 1 ||
> + (InstOpRec->getValue("ParserMatchClass") &&
> + InstOpRec->getValueAsDef("ParserMatchClass")
> + ->getValueAsString("Name") != "Imm")) {
> + ResultOperands.push_back(ResOp);
> + ResultInstOperandIndex.push_back(std::make_pair(i, -1));
> + ++AliasOpNo;
> +
> + // Otherwise, we need to match each of the suboperands individually.
> + } else {
> + DagInit *MIOI = ResultInst->Operands[i].MIOperandInfo;
> + for (unsigned SubOp = 0; SubOp != NumSubOps; ++SubOp) {
> + Record *SubRec = dynamic_cast<DefInit*>(MIOI->getArg(SubOp))->getDef();
> +
> + // Take care to instantiate each of the suboperands with the correct
> + // nomenclature: $foo.bar
> + ResultOperands.push_back(
> + ResultOperand(Result->getArgName(AliasOpNo) + "." +
> + MIOI->getArgName(SubOp), SubRec));
> + ResultInstOperandIndex.push_back(std::make_pair(i, SubOp));
> + }
> + ++AliasOpNo;
> + }
> continue;
> }
>
>
> Modified: llvm/trunk/utils/TableGen/CodeGenInstruction.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenInstruction.h?rev=158183&r1=158182&r2=158183&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/CodeGenInstruction.h (original)
> +++ llvm/trunk/utils/TableGen/CodeGenInstruction.h Thu Jun 7 19:25:03 2012
> @@ -280,7 +280,7 @@
>
> struct ResultOperand {
> private:
> - StringRef Name;
> + std::string Name;
> Record *R;
>
> int64_t Imm;
> @@ -291,7 +291,7 @@
> K_Reg
> } Kind;
>
> - ResultOperand(StringRef N, Record *r) : Name(N), R(r), Kind(K_Record) {}
> + ResultOperand(std::string N, Record *r) : Name(N), R(r), Kind(K_Record) {}
> ResultOperand(int64_t I) : Imm(I), Kind(K_Imm) {}
> ResultOperand(Record *r) : R(r), Kind(K_Reg) {}
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list