[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / AArch64 / iabs.ll
blobdbcd922aec2807c8b5cd183fcee0d0094b71fc6e
1 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s
3 define i8 @test_i8(i8 %a) nounwind {
4 ; CHECK-LABEL: test_i8:
5 ; CHECK:       // %bb.0:
6 ; CHECK-NEXT:  sxtb w8, w0
7 ; CHECK-NEXT:  cmp w8, #0
8 ; CHECK-NEXT:  cneg w0, w8, mi
9 ; CHECK-NEXT:  ret
10   %tmp1neg = sub i8 0, %a
11   %b = icmp sgt i8 %a, -1
12   %abs = select i1 %b, i8 %a, i8 %tmp1neg
13   ret i8 %abs
16 define i16 @test_i16(i16 %a) nounwind {
17 ; CHECK-LABEL: test_i16:
18 ; CHECK:       // %bb.0:
19 ; CHECK-NEXT:  sxth w8, w0
20 ; CHECK-NEXT:  cmp w8, #0
21 ; CHECK-NEXT:  cneg w0, w8, mi
22 ; CHECK-NEXT:  ret
23   %tmp1neg = sub i16 0, %a
24   %b = icmp sgt i16 %a, -1
25   %abs = select i1 %b, i16 %a, i16 %tmp1neg
26   ret i16 %abs
29 define i32 @test_i32(i32 %a) nounwind {
30 ; CHECK-LABEL: test_i32:
31 ; CHECK:       // %bb.0:
32 ; CHECK-NEXT:  cmp w0, #0
33 ; CHECK-NEXT:  cneg w0, w0, mi
34 ; CHECK-NEXT:  ret
35   %tmp1neg = sub i32 0, %a
36   %b = icmp sgt i32 %a, -1
37   %abs = select i1 %b, i32 %a, i32 %tmp1neg
38   ret i32 %abs
41 define i64 @test_i64(i64 %a) nounwind {
42 ; CHECK-LABEL: test_i64:
43 ; CHECK:       // %bb.0:
44 ; CHECK-NEXT:  cmp x0, #0
45 ; CHECK-NEXT:  cneg x0, x0, mi
46 ; CHECK-NEXT:  ret
47   %tmp1neg = sub i64 0, %a
48   %b = icmp sgt i64 %a, -1
49   %abs = select i1 %b, i64 %a, i64 %tmp1neg
50   ret i64 %abs