diff options
| author | Matthias Braun <matze@braunis.de> | 2016-01-25 22:08:25 +0000 |
|---|---|---|
| committer | Matthias Braun <matze@braunis.de> | 2016-01-25 22:08:25 +0000 |
| commit | 4e67e5c91a72526b4abd04574f0e308dc089603b (patch) | |
| tree | 242b6261565365cdf1d715b2281690cc9506fb3c /llvm/lib | |
| parent | 71d12d2a4efd17a286f3050410433d6c8a2c6005 (diff) | |
| download | bcm5719-llvm-4e67e5c91a72526b4abd04574f0e308dc089603b.tar.gz bcm5719-llvm-4e67e5c91a72526b4abd04574f0e308dc089603b.zip | |
X86ISelLowering: Fix cmov(cmov) special lowering bug
There's a special case in EmitLoweredSelect() that produces an improved
lowering for cmov(cmov) patterns. However this special lowering is
currently broken if the inner cmov has multiple users so this patch
stops using it in this case.
If you wonder why this wasn't fixed by continuing to use the special
lowering and inserting a 2nd PHI for the inner cmov: I believe this
would incur additional copies/register pressure so the special lowering
does not improve upon the normal one anymore in this case.
This fixes http://llvm.org/PR26256 (= rdar://24329747)
llvm-svn: 258729
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 6d104e9bf72..7bfa5de6632 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -22050,7 +22050,8 @@ X86TargetLowering::EmitLoweredSelect(MachineInstr *MI, if (LastCMOV == MI && NextMIIt != BB->end() && NextMIIt->getOpcode() == MI->getOpcode() && NextMIIt->getOperand(2).getReg() == MI->getOperand(2).getReg() && - NextMIIt->getOperand(1).getReg() == MI->getOperand(0).getReg()) { + NextMIIt->getOperand(1).getReg() == MI->getOperand(0).getReg() && + NextMIIt->getOperand(1).isKill()) { CascadedCMOV = &*NextMIIt; } |

