[llvm-branch-commits] [llvm-branch] r112509 - in /llvm/branches/Apple/williamson: lib/Target/X86/X86FastISel.cpp test/CodeGen/X86/fast-isel-cmp-branch.ll
Daniel Dunbar
daniel at zuster.org
Mon Aug 30 13:20:05 PDT 2010
Author: ddunbar
Date: Mon Aug 30 15:20:05 2010
New Revision: 112509
URL: http://llvm.org/viewvc/llvm-project?rev=112509&view=rev
Log:
Merge r111709:
--
Author: Dan Gohman <gohman at apple.com>
Date: Sat Aug 21 02:32:36 2010 +0000
Fix x86 fast-isel's cmp+branch folding to avoid folding when the
comparison is in a different basic block from the branch. In such
cases, the comparison's operands may not have initialized virtual
registers available.
Added:
llvm/branches/Apple/williamson/test/CodeGen/X86/fast-isel-cmp-branch.ll
Modified:
llvm/branches/Apple/williamson/lib/Target/X86/X86FastISel.cpp
Modified: llvm/branches/Apple/williamson/lib/Target/X86/X86FastISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/williamson/lib/Target/X86/X86FastISel.cpp?rev=112509&r1=112508&r2=112509&view=diff
==============================================================================
--- llvm/branches/Apple/williamson/lib/Target/X86/X86FastISel.cpp (original)
+++ llvm/branches/Apple/williamson/lib/Target/X86/X86FastISel.cpp Mon Aug 30 15:20:05 2010
@@ -960,9 +960,11 @@
MachineBasicBlock *TrueMBB = FuncInfo.MBBMap[BI->getSuccessor(0)];
MachineBasicBlock *FalseMBB = FuncInfo.MBBMap[BI->getSuccessor(1)];
- // Fold the common case of a conditional branch with a comparison.
+ // Fold the common case of a conditional branch with a comparison
+ // in the same block (values defined on other blocks may not have
+ // initialized registers).
if (const CmpInst *CI = dyn_cast<CmpInst>(BI->getCondition())) {
- if (CI->hasOneUse()) {
+ if (CI->hasOneUse() && CI->getParent() == I->getParent()) {
EVT VT = TLI.getValueType(CI->getOperand(0)->getType());
// Try to take advantage of fallthrough opportunities.
Added: llvm/branches/Apple/williamson/test/CodeGen/X86/fast-isel-cmp-branch.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/williamson/test/CodeGen/X86/fast-isel-cmp-branch.ll?rev=112509&view=auto
==============================================================================
--- llvm/branches/Apple/williamson/test/CodeGen/X86/fast-isel-cmp-branch.ll (added)
+++ llvm/branches/Apple/williamson/test/CodeGen/X86/fast-isel-cmp-branch.ll Mon Aug 30 15:20:05 2010
@@ -0,0 +1,29 @@
+; RUN: llc -O0 -march=x86-64 -asm-verbose=false < %s | FileCheck %s
+; rdar://8337108
+
+; Fast-isel shouldn't try to look through the compare because it's in a
+; different basic block, so its operands aren't necessarily exported
+; for cross-block usage.
+
+; CHECK: movb %al, 7(%rsp)
+; CHECK: callq {{_?}}bar
+; CHECK: movb 7(%rsp), %al
+
+declare void @bar()
+
+define void @foo(i32 %a, i32 %b) nounwind {
+entry:
+ %q = add i32 %a, 7
+ %r = add i32 %b, 9
+ %t = icmp ult i32 %q, %r
+ invoke void @bar() to label %next unwind label %unw
+next:
+ br i1 %t, label %true, label %return
+true:
+ call void @bar()
+ br label %return
+return:
+ ret void
+unw:
+ unreachable
+}
More information about the llvm-branch-commits
mailing list