[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