diff options
author | Chris Lattner <sabre@nondot.org> | 2004-11-26 21:20:09 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-11-26 21:20:09 +0000 |
commit | f3e1d6977ee5fb6b66df314d65e28e2c35d6e244 (patch) | |
tree | 3878f0cc01314319f1bdc8ddee7210c3274dc784 /lib | |
parent | 1ed80b66b192ce695431b14eecc5121ef057251b (diff) |
Provide size information when checking to see if we can LICM a load, this
allows us to hoist more loads in some cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18265 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Scalar/LICM.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/LICM.cpp b/lib/Transforms/Scalar/LICM.cpp index 435bb4bb08..e9f2b330ee 100644 --- a/lib/Transforms/Scalar/LICM.cpp +++ b/lib/Transforms/Scalar/LICM.cpp @@ -170,9 +170,9 @@ namespace { /// pointerInvalidatedByLoop - Return true if the body of this loop may /// store into the memory location pointed to by V. /// - bool pointerInvalidatedByLoop(Value *V) { + bool pointerInvalidatedByLoop(Value *V, unsigned Size) { // Check to see if any of the basic blocks in CurLoop invalidate *V. - return CurAST->getAliasSetForPointer(V, 0).isMod(); + return CurAST->getAliasSetForPointer(V, Size).isMod(); } bool canSinkOrHoistInst(Instruction &I); @@ -351,7 +351,10 @@ bool LICM::canSinkOrHoistInst(Instruction &I) { return false; // Don't hoist volatile loads! // Don't hoist loads which have may-aliased stores in loop. - return !pointerInvalidatedByLoop(LI->getOperand(0)); + unsigned Size = 0; + if (LI->getType()->isSized()) + Size = AA->getTargetData().getTypeSize(LI->getType()); + return !pointerInvalidatedByLoop(LI->getOperand(0), Size); } else if (CallInst *CI = dyn_cast<CallInst>(&I)) { // Handle obvious cases efficiently. if (Function *Callee = CI->getCalledFunction()) { |