mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
15cb983f55
beneficial cases. See the changes in test/CodeGen/X86/tail-opts.ll and test/CodeGen/ARM/ifcvt2.ll for details. The fix is to change HashEndOfMBB to hash at most one instruction, instead of trying to apply heuristics about when it will be profitable to consider more than one instruction. The regular tail-merging heuristics are already prepared to handle the same cases, and they're more precise. Also, make test/CodeGen/ARM/ifcvt5.ll and test/CodeGen/Thumb2/thumb2-branch.ll slightly more complex so that they continue to test what they're intended to test. And, this eliminates the problem in test/CodeGen/Thumb2/2009-10-15-ITBlockBranch.ll, the testcase from PR5204. Update it accordingly. llvm-svn: 102907
62 lines
1.4 KiB
LLVM
62 lines
1.4 KiB
LLVM
; RUN: llc < %s -mtriple=thumbv7-apple-darwin -mattr=+thumb2 | FileCheck %s
|
|
|
|
define i32 @f1(i32 %a, i32 %b, i32* %v) {
|
|
entry:
|
|
; CHECK: f1:
|
|
; CHECK: bne LBB
|
|
%tmp = icmp eq i32 %a, %b ; <i1> [#uses=1]
|
|
br i1 %tmp, label %cond_true, label %return
|
|
|
|
cond_true: ; preds = %entry
|
|
store i32 0, i32* %v
|
|
ret i32 0
|
|
|
|
return: ; preds = %entry
|
|
ret i32 1
|
|
}
|
|
|
|
define i32 @f2(i32 %a, i32 %b, i32* %v) {
|
|
entry:
|
|
; CHECK: f2:
|
|
; CHECK: bge LBB
|
|
%tmp = icmp slt i32 %a, %b ; <i1> [#uses=1]
|
|
br i1 %tmp, label %cond_true, label %return
|
|
|
|
cond_true: ; preds = %entry
|
|
store i32 0, i32* %v
|
|
ret i32 0
|
|
|
|
return: ; preds = %entry
|
|
ret i32 1
|
|
}
|
|
|
|
define i32 @f3(i32 %a, i32 %b, i32* %v) {
|
|
entry:
|
|
; CHECK: f3:
|
|
; CHECK: bhs LBB
|
|
%tmp = icmp ult i32 %a, %b ; <i1> [#uses=1]
|
|
br i1 %tmp, label %cond_true, label %return
|
|
|
|
cond_true: ; preds = %entry
|
|
store i32 0, i32* %v
|
|
ret i32 0
|
|
|
|
return: ; preds = %entry
|
|
ret i32 1
|
|
}
|
|
|
|
define i32 @f4(i32 %a, i32 %b, i32* %v) {
|
|
entry:
|
|
; CHECK: f4:
|
|
; CHECK: blo LBB
|
|
%tmp = icmp ult i32 %a, %b ; <i1> [#uses=1]
|
|
br i1 %tmp, label %return, label %cond_true
|
|
|
|
cond_true: ; preds = %entry
|
|
store i32 0, i32* %v
|
|
ret i32 0
|
|
|
|
return: ; preds = %entry
|
|
ret i32 1
|
|
}
|