summaryrefslogtreecommitdiff
path: root/utils/TableGen
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-01-10 04:38:57 +0000
committerChris Lattner <sabre@nondot.org>2008-01-10 04:38:57 +0000
commit710e995889c71812743f3f33861c24273f4569a7 (patch)
tree1a64294aab1e64785df2db1852218a46dd71f7a5 /utils/TableGen
parent8794390406608541ab43b8ff196874b2dd055cdb (diff)
downloadllvm-710e995889c71812743f3f33861c24273f4569a7.tar.gz
llvm-710e995889c71812743f3f33861c24273f4569a7.tar.bz2
llvm-710e995889c71812743f3f33861c24273f4569a7.tar.xz
realize that instructions who match intrinsics that read memory read memory.
Also, instructions with any nodes that are SDNPMayLoad also read memory. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45817 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen')
-rw-r--r--utils/TableGen/CodeGenDAGPatterns.cpp2
-rw-r--r--utils/TableGen/CodeGenTarget.h1
-rw-r--r--utils/TableGen/InstrInfoEmitter.cpp15
3 files changed, 15 insertions, 3 deletions
diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp
index 5a826cd0f1..ee2d634679 100644
--- a/utils/TableGen/CodeGenDAGPatterns.cpp
+++ b/utils/TableGen/CodeGenDAGPatterns.cpp
@@ -319,6 +319,8 @@ SDNodeInfo::SDNodeInfo(Record *R) : Def(R) {
Properties |= 1 << SDNPOptInFlag;
} else if (PropList[i]->getName() == "SDNPMayStore") {
Properties |= 1 << SDNPMayStore;
+ } else if (PropList[i]->getName() == "SDNPMayLoad") {
+ Properties |= 1 << SDNPMayLoad;
} else {
cerr << "Unknown SD Node property '" << PropList[i]->getName()
<< "' on node '" << R->getName() << "'!\n";
diff --git a/utils/TableGen/CodeGenTarget.h b/utils/TableGen/CodeGenTarget.h
index 02afe95547..0740733419 100644
--- a/utils/TableGen/CodeGenTarget.h
+++ b/utils/TableGen/CodeGenTarget.h
@@ -37,6 +37,7 @@ enum SDNP {
SDNPOutFlag,
SDNPInFlag,
SDNPOptInFlag,
+ SDNPMayLoad,
SDNPMayStore
};
diff --git a/utils/TableGen/InstrInfoEmitter.cpp b/utils/TableGen/InstrInfoEmitter.cpp
index 1c1973f9a5..f4b9179cd0 100644
--- a/utils/TableGen/InstrInfoEmitter.cpp
+++ b/utils/TableGen/InstrInfoEmitter.cpp
@@ -174,12 +174,21 @@ private:
const SDNodeInfo &OpInfo = CDP.getSDNodeInfo(N->getOperator());
// If node writes to memory, it obviously stores to memory.
- if (OpInfo.hasProperty(SDNPMayStore)) {
+ if (OpInfo.hasProperty(SDNPMayStore))
mayStore = true;
- } else if (const CodeGenIntrinsic *IntInfo = N->getIntrinsicInfo(CDP)) {
+
+ // If it reads memory, remember this.
+ if (OpInfo.hasProperty(SDNPMayLoad))
+ mayLoad = true;
+
+ if (const CodeGenIntrinsic *IntInfo = N->getIntrinsicInfo(CDP)) {
// If this is an intrinsic, analyze it.
- if (IntInfo->ModRef >= CodeGenIntrinsic::WriteArgMem)
+ if (IntInfo->ModRef >= CodeGenIntrinsic::WriteArgMem) {
mayStore = true;// Intrinsics that can write to memory are 'mayStore'.
+ }
+
+ if (IntInfo->ModRef >= CodeGenIntrinsic::ReadArgMem)
+ mayLoad = true;// These may also load memory.
}
}