mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146960 91177308-0d34-0410-b5e6-96231b3b80d8
		
			
				
	
	
		
			61 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//===-- llvm/Transforms/Utils/SimplifyIndVar.h - Indvar Utils ---*- C++ -*-===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This file defines in interface for induction variable simplification. It does
 | 
						|
// not define any actual pass or policy, but provides a single function to
 | 
						|
// simplify a loop's induction variables based on ScalarEvolution.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#ifndef LLVM_TRANSFORMS_UTILS_SIMPLIFYINDVAR_H
 | 
						|
#define LLVM_TRANSFORMS_UTILS_SIMPLIFYINDVAR_H
 | 
						|
 | 
						|
#include "llvm/Support/CommandLine.h"
 | 
						|
#include "llvm/Support/ValueHandle.h"
 | 
						|
 | 
						|
namespace llvm {
 | 
						|
 | 
						|
extern cl::opt<bool> DisableIVRewrite;
 | 
						|
 | 
						|
class CastInst;
 | 
						|
class IVUsers;
 | 
						|
class Loop;
 | 
						|
class LPPassManager;
 | 
						|
class PHINode;
 | 
						|
class ScalarEvolution;
 | 
						|
 | 
						|
/// Interface for visiting interesting IV users that are recognized but not
 | 
						|
/// simplified by this utility.
 | 
						|
class IVVisitor {
 | 
						|
  virtual void anchor();
 | 
						|
public:
 | 
						|
  virtual ~IVVisitor() {}
 | 
						|
  virtual void visitCast(CastInst *Cast) = 0;
 | 
						|
};
 | 
						|
 | 
						|
/// simplifyUsersOfIV - Simplify instructions that use this induction variable
 | 
						|
/// by using ScalarEvolution to analyze the IV's recurrence.
 | 
						|
bool simplifyUsersOfIV(PHINode *CurrIV, ScalarEvolution *SE, LPPassManager *LPM,
 | 
						|
                       SmallVectorImpl<WeakVH> &Dead, IVVisitor *V = NULL);
 | 
						|
 | 
						|
/// SimplifyLoopIVs - Simplify users of induction variables within this
 | 
						|
/// loop. This does not actually change or add IVs.
 | 
						|
bool simplifyLoopIVs(Loop *L, ScalarEvolution *SE, LPPassManager *LPM,
 | 
						|
                     SmallVectorImpl<WeakVH> &Dead);
 | 
						|
 | 
						|
/// simplifyIVUsers - Simplify instructions recorded by the IVUsers pass.
 | 
						|
/// This is a legacy implementation to reproduce the behavior of the
 | 
						|
/// IndVarSimplify pass prior to DisableIVRewrite.
 | 
						|
bool simplifyIVUsers(IVUsers *IU, ScalarEvolution *SE, LPPassManager *LPM,
 | 
						|
                     SmallVectorImpl<WeakVH> &Dead);
 | 
						|
 | 
						|
} // namespace llvm
 | 
						|
 | 
						|
#endif
 |