From f3c0bae1c1a14a195b70256c96676c2755e8f744 Mon Sep 17 00:00:00 2001 From: DeLesley Hutchins Date: Thu, 29 May 2014 20:28:53 +0000 Subject: [PATCH] Thread Safety Analysis: minor changes to TIL pretty-printing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209842 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../clang/Analysis/Analyses/ThreadSafetyTIL.h | 4 ++ .../Analysis/Analyses/ThreadSafetyTraverse.h | 40 +++++++++---------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/include/clang/Analysis/Analyses/ThreadSafetyTIL.h b/include/clang/Analysis/Analyses/ThreadSafetyTIL.h index a9e58c39ba..34e70552a6 100644 --- a/include/clang/Analysis/Analyses/ThreadSafetyTIL.h +++ b/include/clang/Analysis/Analyses/ThreadSafetyTIL.h @@ -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(Bid); Id = static_cast(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); } diff --git a/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h b/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h index 47c08a0dde..8d3ec5b423 100644 --- a/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h +++ b/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h @@ -475,9 +475,10 @@ template 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) { -- 2.40.0