mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
932ea08fcd
Many Thumb1 instructions are defined to set CPSR if executed outside an IT block, but leave it alone from inside one. In MachineIR this is represented by whether an optional register is CPSR or NoReg (0), and affects how the instructions are printed. This sets the instruction to the appropriate form during if-conversion.
25 lines
575 B
LLVM
25 lines
575 B
LLVM
; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 < %s | FileCheck %s
|
|
; RUN: llc -mtriple=thumbv8 < %s | FileCheck %s
|
|
; PR11107
|
|
|
|
define i32 @test(i32 %a, i32 %b) {
|
|
entry:
|
|
%cmp1 = icmp slt i32 %a, 0
|
|
%sub1 = sub nsw i32 0, %a
|
|
%abs1 = select i1 %cmp1, i32 %sub1, i32 %a
|
|
%cmp2 = icmp slt i32 %b, 0
|
|
%sub2 = sub nsw i32 0, %b
|
|
%abs2 = select i1 %cmp2, i32 %sub2, i32 %b
|
|
%add = add nsw i32 %abs1, %abs2
|
|
ret i32 %add
|
|
}
|
|
|
|
; CHECK: cmp
|
|
; CHECK-NEXT: it mi
|
|
; CHECK-NEXT: rsbmi
|
|
; CHECK-NEXT: cmp
|
|
; CHECK-NEXT: it mi
|
|
; CHECK-NEXT: rsb{{s?}}mi
|
|
|
|
|