class BasicBlock
Declaration
class BasicBlock : public SExpr { /* full declaration omitted */ };
Description
A basic block is part of an SCFG. It can be treated as a function in continuation passing style. A block consists of a sequence of phi nodes, which are "arguments" to the function, followed by a sequence of instructions. It ends with a Terminator, which is a Branch or Goto to another basic block in the same SCFG.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1501
Inherits from: SExpr
Member Variables
- private clang::threadSafety::til::MemRegionRef Arena
- private clang::threadSafety::til::SCFG* CFGPtr = nullptr
- private unsigned int BlockID
- private bool Visited
- private clang::threadSafety::til::BasicBlock::BlockArray Predecessors
- private clang::threadSafety::til::BasicBlock::InstrArray Args
- private clang::threadSafety::til::BasicBlock::InstrArray Instrs
- private clang::threadSafety::til::Terminator* TermInstr = nullptr
- private clang::threadSafety::til::BasicBlock::TopologyNode DominatorNode
- private clang::threadSafety::til::BasicBlock::TopologyNode PostDominatorNode
Inherited from SExpr:
- protected Opcode
- protected Reserved = 0
- protected Flags = 0
- protected SExprID = 0
- protected Block = nullptr
Method Overview
- public BasicBlock(clang::threadSafety::til::BasicBlock & B, clang::threadSafety::til::MemRegionRef A, clang::threadSafety::til::BasicBlock::InstrArray && As, clang::threadSafety::til::BasicBlock::InstrArray && Is, clang::threadSafety::til::Terminator * T)
- public BasicBlock(clang::threadSafety::til::MemRegionRef A)
- public bool Dominates(const clang::threadSafety::til::BasicBlock & Other)
- public bool PostDominates(const clang::threadSafety::til::BasicBlock & Other)
- public void addArgument(clang::threadSafety::til::Phi * V)
- public void addInstruction(clang::threadSafety::til::SExpr * V)
- public unsigned int addPredecessor(clang::threadSafety::til::BasicBlock * Pred)
- public const clang::threadSafety::til::BasicBlock::InstrArray & arguments() const
- public clang::threadSafety::til::BasicBlock::InstrArray & arguments()
- public int blockID() const
- public const clang::threadSafety::til::SCFG * cfg() const
- public clang::threadSafety::til::SCFG * cfg()
- public static bool classof(const clang::threadSafety::til::SExpr * E)
- public template <class C>typename C::CType compare(const clang::threadSafety::til::BasicBlock * E, C & Cmp) const
- private void computeDominator()
- private void computePostDominator()
- public unsigned int findPredecessorIndex(const clang::threadSafety::til::BasicBlock * BB) const
- public clang::threadSafety::til::BasicBlock::InstrArray & instructions()
- public const clang::threadSafety::til::BasicBlock::InstrArray & instructions() const
- public size_t numPredecessors() const
- public size_t numSuccessors() const
- public clang::threadSafety::til::BasicBlock * parent()
- public const clang::threadSafety::til::BasicBlock * parent() const
- public clang::threadSafety::til::BasicBlock::BlockArray & predecessors()
- public const clang::threadSafety::til::BasicBlock::BlockArray & predecessors() const
- private unsigned int renumberInstrs(unsigned int id)
- public void reserveArguments(unsigned int Nargs)
- public void reserveInstructions(unsigned int Nins)
- public void reservePredecessors(unsigned int NumPreds)
- public void setTerminator(clang::threadSafety::til::Terminator * E)
- public ArrayRef<clang::threadSafety::til::BasicBlock *> successors() const
- public ArrayRef<clang::threadSafety::til::BasicBlock *> successors()
- public clang::threadSafety::til::Terminator * terminator()
- public const clang::threadSafety::til::Terminator * terminator() const
- private unsigned int topologicalFinalSort(SimpleArray<clang::threadSafety::til::BasicBlock *> & Blocks, unsigned int ID)
- private unsigned int topologicalSort(SimpleArray<clang::threadSafety::til::BasicBlock *> & Blocks, unsigned int ID)
- public template <class V>typename V::R_BasicBlock traverse(V & Vs, typename V::R_Ctx Ctx)
Inherited from SExpr:
Methods
¶BasicBlock(
clang::threadSafety::til::BasicBlock& B,
clang::threadSafety::til::MemRegionRef A,
clang::threadSafety::til::BasicBlock::
InstrArray&& As,
clang::threadSafety::til::BasicBlock::
InstrArray&& Is,
clang::threadSafety::til::Terminator* T)
BasicBlock(
clang::threadSafety::til::BasicBlock& B,
clang::threadSafety::til::MemRegionRef A,
clang::threadSafety::til::BasicBlock::
InstrArray&& As,
clang::threadSafety::til::BasicBlock::
InstrArray&& Is,
clang::threadSafety::til::Terminator* T)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1534
Parameters
- clang::threadSafety::til::BasicBlock& B
- clang::threadSafety::til::MemRegionRef A
- clang::threadSafety::til::BasicBlock::InstrArray&& As
- clang::threadSafety::til::BasicBlock::InstrArray&& Is
- clang::threadSafety::til::Terminator* T
¶BasicBlock(
clang::threadSafety::til::MemRegionRef A)
BasicBlock(
clang::threadSafety::til::MemRegionRef A)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1532
Parameters
¶bool Dominates(
const clang::threadSafety::til::BasicBlock&
Other)
bool Dominates(
const clang::threadSafety::til::BasicBlock&
Other)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1574
Parameters
- const clang::threadSafety::til::BasicBlock& Other
¶bool PostDominates(
const clang::threadSafety::til::BasicBlock&
Other)
bool PostDominates(
const clang::threadSafety::til::BasicBlock&
Other)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1578
Parameters
- const clang::threadSafety::til::BasicBlock& Other
¶void addArgument(clang::threadSafety::til::Phi* V)
void addArgument(clang::threadSafety::til::Phi* V)
Description
Add a new argument.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1583
Parameters
¶void addInstruction(
clang::threadSafety::til::SExpr* V)
void addInstruction(
clang::threadSafety::til::SExpr* V)
Description
Add a new instruction.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1589
Parameters
¶unsigned int addPredecessor(
clang::threadSafety::til::BasicBlock* Pred)
unsigned int addPredecessor(
clang::threadSafety::til::BasicBlock* Pred)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1596
Parameters
¶const clang::threadSafety::til::BasicBlock::
InstrArray&
arguments() const
const clang::threadSafety::til::BasicBlock::
InstrArray&
arguments() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1554
¶clang::threadSafety::til::BasicBlock::InstrArray&
arguments()
clang::threadSafety::til::BasicBlock::InstrArray&
arguments()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1555
¶int blockID() const
int blockID() const
Description
Returns the block ID. Every block has a unique ID in the CFG.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1542
¶const clang::threadSafety::til::SCFG* cfg() const
const clang::threadSafety::til::SCFG* cfg() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1548
¶clang::threadSafety::til::SCFG* cfg()
clang::threadSafety::til::SCFG* cfg()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1549
¶static bool classof(
const clang::threadSafety::til::SExpr* E)
static bool classof(
const clang::threadSafety::til::SExpr* E)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1539
Parameters
- const clang::threadSafety::til::SExpr* E
¶template <class C>
typename C::CType compare(
const clang::threadSafety::til::BasicBlock* E,
C& Cmp) const
template <class C>
typename C::CType compare(
const clang::threadSafety::til::BasicBlock* E,
C& Cmp) const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1638
Templates
- C
Parameters
- const clang::threadSafety::til::BasicBlock* E
- C& Cmp
¶void computeDominator()
void computeDominator()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1651
¶void computePostDominator()
void computePostDominator()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1652
¶unsigned int findPredecessorIndex(
const clang::threadSafety::til::BasicBlock*
BB) const
unsigned int findPredecessorIndex(
const clang::threadSafety::til::BasicBlock*
BB) const
Description
Return the index of BB, or Predecessors.size if BB is not a predecessor.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1608
Parameters
- const clang::threadSafety::til::BasicBlock* BB
¶clang::threadSafety::til::BasicBlock::InstrArray&
instructions()
clang::threadSafety::til::BasicBlock::InstrArray&
instructions()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1557
¶const clang::threadSafety::til::BasicBlock::
InstrArray&
instructions() const
const clang::threadSafety::til::BasicBlock::
InstrArray&
instructions() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1558
¶size_t numPredecessors() const
size_t numPredecessors() const
Description
Returns the number of predecessors.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1545
¶size_t numSuccessors() const
size_t numSuccessors() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1546
¶clang::threadSafety::til::BasicBlock* parent()
clang::threadSafety::til::BasicBlock* parent()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1552
¶const clang::threadSafety::til::BasicBlock*
parent() const
const clang::threadSafety::til::BasicBlock*
parent() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1551
¶clang::threadSafety::til::BasicBlock::BlockArray&
predecessors()
clang::threadSafety::til::BasicBlock::BlockArray&
predecessors()
Description
Returns a list of predecessors. The order of predecessors in the list is important; each phi node has exactly one argument for each precessor, in the same order.
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1563
¶const clang::threadSafety::til::BasicBlock::
BlockArray&
predecessors() const
const clang::threadSafety::til::BasicBlock::
BlockArray&
predecessors() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1564
¶unsigned int renumberInstrs(unsigned int id)
unsigned int renumberInstrs(unsigned int id)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1647
Parameters
- unsigned int id
¶void reserveArguments(unsigned int Nargs)
void reserveArguments(unsigned int Nargs)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1599
Parameters
- unsigned int Nargs
¶void reserveInstructions(unsigned int Nins)
void reserveInstructions(unsigned int Nins)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1602
Parameters
- unsigned int Nins
¶void reservePredecessors(unsigned int NumPreds)
void reservePredecessors(unsigned int NumPreds)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1605
Parameters
- unsigned int NumPreds
¶void setTerminator(
clang::threadSafety::til::Terminator* E)
void setTerminator(
clang::threadSafety::til::Terminator* E)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1572
Parameters
¶ArrayRef<clang::threadSafety::til::BasicBlock*>
successors() const
ArrayRef<clang::threadSafety::til::BasicBlock*>
successors() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1567
¶ArrayRef<clang::threadSafety::til::BasicBlock*>
successors()
ArrayRef<clang::threadSafety::til::BasicBlock*>
successors()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1566
¶clang::threadSafety::til::Terminator* terminator()
clang::threadSafety::til::Terminator* terminator()
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1570
¶const clang::threadSafety::til::Terminator*
terminator() const
const clang::threadSafety::til::Terminator*
terminator() const
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1569
¶unsigned int topologicalFinalSort(
SimpleArray<
clang::threadSafety::til::BasicBlock*>&
Blocks,
unsigned int ID)
unsigned int topologicalFinalSort(
SimpleArray<
clang::threadSafety::til::BasicBlock*>&
Blocks,
unsigned int ID)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1650
Parameters
- SimpleArray< clang::threadSafety::til::BasicBlock*>& Blocks
- unsigned int ID
¶unsigned int topologicalSort(
SimpleArray<
clang::threadSafety::til::BasicBlock*>&
Blocks,
unsigned int ID)
unsigned int topologicalSort(
SimpleArray<
clang::threadSafety::til::BasicBlock*>&
Blocks,
unsigned int ID)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1649
Parameters
- SimpleArray< clang::threadSafety::til::BasicBlock*>& Blocks
- unsigned int ID
¶template <class V>
typename V::R_BasicBlock traverse(
V& Vs,
typename V::R_Ctx Ctx)
template <class V>
typename V::R_BasicBlock traverse(
V& Vs,
typename V::R_Ctx Ctx)
Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1614
Templates
- V
Parameters
- V& Vs
- typename V::R_Ctx Ctx