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

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 13 07:13:59 PDT 2019


On Sat, Jul 13, 2019 at 5:02 PM Sanjay Patel <spatel at rotateright.com> wrote:
>
> 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).
Oh right, sorry, thanks.

> 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


More information about the llvm-commits mailing list