<div dir="ltr">Can you take a look at <a href="https://reviews.llvm.org/D130680">https://reviews.llvm.org/D130680</a>. I hadn't pushed it yet because the AMDGPU code looked worse. You can take it over if you want.<div><br><div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Sep 1, 2022 at 8:59 AM Nuno Lopes <<a href="mailto:nuno.lopes@tecnico.ulisboa.pt">nuno.lopes@tecnico.ulisboa.pt</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"><div class="gmail-msg-5886639635327640698"><div lang="EN-US" style="overflow-wrap: break-word;"><div class="gmail-m_-5886639635327640698WordSection1"><p class="MsoNormal">There were a few test failures in amdgpu codegen. Plus generated assembly wasn’t great. I have a better fix that keeps assembly unchanged for x86 at least.<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Nuno<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"><u></u> <u></u></p><div style="border-right:none;border-bottom:none;border-left:none;border-top:1pt solid rgb(225,225,225);padding:3pt 0cm 0cm"><p class="MsoNormal"><b>From:</b> Craig Topper <<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>> <br><b>Sent:</b> Thursday, September 1, 2022 4:47 PM<br><b>To:</b> Nuno Lopes <<a href="mailto:nuno.lopes@tecnico.ulisboa.pt" target="_blank">nuno.lopes@tecnico.ulisboa.pt</a>>; Nuno Lopes <<a href="mailto:llvmlistbot@llvm.org" target="_blank">llvmlistbot@llvm.org</a>><br><b>Cc:</b> llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>><br><b>Subject:</b> Re: [llvm] fa154a9 - Revert "Expand Div/Rem: consider the case where the dividend is zero"<u></u><u></u></p></div><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">Why was it reverted?<u></u><u></u></p><div><p class="MsoNormal"><br clear="all"><u></u><u></u></p><div><div><p class="MsoNormal">~Craig<u></u><u></u></p></div></div><p class="MsoNormal"><u></u> <u></u></p></div></div><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal">On Thu, Sep 1, 2022 at 4:11 AM Nuno Lopes via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<u></u><u></u></p></div><blockquote style="border-top:none;border-right:none;border-bottom:none;border-left:1pt solid rgb(204,204,204);padding:0cm 0cm 0cm 6pt;margin-left:4.8pt;margin-right:0cm"><p class="MsoNormal"><br>Author: Nuno Lopes<br>Date: 2022-09-01T12:11:22+01:00<br>New Revision: fa154a9170573e3a17639d0f71b5bccade8f7be9<br><br>URL: <a href="https://github.com/llvm/llvm-project/commit/fa154a9170573e3a17639d0f71b5bccade8f7be9" target="_blank">https://github.com/llvm/llvm-project/commit/fa154a9170573e3a17639d0f71b5bccade8f7be9</a><br>DIFF: <a href="https://github.com/llvm/llvm-project/commit/fa154a9170573e3a17639d0f71b5bccade8f7be9.diff" target="_blank">https://github.com/llvm/llvm-project/commit/fa154a9170573e3a17639d0f71b5bccade8f7be9.diff</a><br><br>LOG: Revert "Expand Div/Rem: consider the case where the dividend is zero"<br><br>This reverts commit 4aed09868b5a51a29aade11d9d412c3313310f29.<br><br>Added: <br><br><br>Modified: <br>    llvm/lib/Transforms/Utils/IntegerDivision.cpp<br>    llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll<br>    llvm/test/Transforms/ExpandLargeDivRem/srem129.ll<br>    llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll<br>    llvm/test/Transforms/ExpandLargeDivRem/urem129.ll<br><br>Removed: <br><br><br><br>################################################################################<br>diff  --git a/llvm/lib/Transforms/Utils/IntegerDivision.cpp b/llvm/lib/Transforms/Utils/IntegerDivision.cpp<br>index 52a175b4c87c8..1267360b34b18 100644<br>--- a/llvm/lib/Transforms/Utils/IntegerDivision.cpp<br>+++ b/llvm/lib/Transforms/Utils/IntegerDivision.cpp<br>@@ -148,7 +148,6 @@ static Value *generateUnsignedDivisionCode(Value *Dividend, Value *Divisor,<br>   ConstantInt *MSB = ConstantInt::get(DivTy, BitWidth - 1);<br><br>   ConstantInt *True = Builder.getTrue();<br>-  ConstantInt *False = Builder.getFalse();<br><br>   BasicBlock *IBB = Builder.GetInsertBlock();<br>   Function *F = IBB->getParent();<br>@@ -212,8 +211,8 @@ static Value *generateUnsignedDivisionCode(Value *Dividend, Value *Divisor,<br>   // ;   %ret0_2      = icmp eq i32 %dividend, 0<br>   // ;   %ret0_3      = or i1 %ret0_1, %ret0_2<br>   // ;   %tmp0        = tail call i32 @llvm.ctlz.i32(i32 %divisor, i1 true)<br>-  // ;   %tmp1        = tail call i32 @llvm.ctlz.i32(i32 %dividend, i1 false)<br>-  // ;   %sr          = sub i32 %tmp0, %tmp1<br>+  // ;   %tmp1        = tail call i32 @llvm.ctlz.i32(i32 %dividend, i1 true)<br>+  // ;   %sr          = sub nsw i32 %tmp0, %tmp1<br>   // ;   %ret0_4      = icmp ugt i32 %sr, 31<br>   // ;   %ret0        = or i1 %ret0_3, %ret0_4<br>   // ;   %retDividend = icmp eq i32 %sr, 31<br>@@ -225,7 +224,7 @@ static Value *generateUnsignedDivisionCode(Value *Dividend, Value *Divisor,<br>   Value *Ret0_2      = Builder.CreateICmpEQ(Dividend, Zero);<br>   Value *Ret0_3      = Builder.CreateOr(Ret0_1, Ret0_2);<br>   Value *Tmp0 = Builder.CreateCall(CTLZ, {Divisor, True});<br>-  Value *Tmp1 = Builder.CreateCall(CTLZ, {Dividend, False});<br>+  Value *Tmp1 = Builder.CreateCall(CTLZ, {Dividend, True});<br>   Value *SR          = Builder.CreateSub(Tmp0, Tmp1);<br>   Value *Ret0_4      = Builder.CreateICmpUGT(SR, MSB);<br>   Value *Ret0        = Builder.CreateOr(Ret0_3, Ret0_4);<br><br>diff  --git a/llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll b/llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll<br>index 2bfad7b6fa839..27ab1e8eb9ed6 100644<br>--- a/llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll<br>+++ b/llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll<br>@@ -12,7 +12,7 @@ define void @sdiv129(i129* %ptr, i129* %out) nounwind {<br> ; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i129 [[TMP2]], 0<br> ; CHECK-NEXT:    [[TMP5:%.*]] = or i1 false, [[TMP4]]<br> ; CHECK-NEXT:    [[TMP6:%.*]] = call i129 @llvm.ctlz.i129(i129 3, i1 true)<br>-; CHECK-NEXT:    [[TMP7:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP2]], i1 false)<br>+; CHECK-NEXT:    [[TMP7:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP2]], i1 true)<br> ; CHECK-NEXT:    [[TMP8:%.*]] = sub i129 [[TMP6]], [[TMP7]]<br> ; CHECK-NEXT:    [[TMP9:%.*]] = icmp ugt i129 [[TMP8]], 128<br> ; CHECK-NEXT:    [[TMP10:%.*]] = or i1 [[TMP5]], [[TMP9]]<br><br>diff  --git a/llvm/test/Transforms/ExpandLargeDivRem/srem129.ll b/llvm/test/Transforms/ExpandLargeDivRem/srem129.ll<br>index c4326333786fe..08df750a13663 100644<br>--- a/llvm/test/Transforms/ExpandLargeDivRem/srem129.ll<br>+++ b/llvm/test/Transforms/ExpandLargeDivRem/srem129.ll<br>@@ -11,7 +11,7 @@ define void @test(i129* %ptr, i129* %out) nounwind {<br> ; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i129 [[TMP2]], 0<br> ; CHECK-NEXT:    [[TMP4:%.*]] = or i1 false, [[TMP3]]<br> ; CHECK-NEXT:    [[TMP5:%.*]] = call i129 @llvm.ctlz.i129(i129 3, i1 true)<br>-; CHECK-NEXT:    [[TMP6:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP2]], i1 false)<br>+; CHECK-NEXT:    [[TMP6:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP2]], i1 true)<br> ; CHECK-NEXT:    [[TMP7:%.*]] = sub i129 [[TMP5]], [[TMP6]]<br> ; CHECK-NEXT:    [[TMP8:%.*]] = icmp ugt i129 [[TMP7]], 128<br> ; CHECK-NEXT:    [[TMP9:%.*]] = or i1 [[TMP4]], [[TMP8]]<br><br>diff  --git a/llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll b/llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll<br>index 1929963331913..31705a9a35c10 100644<br>--- a/llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll<br>+++ b/llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll<br>@@ -8,7 +8,7 @@ define void @test(i129* %ptr, i129* %out) nounwind {<br> ; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i129 [[A]], 0<br> ; CHECK-NEXT:    [[TMP1:%.*]] = or i1 false, [[TMP0]]<br> ; CHECK-NEXT:    [[TMP2:%.*]] = call i129 @llvm.ctlz.i129(i129 3, i1 true)<br>-; CHECK-NEXT:    [[TMP3:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 false)<br>+; CHECK-NEXT:    [[TMP3:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true)<br> ; CHECK-NEXT:    [[TMP4:%.*]] = sub i129 [[TMP2]], [[TMP3]]<br> ; CHECK-NEXT:    [[TMP5:%.*]] = icmp ugt i129 [[TMP4]], 128<br> ; CHECK-NEXT:    [[TMP6:%.*]] = or i1 [[TMP1]], [[TMP5]]<br><br>diff  --git a/llvm/test/Transforms/ExpandLargeDivRem/urem129.ll b/llvm/test/Transforms/ExpandLargeDivRem/urem129.ll<br>index 36ecb990e52f5..4e91eef6d2aa6 100644<br>--- a/llvm/test/Transforms/ExpandLargeDivRem/urem129.ll<br>+++ b/llvm/test/Transforms/ExpandLargeDivRem/urem129.ll<br>@@ -8,7 +8,7 @@ define void @test(i129* %ptr, i129* %out) nounwind {<br> ; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i129 [[A]], 0<br> ; CHECK-NEXT:    [[TMP1:%.*]] = or i1 false, [[TMP0]]<br> ; CHECK-NEXT:    [[TMP2:%.*]] = call i129 @llvm.ctlz.i129(i129 3, i1 true)<br>-; CHECK-NEXT:    [[TMP3:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 false)<br>+; CHECK-NEXT:    [[TMP3:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true)<br> ; CHECK-NEXT:    [[TMP4:%.*]] = sub i129 [[TMP2]], [[TMP3]]<br> ; CHECK-NEXT:    [[TMP5:%.*]] = icmp ugt i129 [[TMP4]], 128<br> ; CHECK-NEXT:    [[TMP6:%.*]] = or i1 [[TMP1]], [[TMP5]]<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" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><u></u><u></u></p></blockquote></div></div></div></div></blockquote></div>