1; Test negative integer absolute. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4 5; Test i32->i32 negative absolute using slt. 6define i32 @f1(i32 %val) { 7; CHECK-LABEL: f1: 8; CHECK: lnr %r2, %r2 9; CHECK: br %r14 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 14 ret i32 %res 15} 16 17; Test i32->i32 negative absolute using sle. 18define i32 @f2(i32 %val) { 19; CHECK-LABEL: f2: 20; CHECK: lnr %r2, %r2 21; CHECK: br %r14 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 26 ret i32 %res 27} 28 29; Test i32->i32 negative absolute using sgt. 30define i32 @f3(i32 %val) { 31; CHECK-LABEL: f3: 32; CHECK: lnr %r2, %r2 33; CHECK: br %r14 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 38 ret i32 %res 39} 40 41; Test i32->i32 negative absolute using sge. 42define i32 @f4(i32 %val) { 43; CHECK-LABEL: f4: 44; CHECK: lnr %r2, %r2 45; CHECK: br %r14 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 50 ret i32 %res 51} 52 53; Test i32->i64 negative absolute. 54define i64 @f5(i32 %val) { 55; CHECK-LABEL: f5: 56; CHECK: lngfr %r2, %r2 57; CHECK: br %r14 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 63 ret i64 %res 64} 65 66; Test i32->i64 negative absolute that uses an "in-register" form of 67; sign extension. 68define i64 @f6(i64 %val) { 69; CHECK-LABEL: f6: 70; CHECK: lngfr %r2, %r2 71; CHECK: br %r14 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 78 ret i64 %res 79} 80 81; Test i64 negative absolute. 82define i64 @f7(i64 %val) { 83; CHECK-LABEL: f7: 84; CHECK: lngr %r2, %r2 85; CHECK: br %r14 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 90 ret i64 %res 91} 92