forked from OSchip/llvm-project
[SCEV] Add operand methods to Cast and UDiv
Add methods to access operands in a similar manner to NAryExpr. Differential Revision: https://reviews.llvm.org/D86083
This commit is contained in:
parent
fd485673da
commit
b999400a4f
|
@ -82,6 +82,16 @@ class Type;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const SCEV *getOperand() const { return Op; }
|
const SCEV *getOperand() const { return Op; }
|
||||||
|
const SCEV *getOperand(unsigned i) const {
|
||||||
|
assert(i == 0 && "Operand index out of range!");
|
||||||
|
return Op;
|
||||||
|
}
|
||||||
|
using op_iterator = const SCEV *const *;
|
||||||
|
using op_range = iterator_range<op_iterator>;
|
||||||
|
op_range operands() const {
|
||||||
|
return make_range(&Op, &Op + 1);
|
||||||
|
}
|
||||||
|
size_t getNumOperands() const { return 1; }
|
||||||
Type *getType() const { return Ty; }
|
Type *getType() const { return Ty; }
|
||||||
|
|
||||||
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
/// Methods for support type inquiry through isa, cast, and dyn_cast:
|
||||||
|
@ -263,16 +273,28 @@ class Type;
|
||||||
class SCEVUDivExpr : public SCEV {
|
class SCEVUDivExpr : public SCEV {
|
||||||
friend class ScalarEvolution;
|
friend class ScalarEvolution;
|
||||||
|
|
||||||
const SCEV *LHS;
|
std::array<const SCEV*, 2> Operands;
|
||||||
const SCEV *RHS;
|
|
||||||
|
|
||||||
SCEVUDivExpr(const FoldingSetNodeIDRef ID, const SCEV *lhs, const SCEV *rhs)
|
SCEVUDivExpr(const FoldingSetNodeIDRef ID, const SCEV *lhs, const SCEV *rhs)
|
||||||
: SCEV(ID, scUDivExpr, computeExpressionSize({lhs, rhs})), LHS(lhs),
|
: SCEV(ID, scUDivExpr, computeExpressionSize({lhs, rhs})) {
|
||||||
RHS(rhs) {}
|
Operands[0] = lhs;
|
||||||
|
Operands[1] = rhs;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const SCEV *getLHS() const { return LHS; }
|
const SCEV *getLHS() const { return Operands[0]; }
|
||||||
const SCEV *getRHS() const { return RHS; }
|
const SCEV *getRHS() const { return Operands[1]; }
|
||||||
|
size_t getNumOperands() const { return 2; }
|
||||||
|
const SCEV *getOperand(unsigned i) const {
|
||||||
|
assert((i == 0 || i == 1) && "Operand index out of range!");
|
||||||
|
return i == 0 ? getLHS() : getRHS();
|
||||||
|
}
|
||||||
|
|
||||||
|
using op_iterator = const SCEV *const *;
|
||||||
|
using op_range = iterator_range<op_iterator>;
|
||||||
|
op_range operands() const {
|
||||||
|
return make_range(Operands.begin(), Operands.end());
|
||||||
|
}
|
||||||
|
|
||||||
Type *getType() const {
|
Type *getType() const {
|
||||||
// In most cases the types of LHS and RHS will be the same, but in some
|
// In most cases the types of LHS and RHS will be the same, but in some
|
||||||
|
|
Loading…
Reference in New Issue