diff options
author | Chris Lattner <sabre@nondot.org> | 2011-04-17 06:35:44 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-04-17 06:35:44 +0000 |
commit | fd3f6351035f6bf1a6bfc851da00c0fb24d6db09 (patch) | |
tree | 64265d6fb63de8be21e7ab616fa988f0b4face05 /include | |
parent | 8bdc251dc5392fdf4854dcf588d73927d6ef64b3 (diff) | |
download | external_llvm-fd3f6351035f6bf1a6bfc851da00c0fb24d6db09.zip external_llvm-fd3f6351035f6bf1a6bfc851da00c0fb24d6db09.tar.gz external_llvm-fd3f6351035f6bf1a6bfc851da00c0fb24d6db09.tar.bz2 |
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
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/CodeGen/SelectionDAGISel.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/llvm/CodeGen/SelectionDAGISel.h b/include/llvm/CodeGen/SelectionDAGISel.h index e0cfabd..ecf3947 100644 --- a/include/llvm/CodeGen/SelectionDAGISel.h +++ b/include/llvm/CodeGen/SelectionDAGISel.h @@ -280,7 +280,8 @@ private: void PrepareEHLandingPad(); void SelectAllBasicBlocks(const Function &Fn); - bool TryToFoldFastISelLoad(const LoadInst *LI, FastISel *FastIS); + bool TryToFoldFastISelLoad(const LoadInst *LI, const Instruction *FoldInst, + FastISel *FastIS); void FinishBasicBlock(); void SelectBasicBlock(BasicBlock::const_iterator Begin, |