OLD | NEW |
1 //===- llvm/Analysis/ScalarEvolution.h - Scalar Evolution -------*- C++ -*-===// | 1 //===- llvm/Analysis/ScalarEvolution.h - Scalar Evolution -------*- C++ -*-===// |
2 // | 2 // |
3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // The ScalarEvolution class is an LLVM pass which can be used to analyze and | 10 // The ScalarEvolution class is an LLVM pass which can be used to analyze and |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 /// ComputeExitLimit - Compute the number of times the backedge of the | 446 /// ComputeExitLimit - Compute the number of times the backedge of the |
447 /// specified loop will execute if it exits via the specified block. | 447 /// specified loop will execute if it exits via the specified block. |
448 ExitLimit ComputeExitLimit(const Loop *L, BasicBlock *ExitingBlock); | 448 ExitLimit ComputeExitLimit(const Loop *L, BasicBlock *ExitingBlock); |
449 | 449 |
450 /// ComputeExitLimitFromCond - Compute the number of times the backedge of | 450 /// ComputeExitLimitFromCond - Compute the number of times the backedge of |
451 /// the specified loop will execute if its exit condition were a conditional | 451 /// the specified loop will execute if its exit condition were a conditional |
452 /// branch of ExitCond, TBB, and FBB. | 452 /// branch of ExitCond, TBB, and FBB. |
453 ExitLimit ComputeExitLimitFromCond(const Loop *L, | 453 ExitLimit ComputeExitLimitFromCond(const Loop *L, |
454 Value *ExitCond, | 454 Value *ExitCond, |
455 BasicBlock *TBB, | 455 BasicBlock *TBB, |
456 BasicBlock *FBB, | 456 BasicBlock *FBB); |
457 bool IsSubExpr); | |
458 | 457 |
459 /// ComputeExitLimitFromICmp - Compute the number of times the backedge of | 458 /// ComputeExitLimitFromICmp - Compute the number of times the backedge of |
460 /// the specified loop will execute if its exit condition were a conditional | 459 /// the specified loop will execute if its exit condition were a conditional |
461 /// branch of the ICmpInst ExitCond, TBB, and FBB. | 460 /// branch of the ICmpInst ExitCond, TBB, and FBB. |
462 ExitLimit ComputeExitLimitFromICmp(const Loop *L, | 461 ExitLimit ComputeExitLimitFromICmp(const Loop *L, |
463 ICmpInst *ExitCond, | 462 ICmpInst *ExitCond, |
464 BasicBlock *TBB, | 463 BasicBlock *TBB, |
465 BasicBlock *FBB, | 464 BasicBlock *FBB); |
466 bool IsSubExpr); | |
467 | 465 |
468 /// ComputeLoadConstantCompareExitLimit - Given an exit condition | 466 /// ComputeLoadConstantCompareExitLimit - Given an exit condition |
469 /// of 'icmp op load X, cst', try to see if we can compute the | 467 /// of 'icmp op load X, cst', try to see if we can compute the |
470 /// backedge-taken count. | 468 /// backedge-taken count. |
471 ExitLimit ComputeLoadConstantCompareExitLimit(LoadInst *LI, | 469 ExitLimit ComputeLoadConstantCompareExitLimit(LoadInst *LI, |
472 Constant *RHS, | 470 Constant *RHS, |
473 const Loop *L, | 471 const Loop *L, |
474 ICmpInst::Predicate p); | 472 ICmpInst::Predicate p); |
475 | 473 |
476 /// ComputeExitCountExhaustively - If the loop is known to execute a | 474 /// ComputeExitCountExhaustively - If the loop is known to execute a |
477 /// constant number of times (the condition evolves only from constants), | 475 /// constant number of times (the condition evolves only from constants), |
478 /// try to evaluate a few iterations of the loop until we get the exit | 476 /// try to evaluate a few iterations of the loop until we get the exit |
479 /// condition gets a value of ExitWhen (true or false). If we cannot | 477 /// condition gets a value of ExitWhen (true or false). If we cannot |
480 /// evaluate the exit count of the loop, return CouldNotCompute. | 478 /// evaluate the exit count of the loop, return CouldNotCompute. |
481 const SCEV *ComputeExitCountExhaustively(const Loop *L, | 479 const SCEV *ComputeExitCountExhaustively(const Loop *L, |
482 Value *Cond, | 480 Value *Cond, |
483 bool ExitWhen); | 481 bool ExitWhen); |
484 | 482 |
485 /// HowFarToZero - Return the number of times an exit condition comparing | 483 /// HowFarToZero - Return the number of times an exit condition comparing |
486 /// the specified value to zero will execute. If not computable, return | 484 /// the specified value to zero will execute. If not computable, return |
487 /// CouldNotCompute. | 485 /// CouldNotCompute. |
488 ExitLimit HowFarToZero(const SCEV *V, const Loop *L, bool IsSubExpr); | 486 ExitLimit HowFarToZero(const SCEV *V, const Loop *L); |
489 | 487 |
490 /// HowFarToNonZero - Return the number of times an exit condition checking | 488 /// HowFarToNonZero - Return the number of times an exit condition checking |
491 /// the specified value for nonzero will execute. If not computable, return | 489 /// the specified value for nonzero will execute. If not computable, return |
492 /// CouldNotCompute. | 490 /// CouldNotCompute. |
493 ExitLimit HowFarToNonZero(const SCEV *V, const Loop *L); | 491 ExitLimit HowFarToNonZero(const SCEV *V, const Loop *L); |
494 | 492 |
495 /// HowManyLessThans - Return the number of times an exit condition | 493 /// HowManyLessThans - Return the number of times an exit condition |
496 /// containing the specified less-than comparison will execute. If not | 494 /// containing the specified less-than comparison will execute. If not |
497 /// computable, return CouldNotCompute. isSigned specifies whether the | 495 /// computable, return CouldNotCompute. isSigned specifies whether the |
498 /// less-than is signed. | 496 /// less-than is signed. |
499 ExitLimit HowManyLessThans(const SCEV *LHS, const SCEV *RHS, | 497 ExitLimit HowManyLessThans(const SCEV *LHS, const SCEV *RHS, |
500 const Loop *L, bool isSigned, bool IsSubExpr); | 498 const Loop *L, bool isSigned); |
501 | 499 |
502 /// getPredecessorWithUniqueSuccessorForBB - Return a predecessor of BB | 500 /// getPredecessorWithUniqueSuccessorForBB - Return a predecessor of BB |
503 /// (which may not be an immediate predecessor) which has exactly one | 501 /// (which may not be an immediate predecessor) which has exactly one |
504 /// successor from which BB is reachable, or null if no such block is | 502 /// successor from which BB is reachable, or null if no such block is |
505 /// found. | 503 /// found. |
506 std::pair<BasicBlock *, BasicBlock *> | 504 std::pair<BasicBlock *, BasicBlock *> |
507 getPredecessorWithUniqueSuccessorForBB(BasicBlock *BB); | 505 getPredecessorWithUniqueSuccessorForBB(BasicBlock *BB); |
508 | 506 |
509 /// isImpliedCond - Test whether the condition described by Pred, LHS, and | 507 /// isImpliedCond - Test whether the condition described by Pred, LHS, and |
510 /// RHS is true whenever the given FoundCondValue value evaluates to true. | 508 /// RHS is true whenever the given FoundCondValue value evaluates to true. |
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
886 BumpPtrAllocator SCEVAllocator; | 884 BumpPtrAllocator SCEVAllocator; |
887 | 885 |
888 /// FirstUnknown - The head of a linked list of all SCEVUnknown | 886 /// FirstUnknown - The head of a linked list of all SCEVUnknown |
889 /// values that have been allocated. This is used by releaseMemory | 887 /// values that have been allocated. This is used by releaseMemory |
890 /// to locate them all and call their destructors. | 888 /// to locate them all and call their destructors. |
891 SCEVUnknown *FirstUnknown; | 889 SCEVUnknown *FirstUnknown; |
892 }; | 890 }; |
893 } | 891 } |
894 | 892 |
895 #endif | 893 #endif |
OLD | NEW |