llvm/test/CodeGen/Thumb2/thumb2-cbnz.ll
Evan Cheng 97b5beb7fe Allow machine-cse to look across MBB boundary when cse'ing instructions that
define physical registers. It's currently very restrictive, only catching
cases where the CE is in an immediate (and only) predecessor. But it catches
a surprising large number of cases.

rdar://10660865


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147827 91177308-0d34-0410-b5e6-96231b3b80d8
2012-01-10 02:02:58 +00:00

36 lines
1.0 KiB
LLVM

; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mcpu=cortex-a8 | FileCheck %s
; rdar://7354379
declare double @foo(double) nounwind readnone
define void @t(i32 %c, double %b) {
entry:
%cmp1 = icmp ne i32 %c, 0
br i1 %cmp1, label %bb3, label %bb1
bb1: ; preds = %entry
unreachable
bb3: ; preds = %entry
%cmp2 = icmp ne i32 %c, 0
br i1 %cmp2, label %bb7, label %bb5
bb5: ; preds = %bb3
unreachable
bb7: ; preds = %bb3
%cmp3 = icmp ne i32 %c, 0
br i1 %cmp3, label %bb11, label %bb9
bb9: ; preds = %bb7
; CHECK: cmp r0, #0
; CHECK-NEXT: cbnz
%0 = tail call double @foo(double %b) nounwind readnone ; <double> [#uses=0]
br label %bb11
bb11: ; preds = %bb9, %bb7
%1 = getelementptr i32* undef, i32 0
store i32 0, i32* %1
ret void
}