forked from OSchip/llvm-project
Add a new helper function to IVUsers for returning the "canonical"
form of an expression. This is the expression without the post-increment adjustment made, which is useful in determining which registers will be used by the expansion. llvm-svn: 93921
This commit is contained in:
parent
fb9bea7150
commit
d693472821
|
@ -212,6 +212,11 @@ public:
|
|||
/// value of the OperandValToReplace of the given IVStrideUse.
|
||||
const SCEV *getReplacementExpr(const IVStrideUse &U) const;
|
||||
|
||||
/// getCanonicalExpr - Return a SCEV expression which computes the
|
||||
/// value of the SCEV of the given IVStrideUse, ignoring the
|
||||
/// isUseOfPostIncrementedValue flag.
|
||||
const SCEV *getCanonicalExpr(const IVStrideUse &U) const;
|
||||
|
||||
void print(raw_ostream &OS, const Module* = 0) const;
|
||||
|
||||
/// dump - This method is used for debugging.
|
||||
|
|
|
@ -333,6 +333,19 @@ const SCEV *IVUsers::getReplacementExpr(const IVStrideUse &U) const {
|
|||
return RetVal;
|
||||
}
|
||||
|
||||
/// getCanonicalExpr - Return a SCEV expression which computes the
|
||||
/// value of the SCEV of the given IVStrideUse, ignoring the
|
||||
/// isUseOfPostIncrementedValue flag.
|
||||
const SCEV *IVUsers::getCanonicalExpr(const IVStrideUse &U) const {
|
||||
// Start with zero.
|
||||
const SCEV *RetVal = SE->getIntegerSCEV(0, U.getParent()->Stride->getType());
|
||||
// Create the basic add recurrence.
|
||||
RetVal = SE->getAddRecExpr(RetVal, U.getParent()->Stride, L);
|
||||
// Add the offset in a separate step, because it may be loop-variant.
|
||||
RetVal = SE->getAddExpr(RetVal, U.getOffset());
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
void IVUsers::print(raw_ostream &OS, const Module *M) const {
|
||||
OS << "IV Users for loop ";
|
||||
WriteAsOperand(OS, L->getHeader(), false);
|
||||
|
|
Loading…
Reference in New Issue