Lines Matching defs:ValidatorResult

39 class ValidatorResult final {
48 ValidatorResult(const ValidatorResult &Source) {
54 ValidatorResult(SCEVType::TYPE Type) : Type(Type) {
59 ValidatorResult(SCEVType::TYPE Type, const SCEV *Expr) : Type(Type) {
63 /// Get the type of the ValidatorResult.
85 void addParamsFrom(const ValidatorResult &Source) {
93 void merge(const ValidatorResult &ToMerge) {
116 raw_ostream &operator<<(raw_ostream &OS, ValidatorResult &VR) {
122 class SCEVValidator : public SCEVVisitor<SCEVValidator, ValidatorResult> {
134 ValidatorResult visitConstant(const SCEVConstant *Constant) {
135 return ValidatorResult(SCEVType::INT);
138 ValidatorResult visitVScale(const SCEVVScale *VScale) {
141 return ValidatorResult(SCEVType::INVALID);
144 ValidatorResult visitZeroExtendOrTruncateExpr(const SCEV *Expr,
146 ValidatorResult Op = visit(Operand);
155 return ValidatorResult(SCEVType::INVALID);
156 return ValidatorResult(SCEVType::PARAM, Expr);
159 ValidatorResult visitPtrToIntExpr(const SCEVPtrToIntExpr *Expr) {
163 ValidatorResult visitTruncateExpr(const SCEVTruncateExpr *Expr) {
167 ValidatorResult visitZeroExtendExpr(const SCEVZeroExtendExpr *Expr) {
171 ValidatorResult visitSignExtendExpr(const SCEVSignExtendExpr *Expr) {
175 ValidatorResult visitAddExpr(const SCEVAddExpr *Expr) {
176 ValidatorResult Return(SCEVType::INT);
179 ValidatorResult Op = visit(Expr->getOperand(i));
190 ValidatorResult visitMulExpr(const SCEVMulExpr *Expr) {
191 ValidatorResult Return(SCEVType::INT);
196 ValidatorResult Op = visit(Expr->getOperand(i));
214 return ValidatorResult(SCEVType::INVALID);
221 return ValidatorResult(SCEVType::PARAM, Expr);
226 ValidatorResult visitAddRecExpr(const SCEVAddRecExpr *Expr) {
229 return ValidatorResult(SCEVType::INVALID);
232 ValidatorResult Start = visit(Expr->getStart());
233 ValidatorResult Recurrence = visit(Expr->getStepRecurrence(SE));
247 return ValidatorResult(SCEVType::INVALID);
252 ValidatorResult Result(SCEVType::IV);
259 return ValidatorResult(SCEVType::INVALID);
264 // Directly generate ValidatorResult for Expr if 'start' is zero.
266 return ValidatorResult(SCEVType::PARAM, Expr);
274 ValidatorResult ZeroStartResult =
275 ValidatorResult(SCEVType::PARAM, ZeroStartExpr);
281 ValidatorResult visitSMaxExpr(const SCEVSMaxExpr *Expr) {
282 ValidatorResult Return(SCEVType::INT);
285 ValidatorResult Op = visit(Expr->getOperand(i));
296 ValidatorResult visitSMinExpr(const SCEVSMinExpr *Expr) {
297 ValidatorResult Return(SCEVType::INT);
300 ValidatorResult Op = visit(Expr->getOperand(i));
311 ValidatorResult visitUMaxExpr(const SCEVUMaxExpr *Expr) {
315 ValidatorResult Op = visit(Expr->getOperand(i));
319 return ValidatorResult(SCEVType::INVALID);
323 return ValidatorResult(SCEVType::PARAM, Expr);
326 ValidatorResult visitUMinExpr(const SCEVUMinExpr *Expr) {
330 ValidatorResult Op = visit(Expr->getOperand(i));
334 return ValidatorResult(SCEVType::INVALID);
338 return ValidatorResult(SCEVType::PARAM, Expr);
341 ValidatorResult visitSequentialUMinExpr(const SCEVSequentialUMinExpr *Expr) {
345 ValidatorResult Op = visit(Expr->getOperand(i));
351 return ValidatorResult(SCEVType::INVALID);
355 return ValidatorResult(SCEVType::PARAM, Expr);
358 ValidatorResult visitGenericInst(Instruction *I, const SCEV *S) {
362 return ValidatorResult(SCEVType::INVALID);
365 return ValidatorResult(SCEVType::PARAM, S);
368 ValidatorResult visitLoadInstruction(Instruction *I, const SCEV *S) {
371 return ValidatorResult(SCEVType::PARAM, S);
377 ValidatorResult visitDivision(const SCEV *Dividend, const SCEV *Divisor,
392 ValidatorResult LHS = visit(Dividend);
393 ValidatorResult RHS = visit(Divisor);
395 return ValidatorResult(SCEVType::PARAM, DivExpr);
399 return ValidatorResult(SCEVType::INVALID);
402 ValidatorResult visitUDivExpr(const SCEVUDivExpr *Expr) {
404 return ValidatorResult(SCEVType::INVALID);
411 ValidatorResult visitSDivInstruction(Instruction *SDiv, const SCEV *Expr) {
420 ValidatorResult visitSRemInstruction(Instruction *SRem, const SCEV *S) {
434 ValidatorResult visitUnknown(const SCEVUnknown *Expr) {
440 return ValidatorResult(SCEVType::INVALID);
445 return ValidatorResult(SCEVType::INVALID);
465 return ValidatorResult(SCEVType::INT); // "int"
468 return ValidatorResult(SCEVType::PARAM, Expr);
613 ValidatorResult Result = Validator.visit(Expr);
631 ValidatorResult Result = Validator.visit(E);
672 ValidatorResult Result = Validator.visit(Expr);