xref: /llvm-project/llvm/test/CodeGen/AArch64/iabs.ll (revision eaea4608e645e36962541f8fe03a8afc1139ed2a)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=arm64-eabi | FileCheck %s
3; RUN: llc < %s -mtriple=arm64-eabi -mattr=+cssc | FileCheck %s -check-prefix=CHECK-CSSC
4
5define i8 @test_i8(i8 %a) nounwind {
6; CHECK-LABEL: test_i8:
7; CHECK:       // %bb.0:
8; CHECK-NEXT:    sxtb w8, w0
9; CHECK-NEXT:    cmp w8, #0
10; CHECK-NEXT:    cneg w0, w8, mi
11; CHECK-NEXT:    ret
12;
13; CHECK-CSSC-LABEL: test_i8:
14; CHECK-CSSC:       // %bb.0:
15; CHECK-CSSC-NEXT:    sxtb w8, w0
16; CHECK-CSSC-NEXT:    abs w0, w8
17; CHECK-CSSC-NEXT:    ret
18  %tmp1neg = sub i8 0, %a
19  %b = icmp sgt i8 %a, -1
20  %abs = select i1 %b, i8 %a, i8 %tmp1neg
21  ret i8 %abs
22}
23
24define i16 @test_i16(i16 %a) nounwind {
25; CHECK-LABEL: test_i16:
26; CHECK:       // %bb.0:
27; CHECK-NEXT:    sxth w8, w0
28; CHECK-NEXT:    cmp w8, #0
29; CHECK-NEXT:    cneg w0, w8, mi
30; CHECK-NEXT:    ret
31;
32; CHECK-CSSC-LABEL: test_i16:
33; CHECK-CSSC:       // %bb.0:
34; CHECK-CSSC-NEXT:    sxth w8, w0
35; CHECK-CSSC-NEXT:    abs w0, w8
36; CHECK-CSSC-NEXT:    ret
37  %tmp1neg = sub i16 0, %a
38  %b = icmp sgt i16 %a, -1
39  %abs = select i1 %b, i16 %a, i16 %tmp1neg
40  ret i16 %abs
41}
42
43define i32 @test_i32(i32 %a) nounwind {
44; CHECK-LABEL: test_i32:
45; CHECK:       // %bb.0:
46; CHECK-NEXT:    cmp w0, #0
47; CHECK-NEXT:    cneg w0, w0, mi
48; CHECK-NEXT:    ret
49;
50; CHECK-CSSC-LABEL: test_i32:
51; CHECK-CSSC:       // %bb.0:
52; CHECK-CSSC-NEXT:    abs w0, w0
53; CHECK-CSSC-NEXT:    ret
54  %tmp1neg = sub i32 0, %a
55  %b = icmp sgt i32 %a, -1
56  %abs = select i1 %b, i32 %a, i32 %tmp1neg
57  ret i32 %abs
58}
59
60define i64 @test_i64(i64 %a) nounwind {
61; CHECK-LABEL: test_i64:
62; CHECK:       // %bb.0:
63; CHECK-NEXT:    cmp x0, #0
64; CHECK-NEXT:    cneg x0, x0, mi
65; CHECK-NEXT:    ret
66;
67; CHECK-CSSC-LABEL: test_i64:
68; CHECK-CSSC:       // %bb.0:
69; CHECK-CSSC-NEXT:    abs x0, x0
70; CHECK-CSSC-NEXT:    ret
71  %tmp1neg = sub i64 0, %a
72  %b = icmp sgt i64 %a, -1
73  %abs = select i1 %b, i64 %a, i64 %tmp1neg
74  ret i64 %abs
75}
76