diff options
author | Chris Lattner <sabre@nondot.org> | 2011-08-11 06:26:54 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2011-08-11 06:26:54 +0000 |
commit | 96710b43087072072b9e752f4f116fb4192d8f06 (patch) | |
tree | e9dc58afa0bc2a733316550c197b5942834afe09 /llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | |
parent | 6d64a738faa269614499834317aca6af5956395b (diff) | |
download | bcm5719-llvm-96710b43087072072b9e752f4f116fb4192d8f06.tar.gz bcm5719-llvm-96710b43087072072b9e752f4f116fb4192d8f06.zip |
fix PR10605 / rdar://9930964 by adding a pretty scary missed check.
It's somewhat surprising anything works without this. Before we would
compile the testcase into:
test: # @test
movl $4, 8(%rdi)
movl 8(%rdi), %eax
orl %esi, %eax
cmpl $32, %edx
movl %eax, -4(%rsp) # 4-byte Spill
je .LBB0_2
now we produce:
test: # @test
movl 8(%rdi), %eax
movl $4, 8(%rdi)
orl %esi, %eax
cmpl $32, %edx
movl %eax, -4(%rsp) # 4-byte Spill
je .LBB0_2
llvm-svn: 137303
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 87bb296b8c7..ec8f014f651 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -754,6 +754,11 @@ bool SelectionDAGISel::TryToFoldFastISelLoad(const LoadInst *LI, TheUser = TheUser->use_back(); } + // If we didn't find the fold instruction, then we failed to collapse the + // sequence. + if (TheUser != FoldInst) + return false; + // Don't try to fold volatile loads. Target has to deal with alignment // constraints. if (LI->isVolatile()) return false; |