summaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/fast-isel-cmp-branch.ll
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2010-08-21 02:32:36 +0000
committerDan Gohman <gohman@apple.com>2010-08-21 02:32:36 +0000
commit8bef744518e5904b77ad903d6f05241f9f807a97 (patch)
tree0b8394a57b205bb71c9c283b151a2faf660f13ed /test/CodeGen/X86/fast-isel-cmp-branch.ll
parentbf8154a4395bf941f57f6453503a850cb9805a64 (diff)
downloadllvm-8bef744518e5904b77ad903d6f05241f9f807a97.tar.gz
llvm-8bef744518e5904b77ad903d6f05241f9f807a97.tar.bz2
llvm-8bef744518e5904b77ad903d6f05241f9f807a97.tar.xz
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111709 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/fast-isel-cmp-branch.ll')
-rw-r--r--test/CodeGen/X86/fast-isel-cmp-branch.ll29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/CodeGen/X86/fast-isel-cmp-branch.ll b/test/CodeGen/X86/fast-isel-cmp-branch.ll
new file mode 100644
index 0000000000..4ab1bc61c7
--- /dev/null
+++ b/test/CodeGen/X86/fast-isel-cmp-branch.ll
@@ -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
+}