collect commutativity information

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23499 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2005-09-28 18:28:29 +00:00
parent 6bcf1b7eed
commit a1a68ae061
2 changed files with 24 additions and 0 deletions

View File

@ -137,6 +137,22 @@ SDNodeInfo::SDNodeInfo(Record *R) : Def(R) {
NumResults = TypeProfile->getValueAsInt("NumResults");
NumOperands = TypeProfile->getValueAsInt("NumOperands");
// Parse the properties.
Properties = 0;
ListInit *LI = R->getValueAsListInit("Properties");
for (unsigned i = 0, e = LI->getSize(); i != e; ++i) {
DefInit *DI = dynamic_cast<DefInit*>(LI->getElement(i));
assert(DI && "Properties list must be list of defs!");
if (DI->getDef()->getName() == "SDNPCommutative") {
Properties |= 1 << SDNPCommutative;
} else {
std::cerr << "Unknown SD Node property '" << DI->getDef()->getName()
<< "' on node '" << R->getName() << "'!\n";
exit(1);
}
}
// Parse the type constraints.
ListInit *Constraints = TypeProfile->getValueAsListInit("Constraints");
for (unsigned i = 0, e = Constraints->getSize(); i != e; ++i) {

View File

@ -69,6 +69,7 @@ namespace llvm {
Record *Def;
std::string EnumName;
std::string SDClassName;
unsigned Properties;
unsigned NumResults;
int NumOperands;
std::vector<SDTypeConstraint> TypeConstraints;
@ -84,6 +85,13 @@ namespace llvm {
const std::vector<SDTypeConstraint> &getTypeConstraints() const {
return TypeConstraints;
}
// SelectionDAG node properties.
enum SDNP { SDNPCommutative };
/// hasProperty - Return true if this node has the specified property.
///
bool hasProperty(enum SDNP Prop) const { return Properties & (1 << Prop); }
/// ApplyTypeConstraints - Given a node in a pattern, apply the type
/// constraints for this node to the operands of the node. This returns