Thread Safety Analysis: minor changes to TIL pretty-printing.
authorDeLesley Hutchins <delesley@google.com>
Thu, 29 May 2014 20:28:53 +0000 (20:28 +0000)
committerDeLesley Hutchins <delesley@google.com>
Thu, 29 May 2014 20:28:53 +0000 (20:28 +0000)
llvm-svn: 209842

clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h
clang/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h

index a9e58c3..34e7055 100644 (file)
@@ -364,6 +364,7 @@ public:
   // Let-variable, function parameter, or self-variable
   enum VariableKind {
     VK_Let,
+    VK_LetBB,
     VK_Fun,
     VK_SFun
   };
@@ -388,6 +389,7 @@ public:
   unsigned getID() const { return Id; }
   unsigned getBlockID() const { return BlockID; }
 
+  void setName(StringRef S) { Name = S; }
   void setID(unsigned Bid, unsigned I) {
     BlockID = static_cast<unsigned short>(Bid);
     Id = static_cast<unsigned short>(I);
@@ -1432,11 +1434,13 @@ public:
 
   // Add a new argument.  V must define a phi-node.
   void addArgument(Variable *V) {
+    V->setKind(Variable::VK_LetBB);
     Args.reserveCheck(1, Arena);
     Args.push_back(V);
   }
   // Add a new instruction.
   void addInstruction(Variable *V) {
+    V->setKind(Variable::VK_LetBB);
     Instrs.reserveCheck(1, Arena);
     Instrs.push_back(V);
   }
index 47c08a0..8d3ec5b 100644 (file)
@@ -475,9 +475,10 @@ template <typename Self, typename StreamType>
 class PrettyPrinter {
 private:
   bool Verbose;  // Print out additional information
+  bool Cleanup;  // Omit redundant decls.
 
 public:
-  PrettyPrinter(bool V = false) : Verbose(V) { }
+  PrettyPrinter(bool V = false, bool C = true) : Verbose(V), Cleanup(C) { }
 
   static void print(SExpr *E, StreamType &SS) {
     Self printer;
@@ -491,17 +492,6 @@ protected:
     SS << "\n";
   }
 
-  void printBlockLabel(StreamType & SS, BasicBlock *BB, unsigned index) {
-    if (!BB) {
-      SS << "BB_null";
-      return;
-    }
-    SS << "BB_";
-    SS << BB->blockID();
-    SS << ":";
-    SS << index;
-  }
-
   // TODO: further distinguish between binary operations.
   static const unsigned Prec_Atom = 0;
   static const unsigned Prec_Postfix = 1;
@@ -554,6 +544,17 @@ protected:
     return Prec_MAX;
   }
 
+  void printBlockLabel(StreamType & SS, BasicBlock *BB, unsigned index) {
+    if (!BB) {
+      SS << "BB_null";
+      return;
+    }
+    SS << "BB_";
+    SS << BB->blockID();
+    SS << ":";
+    SS << index;
+  }
+
   void printSExpr(SExpr *E, StreamType &SS, unsigned P) {
     if (!E) {
       self()->printNull(SS);
@@ -683,20 +684,17 @@ protected:
   }
 
   void printVariable(Variable *V, StreamType &SS, bool IsVarDecl = false) {
-    SExpr* E = nullptr;
-    if (!IsVarDecl) {
-      E = getCanonicalVal(V);
+    if (!IsVarDecl && Cleanup) {
+      SExpr* E = getCanonicalVal(V);
       if (E != V) {
         printSExpr(E, SS, Prec_Atom);
-        if (Verbose) {
-          SS << " /*";
-          SS << V->name() << V->getBlockID() << "_" << V->getID();
-          SS << "*/";
-        }
         return;
       }
     }
-    SS << V->name() << V->getBlockID() << "_" << V->getID();
+    if (V->kind() == Variable::VK_LetBB)
+      SS << V->name() << V->getBlockID() << "_" << V->getID();
+    else
+      SS << V->name() << V->getID();
   }
 
   void printFunction(Function *E, StreamType &SS, unsigned sugared = 0) {