1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=thumbv6m-none-eabi | FileCheck %s 3 4define i8 @test_i8(i8 %a) nounwind { 5; CHECK-LABEL: test_i8: 6; CHECK: @ %bb.0: 7; CHECK-NEXT: sxtb r1, r0 8; CHECK-NEXT: asrs r1, r1, #7 9; CHECK-NEXT: adds r0, r0, r1 10; CHECK-NEXT: eors r0, r1 11; CHECK-NEXT: bx lr 12 %tmp1neg = sub i8 0, %a 13 %b = icmp sgt i8 %a, -1 14 %abs = select i1 %b, i8 %a, i8 %tmp1neg 15 ret i8 %abs 16} 17 18define i16 @test_i16(i16 %a) nounwind { 19; CHECK-LABEL: test_i16: 20; CHECK: @ %bb.0: 21; CHECK-NEXT: sxth r1, r0 22; CHECK-NEXT: asrs r1, r1, #15 23; CHECK-NEXT: adds r0, r0, r1 24; CHECK-NEXT: eors r0, r1 25; CHECK-NEXT: bx lr 26 %tmp1neg = sub i16 0, %a 27 %b = icmp sgt i16 %a, -1 28 %abs = select i1 %b, i16 %a, i16 %tmp1neg 29 ret i16 %abs 30} 31 32define i32 @test_i32(i32 %a) nounwind { 33; CHECK-LABEL: test_i32: 34; CHECK: @ %bb.0: 35; CHECK-NEXT: asrs r1, r0, #31 36; CHECK-NEXT: adds r0, r0, r1 37; CHECK-NEXT: eors r0, r1 38; CHECK-NEXT: bx lr 39 %tmp1neg = sub i32 0, %a 40 %b = icmp sgt i32 %a, -1 41 %abs = select i1 %b, i32 %a, i32 %tmp1neg 42 ret i32 %abs 43} 44 45define i64 @test_i64(i64 %a) nounwind { 46; CHECK-LABEL: test_i64: 47; CHECK: @ %bb.0: 48; CHECK-NEXT: asrs r2, r1, #31 49; CHECK-NEXT: adds r0, r0, r2 50; CHECK-NEXT: adcs r1, r2 51; CHECK-NEXT: eors r0, r2 52; CHECK-NEXT: eors r1, r2 53; CHECK-NEXT: bx lr 54 %tmp1neg = sub i64 0, %a 55 %b = icmp sgt i64 %a, -1 56 %abs = select i1 %b, i64 %a, i64 %tmp1neg 57 ret i64 %abs 58} 59