Teach the load analysis driving core instcombine logic and other bits of
authorChandler Carruth <chandlerc@gmail.com>
Mon, 20 Oct 2014 00:24:14 +0000 (00:24 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 20 Oct 2014 00:24:14 +0000 (00:24 +0000)
commiteeec35ae1cce76d8f0d4fc35d231deebf2fa5f38
tree462f5cd7ee8c5342985ae9ef5f0d08622153bd40
parent25d50758f3078f56677f50b8f789dff76c90ed4c
Teach the load analysis driving core instcombine logic and other bits of
logic to look through pointer casts, making them trivially stronger in
the face of loads and stores with intervening pointer casts.

I've included a few test cases that demonstrate the kind of folding
instcombine can do without pointer casts and then variations which
obfuscate the logic through bitcasts. Without this patch, the variations
all fail to optimize fully.

This is more important now than it has been in the past as I've started
moving the load canonicialization to more closely follow the value type
requirements rather than the pointer type requirements and thus this
needs to be prepared for more pointer casts. When I made the same change
to stores several test cases regressed without logic along these lines
so I wanted to systematically improve matters first.

llvm-svn: 220178
llvm/lib/Analysis/Loads.cpp
llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
llvm/lib/Transforms/Scalar/JumpThreading.cpp
llvm/test/Transforms/InstCombine/select.ll