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)

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1532

Parameters

clang::threadSafety::til::MemRegionRef A

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1578

Parameters

const clang::threadSafety::til::BasicBlock& Other

void addArgument(clang::threadSafety::til::Phi* V)

Description

Add a new argument.

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1583

Parameters

clang::threadSafety::til::Phi* V

void addInstruction(
    clang::threadSafety::til::SExpr* V)

Description

Add a new instruction.

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1589

Parameters

clang::threadSafety::til::SExpr* V

unsigned int addPredecessor(
    clang::threadSafety::til::BasicBlock* Pred)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1596

Parameters

clang::threadSafety::til::BasicBlock* Pred

const clang::threadSafety::til::BasicBlock::
    InstrArray&
    arguments() const

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1554

clang::threadSafety::til::BasicBlock::InstrArray&
arguments()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1555

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

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1548

clang::threadSafety::til::SCFG* cfg()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1549

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

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1638

Templates

C

Parameters

const clang::threadSafety::til::BasicBlock* E
C& Cmp

void computeDominator()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1651

void computePostDominator()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1652

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()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1557

const clang::threadSafety::til::BasicBlock::
    InstrArray&
    instructions() const

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1558

size_t numPredecessors() const

Description

Returns the number of predecessors.

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1545

size_t numSuccessors() const

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1546

clang::threadSafety::til::BasicBlock* parent()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1552

const clang::threadSafety::til::BasicBlock*
parent() const

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1551

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

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1564

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1599

Parameters

unsigned int Nargs

void reserveInstructions(unsigned int Nins)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1602

Parameters

unsigned int Nins

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1572

Parameters

clang::threadSafety::til::Terminator* E

ArrayRef<clang::threadSafety::til::BasicBlock*>
successors() const

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1567

ArrayRef<clang::threadSafety::til::BasicBlock*>
successors()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1566

clang::threadSafety::til::Terminator* terminator()

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1570

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)

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)

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)

Declared at: clang/include/clang/Analysis/Analyses/ThreadSafetyTIL.h:1614

Templates

V

Parameters

V& Vs
typename V::R_Ctx Ctx