mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-16 11:24:39 +00:00
Move getStrideFromPointer and friends from LoopVectorize to VectorUtils
The following functions are moved from the LoopVectorizer to VectorUtils: - getGEPInductionOperand - stripGetElementPtr - getUniqueCastUse - getStrideFromPointer These used to be static functions in LoopVectorize, but will also be used by the upcoming loop versioning LICM transformation. Patch by Ashutosh Nema! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241980 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -20,6 +20,12 @@
|
||||
|
||||
namespace llvm {
|
||||
|
||||
class GetElementPtrInst;
|
||||
class Loop;
|
||||
class ScalarEvolution;
|
||||
class Type;
|
||||
class Value;
|
||||
|
||||
/// \brief Identify if the intrinsic is trivially vectorizable.
|
||||
/// This method returns true if the intrinsic's argument types are all
|
||||
/// scalars for the scalar form of the intrinsic and all vectors for
|
||||
@@ -51,6 +57,23 @@ Intrinsic::ID checkBinaryFloatSignature(const CallInst &I,
|
||||
/// its intrinsic ID, in case it does not found it return not_intrinsic.
|
||||
Intrinsic::ID getIntrinsicIDForCall(CallInst *CI, const TargetLibraryInfo *TLI);
|
||||
|
||||
/// \brief Find the operand of the GEP that should be checked for consecutive
|
||||
/// stores. This ignores trailing indices that have no effect on the final
|
||||
/// pointer.
|
||||
unsigned getGEPInductionOperand(const GetElementPtrInst *Gep);
|
||||
|
||||
/// \brief If the argument is a GEP, then returns the operand identified by
|
||||
/// getGEPInductionOperand. However, if there is some other non-loop-invariant
|
||||
/// operand, it returns that instead.
|
||||
Value *stripGetElementPtr(Value *Ptr, ScalarEvolution *SE, Loop *Lp);
|
||||
|
||||
/// \brief If a value has only one user that is a CastInst, return it.
|
||||
Value *getUniqueCastUse(Value *Ptr, Loop *Lp, Type *Ty);
|
||||
|
||||
/// \brief Get the stride of a pointer access in a loop. Looks for symbolic
|
||||
/// strides "a[i*stride]". Returns the symbolic stride, or null otherwise.
|
||||
Value *getStrideFromPointer(Value *Ptr, ScalarEvolution *SE, Loop *Lp);
|
||||
|
||||
} // llvm namespace
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user