<div dir="auto">That problem was already known during the review and Nadav had agreed to make a second patch to fix it.</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Jan 15, 2022 at 2:34 AM Roman Lebedev via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">Note that this should have had happened before the actual change, like i asked.<br>
Because it shows the problem - why `ashr_uge_noexact` isn't being folded?<br>
<br>
Roman<br>
<br>
On Sat, Jan 15, 2022 at 2:27 AM Nadav Rotem via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
><br>
><br>
> Author: Nadav Rotem<br>
> Date: 2022-01-14T15:22:10-08:00<br>
> New Revision: 8dff860c220c71f314be00ae78be0ded0389e38f<br>
><br>
> URL: <a href="https://github.com/llvm/llvm-project/commit/8dff860c220c71f314be00ae78be0ded0389e38f" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/8dff860c220c71f314be00ae78be0ded0389e38f</a><br>
> DIFF: <a href="https://github.com/llvm/llvm-project/commit/8dff860c220c71f314be00ae78be0ded0389e38f.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/8dff860c220c71f314be00ae78be0ded0389e38f.diff</a><br>
><br>
> LOG: [NFC] Add additional tests for icmp predicate.<br>
><br>
> This commit adds small tests for the combination of:<br>
> {exact, no_exact} x { EQ, NE, UGT, UGE, ULT, ULE, SGT, SGE, SLT, SLE}<br>
><br>
> This is related to the changes in D117338.<br>
><br>
> Added:<br>
><br>
><br>
> Modified:<br>
>     llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll<br>
><br>
> Removed:<br>
><br>
><br>
><br>
> ################################################################################<br>
> diff  --git a/llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll b/llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll<br>
> index f5478f8927481..a9fb4b1f217d4 100644<br>
> --- a/llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll<br>
> +++ b/llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll<br>
> @@ -2216,58 +2216,71 @@ define i1 @lshrugt_03_15_exact(i4 %x) {<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_00_noexact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_00_noexact(<br>
> -; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 79<br>
> +define i1 @ashr_eq_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_eq_exact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp eq i8 [[X:%.*]], 80<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
> -  %s = ashr i8 %x, 3<br>
> -  %c = icmp sge i8 %s, 10<br>
> +  %s = ashr exact i8 %x, 3<br>
> +  %c = icmp eq i8 %s, 10<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_01_noexact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_01_noexact(<br>
> -; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 80<br>
> +define i1 @ashr_ne_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_ne_exact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ne i8 [[X:%.*]], 80<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
> -  %s = ashr i8 %x, 3<br>
> -  %c = icmp slt i8 %s, 10<br>
> +  %s = ashr exact i8 %x, 3<br>
> +  %c = icmp ne i8 %s, 10<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_03_noexact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_03_noexact(<br>
> -; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 80<br>
> +define i1 @ashr_ugt_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_ugt_exact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[X:%.*]], 80<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
> -  %s = ashr i8 %x, 3<br>
> -  %c = icmp ult i8 %s, 10<br>
> +  %s = ashr exact i8 %x, 3<br>
> +  %c = icmp ugt i8 %s, 10<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_00_exact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_00_exact(<br>
> -; CHECK-NEXT:    [[C:%.*]] = icmp ne i8 [[X:%.*]], 80<br>
> +<br>
> +define i1 @ashr_uge_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_uge_exact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[X:%.*]], 72<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
>    %s = ashr exact i8 %x, 3<br>
> -  %c = icmp ne i8 %s, 10<br>
> +  %c = icmp uge i8 %s, 10<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_01_exact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_01_exact(<br>
> -; CHECK-NEXT:    [[C:%.*]] = icmp eq i8 [[X:%.*]], 80<br>
> +define i1 @ashr_ult_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_ult_exact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 80<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
>    %s = ashr exact i8 %x, 3<br>
> -  %c = icmp eq i8 %s, 10<br>
> +  %c = icmp ult i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +<br>
> +define i1 @ashr_ule_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_ule_exact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 88<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr exact i8 %x, 3<br>
> +  %c = icmp ule i8 %s, 10<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_02_exact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_02_exact(<br>
> +<br>
> +define i1 @ashr_sgt_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_sgt_exact(<br>
>  ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 80<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
> @@ -2276,8 +2289,29 @@ define i1 @ashr_00_02_exact(i8 %x) {<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_03_exact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_03_exact(<br>
> +<br>
> +define i1 @ashr_sge_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_sge_exact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 72<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr exact i8 %x, 3<br>
> +  %c = icmp sge i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +define i1 @ashr_slt_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_slt_exact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 80<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr exact i8 %x, 3<br>
> +  %c = icmp slt i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +define i1 @ashr_sle_exact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_sle_exact(<br>
>  ; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 88<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
> @@ -2286,26 +2320,114 @@ define i1 @ashr_00_03_exact(i8 %x) {<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_04_exact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_04_exact(<br>
> -; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[X:%.*]], 80<br>
> +define i1 @ashr_eq_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_eq_noexact(<br>
> +; CHECK-NEXT:    [[S_MASK:%.*]] = and i8 [[X:%.*]], -8<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp eq i8 [[S_MASK]], 80<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
> -  %s = ashr exact i8 %x, 3<br>
> +  %s = ashr i8 %x, 3<br>
> +  %c = icmp eq i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +define i1 @ashr_ne_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_ne_noexact(<br>
> +; CHECK-NEXT:    [[S_MASK:%.*]] = and i8 [[X:%.*]], -8<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ne i8 [[S_MASK]], 80<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr i8 %x, 3<br>
> +  %c = icmp ne i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +define i1 @ashr_ugt_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_ugt_noexact(<br>
> +; CHECK-NEXT:    [[S:%.*]] = ashr i8 [[X:%.*]], 3<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[S]], 10<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr i8 %x, 3<br>
>    %c = icmp ugt i8 %s, 10<br>
>    ret i1 %c<br>
>  }<br>
><br>
> -define i1 @ashr_00_05_exact(i8 %x) {<br>
> -; CHECK-LABEL: @ashr_00_05_exact(<br>
> +<br>
> +define i1 @ashr_uge_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_uge_noexact(<br>
> +; CHECK-NEXT:    [[S:%.*]] = ashr i8 [[X:%.*]], 3<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[S]], 9<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr i8 %x, 3<br>
> +  %c = icmp uge i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +define i1 @ashr_ult_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_ult_noexact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 80<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr i8 %x, 3<br>
> +  %c = icmp ult i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +<br>
> +define i1 @ashr_ule_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_ule_noexact(<br>
>  ; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 88<br>
>  ; CHECK-NEXT:    ret i1 [[C]]<br>
>  ;<br>
> -  %s = ashr exact i8 %x, 3<br>
> +  %s = ashr i8 %x, 3<br>
>    %c = icmp ule i8 %s, 10<br>
>    ret i1 %c<br>
>  }<br>
><br>
> +<br>
> +define i1 @ashr_sgt_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_sgt_noexact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 87<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr i8 %x, 3<br>
> +  %c = icmp sgt i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +<br>
> +define i1 @ashr_sge_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_sge_noexact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 79<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr i8 %x, 3<br>
> +  %c = icmp sge i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +define i1 @ashr_slt_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_slt_noexact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 80<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr i8 %x, 3<br>
> +  %c = icmp slt i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
> +define i1 @ashr_sle_noexact(i8 %x) {<br>
> +; CHECK-LABEL: @ashr_sle_noexact(<br>
> +; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 88<br>
> +; CHECK-NEXT:    ret i1 [[C]]<br>
> +;<br>
> +  %s = ashr i8 %x, 3<br>
> +  %c = icmp sle i8 %s, 10<br>
> +  ret i1 %c<br>
> +}<br>
> +<br>
>  define i1 @ashr_00_00_ashr_extra_use(i8 %x, i8* %ptr) {<br>
>  ; CHECK-LABEL: @ashr_00_00_ashr_extra_use(<br>
>  ; CHECK-NEXT:    [[S:%.*]] = ashr exact i8 [[X:%.*]], 3<br>
><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>
_______________________________________________<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></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div>