Fix rdar://9289512 - not folding load into compare at -O0
authorChris Lattner <sabre@nondot.org>
Sun, 17 Apr 2011 06:35:44 +0000 (06:35 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 17 Apr 2011 06:35:44 +0000 (06:35 +0000)
commitfd3f6351035f6bf1a6bfc851da00c0fb24d6db09
tree64265d6fb63de8be21e7ab616fa988f0b4face05
parent8bdc251dc5392fdf4854dcf588d73927d6ef64b3
Fix rdar://9289512 - not folding load into compare at -O0

The basic issue here is that bottom-up isel is matching the branch
and compare, and was failing to fold the load into the branch/compare
combo.  Fixing this (by allowing folding into any instruction of a
sequence that is selected) allows us to produce things like:

cmpb    $0, 52(%rax)
je      LBB4_2

instead of:

movb    52(%rax), %cl
cmpb    $0, %cl
je      LBB4_2

This makes the generated -O0 code run a bit faster, but also speeds up
compile time by putting less pressure on the register allocator and
generating less code.

This was one of the biggest classes of missing load folding.  Implementing
this shrinks 176.gcc's c-decl.s (as a random example) by about 4% in (verbose-asm)
line count.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129656 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/SelectionDAGISel.h
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
test/CodeGen/X86/fast-isel-x86-64.ll