Allow isDereferenceablePointer to look through some bitcasts
authorHal Finkel <hfinkel@anl.gov>
Thu, 10 Jul 2014 05:27:53 +0000 (05:27 +0000)
committerHal Finkel <hfinkel@anl.gov>
Thu, 10 Jul 2014 05:27:53 +0000 (05:27 +0000)
commita739834446a6d057d1af7f5eb172bac3204e757b
treed9123a8b930f308f2d6446cdd3fb12decd8f9dac
parent344517923c49788bbf7a49e75066e20cd674e8fd
Allow isDereferenceablePointer to look through some bitcasts

isDereferenceablePointer should not give up upon encountering any bitcast. If
we're casting from a pointer to a larger type to a pointer to a small type, we
can continue by examining the bitcast's operand. This missing capability
was noted in a comment in the function.

In order for this to work, isDereferenceablePointer now takes an optional
DataLayout pointer (essentially all callers already had such a pointer
available). Most code uses isDereferenceablePointer though
isSafeToSpeculativelyExecute (which already took an optional DataLayout
pointer), and to enable the LICM test case, LICM needs to actually provide its DL
pointer to isSafeToSpeculativelyExecute (which it was not doing previously).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212686 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/IR/Value.h
lib/Analysis/ValueTracking.cpp
lib/IR/Value.cpp
lib/Transforms/IPO/ArgumentPromotion.cpp
lib/Transforms/Scalar/LICM.cpp
lib/Transforms/Scalar/SROA.cpp
lib/Transforms/Scalar/ScalarReplAggregates.cpp
test/Transforms/LICM/hoist-bitcast-load.ll [new file with mode: 0644]