From: Sanjay Patel Date: Sun, 17 Feb 2019 16:44:11 +0000 (+0000) Subject: [InstCombine] add more tests for unsigned saturated add; NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c63b2cd251f9a670689516952167b644ff41512;p=llvm [InstCombine] add more tests for unsigned saturated add; NFC Extend the pattern-matching from rL354219 / rL354221. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354223 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/InstCombine/saturating-add-sub.ll b/test/Transforms/InstCombine/saturating-add-sub.ll index 5ee5dcb9557..96848629438 100644 --- a/test/Transforms/InstCombine/saturating-add-sub.ll +++ b/test/Transforms/InstCombine/saturating-add-sub.ll @@ -653,8 +653,8 @@ define i32 @uadd_sat(i32 %x, i32 %y) { ret i32 %r } -define i32 @uadd_sat_commute1(i32 %xp, i32 %y) { -; CHECK-LABEL: @uadd_sat_commute1( +define i32 @uadd_sat_commute_add(i32 %xp, i32 %y) { +; CHECK-LABEL: @uadd_sat_commute_add( ; CHECK-NEXT: [[X:%.*]] = urem i32 42, [[XP:%.*]] ; CHECK-NEXT: [[A:%.*]] = add i32 [[X]], [[Y:%.*]] ; CHECK-NEXT: [[TMP1:%.*]] = icmp ult i32 [[A]], [[Y]] @@ -669,6 +669,42 @@ define i32 @uadd_sat_commute1(i32 %xp, i32 %y) { ret i32 %r } +define i32 @uadd_sat_ugt(i32 %x, i32 %yp) { +; CHECK-LABEL: @uadd_sat_ugt( +; CHECK-NEXT: [[Y:%.*]] = sdiv i32 [[YP:%.*]], 2442 +; CHECK-NEXT: [[NOTX:%.*]] = xor i32 [[X:%.*]], -1 +; CHECK-NEXT: [[A:%.*]] = add i32 [[Y]], [[X]] +; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[Y]], [[NOTX]] +; CHECK-NEXT: [[R:%.*]] = select i1 [[C]], i32 -1, i32 [[A]] +; CHECK-NEXT: ret i32 [[R]] +; + %y = sdiv i32 %yp, 2442 ; thwart complexity-based-canonicalization + %notx = xor i32 %x, -1 + %a = add i32 %y, %x + %c = icmp ugt i32 %y, %notx + %r = select i1 %c, i32 -1, i32 %a + ret i32 %r +} + +define i32 @uadd_sat_ugt_commute_add(i32 %xp, i32 %yp) { +; CHECK-LABEL: @uadd_sat_ugt_commute_add( +; CHECK-NEXT: [[Y:%.*]] = sdiv i32 [[YP:%.*]], 2442 +; CHECK-NEXT: [[X:%.*]] = srem i32 42, [[XP:%.*]] +; CHECK-NEXT: [[NOTX:%.*]] = xor i32 [[X]], -1 +; CHECK-NEXT: [[A:%.*]] = add i32 [[X]], [[Y]] +; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[Y]], [[NOTX]] +; CHECK-NEXT: [[R:%.*]] = select i1 [[C]], i32 -1, i32 [[A]] +; CHECK-NEXT: ret i32 [[R]] +; + %y = sdiv i32 %yp, 2442 ; thwart complexity-based-canonicalization + %x = srem i32 42, %xp ; thwart complexity-based-canonicalization + %notx = xor i32 %x, -1 + %a = add i32 %x, %y + %c = icmp ugt i32 %y, %notx + %r = select i1 %c, i32 -1, i32 %a + ret i32 %r +} + define i32 @uadd_sat_constant(i32 %x) { ; CHECK-LABEL: @uadd_sat_constant( ; CHECK-NEXT: [[A:%.*]] = add i32 [[X:%.*]], 42