A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/LoopUnrolling_8cpp_source.html below:

clang: lib/StaticAnalyzer/Core/LoopUnrolling.cpp Source File

22using namespace clang

;

31 enum

Kind { Normal, Unrolled } K;

36

: K(InK), LoopStmt(S), LCtx(L), maxStep(N) {}

41 return

LoopState(Normal, S, L, N);

45 return

LoopState(Unrolled, S, L, N);

47 bool

isUnrolled()

const

{

return

K == Unrolled; }

48 unsigned

getMaxStep()

const

{

return

maxStep; }

49 const Stmt

*getLoopStmt()

const

{

return

LoopStmt; }

52 return

K ==

X

.K && LoopStmt ==

X

.LoopStmt;

54 void

Profile(llvm::FoldingSetNodeID &ID)

const

{

56

ID.AddPointer(LoopStmt);

58

ID.AddInteger(maxStep);

75 return

isa_and_nonnull<ForStmt, WhileStmt, DoStmt>(S);

79 auto

LS = State->get<LoopStack>();

80 if

(!LS.isEmpty() && LS.getHead().getLoopStmt() == LoopStmt)

81

State = State->set<LoopStack>(LS.getTail());

88 anyOf

(hasOperatorName(

"<"

), hasOperatorName(

">"

),

89

hasOperatorName(

"<="

), hasOperatorName(

">="

),

90

hasOperatorName(

"!="

)),

91

hasEitherOperand(ignoringParenImpCasts(

96

.bind(

"conditionOperator"

);

99static

internal::Matcher<Stmt>

103

hasUnaryOperand(ignoringParenImpCasts(

106

hasLHS(ignoringParenImpCasts(

110static

internal::Matcher<Stmt>

112 return callExpr

(forEachArgumentWithParam(

117static

internal::Matcher<Stmt>

121

hasInitializer(

anyOf

(

126static

internal::Matcher<Stmt>

129

hasOperatorName(

"&"

),

140 callByRef

(equalsBoundNode(std::string(NodeName))),

141 getAddrTo

(equalsBoundNode(std::string(NodeName))),

153

equalsBoundNode(

"initVarName"

))))),

155

equalsBoundNode(

"initVarName"

))))),

156

hasRHS(ignoringParenImpCasts(

161 anyOf

(hasOperatorName(

"++"

), hasOperatorName(

"--"

)),

164

hasType(isInteger())))))))),

175 const auto

*MD = cast<CXXMethodDecl>(

D

);

176

assert(MD && MD->getParent()->isLambda() &&

177 "Captured variable should only be seen while evaluating a lambda"

);

181

llvm::DenseMap<const ValueDecl *, FieldDecl *> LambdaCaptureFields;

183

LambdaCXXRec->

getCaptureFields

(LambdaCaptureFields, LambdaThisCaptureField);

188 const FieldDecl

*FD = LambdaCaptureFields[VD];

189

assert(FD &&

"Captured variable without a corresponding field"

);

194 if

