1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=thumbv6m-none-eabi | FileCheck %s
4 define i8 @test_i8(i8 %a) nounwind {
5 ; CHECK-LABEL: test_i8:
7 ; CHECK-NEXT: sxtb r1, r0
8 ; CHECK-NEXT: asrs r1, r1, #7
9 ; CHECK-NEXT: adds r0, r0, r1
10 ; CHECK-NEXT: eors r0, r1
12 %tmp1neg = sub i8 0, %a
13 %b = icmp sgt i8 %a, -1
14 %abs = select i1 %b, i8 %a, i8 %tmp1neg
18 define i16 @test_i16(i16 %a) nounwind {
19 ; CHECK-LABEL: test_i16:
21 ; CHECK-NEXT: sxth r1, r0
22 ; CHECK-NEXT: asrs r1, r1, #15
23 ; CHECK-NEXT: adds r0, r0, r1
24 ; CHECK-NEXT: eors r0, r1
26 %tmp1neg = sub i16 0, %a
27 %b = icmp sgt i16 %a, -1
28 %abs = select i1 %b, i16 %a, i16 %tmp1neg
32 define i32 @test_i32(i32 %a) nounwind {
33 ; CHECK-LABEL: test_i32:
35 ; CHECK-NEXT: asrs r1, r0, #31
36 ; CHECK-NEXT: adds r0, r0, r1
37 ; CHECK-NEXT: eors r0, r1
39 %tmp1neg = sub i32 0, %a
40 %b = icmp sgt i32 %a, -1
41 %abs = select i1 %b, i32 %a, i32 %tmp1neg
45 define i64 @test_i64(i64 %a) nounwind {
46 ; CHECK-LABEL: test_i64:
48 ; CHECK-NEXT: asrs r2, r1, #31
49 ; CHECK-NEXT: adds r0, r0, r2
50 ; CHECK-NEXT: adcs r1, r2
51 ; CHECK-NEXT: eors r0, r2
52 ; CHECK-NEXT: eors r1, r2
54 %tmp1neg = sub i64 0, %a
55 %b = icmp sgt i64 %a, -1
56 %abs = select i1 %b, i64 %a, i64 %tmp1neg