1 ; Test negative integer absolute.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5 ; Test i32->i32 negative absolute using slt.
6 define i32 @f1(i32 %val) {
10 %cmp = icmp slt i32 %val, 0
11 %neg = sub i32 0, %val
12 %abs = select i1 %cmp, i32 %neg, i32 %val
13 %res = sub i32 0, %abs
17 ; Test i32->i32 negative absolute using sle.
18 define i32 @f2(i32 %val) {
22 %cmp = icmp sle i32 %val, 0
23 %neg = sub i32 0, %val
24 %abs = select i1 %cmp, i32 %neg, i32 %val
25 %res = sub i32 0, %abs
29 ; Test i32->i32 negative absolute using sgt.
30 define i32 @f3(i32 %val) {
34 %cmp = icmp sgt i32 %val, 0
35 %neg = sub i32 0, %val
36 %abs = select i1 %cmp, i32 %val, i32 %neg
37 %res = sub i32 0, %abs
41 ; Test i32->i32 negative absolute using sge.
42 define i32 @f4(i32 %val) {
46 %cmp = icmp sge i32 %val, 0
47 %neg = sub i32 0, %val
48 %abs = select i1 %cmp, i32 %val, i32 %neg
49 %res = sub i32 0, %abs
53 ; Test i32->i64 negative absolute.
54 define i64 @f5(i32 %val) {
56 ; CHECK: lngfr %r2, %r2
58 %ext = sext i32 %val to i64
59 %cmp = icmp slt i64 %ext, 0
60 %neg = sub i64 0, %ext
61 %abs = select i1 %cmp, i64 %neg, i64 %ext
62 %res = sub i64 0, %abs
66 ; Test i32->i64 negative absolute that uses an "in-register" form of
68 define i64 @f6(i64 %val) {
70 ; CHECK: lngfr %r2, %r2
72 %trunc = trunc i64 %val to i32
73 %ext = sext i32 %trunc to i64
74 %cmp = icmp slt i64 %ext, 0
75 %neg = sub i64 0, %ext
76 %abs = select i1 %cmp, i64 %neg, i64 %ext
77 %res = sub i64 0, %abs
81 ; Test i64 negative absolute.
82 define i64 @f7(i64 %val) {
84 ; CHECK: lngr %r2, %r2
86 %cmp = icmp slt i64 %val, 0
87 %neg = sub i64 0, %val
88 %abs = select i1 %cmp, i64 %neg, i64 %val
89 %res = sub i64 0, %abs