[DAGCombiner] Split up an indexed load if only the base pointer value is live
authorAdam Nemet <anemet@apple.com>
Mon, 12 May 2014 23:00:03 +0000 (23:00 +0000)
committerAdam Nemet <anemet@apple.com>
Mon, 12 May 2014 23:00:03 +0000 (23:00 +0000)
commit73282018a19a0a4d4fc8ac44d6a2040dc05fcadb
tree71ac9c27e146b54dd9f7c8558c5f6a97fee08c7c
parent1633f752f88640cd378c8bf772a81df2f246ef34
[DAGCombiner] Split up an indexed load if only the base pointer value is live

Right now the load may not get DCE'd because of the side-effect of updating
the base pointer.

This can happen if we lower a read-modify-write of an illegal larger type
(e.g. i48) such that the modification only affects one of the subparts (the
lower i32 part but not the higher i16 part).  See the testcase.

In order to spot the dead load we need to revisit it when SimplifyDemandedBits
decided that the value of the load is masked off.  This is the
CommitTargetLoweringOpt piece.

I checked compile time with ARM64 by sending SPEC bitcode files through llc.
No measurable change.

Fixes <rdar://problem/16031651>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208640 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/DAGCombiner.cpp
test/CodeGen/ARM64/dagcombiner-dead-indexed-load.ll [new file with mode: 0644]