Polly 19.0.0git
Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
ScopExpander Struct Referencefinal

The SCEVExpander will not generate any code for an existing SDiv/SRem instruction but just use it, if it is referenced as a SCEVUnknown. More...

Inheritance diagram for ScopExpander:
Inheritance graph
[legend]

Public Member Functions

 ScopExpander (const Region &R, ScalarEvolution &SE, const DataLayout &DL, const char *Name, ValueMapT *VMap, BasicBlock *RTCBB)
 
Value * expandCodeFor (const SCEV *E, Type *Ty, Instruction *I)
 
const SCEV * visit (const SCEV *E)
 

Private Member Functions

const SCEV * visitGenericInst (const SCEVUnknown *E, Instruction *Inst, Instruction *IP)
 
const SCEV * visitUnknown (const SCEVUnknown *E)
 
const SCEV * visitConstant (const SCEVConstant *E)
 The following functions will just traverse the SCEV and rebuild it with the new operands returned by the traversal.
 
const SCEV * visitVScale (const SCEVVScale *E)
 
const SCEV * visitPtrToIntExpr (const SCEVPtrToIntExpr *E)
 
const SCEV * visitTruncateExpr (const SCEVTruncateExpr *E)
 
const SCEV * visitZeroExtendExpr (const SCEVZeroExtendExpr *E)
 
const SCEV * visitSignExtendExpr (const SCEVSignExtendExpr *E)
 
const SCEV * visitUDivExpr (const SCEVUDivExpr *E)
 
const SCEV * visitAddExpr (const SCEVAddExpr *E)
 
const SCEV * visitMulExpr (const SCEVMulExpr *E)
 
const SCEV * visitUMaxExpr (const SCEVUMaxExpr *E)
 
const SCEV * visitSMaxExpr (const SCEVSMaxExpr *E)
 
const SCEV * visitUMinExpr (const SCEVUMinExpr *E)
 
const SCEV * visitSMinExpr (const SCEVSMinExpr *E)
 
const SCEV * visitSequentialUMinExpr (const SCEVSequentialUMinExpr *E)
 
const SCEV * visitAddRecExpr (const SCEVAddRecExpr *E)
 

Private Attributes

SCEVExpander Expander
 
ScalarEvolution & SE
 
const char * Name
 
const Region & R
 
ValueMapTVMap
 
BasicBlock * RTCBB
 
DenseMap< const SCEV *, const SCEV * > SCEVCache
 

Friends

struct SCEVVisitor< ScopExpander, const SCEV * >
 

Detailed Description

The SCEVExpander will not generate any code for an existing SDiv/SRem instruction but just use it, if it is referenced as a SCEVUnknown.

We want however to generate new code if the instruction is in the analyzed region and we generate code outside/in front of that region. Hence, we generate the code for the SDiv/SRem operands in front of the analyzed region and then create a new SDiv/SRem operation there too.

Definition at line 237 of file ScopHelper.cpp.

Constructor & Destructor Documentation

◆ ScopExpander()

ScopExpander::ScopExpander ( const Region &  R,
ScalarEvolution &  SE,
const DataLayout &  DL,
const char *  Name,
ValueMapT VMap,
BasicBlock *  RTCBB 
)
inlineexplicit

Definition at line 240 of file ScopHelper.cpp.

Member Function Documentation

◆ expandCodeFor()

Value * ScopExpander::expandCodeFor ( const SCEV *  E,
Type *  Ty,
Instruction *  I 
)
inline

Definition at line 246 of file ScopHelper.cpp.

References Expander, R, polly::Value, and visit().

Referenced by visitGenericInst(), and visitUnknown().

◆ visit()

const SCEV * ScopExpander::visit ( const SCEV *  E)
inline

◆ visitAddExpr()

const SCEV * ScopExpander::visitAddExpr ( const SCEVAddExpr *  E)
inlineprivate

Definition at line 361 of file ScopHelper.cpp.

References SE, and visit().

◆ visitAddRecExpr()

const SCEV * ScopExpander::visitAddRecExpr ( const SCEVAddRecExpr *  E)
inlineprivate

Definition at line 403 of file ScopHelper.cpp.

References SE, and visit().

◆ visitConstant()

const SCEV * ScopExpander::visitConstant ( const SCEVConstant *  E)
inlineprivate

The following functions will just traverse the SCEV and rebuild it with the new operands returned by the traversal.

