extract some more information from the intrinsic table
authorChris Lattner <sabre@nondot.org>
Fri, 24 Mar 2006 01:13:55 +0000 (01:13 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 24 Mar 2006 01:13:55 +0000 (01:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27022 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/IntrinsicEmitter.cpp
utils/TableGen/IntrinsicEmitter.h

index 4c739e9b3a64148f42b0b45eedda9846048ffc1a..c56e9507c0310580627f885553438a598ca3c359 100644 (file)
@@ -124,7 +124,10 @@ void IntrinsicEmitter::run(std::ostream &OS) {
   // Emit mod/ref info for each function.
   EmitModRefInfo(Ints, OS);
   
-  // Emit side effect info for each function.
+  // Emit table of non-memory accessing intrinsics.
+  EmitNoMemoryInfo(Ints, OS);
+  
+  // Emit side effect info for each intrinsic.
   EmitSideEffectInfo(Ints, OS);
 
   // Emit a list of intrinsics with corresponding GCC builtins.
@@ -253,6 +256,25 @@ void IntrinsicEmitter::EmitModRefInfo(const std::vector<CodeGenIntrinsic> &Ints,
   OS << "#endif\n\n";
 }
 
+void IntrinsicEmitter::
+EmitNoMemoryInfo(const std::vector<CodeGenIntrinsic> &Ints, std::ostream &OS) {
+  OS << "// SelectionDAGIsel code.\n";
+  OS << "#ifdef GET_NO_MEMORY_INTRINSICS\n";
+  OS << "  switch (IntrinsicID) {\n";
+  OS << "  default: break;\n";
+  for (unsigned i = 0, e = Ints.size(); i != e; ++i) {
+    switch (Ints[i].ModRef) {
+    default: break;
+    case CodeGenIntrinsic::NoMem:
+      OS << "  case Intrinsic::" << Ints[i].EnumName << ":\n";
+      break;
+    }
+  }
+  OS << "    return true; // These intrinsics have no side effects.\n";
+  OS << "  }\n";
+  OS << "#endif\n\n";
+}
+
 void IntrinsicEmitter::
 EmitSideEffectInfo(const std::vector<CodeGenIntrinsic> &Ints, std::ostream &OS){
   OS << "// isInstructionTriviallyDead code.\n";
index fa7cf7ca0f6028f3f4e967f78fdb2f520bf58825..ff97b4fe11633b26a1e6923f58db9e6313d2ef87 100644 (file)
@@ -37,6 +37,8 @@ namespace llvm {
                       std::ostream &OS);
     void EmitModRefInfo(const std::vector<CodeGenIntrinsic> &Ints, 
                         std::ostream &OS);
+    void EmitNoMemoryInfo(const std::vector<CodeGenIntrinsic> &Ints, 
+                          std::ostream &OS);
     void EmitSideEffectInfo(const std::vector<CodeGenIntrinsic> &Ints, 
                             std::ostream &OS);
     void EmitGCCBuiltinList(const std::vector<CodeGenIntrinsic> &Ints,