From bda579b8bab763f0b741c5775350cda09a394115 Mon Sep 17 00:00:00 2001 From: David Greene Date: Wed, 5 Oct 2011 22:42:17 +0000 Subject: [PATCH] Add Multidef Data Structures Add a set of data structures and members analogous to those used for multiclass defs. These will represent a new kind of multiclass def: a multidef. The idea behind the multidef is to process a list of items and create a def record for each one inside the enclosing multiclass. This allows the user to dynamically create a set of defs based on the contents of a list. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141230 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/TableGen/Record.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/include/llvm/TableGen/Record.h b/include/llvm/TableGen/Record.h index afce7609986..0fc50c5a3bc 100644 --- a/include/llvm/TableGen/Record.h +++ b/include/llvm/TableGen/Record.h @@ -1568,6 +1568,23 @@ struct MultiClass { typedef std::vector RecordVector; RecordVector DefPrototypes; + struct MultiDef { + Record *Rec; // The base record for all defs generated. + // This serves as the multiclass def prototype. + TypedInit *List; // A list of values to process. + // Each one generates a new def. + IntInit *Start; // This specified the list index from which to start + // processing. + std::string ItemName; // The name of a temporary iterator value to + // track the current list item being processed. + + MultiDef(Record *R, TypedInit *L, IntInit *S, const std::string &I) + : Rec(R), List(L), Start(S), ItemName(I) {}; + }; + + typedef std::vector MultiDefVector; + MultiDefVector MultiDefPrototypes; + void dump() const; MultiClass(const std::string &Name, SMLoc Loc, RecordKeeper &Records) :