[llvm] r366000 - Revert "[InstCombine] add tests for umin/umax via usub.sat; NFC"

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 13 07:02:42 PDT 2019


That's the right one - see comments from June 5:
>>! In D62871#1531081, @nikic wrote:
> @xbolva00 Looks like an instcombine fail:
>
> ```
> define dso_local i32 @do_shift(i32, i32) local_unnamed_addr #0 {
>   %3 = tail call i32 @llvm.usub.sat.i32(i32 %1, i32 %0)
>   %4 = add i32 %3, %0
>   ret i32 %4
> }
> ```
>
> usub.sat(a, b) + b should be canonicalized to umax(a, b).


On Sat, Jul 13, 2019 at 7:20 AM Roman Lebedev <lebedev.ri at gmail.com> wrote:

> On Sat, Jul 13, 2019 at 4:16 PM Sanjay Patel via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> >
> > Author: spatel
> > Date: Sat Jul 13 06:16:46 2019
> > New Revision: 366000
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=366000&view=rev
> > Log:
> > Revert "[InstCombine] add tests for umin/umax via usub.sat; NFC"
> >
> > This reverts commit rL365999 / 0f6148df23edcd3081f5e761de19edd4f823f16d.
> > The tests already exist in this file, and the hoped-for transform
> > (mentioned in D62871)
> I think this is the wrong one?
>
> > is invalid because of undef as discussed in
> > D63060.
> >
> > Modified:
> >     llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll
> >
> > Modified: llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll?rev=366000&r1=365999&r2=366000&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll
> (original)
> > +++ llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll Sat Jul
> 13 06:16:46 2019
> > @@ -1614,75 +1614,3 @@ define i32 @unsigned_sat_constant_using_
> >    %r = add i32 %s, -42
> >    ret i32 %r
> >  }
> > -
> > -define i8 @umax(i8 %a, i8 %b) {
> > -; CHECK-LABEL: @umax(
> > -; CHECK-NEXT:    [[USUB:%.*]] = tail call i8 @llvm.usub.sat.i8(i8
> [[A:%.*]], i8 [[B:%.*]])
> > -; CHECK-NEXT:    [[R:%.*]] = add i8 [[USUB]], [[B]]
> > -; CHECK-NEXT:    ret i8 [[R]]
> > -;
> > -  %usub = tail call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)
> > -  %r = add i8 %usub, %b
> > -  ret i8 %r
> > -}
> > -
> > -define <2 x i8> @umax_vec(<2 x i8> %a, <2 x i8> %b) {
> > -; CHECK-LABEL: @umax_vec(
> > -; CHECK-NEXT:    [[USUB:%.*]] = tail call <2 x i8>
> @llvm.usub.sat.v2i8(<2 x i8> [[A:%.*]], <2 x i8> [[B:%.*]])
> > -; CHECK-NEXT:    [[R:%.*]] = add <2 x i8> [[USUB]], [[B]]
> > -; CHECK-NEXT:    ret <2 x i8> [[R]]
> > -;
> > -  %usub = tail call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> %a, <2 x i8>
> %b)
> > -  %r = add <2 x i8> %usub, %b
> > -  ret <2 x i8> %r
> > -}
> > -
> > -define i8 @umax_extra_use(i8 %a, i8 %b) {
> > -; CHECK-LABEL: @umax_extra_use(
> > -; CHECK-NEXT:    [[USUB:%.*]] = tail call i8 @llvm.usub.sat.i8(i8
> [[A:%.*]], i8 [[B:%.*]])
> > -; CHECK-NEXT:    call void @use(i8 [[USUB]])
> > -; CHECK-NEXT:    [[R:%.*]] = add i8 [[USUB]], [[B]]
> > -; CHECK-NEXT:    ret i8 [[R]]
> > -;
> > -  %usub = tail call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)
> > -  call void @use(i8 %usub)
> > -  %r = add i8 %usub, %b
> > -  ret i8 %r
> > -}
> > -
> > -define i8 @umin(i8 %a, i8 %b) {
> > -; CHECK-LABEL: @umin(
> > -; CHECK-NEXT:    [[USUB:%.*]] = tail call i8 @llvm.usub.sat.i8(i8
> [[A:%.*]], i8 [[B:%.*]])
> > -; CHECK-NEXT:    [[R:%.*]] = sub i8 [[A]], [[USUB]]
> > -; CHECK-NEXT:    ret i8 [[R]]
> > -;
> > -  %usub = tail call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)
> > -  %r = sub i8 %a, %usub
> > -  ret i8 %r
> > -}
> > -
> > -define <2 x i8> @umin_vec(<2 x i8> %a, <2 x i8> %b) {
> > -; CHECK-LABEL: @umin_vec(
> > -; CHECK-NEXT:    [[USUB:%.*]] = tail call <2 x i8>
> @llvm.usub.sat.v2i8(<2 x i8> [[A:%.*]], <2 x i8> [[B:%.*]])
> > -; CHECK-NEXT:    [[R:%.*]] = sub <2 x i8> [[A]], [[USUB]]
> > -; CHECK-NEXT:    ret <2 x i8> [[R]]
> > -;
> > -  %usub = tail call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> %a, <2 x i8>
> %b)
> > -  %r = sub <2 x i8> %a, %usub
> > -  ret <2 x i8> %r
> > -}
> > -
> > -define i8 @umin_extra_use(i8 %a, i8 %b) {
> > -; CHECK-LABEL: @umin_extra_use(
> > -; CHECK-NEXT:    [[USUB:%.*]] = tail call i8 @llvm.usub.sat.i8(i8
> [[A:%.*]], i8 [[B:%.*]])
> > -; CHECK-NEXT:    call void @use(i8 [[USUB]])
> > -; CHECK-NEXT:    [[R:%.*]] = sub i8 [[A]], [[USUB]]
> > -; CHECK-NEXT:    ret i8 [[R]]
> > -;
> > -  %usub = tail call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)
> > -  call void @use(i8 %usub)
> > -  %r = sub i8 %a, %usub
> > -  ret i8 %r
> > -}
> > -
> > -declare void @use(i8)
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190713/569c1253/attachment.html>


More information about the llvm-commits mailing list