{

Definition at line 341 of file ScopHelper.cpp.

◆ visitGenericInst()

const SCEV * ScopExpander::visitGenericInst ( const SCEVUnknown *  E,
Instruction *  Inst,
Instruction *  IP 
)
inlineprivate

Definition at line 275 of file ScopHelper.cpp.

References assert, expandCodeFor(), Name, R, and SE.

Referenced by visitUnknown().

◆ visitMulExpr()

const SCEV * ScopExpander::visitMulExpr ( const SCEVMulExpr *  E)
inlineprivate

Definition at line 367 of file ScopHelper.cpp.

References SE, and visit().

◆ visitPtrToIntExpr()

const SCEV * ScopExpander::visitPtrToIntExpr ( const SCEVPtrToIntExpr *  E)
inlineprivate

Definition at line 343 of file ScopHelper.cpp.

References SE, and visit().

◆ visitSequentialUMinExpr()

const SCEV * ScopExpander::visitSequentialUMinExpr ( const SCEVSequentialUMinExpr *  E)
inlineprivate

Definition at line 397 of file ScopHelper.cpp.

References SE, and visit().

◆ visitSignExtendExpr()

const SCEV * ScopExpander::visitSignExtendExpr ( const SCEVSignExtendExpr *  E)
inlineprivate

Definition at line 352 of file ScopHelper.cpp.

References SE, and visit().

◆ visitSMaxExpr()

const SCEV * ScopExpander::visitSMaxExpr ( const SCEVSMaxExpr *  E)
inlineprivate

Definition at line 379 of file ScopHelper.cpp.

References SE, and visit().

◆ visitSMinExpr()

const SCEV * ScopExpander::visitSMinExpr ( const SCEVSMinExpr *  E)
inlineprivate

Definition at line 391 of file ScopHelper.cpp.

References SE, and visit().

◆ visitTruncateExpr()

const SCEV * ScopExpander::visitTruncateExpr ( const SCEVTruncateExpr *  E)
inlineprivate

Definition at line 346 of file ScopHelper.cpp.

References SE, and visit().

◆ visitUDivExpr()

const SCEV * ScopExpander::visitUDivExpr ( const SCEVUDivExpr *  E)
inlineprivate

Definition at line 355 of file ScopHelper.cpp.

References SE, and visit().

◆ visitUMaxExpr()

const SCEV * ScopExpander::visitUMaxExpr ( const SCEVUMaxExpr *  E)
inlineprivate

Definition at line 373 of file ScopHelper.cpp.

References SE, and visit().

◆ visitUMinExpr()

const SCEV * ScopExpander::visitUMinExpr ( const SCEVUMinExpr *  E)
inlineprivate

Definition at line 385 of file ScopHelper.cpp.

References SE, and visit().

◆ visitUnknown()

const SCEV * ScopExpander::visitUnknown ( const SCEVUnknown *  E)
inlineprivate

Definition at line 296 of file ScopHelper.cpp.

References expandCodeFor(), Name, R, RTCBB, SE, polly::Value, visit(), visitGenericInst(), and VMap.

◆ visitVScale()

const SCEV * ScopExpander::visitVScale ( const SCEVVScale *  E)
inlineprivate

Definition at line 342 of file ScopHelper.cpp.

◆ visitZeroExtendExpr()

const SCEV * ScopExpander::visitZeroExtendExpr ( const SCEVZeroExtendExpr *  E)
inlineprivate

Definition at line 349 of file ScopHelper.cpp.

References SE, and visit().

Friends And Related Function Documentation

◆ SCEVVisitor< ScopExpander, const SCEV * >

friend struct SCEVVisitor< ScopExpander, const SCEV * >
friend

Definition at line 815 of file ScopHelper.cpp.

Member Data Documentation

◆ Expander

SCEVExpander ScopExpander::Expander
private

Definition at line 267 of file ScopHelper.cpp.

Referenced by expandCodeFor().

◆ Name

const char* ScopExpander::Name
private

Definition at line 269 of file ScopHelper.cpp.

Referenced by visitGenericInst(), and visitUnknown().

◆ R

const Region& ScopExpander::R
private

Definition at line 270 of file ScopHelper.cpp.

Referenced by expandCodeFor(), visitGenericInst(), and visitUnknown().

◆ RTCBB

BasicBlock* ScopExpander::RTCBB
private

Definition at line 272 of file ScopHelper.cpp.

Referenced by visitUnknown().

◆ SCEVCache

DenseMap<const SCEV *, const SCEV *> ScopExpander::SCEVCache
private

Definition at line 273 of file ScopHelper.cpp.

Referenced by visit().

◆ SE

ScalarEvolution& ScopExpander::SE
private

◆ VMap

ValueMapT* ScopExpander::VMap
private

Definition at line 271 of file ScopHelper.cpp.

Referenced by visitUnknown().


The documentation for this struct was generated from the following file: