diff options
Diffstat (limited to 'utils/TableGen/SDNodeProperties.cpp')
| -rw-r--r-- | utils/TableGen/SDNodeProperties.cpp | 49 | 
1 files changed, 49 insertions, 0 deletions
diff --git a/utils/TableGen/SDNodeProperties.cpp b/utils/TableGen/SDNodeProperties.cpp new file mode 100644 index 0000000000000..343febc99d1e6 --- /dev/null +++ b/utils/TableGen/SDNodeProperties.cpp @@ -0,0 +1,49 @@ +//===- SDNodeProperties.cpp -----------------------------------------------===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "SDNodeProperties.h" +#include "llvm/TableGen/Error.h" +#include "llvm/TableGen/Record.h" + +using namespace llvm; + +unsigned llvm::parseSDPatternOperatorProperties(Record *R) { +  unsigned Properties = 0; +  for (Record *Property : R->getValueAsListOfDefs("Properties")) { +    if (Property->getName() == "SDNPCommutative") { +      Properties |= 1 << SDNPCommutative; +    } else if (Property->getName() == "SDNPAssociative") { +      Properties |= 1 << SDNPAssociative; +    } else if (Property->getName() == "SDNPHasChain") { +      Properties |= 1 << SDNPHasChain; +    } else if (Property->getName() == "SDNPOutGlue") { +      Properties |= 1 << SDNPOutGlue; +    } else if (Property->getName() == "SDNPInGlue") { +      Properties |= 1 << SDNPInGlue; +    } else if (Property->getName() == "SDNPOptInGlue") { +      Properties |= 1 << SDNPOptInGlue; +    } else if (Property->getName() == "SDNPMayStore") { +      Properties |= 1 << SDNPMayStore; +    } else if (Property->getName() == "SDNPMayLoad") { +      Properties |= 1 << SDNPMayLoad; +    } else if (Property->getName() == "SDNPSideEffect") { +      Properties |= 1 << SDNPSideEffect; +    } else if (Property->getName() == "SDNPMemOperand") { +      Properties |= 1 << SDNPMemOperand; +    } else if (Property->getName() == "SDNPVariadic") { +      Properties |= 1 << SDNPVariadic; +    } else { +      PrintFatalError("Unknown SD Node property '" + +                      Property->getName() + "' on node '" + +                      R->getName() + "'!"); +    } +  } + +  return Properties; +}  | 
