Lines Matching refs:Expr
58 ValidatorResult(SCEVType::TYPE Type, const SCEV *Expr) : Type(Type) { in ValidatorResult() argument
59 Parameters.insert(Expr); in ValidatorResult()
137 ValidatorResult visitZeroExtendOrTruncateExpr(const SCEV *Expr, in visitZeroExtendOrTruncateExpr() argument
149 return ValidatorResult(SCEVType::PARAM, Expr); in visitZeroExtendOrTruncateExpr()
152 ValidatorResult visitPtrToIntExpr(const SCEVPtrToIntExpr *Expr) { in visitPtrToIntExpr() argument
153 return visit(Expr->getOperand()); in visitPtrToIntExpr()
156 ValidatorResult visitTruncateExpr(const SCEVTruncateExpr *Expr) { in visitTruncateExpr() argument
157 return visitZeroExtendOrTruncateExpr(Expr, Expr->getOperand()); in visitTruncateExpr()
160 ValidatorResult visitZeroExtendExpr(const SCEVZeroExtendExpr *Expr) { in visitZeroExtendExpr() argument
161 return visitZeroExtendOrTruncateExpr(Expr, Expr->getOperand()); in visitZeroExtendExpr()
164 ValidatorResult visitSignExtendExpr(const SCEVSignExtendExpr *Expr) { in visitSignExtendExpr() argument
165 return visit(Expr->getOperand()); in visitSignExtendExpr()
168 ValidatorResult visitAddExpr(const SCEVAddExpr *Expr) { in visitAddExpr() argument
171 for (int i = 0, e = Expr->getNumOperands(); i < e; ++i) { in visitAddExpr()
172 ValidatorResult Op = visit(Expr->getOperand(i)); in visitAddExpr()
183 ValidatorResult visitMulExpr(const SCEVMulExpr *Expr) { in visitMulExpr() argument
188 for (int i = 0, e = Expr->getNumOperands(); i < e; ++i) { in visitMulExpr()
189 ValidatorResult Op = visit(Expr->getOperand(i)); in visitMulExpr()
202 << "\tExpr: " << *Expr << "\n" in visitMulExpr()
204 << "\tNext operand (" << Op << "): " << *Expr->getOperand(i) in visitMulExpr()
214 return ValidatorResult(SCEVType::PARAM, Expr); in visitMulExpr()
219 ValidatorResult visitAddRecExpr(const SCEVAddRecExpr *Expr) { in visitAddRecExpr() argument
220 if (!Expr->isAffine()) { in visitAddRecExpr()
225 ValidatorResult Start = visit(Expr->getStart()); in visitAddRecExpr()
226 ValidatorResult Recurrence = visit(Expr->getStepRecurrence(SE)); in visitAddRecExpr()
234 auto *L = Expr->getLoop(); in visitAddRecExpr()
258 if (Expr->getStart()->isZero()) in visitAddRecExpr()
259 return ValidatorResult(SCEVType::PARAM, Expr); in visitAddRecExpr()
264 SE.getConstant(Expr->getStart()->getType(), 0), in visitAddRecExpr()
265 Expr->getStepRecurrence(SE), Expr->getLoop(), Expr->getNoWrapFlags()); in visitAddRecExpr()
274 ValidatorResult visitSMaxExpr(const SCEVSMaxExpr *Expr) { in visitSMaxExpr() argument
277 for (int i = 0, e = Expr->getNumOperands(); i < e; ++i) { in visitSMaxExpr()
278 ValidatorResult Op = visit(Expr->getOperand(i)); in visitSMaxExpr()
289 ValidatorResult visitSMinExpr(const SCEVSMinExpr *Expr) { in visitSMinExpr() argument
292 for (int i = 0, e = Expr->getNumOperands(); i < e; ++i) { in visitSMinExpr()
293 ValidatorResult Op = visit(Expr->getOperand(i)); in visitSMinExpr()
304 ValidatorResult visitUMaxExpr(const SCEVUMaxExpr *Expr) { in visitUMaxExpr() argument
307 for (int i = 0, e = Expr->getNumOperands(); i < e; ++i) { in visitUMaxExpr()
308 ValidatorResult Op = visit(Expr->getOperand(i)); in visitUMaxExpr()
316 return ValidatorResult(SCEVType::PARAM, Expr); in visitUMaxExpr()
319 ValidatorResult visitUMinExpr(const SCEVUMinExpr *Expr) { in visitUMinExpr() argument
322 for (int i = 0, e = Expr->getNumOperands(); i < e; ++i) { in visitUMinExpr()
323 ValidatorResult Op = visit(Expr->getOperand(i)); in visitUMinExpr()
331 return ValidatorResult(SCEVType::PARAM, Expr); in visitUMinExpr()
334 ValidatorResult visitSequentialUMinExpr(const SCEVSequentialUMinExpr *Expr) { in visitSequentialUMinExpr() argument
337 for (int i = 0, e = Expr->getNumOperands(); i < e; ++i) { in visitSequentialUMinExpr()
338 ValidatorResult Op = visit(Expr->getOperand(i)); in visitSequentialUMinExpr()
348 return ValidatorResult(SCEVType::PARAM, Expr); in visitSequentialUMinExpr()
395 ValidatorResult visitUDivExpr(const SCEVUDivExpr *Expr) { in visitUDivExpr() argument
399 auto *Dividend = Expr->getLHS(); in visitUDivExpr()
400 auto *Divisor = Expr->getRHS(); in visitUDivExpr()
401 return visitDivision(Dividend, Divisor, Expr); in visitUDivExpr()
404 ValidatorResult visitSDivInstruction(Instruction *SDiv, const SCEV *Expr) { in visitSDivInstruction() argument
410 return visitDivision(Dividend, Divisor, Expr, SDiv); in visitSDivInstruction()
427 ValidatorResult visitUnknown(const SCEVUnknown *Expr) { in visitUnknown() argument
428 Value *V = Expr->getValue(); in visitUnknown()
430 if (!Expr->getType()->isIntegerTy() && !Expr->getType()->isPointerTy()) { in visitUnknown()
440 if (Instruction *I = dyn_cast<Instruction>(Expr->getValue())) { in visitUnknown()
445 return visitLoadInstruction(I, Expr); in visitUnknown()
447 return visitSDivInstruction(I, Expr); in visitUnknown()
449 return visitSRemInstruction(I, Expr); in visitUnknown()
451 return visitGenericInst(I, Expr); in visitUnknown()
455 if (Expr->getType()->isPointerTy()) { in visitUnknown()
460 return ValidatorResult(SCEVType::PARAM, Expr); in visitUnknown()
535 void polly::findLoops(const SCEV *Expr, SetVector<const Loop *> &Loops) { in findLoops() argument
538 ST.visitAll(Expr); in findLoops()
576 void polly::findValues(const SCEV *Expr, ScalarEvolution &SE, in findValues() argument
580 ST.visitAll(Expr); in findValues()
583 bool polly::hasScalarDepsInsideRegion(const SCEV *Expr, const Region *R, in hasScalarDepsInsideRegion() argument
588 ST.visitAll(Expr); in hasScalarDepsInsideRegion()
592 bool polly::isAffineExpr(const Region *R, llvm::Loop *Scope, const SCEV *Expr, in isAffineExpr() argument
594 if (isa<SCEVCouldNotCompute>(Expr)) in isAffineExpr()
600 dbgs() << "Expr: " << *Expr << "\n"; in isAffineExpr()
605 ValidatorResult Result = Validator.visit(Expr); in isAffineExpr()
657 const SCEV *Expr, in getParamsInAffineExpr() argument
659 if (isa<SCEVCouldNotCompute>(Expr)) in getParamsInAffineExpr()
664 ValidatorResult Result = Validator.visit(Expr); in getParamsInAffineExpr()
730 const SCEV *polly::tryForwardThroughPHI(const SCEV *Expr, Region &R, in tryForwardThroughPHI() argument
733 if (auto *Unknown = dyn_cast<SCEVUnknown>(Expr)) { in tryForwardThroughPHI()
737 return Expr; in tryForwardThroughPHI()
746 return Expr; in tryForwardThroughPHI()
753 return Expr; in tryForwardThroughPHI()