diff --git a/llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h b/llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h index ad0c74717090ac..c0da311e4e48a4 100644 --- a/llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h +++ b/llvm/include/llvm/Analysis/ScalarEvolutionExpressions.h @@ -210,8 +210,6 @@ class Type; return make_range(op_begin(), op_end()); } - Type *getType() const { return getOperand(0)->getType(); } - NoWrapFlags getNoWrapFlags(NoWrapFlags Mask = NoWrapMask) const { return (NoWrapFlags)(SubclassData & Mask); } @@ -293,6 +291,8 @@ class Type; : SCEVCommutativeExpr(ID, scMulExpr, O, N) {} public: + Type *getType() const { return getOperand(0)->getType(); } + /// Methods for support type inquiry through isa, cast, and dyn_cast: static bool classof(const SCEV *S) { return S->getSCEVType() == scMulExpr; @@ -359,6 +359,7 @@ class Type; : SCEVNAryExpr(ID, scAddRecExpr, O, N), L(l) {} public: + Type *getType() const { return getStart()->getType(); } const SCEV *getStart() const { return Operands[0]; } const Loop *getLoop() const { return L; } @@ -445,6 +446,8 @@ class Type; } public: + Type *getType() const { return getOperand(0)->getType(); } + static bool classof(const SCEV *S) { return isMinMaxType(S->getSCEVType()); } diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 79925ed3dd4ac6..e330ed27c792f9 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -386,12 +386,14 @@ Type *SCEV::getType() const { case scSignExtend: return cast(this)->getType(); case scAddRecExpr: + return cast(this)->getType(); case scMulExpr: + return cast(this)->getType(); case scUMaxExpr: case scSMaxExpr: case scUMinExpr: case scSMinExpr: - return cast(this)->getType(); + return cast(this)->getType(); case scAddExpr: return cast(this)->getType(); case scUDivExpr: