blob: 7526f8c7045e17d4324f0dbebf3556cc74fbbecd [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc < %s -mtriple=armv7a-eabihf | FileCheck %s --check-prefixes=ARM
; RUN: llc < %s -mtriple=thumbv7m-eabi | FileCheck %s --check-prefixes=THUMB
; l < 2^31 <= r, so abdu(l, r) == r - l: should not become abs(sub).
define i32 @abd_select_known_order_i32(i32 %a, i32 %b) nounwind {
; ARM-LABEL: abd_select_known_order_i32:
; ARM: @ %bb.0:
; ARM-NEXT: orr r1, r1, #-2147483648
; ARM-NEXT: sub r0, r1, r0, lsr #1
; ARM-NEXT: bx lr
;
; THUMB-LABEL: abd_select_known_order_i32:
; THUMB: @ %bb.0:
; THUMB-NEXT: orr r1, r1, #-2147483648
; THUMB-NEXT: sub.w r0, r1, r0, lsr #1
; THUMB-NEXT: bx lr
%l = lshr i32 %a, 1
%r = or i32 %b, -2147483648
%c = icmp ugt i32 %l, %r
%s1 = sub i32 %l, %r
%s2 = sub i32 %r, %l
%res = select i1 %c, i32 %s1, i32 %s2
ret i32 %res
}