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
This commit is contained in:
David Greene 2011-10-05 22:42:17 +00:00
parent e499a2df44
commit bda579b8ba

View File

@ -1568,6 +1568,23 @@ struct MultiClass {
typedef std::vector<Record*> 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<MultiDef> MultiDefVector;
MultiDefVector MultiDefPrototypes;
void dump() const;
MultiClass(const std::string &Name, SMLoc Loc, RecordKeeper &Records) :