mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
b5fadc47e0
- This fixed a number of bugs in if-converter, tail merging, and post-allocation scheduler. If-converter now runs branch folding / tail merging first to maximize if-conversion opportunities. - Also changed the t2IT instruction slightly. It now defines the ITSTATE register which is read by instructions in the IT block. - Added Thumb2 specific hazard recognizer to ensure the scheduler doesn't change the instruction ordering in the IT block (since IT mask has been finalized). It also ensures no other instructions can be scheduled between instructions in the IT block. This is not yet enabled. llvm-svn: 106344
43 lines
876 B
LLVM
43 lines
876 B
LLVM
; RUN: llc < %s -march=arm | FileCheck %s
|
|
|
|
define i32 @t1(i32 %a, i32 %b, i32 %c, i32 %d) {
|
|
; CHECK: t1:
|
|
; CHECK: bxlt lr
|
|
%tmp2 = icmp sgt i32 %c, 10
|
|
%tmp5 = icmp slt i32 %d, 4
|
|
%tmp8 = or i1 %tmp5, %tmp2
|
|
%tmp13 = add i32 %b, %a
|
|
br i1 %tmp8, label %cond_true, label %UnifiedReturnBlock
|
|
|
|
cond_true:
|
|
%tmp15 = add i32 %tmp13, %c
|
|
%tmp1821 = sub i32 %tmp15, %d
|
|
ret i32 %tmp1821
|
|
|
|
UnifiedReturnBlock:
|
|
ret i32 %tmp13
|
|
}
|
|
|
|
define i32 @t2(i32 %a, i32 %b, i32 %c, i32 %d) {
|
|
; CHECK: t2:
|
|
; CHECK: bxgt lr
|
|
; CHECK: cmp
|
|
; CHECK: addge
|
|
; CHECK: subge
|
|
; CHECK-NOT: bxge lr
|
|
; CHECK: bx lr
|
|
%tmp2 = icmp sgt i32 %c, 10
|
|
%tmp5 = icmp slt i32 %d, 4
|
|
%tmp8 = and i1 %tmp5, %tmp2
|
|
%tmp13 = add i32 %b, %a
|
|
br i1 %tmp8, label %cond_true, label %UnifiedReturnBlock
|
|
|
|
cond_true:
|
|
%tmp15 = add i32 %tmp13, %c
|
|
%tmp1821 = sub i32 %tmp15, %d
|
|
ret i32 %tmp1821
|
|
|
|
UnifiedReturnBlock:
|
|
ret i32 %tmp13
|
|
}
|