<div dir="ltr"><div>That's the right one - see comments from June 5:</div><div>>>! In D62871#1531081, @nikic wrote:<br>> @xbolva00 Looks like an instcombine fail:<br>> <br>> ```<br>> define dso_local i32 @do_shift(i32, i32) local_unnamed_addr #0 {<br>>   %3 = tail call i32 @llvm.usub.sat.i32(i32 %1, i32 %0)<br>>   %4 = add i32 %3, %0<br>>   ret i32 %4<br>> }<br>> ```<br>> <br>> usub.sat(a, b) + b should be canonicalized to umax(a, b).<br><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jul 13, 2019 at 7:20 AM Roman Lebedev <<a href="mailto:lebedev.ri@gmail.com">lebedev.ri@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Sat, Jul 13, 2019 at 4:16 PM Sanjay Patel via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
> Author: spatel<br>
> Date: Sat Jul 13 06:16:46 2019<br>
> New Revision: 366000<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=366000&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=366000&view=rev</a><br>
> Log:<br>
> Revert "[InstCombine] add tests for umin/umax via usub.sat; NFC"<br>
><br>
> This reverts commit rL365999 / 0f6148df23edcd3081f5e761de19edd4f823f16d.<br>
> The tests already exist in this file, and the hoped-for transform<br>
> (mentioned in D62871)<br>
I think this is the wrong one?<br>
<br>
> is invalid because of undef as discussed in<br>
> D63060.<br>
><br>
> Modified:<br>
>     llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll<br>
><br>
> Modified: llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll?rev=366000&r1=365999&r2=366000&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll?rev=366000&r1=365999&r2=366000&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll (original)<br>
> +++ llvm/trunk/test/Transforms/InstCombine/saturating-add-sub.ll Sat Jul 13 06:16:46 2019<br>
> @@ -1614,75 +1614,3 @@ define i32 @unsigned_sat_constant_using_<br>
>    %r = add i32 %s, -42<br>
>    ret i32 %r<br>
>  }<br>
> -<br>
> -define i8 @umax(i8 %a, i8 %b) {<br>
> -; CHECK-LABEL: @umax(<br>
> -; CHECK-NEXT:    [[USUB:%.*]] = tail call i8 @llvm.usub.sat.i8(i8 [[A:%.*]], i8 [[B:%.*]])<br>
> -; CHECK-NEXT:    [[R:%.*]] = add i8 [[USUB]], [[B]]<br>
> -; CHECK-NEXT:    ret i8 [[R]]<br>
> -;<br>
> -  %usub = tail call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)<br>
> -  %r = add i8 %usub, %b<br>
> -  ret i8 %r<br>
> -}<br>
> -<br>
> -define <2 x i8> @umax_vec(<2 x i8> %a, <2 x i8> %b) {<br>
> -; CHECK-LABEL: @umax_vec(<br>
> -; CHECK-NEXT:    [[USUB:%.*]] = tail call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> [[A:%.*]], <2 x i8> [[B:%.*]])<br>
> -; CHECK-NEXT:    [[R:%.*]] = add <2 x i8> [[USUB]], [[B]]<br>
> -; CHECK-NEXT:    ret <2 x i8> [[R]]<br>
> -;<br>
> -  %usub = tail call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> %a, <2 x i8> %b)<br>
> -  %r = add <2 x i8> %usub, %b<br>
> -  ret <2 x i8> %r<br>
> -}<br>
> -<br>
> -define i8 @umax_extra_use(i8 %a, i8 %b) {<br>
> -; CHECK-LABEL: @umax_extra_use(<br>
> -; CHECK-NEXT:    [[USUB:%.*]] = tail call i8 @llvm.usub.sat.i8(i8 [[A:%.*]], i8 [[B:%.*]])<br>
> -; CHECK-NEXT:    call void @use(i8 [[USUB]])<br>
> -; CHECK-NEXT:    [[R:%.*]] = add i8 [[USUB]], [[B]]<br>
> -; CHECK-NEXT:    ret i8 [[R]]<br>
> -;<br>
> -  %usub = tail call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)<br>
> -  call void @use(i8 %usub)<br>
> -  %r = add i8 %usub, %b<br>
> -  ret i8 %r<br>
> -}<br>
> -<br>
> -define i8 @umin(i8 %a, i8 %b) {<br>
> -; CHECK-LABEL: @umin(<br>
> -; CHECK-NEXT:    [[USUB:%.*]] = tail call i8 @llvm.usub.sat.i8(i8 [[A:%.*]], i8 [[B:%.*]])<br>
> -; CHECK-NEXT:    [[R:%.*]] = sub i8 [[A]], [[USUB]]<br>
> -; CHECK-NEXT:    ret i8 [[R]]<br>
> -;<br>
> -  %usub = tail call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)<br>
> -  %r = sub i8 %a, %usub<br>
> -  ret i8 %r<br>
> -}<br>
> -<br>
> -define <2 x i8> @umin_vec(<2 x i8> %a, <2 x i8> %b) {<br>
> -; CHECK-LABEL: @umin_vec(<br>
> -; CHECK-NEXT:    [[USUB:%.*]] = tail call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> [[A:%.*]], <2 x i8> [[B:%.*]])<br>
> -; CHECK-NEXT:    [[R:%.*]] = sub <2 x i8> [[A]], [[USUB]]<br>
> -; CHECK-NEXT:    ret <2 x i8> [[R]]<br>
> -;<br>
> -  %usub = tail call <2 x i8> @llvm.usub.sat.v2i8(<2 x i8> %a, <2 x i8> %b)<br>
> -  %r = sub <2 x i8> %a, %usub<br>
> -  ret <2 x i8> %r<br>
> -}<br>
> -<br>
> -define i8 @umin_extra_use(i8 %a, i8 %b) {<br>
> -; CHECK-LABEL: @umin_extra_use(<br>
> -; CHECK-NEXT:    [[USUB:%.*]] = tail call i8 @llvm.usub.sat.i8(i8 [[A:%.*]], i8 [[B:%.*]])<br>
> -; CHECK-NEXT:    call void @use(i8 [[USUB]])<br>
> -; CHECK-NEXT:    [[R:%.*]] = sub i8 [[A]], [[USUB]]<br>
> -; CHECK-NEXT:    ret i8 [[R]]<br>
> -;<br>
> -  %usub = tail call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)<br>
> -  call void @use(i8 %usub)<br>
> -  %r = sub i8 %a, %usub<br>
> -  ret i8 %r<br>
> -}<br>
> -<br>
> -declare void @use(i8)<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>