summaryrefslogtreecommitdiff
path: root/lib/TableGen
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2012-08-23 19:34:46 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2012-08-23 19:34:46 +0000
commitc1f10fd5b9a780d1c42dca7143d7a8acd9bd9377 (patch)
tree46fdaf33b0229d8d1e181de9f10f58281a4facfe /lib/TableGen
parentf104bf65b9d748618d23caa37b2407fe9c2b174c (diff)
downloadllvm-c1f10fd5b9a780d1c42dca7143d7a8acd9bd9377.tar.gz
llvm-c1f10fd5b9a780d1c42dca7143d7a8acd9bd9377.tar.bz2
llvm-c1f10fd5b9a780d1c42dca7143d7a8acd9bd9377.tar.xz
Tristate mayLoad, mayStore, and hasSideEffects.
Keep track of the set/unset state of these bits along with their true/false values, but treat '?' as '0' for now. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162461 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/TableGen')
-rw-r--r--lib/TableGen/Record.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/TableGen/Record.cpp b/lib/TableGen/Record.cpp
index 99fdc1f6e9..3176b2af63 100644
--- a/lib/TableGen/Record.cpp
+++ b/lib/TableGen/Record.cpp
@@ -1963,6 +1963,23 @@ bool Record::getValueAsBit(StringRef FieldName) const {
"' does not have a bit initializer!";
}
+bool Record::getValueAsBitOrUnset(StringRef FieldName, bool &Unset) const {
+ const RecordVal *R = getValue(FieldName);
+ if (R == 0 || R->getValue() == 0)
+ throw "Record `" + getName() + "' does not have a field named `" +
+ FieldName.str() + "'!\n";
+
+ if (R->getValue() == UnsetInit::get()) {
+ Unset = true;
+ return false;
+ }
+ Unset = false;
+ if (BitInit *BI = dynamic_cast<BitInit*>(R->getValue()))
+ return BI->getValue();
+ throw "Record `" + getName() + "', field `" + FieldName.str() +
+ "' does not have a bit initializer!";
+}
+
/// getValueAsDag - This method looks up the specified field and returns its
/// value as an Dag, throwing an exception if the field does not exist or if
/// the value is not the right type.