(

const DeclStmt

*DS = dyn_cast<DeclStmt>(S)) {

195 for

(

const Decl

*

D

: DS->decls()) {

216 const bool

IsRefParamOrCapture =

237 if

(

const auto

*SS = dyn_cast<SwitchStmt>(S)) {

238 if

(

const auto

*CST = dyn_cast<CompoundStmt>(SS->getBody())) {

239 for

(

const Stmt

*CB : CST->body()) {

262 if

(IsRefParamOrCapture)

265

llvm_unreachable(

"Reached root without finding the declaration of VD"

);

280 const auto

*CounterVarRef = Matches[0].getNodeAs<

DeclRefExpr

>(

"initVarRef"

);

281

llvm::APInt BoundNum =

283

llvm::APInt InitNum =

285 auto

CondOp = Matches[0].getNodeAs<

BinaryOperator

>(

"conditionOperator"

);

286 unsigned

MaxWidth = std::max(InitNum.getBitWidth(), BoundNum.getBitWidth());

288

InitNum = InitNum.zext(MaxWidth);

289

BoundNum = BoundNum.zext(MaxWidth);

291 if

(CondOp->getOpcode() == BO_GE || CondOp->getOpcode() == BO_LE)

292

maxStep = (BoundNum - InitNum + 1).

abs

().getZExtValue();

294

maxStep = (BoundNum - InitNum).

abs

().getZExtValue();

301 const Stmt

*S =

nullptr

;

307 if

(std::optional<BlockEntrance> BE =

P

.getAs<

BlockEntrance

>())

308

S = BE->getBlock()->getTerminatorStmt();

316

llvm_unreachable(

"Reached root without encountering the previous step"

);

328 auto

LS = State->get<LoopStack>();

329 if

(!LS.isEmpty() && LoopStmt == LS.getHead().getLoopStmt() &&

330

LCtx == LS.getHead().getLocationContext()) {

331 if

(LS.getHead().isUnrolled() &&

madeNewBranch

(Pred, LoopStmt)) {

332

State = State->set<LoopStack>(LS.getTail());

333

State = State->add<LoopStack>(

334

LoopState::getNormal(LoopStmt, LCtx, maxVisitOnPath));

340

State = State->add<LoopStack>(

341

LoopState::getNormal(LoopStmt, LCtx, maxVisitOnPath));

345 unsigned

outerStep = (LS.isEmpty() ? 1 : LS.getHead().getMaxStep());

347 unsigned

innerMaxStep = maxStep * outerStep;

349

State = State->add<LoopStack>(

350

LoopState::getNormal(LoopStmt, LCtx, maxVisitOnPath));

352

State = State->add<LoopStack>(

353

LoopState::getUnrolled(LoopStmt, LCtx, innerMaxStep));

358 auto

LS = State->get<LoopStack>();

359 if

(LS.isEmpty() || !LS.getHead().isUnrolled())

static const int MAXIMUM_STEP_UNROLLED

This header contains the declarations of functions which are used to decide which loops should be com...

#define REGISTER_LIST_WITH_PROGRAMSTATE(Name, Elem)

Declares an immutable list type NameTy, suitable for placement into the ProgramState.

__DEVICE__ long long abs(long long __n)

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

ASTContext & getASTContext() const

A builtin binary operation expression such as "x + y" or "x <= y".

Represents a C++ struct/union/class.

void getCaptureFields(llvm::DenseMap< const ValueDecl *, FieldDecl * > &Captures, FieldDecl *&ThisCapture) const

For a closure type, retrieve the mapping from captured variables and this to the non-static data memb...

DeclContext * getParent()

getParent - Returns the containing DeclContext.

A reference to a declared variable, function, enum, etc.

bool refersToEnclosingVariableOrCapture() const

Does this DeclRefExpr refer to an enclosing local or a captured variable?

DeclStmt - Adaptor class for mixing declarations with statements and expressions.

Decl - This represents one declaration (or definition), e.g.

virtual Decl * getCanonicalDecl()

Retrieves the "canonical" declaration of the given declaration.

Represents a member of a struct/union/class.

It wraps the AnalysisDeclContext to represent both the call stack with the help of StackFrameContext ...

const Decl * getDecl() const

LLVM_ATTRIBUTE_RETURNS_NONNULL AnalysisDeclContext * getAnalysisDeclContext() const

Stmt - This represents one statement.

bool isReferenceType() const

Represents a variable declaration or definition.

bool hasGlobalStorage() const

Returns true for all variables that do not have local storage.

const ProgramStateRef & getState() const

const Stmt * getStmtForDiagnostics() const

If the node's program point corresponds to a statement, retrieve that statement.

ProgramPoint getLocation() const

getLocation - Returns the edge associated with the given node.

const LocationContext * getLocationContext() const

ExplodedNode * getFirstPred()

unsigned succ_size() const

const internal::VariadicDynCastAllOfMatcher< Decl, VarDecl > varDecl

Matches variable declarations.

const internal::VariadicDynCastAllOfMatcher< Stmt, DeclRefExpr > declRefExpr

Matches expressions that refer to declarations.

const internal::VariadicOperatorMatcherFunc< 1, 1 > unless

Matches if the provided matcher does not match.

const internal::ArgumentAdaptingMatcherFunc< internal::HasDescendantMatcher > hasDescendant

Matches AST nodes that have descendant AST nodes that match the provided matcher.

const internal::VariadicDynCastAllOfMatcher< Decl, ParmVarDecl > parmVarDecl

Matches parameter variable declarations.

const internal::VariadicDynCastAllOfMatcher< Stmt, ReturnStmt > returnStmt

Matches return statements.

const internal::VariadicDynCastAllOfMatcher< Stmt, CallExpr > callExpr

Matches call expressions.

SmallVector< BoundNodes, 1 > match(MatcherT Matcher, const NodeT &Node, ASTContext &Context)

Returns the results of matching Matcher on Node.

const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryOperator > unaryOperator

Matches unary operator expressions.

const internal::VariadicDynCastAllOfMatcher< Stmt, InitListExpr > initListExpr

Matches init list expressions.

const internal::VariadicDynCastAllOfMatcher< Stmt, ForStmt > forStmt

Matches for statements.

const internal::VariadicDynCastAllOfMatcher< Stmt, GotoStmt > gotoStmt

Matches goto statements.

const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryOperator > binaryOperator

Matches binary operator expressions.

const internal::ArgumentAdaptingMatcherFunc< internal::HasMatcher > has

Matches AST nodes that have child AST nodes that match the provided matcher.

const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> allOf

Matches if all given matchers match.

const internal::VariadicDynCastAllOfMatcher< Stmt, SwitchStmt > switchStmt

Matches switch statements.

const AstTypeMatcher< ReferenceType > referenceType

Matches both lvalue and rvalue reference types.

const internal::VariadicDynCastAllOfMatcher< Stmt, IntegerLiteral > integerLiteral

Matches integer literals of all sizes / encodings, e.g.

internal::PolymorphicMatcher< internal::HasDeclarationMatcher, void(internal::HasDeclarationSupportedTypes), internal::Matcher< Decl > > hasDeclaration(const internal::Matcher< Decl > &InnerMatcher)

Matches a node if the declaration associated with that node matches the given matcher.

const internal::VariadicDynCastAllOfMatcher< Stmt, DeclStmt > declStmt

Matches declaration statements.

const internal::VariadicAllOfMatcher< Stmt > stmt

Matches statements.

const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> anyOf

Matches if any of the given matchers matches.

const internal::VariadicAllOfMatcher< QualType > qualType

Matches QualTypes in the clang AST.

static bool madeNewBranch(ExplodedNode *N, const Stmt *LoopStmt)

static internal::Matcher< Stmt > simpleCondition(StringRef BindName, StringRef RefName)

static internal::Matcher< Stmt > hasSuspiciousStmt(StringRef NodeName)

static internal::Matcher< Stmt > callByRef(internal::Matcher< Decl > VarNodeMatcher)

static internal::Matcher< Stmt > forLoopMatcher()

static bool isPossiblyEscaped(ExplodedNode *N, const DeclRefExpr *DR)

static internal::Matcher< Stmt > getAddrTo(internal::Matcher< Decl > VarNodeMatcher)

static bool isLoopStmt(const Stmt *S)

ProgramStateRef processLoopEnd(const Stmt *LoopStmt, ProgramStateRef State)

Updates the given ProgramState.

static bool isFoundInStmt(const Stmt *S, const VarDecl *VD)

static internal::Matcher< Stmt > assignedToRef(internal::Matcher< Decl > VarNodeMatcher)

static bool shouldCompletelyUnroll(const Stmt *LoopStmt, ASTContext &ASTCtx, ExplodedNode *Pred, unsigned &maxStep)

bool isUnrolledState(ProgramStateRef State)

Returns if the given State indicates that is inside a completely unrolled loop.

static bool isCapturedByReference(ExplodedNode *N, const DeclRefExpr *DR)

ProgramStateRef updateLoopStack(const Stmt *LoopStmt, ASTContext &ASTCtx, ExplodedNode *Pred, unsigned maxVisitOnPath)

Updates the stack of loops contained by the ProgramState.

static internal::Matcher< Stmt > changeIntBoundNode(internal::Matcher< Decl > VarNodeMatcher)

The JSON file list parser is used to communicate input to InstallAPI.

bool operator==(const CallGraphNode::CallRecord &LHS, const CallGraphNode::CallRecord &RHS)


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4