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)
commit2e42c34d058e5b068ec1cd6dae6cd388937c6e3c
tree668c0e1f90005c2c089d05633dd246d5c001ee7f
parentb35103ebb9aafd978f52201b542689f706914063
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).

llvm-svn: 212686
llvm/include/llvm/IR/Value.h
llvm/lib/Analysis/ValueTracking.cpp
llvm/lib/IR/Value.cpp
llvm/lib/Transforms/IPO/ArgumentPromotion.cpp
llvm/lib/Transforms/Scalar/LICM.cpp
llvm/lib/Transforms/Scalar/SROA.cpp
llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp
llvm/test/Transforms/LICM/hoist-bitcast-load.ll [new file with mode: 0644]