[Transforms] Silence a warning in SROA.cpp (NFC)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / neg-abs.ll
blob9be0d1a123eb3b4254160d0f77c4cedc7f4f46c7
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs \
3 ; RUN:   -mtriple=aarch64-unknown-unknown < %s | FileCheck %s
5 declare i64 @llvm.abs.i64(i64, i1 immarg)
7 define i64 @neg_abs64(i64 %x) {
8 ; CHECK-LABEL: neg_abs64:
9 ; CHECK:       // %bb.0:
10 ; CHECK-NEXT:    cmp x0, #0
11 ; CHECK-NEXT:    cneg x0, x0, pl
12 ; CHECK-NEXT:    ret
13   %abs = tail call i64 @llvm.abs.i64(i64 %x, i1 true)
14   %neg = sub nsw i64 0, %abs
15   ret i64 %neg
18 declare i32 @llvm.abs.i32(i32, i1 immarg)
20 define i32 @neg_abs32(i32 %x) {
21 ; CHECK-LABEL: neg_abs32:
22 ; CHECK:       // %bb.0:
23 ; CHECK-NEXT:    cmp w0, #0
24 ; CHECK-NEXT:    cneg w0, w0, pl
25 ; CHECK-NEXT:    ret
26   %abs = tail call i32 @llvm.abs.i32(i32 %x, i1 true)
27   %neg = sub nsw i32 0, %abs
28   ret i32 %neg
31 declare i16 @llvm.abs.i16(i16, i1 immarg)
33 define i16 @neg_abs16(i16 %x) {
34 ; CHECK-LABEL: neg_abs16:
35 ; CHECK:       // %bb.0:
36 ; CHECK-NEXT:    sbfx w8, w0, #15, #1
37 ; CHECK-NEXT:    eor w9, w0, w8
38 ; CHECK-NEXT:    sub w0, w8, w9
39 ; CHECK-NEXT:    ret
40   %abs = tail call i16 @llvm.abs.i16(i16 %x, i1 true)
41   %neg = sub nsw i16 0, %abs
42   ret i16 %neg
46 declare i128 @llvm.abs.i128(i128, i1 immarg)
48 define i128 @neg_abs128(i128 %x) {
49 ; CHECK-LABEL: neg_abs128:
50 ; CHECK:       // %bb.0:
51 ; CHECK-NEXT:    asr x8, x1, #63
52 ; CHECK-NEXT:    eor x9, x0, x8
53 ; CHECK-NEXT:    eor x10, x1, x8
54 ; CHECK-NEXT:    subs x0, x8, x9
55 ; CHECK-NEXT:    sbc x1, x8, x10
56 ; CHECK-NEXT:    ret
57   %abs = tail call i128 @llvm.abs.i128(i128 %x, i1 true)
58   %neg = sub nsw i128 0, %abs
59   ret i128 %neg
64 define i64 @abs64(i64 %x) {
65 ; CHECK-LABEL: abs64:
66 ; CHECK:       // %bb.0:
67 ; CHECK-NEXT:    cmp x0, #0
68 ; CHECK-NEXT:    cneg x0, x0, mi
69 ; CHECK-NEXT:    ret
70   %abs = tail call i64 @llvm.abs.i64(i64 %x, i1 true)
71   ret i64 %abs
74 define i32 @abs32(i32 %x) {
75 ; CHECK-LABEL: abs32:
76 ; CHECK:       // %bb.0:
77 ; CHECK-NEXT:    cmp w0, #0
78 ; CHECK-NEXT:    cneg w0, w0, mi
79 ; CHECK-NEXT:    ret
80   %abs = tail call i32 @llvm.abs.i32(i32 %x, i1 true)
81   ret i32 %abs
84 define i16 @abs16(i16 %x) {
85 ; CHECK-LABEL: abs16:
86 ; CHECK:       // %bb.0:
87 ; CHECK-NEXT:    sxth w8, w0
88 ; CHECK-NEXT:    cmp w8, #0
89 ; CHECK-NEXT:    cneg w0, w8, mi
90 ; CHECK-NEXT:    ret
91   %abs = tail call i16 @llvm.abs.i16(i16 %x, i1 true)
92   ret i16 %abs
95 define i128 @abs128(i128 %x) {
96 ; CHECK-LABEL: abs128:
97 ; CHECK:       // %bb.0:
98 ; CHECK-NEXT:    asr x8, x1, #63
99 ; CHECK-NEXT:    eor x9, x0, x8
100 ; CHECK-NEXT:    eor x10, x1, x8
101 ; CHECK-NEXT:    subs x0, x9, x8
102 ; CHECK-NEXT:    sbc x1, x10, x8
103 ; CHECK-NEXT:    ret
104   %abs = tail call i128 @llvm.abs.i128(i128 %x, i1 true)
105   ret i128 %abs