Home | History | Annotate | Download | only in Hexagon
      1 ; RUN: llc -march=hexagon < %s | FileCheck %s
      2 
      3 ; CHECK-LABEL: f0:
      4 ; CHECK: r0 = abs(r0)
      5 define i32 @f0(i32 %a0) #0 {
      6   %v0 = ashr i32 %a0, 31
      7   %v1 = xor i32 %a0, %v0
      8   %v2 = sub i32 %v1, %v0
      9   ret i32 %v2
     10 }
     11 
     12 ; CHECK-LABEL: f1:
     13 ; CHECK: r0 = abs(r0)
     14 define i32 @f1(i32 %a0) #0 {
     15   %v0 = ashr i32 %a0, 31
     16   %v1 = add i32 %a0, %v0
     17   %v2 = xor i32 %v0, %v1
     18   ret i32 %v2
     19 }
     20 
     21 ; CHECK-LABEL: f2:
     22 ; CHECK: r0 = abs(r0)
     23 define i32 @f2(i32 %a0) #0 {
     24   %v0 = icmp slt i32 %a0, 0
     25   %v1 = sub nsw i32 0, %a0
     26   %v2 = select i1 %v0, i32 %v1, i32 %a0
     27   ret i32 %v2
     28 }
     29 
     30 ; CHECK-LABEL: f3:
     31 ; CHECK: r1:0 = abs(r1:0)
     32 define i64 @f3(i64 %a0) #0 {
     33   %v0 = ashr i64 %a0, 63
     34   %v1 = xor i64 %a0, %v0
     35   %v2 = sub i64 %v1, %v0
     36   ret i64 %v2
     37 }
     38 
     39 ; CHECK-LABEL: f4:
     40 ; CHECK: r1:0 = abs(r1:0)
     41 define i64 @f4(i64 %a0) #0 {
     42   %v0 = ashr i64 %a0, 63
     43   %v1 = add i64 %a0, %v0
     44   %v2 = xor i64 %v0, %v1
     45   ret i64 %v2
     46 }
     47 
     48 ; CHECK-LABEL: f5:
     49 ; CHECK: r1:0 = abs(r1:0)
     50 define i64 @f5(i64 %a0) #0 {
     51   %v0 = icmp slt i64 %a0, 0
     52   %v1 = sub nsw i64 0, %a0
     53   %v2 = select i1 %v0, i64 %v1, i64 %a0
     54   ret i64 %v2
     55 }
     56 
     57 ; CHECK-LABEL: f6:
     58 ; CHECK: r[[R60:[0-9]+]] = abs(r0)
     59 ; CHECK: r[[R61:[0-9]+]] = asr(r0,#31)
     60 ; CHECK: r0 = addasl(r[[R61]],r[[R60]],#1)
     61 define i32 @f6(i32 %a0) #0 {
     62   %v0 = ashr i32 %a0, 31
     63   %v1 = add i32 %a0, %v0
     64   %v2 = xor i32 %v0, %v1
     65   %v3 = mul i32 %v2, 2
     66   %v4 = add i32 %v0, %v3
     67   ret i32 %v4
     68 }
     69 
     70 ; CHECK-LABEL: f7:
     71 ; CHECK: r[[R70:[0-9]+]] = abs(r0)
     72 ; CHECK: r[[R71:[0-9]+]] = asr(r0,#31)
     73 ; CHECK: r0 = addasl(r[[R71]],r[[R70]],#1)
     74 define i32 @f7(i32 %a0) #0 {
     75   %v0 = ashr i32 %a0, 31
     76   %v1 = add i32 %v0, %a0
     77   %v2 = xor i32 %v0, %v1
     78   %v3 = shl i32 %v2, 1
     79   %v4 = add i32 %v0, %v3
     80   ret i32 %v4
     81 }
     82 
     83 attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="-packets" }
     84