diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 11:06:01 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 11:06:01 +0000 |
commit | 486754660bb926339aefcf012a3f848592babb8b (patch) | |
tree | ecdbc446c9876f4f120f701c243373cd3cb43db3 /lib/Analysis/ThreadSafetyTIL.cpp | |
parent | 55e6d896ad333f07bb3b1ba487df214fc268a4ab (diff) |
Notes
Diffstat (limited to 'lib/Analysis/ThreadSafetyTIL.cpp')
-rw-r--r-- | lib/Analysis/ThreadSafetyTIL.cpp | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/lib/Analysis/ThreadSafetyTIL.cpp b/lib/Analysis/ThreadSafetyTIL.cpp index cd7cdc69ab73a..798bbfb29d7bb 100644 --- a/lib/Analysis/ThreadSafetyTIL.cpp +++ b/lib/Analysis/ThreadSafetyTIL.cpp @@ -1,4 +1,4 @@ -//===- ThreadSafetyTIL.cpp -------------------------------------*- C++ --*-===// +//===- ThreadSafetyTIL.cpp ------------------------------------------------===// // // The LLVM Compiler Infrastructure // @@ -8,7 +8,11 @@ //===----------------------------------------------------------------------===// #include "clang/Analysis/Analyses/ThreadSafetyTIL.h" -#include "clang/Analysis/Analyses/ThreadSafetyTraverse.h" +#include "clang/Basic/LLVM.h" +#include "llvm/Support/Casting.h" +#include <cassert> +#include <cstddef> + using namespace clang; using namespace threadSafety; using namespace til; @@ -19,7 +23,7 @@ StringRef til::getUnaryOpcodeString(TIL_UnaryOpcode Op) { case UOP_BitNot: return "~"; case UOP_LogicNot: return "!"; } - return ""; + return {}; } StringRef til::getBinaryOpcodeString(TIL_BinaryOpcode Op) { @@ -42,10 +46,9 @@ StringRef til::getBinaryOpcodeString(TIL_BinaryOpcode Op) { case BOP_LogicAnd: return "&&"; case BOP_LogicOr: return "||"; } - return ""; + return {}; } - SExpr* Future::force() { Status = FS_evaluating; Result = compute(); @@ -53,13 +56,12 @@ SExpr* Future::force() { return Result; } - unsigned BasicBlock::addPredecessor(BasicBlock *Pred) { unsigned Idx = Predecessors.size(); Predecessors.reserveCheck(1, Arena); Predecessors.push_back(Pred); - for (SExpr *E : Args) { - if (Phi* Ph = dyn_cast<Phi>(E)) { + for (auto *E : Args) { + if (auto *Ph = dyn_cast<Phi>(E)) { Ph->values().reserveCheck(1, Arena); Ph->values().push_back(nullptr); } @@ -67,28 +69,26 @@ unsigned BasicBlock::addPredecessor(BasicBlock *Pred) { return Idx; } - void BasicBlock::reservePredecessors(unsigned NumPreds) { Predecessors.reserve(NumPreds, Arena); - for (SExpr *E : Args) { - if (Phi* Ph = dyn_cast<Phi>(E)) { + for (auto *E : Args) { + if (auto *Ph = dyn_cast<Phi>(E)) { Ph->values().reserve(NumPreds, Arena); } } } - // If E is a variable, then trace back through any aliases or redundant // Phi nodes to find the canonical definition. const SExpr *til::getCanonicalVal(const SExpr *E) { while (true) { - if (auto *V = dyn_cast<Variable>(E)) { + if (const auto *V = dyn_cast<Variable>(E)) { if (V->kind() == Variable::VK_Let) { E = V->definition(); continue; } } - if (const Phi *Ph = dyn_cast<Phi>(E)) { + if (const auto *Ph = dyn_cast<Phi>(E)) { if (Ph->status() == Phi::PH_SingleVal) { E = Ph->values()[0]; continue; @@ -99,7 +99,6 @@ const SExpr *til::getCanonicalVal(const SExpr *E) { return E; } - // If E is a variable, then trace back through any aliases or redundant // Phi nodes to find the canonical definition. // The non-const version will simplify incomplete Phi nodes. @@ -129,7 +128,6 @@ SExpr *til::simplifyToCanonicalVal(SExpr *E) { } } - // Trace the arguments of an incomplete Phi node to see if they have the same // canonical definition. If so, mark the Phi node as redundant. // getCanonicalVal() will recursively call simplifyIncompletePhi(). @@ -140,7 +138,7 @@ void til::simplifyIncompleteArg(til::Phi *Ph) { Ph->setStatus(Phi::PH_MultiVal); SExpr *E0 = simplifyToCanonicalVal(Ph->values()[0]); - for (unsigned i=1, n=Ph->values().size(); i<n; ++i) { + for (unsigned i = 1, n = Ph->values().size(); i < n; ++i) { SExpr *Ei = simplifyToCanonicalVal(Ph->values()[i]); if (Ei == Ph) continue; // Recursive reference to itself. Don't count. @@ -151,7 +149,6 @@ void til::simplifyIncompleteArg(til::Phi *Ph) { Ph->setStatus(Phi::PH_SingleVal); } - // Renumbers the arguments and instructions to have unique, sequential IDs. int BasicBlock::renumberInstrs(int ID) { for (auto *Arg : Args) @@ -166,7 +163,7 @@ int BasicBlock::renumberInstrs(int ID) { // Each block will be written into the Blocks array in order, and its BlockID // will be set to the index in the array. Sorting should start from the entry // block, and ID should be the total number of blocks. -int BasicBlock::topologicalSort(SimpleArray<BasicBlock*>& Blocks, int ID) { +int BasicBlock::topologicalSort(SimpleArray<BasicBlock *> &Blocks, int ID) { if (Visited) return ID; Visited = true; for (auto *Block : successors()) @@ -258,7 +255,6 @@ void BasicBlock::computePostDominator() { PostDominatorNode.SizeOfSubTree = 1; } - // Renumber instructions in all blocks void SCFG::renumberInstrs() { int InstrID = 0; @@ -266,7 +262,6 @@ void SCFG::renumberInstrs() { InstrID = Block->renumberInstrs(InstrID); } - static inline void computeNodeSize(BasicBlock *B, BasicBlock::TopologyNode BasicBlock::*TN) { BasicBlock::TopologyNode *N = &(B->*TN); @@ -287,7 +282,6 @@ static inline void computeNodeID(BasicBlock *B, } } - // Normalizes a CFG. Normalization has a few major components: // 1) Removing unreachable blocks. // 2) Computing dominators and post-dominators |