• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=thumbv6m-none-eabi | FileCheck %s
3
4define i8 @test_i8(i8 %a) nounwind {
5; CHECK-LABEL: test_i8:
6; CHECK:       @ %bb.0:
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
11; CHECK-NEXT:    bx lr
12  %tmp1neg = sub i8 0, %a
13  %b = icmp sgt i8 %a, -1
14  %abs = select i1 %b, i8 %a, i8 %tmp1neg
15  ret i8 %abs
16}
17
18define i16 @test_i16(i16 %a) nounwind {
19; CHECK-LABEL: test_i16:
20; CHECK:       @ %bb.0:
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
25; CHECK-NEXT:    bx lr
26  %tmp1neg = sub i16 0, %a
27  %b = icmp sgt i16 %a, -1
28  %abs = select i1 %b, i16 %a, i16 %tmp1neg
29  ret i16 %abs
30}
31
32define i32 @test_i32(i32 %a) nounwind {
33; CHECK-LABEL: test_i32:
34; CHECK:       @ %bb.0:
35; CHECK-NEXT:    asrs r1, r0, #31
36; CHECK-NEXT:    adds r0, r0, r1
37; CHECK-NEXT:    eors r0, r1
38; CHECK-NEXT:    bx lr
39  %tmp1neg = sub i32 0, %a
40  %b = icmp sgt i32 %a, -1
41  %abs = select i1 %b, i32 %a, i32 %tmp1neg
42  ret i32 %abs
43}
44
45define i64 @test_i64(i64 %a) nounwind {
46; CHECK-LABEL: test_i64:
47; CHECK:       @ %bb.0:
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
53; CHECK-NEXT:    bx lr
54  %tmp1neg = sub i64 0, %a
55  %b = icmp sgt i64 %a, -1
56  %abs = select i1 %b, i64 %a, i64 %tmp1neg
57  ret i64 %abs
58}
59