From fa154a9170573e3a17639d0f71b5bccade8f7be9 Mon Sep 17 00:00:00 2001 From: Nuno Lopes Date: Thu, 1 Sep 2022 12:10:35 +0100 Subject: [PATCH] Revert "Expand Div/Rem: consider the case where the dividend is zero" This reverts commit 4aed09868b5a51a29aade11d9d412c3313310f29. --- llvm/lib/Transforms/Utils/IntegerDivision.cpp | 7 +++---- llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll | 2 +- llvm/test/Transforms/ExpandLargeDivRem/srem129.ll | 2 +- llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll | 2 +- llvm/test/Transforms/ExpandLargeDivRem/urem129.ll | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/llvm/lib/Transforms/Utils/IntegerDivision.cpp b/llvm/lib/Transforms/Utils/IntegerDivision.cpp index 52a175b..1267360 100644 --- a/llvm/lib/Transforms/Utils/IntegerDivision.cpp +++ b/llvm/lib/Transforms/Utils/IntegerDivision.cpp @@ -148,7 +148,6 @@ static Value *generateUnsignedDivisionCode(Value *Dividend, Value *Divisor, ConstantInt *MSB = ConstantInt::get(DivTy, BitWidth - 1); ConstantInt *True = Builder.getTrue(); - ConstantInt *False = Builder.getFalse(); BasicBlock *IBB = Builder.GetInsertBlock(); Function *F = IBB->getParent(); @@ -212,8 +211,8 @@ static Value *generateUnsignedDivisionCode(Value *Dividend, Value *Divisor, // ; %ret0_2 = icmp eq i32 %dividend, 0 // ; %ret0_3 = or i1 %ret0_1, %ret0_2 // ; %tmp0 = tail call i32 @llvm.ctlz.i32(i32 %divisor, i1 true) - // ; %tmp1 = tail call i32 @llvm.ctlz.i32(i32 %dividend, i1 false) - // ; %sr = sub i32 %tmp0, %tmp1 + // ; %tmp1 = tail call i32 @llvm.ctlz.i32(i32 %dividend, i1 true) + // ; %sr = sub nsw i32 %tmp0, %tmp1 // ; %ret0_4 = icmp ugt i32 %sr, 31 // ; %ret0 = or i1 %ret0_3, %ret0_4 // ; %retDividend = icmp eq i32 %sr, 31 @@ -225,7 +224,7 @@ static Value *generateUnsignedDivisionCode(Value *Dividend, Value *Divisor, Value *Ret0_2 = Builder.CreateICmpEQ(Dividend, Zero); Value *Ret0_3 = Builder.CreateOr(Ret0_1, Ret0_2); Value *Tmp0 = Builder.CreateCall(CTLZ, {Divisor, True}); - Value *Tmp1 = Builder.CreateCall(CTLZ, {Dividend, False}); + Value *Tmp1 = Builder.CreateCall(CTLZ, {Dividend, True}); Value *SR = Builder.CreateSub(Tmp0, Tmp1); Value *Ret0_4 = Builder.CreateICmpUGT(SR, MSB); Value *Ret0 = Builder.CreateOr(Ret0_3, Ret0_4); diff --git a/llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll b/llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll index 2bfad7b..27ab1e8 100644 --- a/llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll +++ b/llvm/test/Transforms/ExpandLargeDivRem/sdiv129.ll @@ -12,7 +12,7 @@ define void @sdiv129(i129* %ptr, i129* %out) nounwind { ; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i129 [[TMP2]], 0 ; CHECK-NEXT: [[TMP5:%.*]] = or i1 false, [[TMP4]] ; CHECK-NEXT: [[TMP6:%.*]] = call i129 @llvm.ctlz.i129(i129 3, i1 true) -; CHECK-NEXT: [[TMP7:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP2]], i1 false) +; CHECK-NEXT: [[TMP7:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP2]], i1 true) ; CHECK-NEXT: [[TMP8:%.*]] = sub i129 [[TMP6]], [[TMP7]] ; CHECK-NEXT: [[TMP9:%.*]] = icmp ugt i129 [[TMP8]], 128 ; CHECK-NEXT: [[TMP10:%.*]] = or i1 [[TMP5]], [[TMP9]] diff --git a/llvm/test/Transforms/ExpandLargeDivRem/srem129.ll b/llvm/test/Transforms/ExpandLargeDivRem/srem129.ll index c432633..08df750 100644 --- a/llvm/test/Transforms/ExpandLargeDivRem/srem129.ll +++ b/llvm/test/Transforms/ExpandLargeDivRem/srem129.ll @@ -11,7 +11,7 @@ define void @test(i129* %ptr, i129* %out) nounwind { ; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i129 [[TMP2]], 0 ; CHECK-NEXT: [[TMP4:%.*]] = or i1 false, [[TMP3]] ; CHECK-NEXT: [[TMP5:%.*]] = call i129 @llvm.ctlz.i129(i129 3, i1 true) -; CHECK-NEXT: [[TMP6:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP2]], i1 false) +; CHECK-NEXT: [[TMP6:%.*]] = call i129 @llvm.ctlz.i129(i129 [[TMP2]], i1 true) ; CHECK-NEXT: [[TMP7:%.*]] = sub i129 [[TMP5]], [[TMP6]] ; CHECK-NEXT: [[TMP8:%.*]] = icmp ugt i129 [[TMP7]], 128 ; CHECK-NEXT: [[TMP9:%.*]] = or i1 [[TMP4]], [[TMP8]] diff --git a/llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll b/llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll index 1929963..31705a9 100644 --- a/llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll +++ b/llvm/test/Transforms/ExpandLargeDivRem/udiv129.ll @@ -8,7 +8,7 @@ define void @test(i129* %ptr, i129* %out) nounwind { ; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A]], 0 ; CHECK-NEXT: [[TMP1:%.*]] = or i1 false, [[TMP0]] ; CHECK-NEXT: [[TMP2:%.*]] = call i129 @llvm.ctlz.i129(i129 3, i1 true) -; CHECK-NEXT: [[TMP3:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 false) +; CHECK-NEXT: [[TMP3:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true) ; CHECK-NEXT: [[TMP4:%.*]] = sub i129 [[TMP2]], [[TMP3]] ; CHECK-NEXT: [[TMP5:%.*]] = icmp ugt i129 [[TMP4]], 128 ; CHECK-NEXT: [[TMP6:%.*]] = or i1 [[TMP1]], [[TMP5]] diff --git a/llvm/test/Transforms/ExpandLargeDivRem/urem129.ll b/llvm/test/Transforms/ExpandLargeDivRem/urem129.ll index 36ecb99..4e91eef 100644 --- a/llvm/test/Transforms/ExpandLargeDivRem/urem129.ll +++ b/llvm/test/Transforms/ExpandLargeDivRem/urem129.ll @@ -8,7 +8,7 @@ define void @test(i129* %ptr, i129* %out) nounwind { ; CHECK-NEXT: [[TMP0:%.*]] = icmp eq i129 [[A]], 0 ; CHECK-NEXT: [[TMP1:%.*]] = or i1 false, [[TMP0]] ; CHECK-NEXT: [[TMP2:%.*]] = call i129 @llvm.ctlz.i129(i129 3, i1 true) -; CHECK-NEXT: [[TMP3:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 false) +; CHECK-NEXT: [[TMP3:%.*]] = call i129 @llvm.ctlz.i129(i129 [[A]], i1 true) ; CHECK-NEXT: [[TMP4:%.*]] = sub i129 [[TMP2]], [[TMP3]] ; CHECK-NEXT: [[TMP5:%.*]] = icmp ugt i129 [[TMP4]], 128 ; CHECK-NEXT: [[TMP6:%.*]] = or i1 [[TMP1]], [[TMP5]] -- 2.7.4