From e447f4c15ced2880f520d636ffc239d1368032b7 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 24 Mar 2024 13:54:21 -0400 Subject: [PATCH 01/33] initial attempt --- llvm/lib/Support/KnownBits.cpp | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index d72355dab6f1d..07c7ad0882387 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -762,6 +762,46 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, LHS, RHS); } +KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { + // (C1 & C2) + (C1 ^ C2).ashr(1) + KnownBits andResult = LHS & RHS; + KnownBits xorResult = LHS ^ RHS; + xorResult.Zero.ashrInPlace(1); + xorResult.One.ashrInPlace(1); + return computeForSatAddSub(/*Add*/ true, /*Signed*/ true, andResult, + xorResult); +} + +KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { + // (C1 & C2) + (C1 ^ C2).lshr(1) + KnownBits andResult = LHS & RHS; + KnownBits xorResult = LHS ^ RHS; + xorResult.Zero.lshrInPlace(1); + xorResult.One.lshrInPlace(1); + return computeForSatAddSub(/*Add*/ true, /*Signed*/ false, andResult, + xorResult); +} + +KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { + // (C1 | C2) - (C1 ^ C2).ashr(1) + KnownBits andResult = LHS & RHS; + KnownBits xorResult = LHS ^ RHS; + xorResult.Zero.ashrInPlace(1); + xorResult.One.ashrInPlace(1); + return computeForSatAddSub(/*Add*/ false, /*Signed*/ true, andResult, + xorResult); +} + +KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { + // (C1 | C2) - (C1 ^ C2).lshr(1) + KnownBits andResult = LHS & RHS; + KnownBits xorResult = LHS ^ RHS; + xorResult.Zero.lshrInPlace(1); + xorResult.One.lshrInPlace(1); + return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, andResult, + xorResult); +} + KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, bool NoUndefSelfMultiply) { unsigned BitWidth = LHS.getBitWidth(); From 8b6e8bbec1e782ef1da06bf2dcf69319c9e96813 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 24 Mar 2024 14:02:31 -0400 Subject: [PATCH 02/33] add definitions to header file --- llvm/include/llvm/Support/KnownBits.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index 73cb01e0644a8..575362dc18b0c 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -354,6 +354,18 @@ struct KnownBits { /// Compute knownbits resulting from llvm.usub.sat(LHS, RHS) static KnownBits usub_sat(const KnownBits &LHS, const KnownBits &RHS); + /// Compute knownbits resulting from (C1 & C2) + (C1 ^ C2).ashr(1) + static KnownBits avgFloorS(const KnownBits &LHS, const KnownBits &RHS); + + /// Compute knownbits resulting from (C1 & C2) + (C1 ^ C2).lshr(1) + static KnownBits avgFloorU(const KnownBits &LHS, const KnownBits &RHS); + + /// Compute knownbits resulting from (C1 & C2) - (C1 ^ C2).ashr(1) + static KnownBits avgCeilS(const KnownBits &LHS, const KnownBits &RHS); + + /// Compute knownbits resulting from (C1 & C2) - (C1 ^ C2).lshr(1) + static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); + /// Compute known bits resulting from multiplying LHS and RHS. static KnownBits mul(const KnownBits &LHS, const KnownBits &RHS, bool NoUndefSelfMultiply = false); From b0d81007840a354694e0238a0be96b13ce74b119 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Thu, 4 Apr 2024 21:10:27 -0400 Subject: [PATCH 03/33] fix comments --- llvm/include/llvm/Support/KnownBits.h | 8 ++-- .../lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 39 ++++++++++++++++--- llvm/lib/Support/KnownBits.cpp | 13 +++---- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index 575362dc18b0c..93049d05eb0b5 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -354,16 +354,16 @@ struct KnownBits { /// Compute knownbits resulting from llvm.usub.sat(LHS, RHS) static KnownBits usub_sat(const KnownBits &LHS, const KnownBits &RHS); - /// Compute knownbits resulting from (C1 & C2) + (C1 ^ C2).ashr(1) + /// Compute knownbits resulting from APIntOps::avgFloorS static KnownBits avgFloorS(const KnownBits &LHS, const KnownBits &RHS); - /// Compute knownbits resulting from (C1 & C2) + (C1 ^ C2).lshr(1) + /// Compute knownbits resulting from APIntOps::avgFloorU static KnownBits avgFloorU(const KnownBits &LHS, const KnownBits &RHS); - /// Compute knownbits resulting from (C1 & C2) - (C1 ^ C2).ashr(1) + /// Compute knownbits resulting from APIntOps::avgCelS static KnownBits avgCeilS(const KnownBits &LHS, const KnownBits &RHS); - /// Compute knownbits resulting from (C1 & C2) - (C1 ^ C2).lshr(1) + /// Compute knownbits resulting from APIntOps::avgCelU static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); /// Compute known bits resulting from multiplying LHS and RHS. diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 1dd0fa49a460f..f6af02ded36a2 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -3419,9 +3419,39 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts, Known = KnownBits::mulhs(Known, Known2); break; } - case ISD::AVGFLOORU: - case ISD::AVGCEILU: - case ISD::AVGFLOORS: + case ISD::AVGFLOORU: { + bool IsCeil = Opcode == ISD::AVGCEILU || Opcode == ISD::AVGCEILS; + bool IsSigned = Opcode == ISD::AVGFLOORS || Opcode == ISD::AVGCEILS; + Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); + Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); + Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); + Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + Known = KnownBits::avgFloorU(Known, Known2); + Known = Known.extractBits(BitWidth, 1); + break; + } + case ISD::AVGCEILU: { + bool IsCeil = Opcode == ISD::AVGCEILU || Opcode == ISD::AVGCEILS; + bool IsSigned = Opcode == ISD::AVGFLOORS || Opcode == ISD::AVGCEILS; + Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); + Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); + Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); + Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + Known = KnownBits::avgCeilU(Known, Known2); + Known = Known.extractBits(BitWidth, 1); + break; + } + case ISD::AVGFLOORS: { + bool IsCeil = Opcode == ISD::AVGCEILU || Opcode == ISD::AVGCEILS; + bool IsSigned = Opcode == ISD::AVGFLOORS || Opcode == ISD::AVGCEILS; + Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); + Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); + Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); + Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + Known = KnownBits::avgFloorS(Known, Known2); + Known = Known.extractBits(BitWidth, 1); + break; + } case ISD::AVGCEILS: { bool IsCeil = Opcode == ISD::AVGCEILU || Opcode == ISD::AVGCEILS; bool IsSigned = Opcode == ISD::AVGFLOORS || Opcode == ISD::AVGCEILS; @@ -3429,8 +3459,7 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts, Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); - KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); - Known = KnownBits::computeForAddCarry(Known, Known2, Carry); + Known = KnownBits::avgCeilS(Known, Known2); Known = Known.extractBits(BitWidth, 1); break; } diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 07c7ad0882387..1ad30a72166d9 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -768,8 +768,7 @@ KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { KnownBits xorResult = LHS ^ RHS; xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); - return computeForSatAddSub(/*Add*/ true, /*Signed*/ true, andResult, - xorResult); + return computeForAddSub(/*Add*/ true, /*Signed*/ true, andResult, xorResult); } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { @@ -778,8 +777,7 @@ KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { KnownBits xorResult = LHS ^ RHS; xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); - return computeForSatAddSub(/*Add*/ true, /*Signed*/ false, andResult, - xorResult); + return computeForAddSub(/*Add*/ true, /*Signed*/ false, andResult, xorResult); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { @@ -788,8 +786,7 @@ KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { KnownBits xorResult = LHS ^ RHS; xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); - return computeForSatAddSub(/*Add*/ false, /*Signed*/ true, andResult, - xorResult); + return computeForAddSub(/*Add*/ false, /*Signed*/ true, andResult, xorResult); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { @@ -798,8 +795,8 @@ KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { KnownBits xorResult = LHS ^ RHS; xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); - return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, andResult, - xorResult); + return computeForAddSub(/*Add*/ false, /*Signed*/ false, andResult, + xorResult); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From ba43d228509f12093608ea3f75819b9893ea65d2 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Thu, 4 Apr 2024 21:19:58 -0400 Subject: [PATCH 04/33] add tests --- llvm/unittests/Support/KnownBitsTest.cpp | 36 ++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp index 027d6379af26b..74432feea353e 100644 --- a/llvm/unittests/Support/KnownBitsTest.cpp +++ b/llvm/unittests/Support/KnownBitsTest.cpp @@ -559,6 +559,42 @@ TEST(KnownBitsTest, BinaryExhaustive) { KnownBits::mulhu, [](const APInt &N1, const APInt &N2) { return APIntOps::mulhu(N1, N2); }, checkCorrectnessOnlyBinary); + + testBinaryOpExhaustive( + [](const KnownBits &Known1, const KnownBits &Known2) { + return KnownBits::avgFloorS(Known1, Known2); + }, + [](const APInt &N1, const APInt &N2) { + return APIntOps::avgFloorS(N1, N2); + }, + checkCorrectnessOnlyBinary); + + testBinaryOpExhaustive( + [](const KnownBits &Known1, const KnownBits &Known2) { + return KnownBits::avgFloorU(Known1, Known2); + }, + [](const APInt &N1, const APInt &N2) { + return APIntOps::avgFloorU(N1, N2); + }, + checkCorrectnessOnlyBinary); + + testBinaryOpExhaustive( + [](const KnownBits &Known1, const KnownBits &Known2) { + return KnownBits::avgCeilU(Known1, Known2); + }, + [](const APInt &N1, const APInt &N2) { + return APIntOps::avgCeilU(N1, N2); + }, + checkCorrectnessOnlyBinary); + + testBinaryOpExhaustive( + [](const KnownBits &Known1, const KnownBits &Known2) { + return KnownBits::avgCeilS(Known1, Known2); + }, + [](const APInt &N1, const APInt &N2) { + return APIntOps::avgCeilS(N1, N2); + }, + checkCorrectnessOnlyBinary); } TEST(KnownBitsTest, UnaryExhaustive) { From af3a08cb9362517a9f3126868f0567c8b7283ae2 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Thu, 4 Apr 2024 21:26:12 -0400 Subject: [PATCH 05/33] remove opcode check --- .../lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 24 +++++++------------ llvm/lib/Support/KnownBits.cpp | 13 ++++++---- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index f6af02ded36a2..24edaf0d4af9b 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -3420,45 +3420,37 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts, break; } case ISD::AVGFLOORU: { - bool IsCeil = Opcode == ISD::AVGCEILU || Opcode == ISD::AVGCEILS; - bool IsSigned = Opcode == ISD::AVGFLOORS || Opcode == ISD::AVGCEILS; Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); - Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); - Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + Known = Known.zext(BitWidth + 1); + Known2 = Known2.zext(BitWidth + 1); Known = KnownBits::avgFloorU(Known, Known2); Known = Known.extractBits(BitWidth, 1); break; } case ISD::AVGCEILU: { - bool IsCeil = Opcode == ISD::AVGCEILU || Opcode == ISD::AVGCEILS; - bool IsSigned = Opcode == ISD::AVGFLOORS || Opcode == ISD::AVGCEILS; Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); - Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); - Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + Known = Known.zext(BitWidth + 1); + Known2 = Known2.zext(BitWidth + 1); Known = KnownBits::avgCeilU(Known, Known2); Known = Known.extractBits(BitWidth, 1); break; } case ISD::AVGFLOORS: { - bool IsCeil = Opcode == ISD::AVGCEILU || Opcode == ISD::AVGCEILS; - bool IsSigned = Opcode == ISD::AVGFLOORS || Opcode == ISD::AVGCEILS; Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); - Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); - Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + Known = Known.sext(BitWidth + 1); + Known2 = Known2.sext(BitWidth + 1); Known = KnownBits::avgFloorS(Known, Known2); Known = Known.extractBits(BitWidth, 1); break; } case ISD::AVGCEILS: { - bool IsCeil = Opcode == ISD::AVGCEILU || Opcode == ISD::AVGCEILS; - bool IsSigned = Opcode == ISD::AVGFLOORS || Opcode == ISD::AVGCEILS; Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); - Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); - Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + Known = Known.sext(BitWidth + 1); + Known2 = Known2.sext(BitWidth + 1); Known = KnownBits::avgCeilS(Known, Known2); Known = Known.extractBits(BitWidth, 1); break; diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 1ad30a72166d9..690bb750e90c3 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -768,7 +768,8 @@ KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { KnownBits xorResult = LHS ^ RHS; xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); - return computeForAddSub(/*Add*/ true, /*Signed*/ true, andResult, xorResult); + return computeForAddSub(/*Add*/ true, /* NSW */ true, /* NUW */ false, + andResult, xorResult); } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { @@ -777,7 +778,8 @@ KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { KnownBits xorResult = LHS ^ RHS; xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); - return computeForAddSub(/*Add*/ true, /*Signed*/ false, andResult, xorResult); + return computeForAddSub(/*Add*/ true, /* NSW */ false, /* NUW */ true, + andResult, xorResult); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { @@ -786,7 +788,8 @@ KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { KnownBits xorResult = LHS ^ RHS; xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); - return computeForAddSub(/*Add*/ false, /*Signed*/ true, andResult, xorResult); + return computeForAddSub(/*Add*/ false, /* NSW */ true, /* NUW */ false, + andResult, xorResult); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { @@ -795,8 +798,8 @@ KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { KnownBits xorResult = LHS ^ RHS; xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); - return computeForAddSub(/*Add*/ false, /*Signed*/ false, andResult, - xorResult); + return computeForAddSub(/*Add*/ false, /* NSW */ false, /* NUW */ true, + andResult, xorResult); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From d5ded0ec89c29324af29f07bed3400f7e8aee780 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 6 Apr 2024 09:57:02 -0400 Subject: [PATCH 06/33] fix test --- .../lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 12 ------ llvm/unittests/Support/KnownBitsTest.cpp | 40 ++++--------------- 2 files changed, 8 insertions(+), 44 deletions(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 24edaf0d4af9b..7884fcbfddad0 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -3422,37 +3422,25 @@ KnownBits SelectionDAG::computeKnownBits(SDValue Op, const APInt &DemandedElts, case ISD::AVGFLOORU: { Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); - Known = Known.zext(BitWidth + 1); - Known2 = Known2.zext(BitWidth + 1); Known = KnownBits::avgFloorU(Known, Known2); - Known = Known.extractBits(BitWidth, 1); break; } case ISD::AVGCEILU: { Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); - Known = Known.zext(BitWidth + 1); - Known2 = Known2.zext(BitWidth + 1); Known = KnownBits::avgCeilU(Known, Known2); - Known = Known.extractBits(BitWidth, 1); break; } case ISD::AVGFLOORS: { Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); - Known = Known.sext(BitWidth + 1); - Known2 = Known2.sext(BitWidth + 1); Known = KnownBits::avgFloorS(Known, Known2); - Known = Known.extractBits(BitWidth, 1); break; } case ISD::AVGCEILS: { Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); - Known = Known.sext(BitWidth + 1); - Known2 = Known2.sext(BitWidth + 1); Known = KnownBits::avgCeilS(Known, Known2); - Known = Known.extractBits(BitWidth, 1); break; } case ISD::SELECT: diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp index 74432feea353e..77c786dc7c489 100644 --- a/llvm/unittests/Support/KnownBitsTest.cpp +++ b/llvm/unittests/Support/KnownBitsTest.cpp @@ -560,41 +560,17 @@ TEST(KnownBitsTest, BinaryExhaustive) { [](const APInt &N1, const APInt &N2) { return APIntOps::mulhu(N1, N2); }, checkCorrectnessOnlyBinary); - testBinaryOpExhaustive( - [](const KnownBits &Known1, const KnownBits &Known2) { - return KnownBits::avgFloorS(Known1, Known2); - }, - [](const APInt &N1, const APInt &N2) { - return APIntOps::avgFloorS(N1, N2); - }, - checkCorrectnessOnlyBinary); + testBinaryOpExhaustive(KnownBits::avgFloorS, APIntOps::avgFloorS, + checkCorrectnessOnlyBinary); - testBinaryOpExhaustive( - [](const KnownBits &Known1, const KnownBits &Known2) { - return KnownBits::avgFloorU(Known1, Known2); - }, - [](const APInt &N1, const APInt &N2) { - return APIntOps::avgFloorU(N1, N2); - }, - checkCorrectnessOnlyBinary); + testBinaryOpExhaustive(KnownBits::avgFloorU, APIntOps::avgFloorU, + checkCorrectnessOnlyBinary); - testBinaryOpExhaustive( - [](const KnownBits &Known1, const KnownBits &Known2) { - return KnownBits::avgCeilU(Known1, Known2); - }, - [](const APInt &N1, const APInt &N2) { - return APIntOps::avgCeilU(N1, N2); - }, - checkCorrectnessOnlyBinary); + testBinaryOpExhaustive(KnownBits::avgCeilU, APIntOps::avgCeilU, + checkCorrectnessOnlyBinary); - testBinaryOpExhaustive( - [](const KnownBits &Known1, const KnownBits &Known2) { - return KnownBits::avgCeilS(Known1, Known2); - }, - [](const APInt &N1, const APInt &N2) { - return APIntOps::avgCeilS(N1, N2); - }, - checkCorrectnessOnlyBinary); + testBinaryOpExhaustive(KnownBits::avgCeilS, APIntOps::avgCeilS, + checkCorrectnessOnlyBinary); } TEST(KnownBitsTest, UnaryExhaustive) { From e9c8c6c225d702120d20e0dbd431abddad4a14c2 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 7 Apr 2024 20:31:56 -0400 Subject: [PATCH 07/33] fix or operation --- llvm/lib/Support/KnownBits.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 690bb750e90c3..36c2e9e8854ae 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -784,7 +784,7 @@ KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).ashr(1) - KnownBits andResult = LHS & RHS; + KnownBits andResult = LHS | RHS; KnownBits xorResult = LHS ^ RHS; xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); @@ -794,7 +794,7 @@ KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).lshr(1) - KnownBits andResult = LHS & RHS; + KnownBits andResult = LHS | RHS; KnownBits xorResult = LHS ^ RHS; xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); From 529ebe7c0a5b6d1436b9c9b41b792bd84937ad69 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Mon, 8 Apr 2024 12:56:43 -0400 Subject: [PATCH 08/33] fix variable name --- llvm/lib/Support/KnownBits.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 36c2e9e8854ae..4a7796f6c142a 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -784,22 +784,22 @@ KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).ashr(1) - KnownBits andResult = LHS | RHS; + KnownBits orResult = LHS | RHS; KnownBits xorResult = LHS ^ RHS; xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); return computeForAddSub(/*Add*/ false, /* NSW */ true, /* NUW */ false, - andResult, xorResult); + orResult, xorResult); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).lshr(1) - KnownBits andResult = LHS | RHS; + KnownBits orResult = LHS | RHS; KnownBits xorResult = LHS ^ RHS; xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); return computeForAddSub(/*Add*/ false, /* NSW */ false, /* NUW */ true, - andResult, xorResult); + orResult, xorResult); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From cecb3c9b4e2ef699a620ee95ed02a921a9bb36ed Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Tue, 9 Apr 2024 23:24:46 -0400 Subject: [PATCH 09/33] fix test --- llvm/unittests/CodeGen/AArch64SelectionDAGTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/unittests/CodeGen/AArch64SelectionDAGTest.cpp b/llvm/unittests/CodeGen/AArch64SelectionDAGTest.cpp index 27bcad7c24c4d..e498a2f60bad3 100644 --- a/llvm/unittests/CodeGen/AArch64SelectionDAGTest.cpp +++ b/llvm/unittests/CodeGen/AArch64SelectionDAGTest.cpp @@ -826,7 +826,7 @@ TEST_F(AArch64SelectionDAGTest, EXPECT_EQ(KnownAVGFLOORU.One, Ones); SDValue AVGFLOORS = - DAG->getNode(ISD::AVGFLOORU, Loc, Int16Vec8VT, ZextOp0, ZextOp1); + DAG->getNode(ISD::AVGFLOORS, Loc, Int16Vec8VT, ZextOp0, ZextOp1); KnownBits KnownAVGFLOORS = DAG->computeKnownBits(AVGFLOORS); EXPECT_EQ(KnownAVGFLOORS.Zero, Zeroes); EXPECT_EQ(KnownAVGFLOORS.One, Ones); From 0ad452fd318eaefb6a3470368dbfcda0d6510cc6 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 12 Apr 2024 00:36:02 -0400 Subject: [PATCH 10/33] try not touch zeros --- llvm/lib/Support/KnownBits.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 4a7796f6c142a..7ca2d5e2d325a 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -766,7 +766,7 @@ KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 & C2) + (C1 ^ C2).ashr(1) KnownBits andResult = LHS & RHS; KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.ashrInPlace(1); + // xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); return computeForAddSub(/*Add*/ true, /* NSW */ true, /* NUW */ false, andResult, xorResult); @@ -776,7 +776,7 @@ KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { // (C1 & C2) + (C1 ^ C2).lshr(1) KnownBits andResult = LHS & RHS; KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.lshrInPlace(1); + // xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); return computeForAddSub(/*Add*/ true, /* NSW */ false, /* NUW */ true, andResult, xorResult); @@ -786,7 +786,7 @@ KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).ashr(1) KnownBits orResult = LHS | RHS; KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.ashrInPlace(1); + // xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); return computeForAddSub(/*Add*/ false, /* NSW */ true, /* NUW */ false, orResult, xorResult); @@ -796,7 +796,7 @@ KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).lshr(1) KnownBits orResult = LHS | RHS; KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.lshrInPlace(1); + // xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); return computeForAddSub(/*Add*/ false, /* NSW */ false, /* NUW */ true, orResult, xorResult); From 87367c0453f83ee819c2e16d740b9b778e8ec21e Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 12 Apr 2024 01:14:53 -0400 Subject: [PATCH 11/33] revert back --- llvm/lib/Support/KnownBits.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 7ca2d5e2d325a..4a7796f6c142a 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -766,7 +766,7 @@ KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 & C2) + (C1 ^ C2).ashr(1) KnownBits andResult = LHS & RHS; KnownBits xorResult = LHS ^ RHS; - // xorResult.Zero.ashrInPlace(1); + xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); return computeForAddSub(/*Add*/ true, /* NSW */ true, /* NUW */ false, andResult, xorResult); @@ -776,7 +776,7 @@ KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { // (C1 & C2) + (C1 ^ C2).lshr(1) KnownBits andResult = LHS & RHS; KnownBits xorResult = LHS ^ RHS; - // xorResult.Zero.lshrInPlace(1); + xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); return computeForAddSub(/*Add*/ true, /* NSW */ false, /* NUW */ true, andResult, xorResult); @@ -786,7 +786,7 @@ KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).ashr(1) KnownBits orResult = LHS | RHS; KnownBits xorResult = LHS ^ RHS; - // xorResult.Zero.ashrInPlace(1); + xorResult.Zero.ashrInPlace(1); xorResult.One.ashrInPlace(1); return computeForAddSub(/*Add*/ false, /* NSW */ true, /* NUW */ false, orResult, xorResult); @@ -796,7 +796,7 @@ KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).lshr(1) KnownBits orResult = LHS | RHS; KnownBits xorResult = LHS ^ RHS; - // xorResult.Zero.lshrInPlace(1); + xorResult.Zero.lshrInPlace(1); xorResult.One.lshrInPlace(1); return computeForAddSub(/*Add*/ false, /* NSW */ false, /* NUW */ true, orResult, xorResult); From 6505a122a1bb50c3afe90d1f02af4610f72465e4 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 12 Apr 2024 16:05:22 -0400 Subject: [PATCH 12/33] change impl --- llvm/lib/Support/KnownBits.cpp | 48 +++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 4a7796f6c142a..225b27f389d05 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -764,42 +764,42 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 & C2) + (C1 ^ C2).ashr(1) - KnownBits andResult = LHS & RHS; - KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.ashrInPlace(1); - xorResult.One.ashrInPlace(1); - return computeForAddSub(/*Add*/ true, /* NSW */ true, /* NUW */ false, - andResult, xorResult); + unsigned BitWidth = LHS.getBitWidth(); + KnownBits tmpLHS = LHS.sext(BitWidth + 1); + KnownBits tmpRHS = RHS.sext(BitWidth + 1); + KnownBits Carry = KnownBits::makeConstant(APInt(1, 1)); + tmpLHS = KnownBits::computeForAddCarry(tmpLHS, tmpRHS, Carry); + return tmpLHS.extractBits(BitWidth, 1); } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { // (C1 & C2) + (C1 ^ C2).lshr(1) - KnownBits andResult = LHS & RHS; - KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.lshrInPlace(1); - xorResult.One.lshrInPlace(1); - return computeForAddSub(/*Add*/ true, /* NSW */ false, /* NUW */ true, - andResult, xorResult); + unsigned BitWidth = LHS.getBitWidth(); + KnownBits tmpLHS = LHS.zext(BitWidth + 1); + KnownBits tmpRHS = RHS.zext(BitWidth + 1); + KnownBits Carry = KnownBits::makeConstant(APInt(1, 0)); + tmpLHS = KnownBits::computeForAddCarry(tmpLHS, tmpRHS, Carry); + return tmpLHS.extractBits(BitWidth, 1); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).ashr(1) - KnownBits orResult = LHS | RHS; - KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.ashrInPlace(1); - xorResult.One.ashrInPlace(1); - return computeForAddSub(/*Add*/ false, /* NSW */ true, /* NUW */ false, - orResult, xorResult); + unsigned BitWidth = LHS.getBitWidth(); + KnownBits tmpLHS = LHS.sext(BitWidth + 1); + KnownBits tmpRHS = RHS.sext(BitWidth + 1); + KnownBits Carry = KnownBits::makeConstant(APInt(1, 1)); + tmpLHS = KnownBits::computeForAddCarry(tmpLHS, tmpRHS, Carry); + return tmpLHS.extractBits(BitWidth, 1); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { // (C1 | C2) - (C1 ^ C2).lshr(1) - KnownBits orResult = LHS | RHS; - KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.lshrInPlace(1); - xorResult.One.lshrInPlace(1); - return computeForAddSub(/*Add*/ false, /* NSW */ false, /* NUW */ true, - orResult, xorResult); + unsigned BitWidth = LHS.getBitWidth(); + KnownBits tmpLHS = LHS.zext(BitWidth + 1); + KnownBits tmpRHS = RHS.zext(BitWidth + 1); + KnownBits Carry = KnownBits::makeConstant(APInt(1, 0)); + tmpLHS = KnownBits::computeForAddCarry(tmpLHS, tmpRHS, Carry); + return tmpLHS.extractBits(BitWidth, 1); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From 1390e862ccb614f5be9cb8eeaee5995223cc59b0 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sun, 14 Apr 2024 23:31:54 -0400 Subject: [PATCH 13/33] change impl to use APInt --- llvm/lib/Support/KnownBits.cpp | 40 ++++++++++------------------------ 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 225b27f389d05..20d77cf04e68b 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -763,43 +763,27 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { } KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { - // (C1 & C2) + (C1 ^ C2).ashr(1) - unsigned BitWidth = LHS.getBitWidth(); - KnownBits tmpLHS = LHS.sext(BitWidth + 1); - KnownBits tmpRHS = RHS.sext(BitWidth + 1); - KnownBits Carry = KnownBits::makeConstant(APInt(1, 1)); - tmpLHS = KnownBits::computeForAddCarry(tmpLHS, tmpRHS, Carry); - return tmpLHS.extractBits(BitWidth, 1); + APInt Zero = APIntOps::avgFloorS(LHS.Zero, RHS.Zero); + APInt One = APIntOps::avgFloorS(LHS.One, RHS.One); + return KnownBits(Zero, One); } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { - // (C1 & C2) + (C1 ^ C2).lshr(1) - unsigned BitWidth = LHS.getBitWidth(); - KnownBits tmpLHS = LHS.zext(BitWidth + 1); - KnownBits tmpRHS = RHS.zext(BitWidth + 1); - KnownBits Carry = KnownBits::makeConstant(APInt(1, 0)); - tmpLHS = KnownBits::computeForAddCarry(tmpLHS, tmpRHS, Carry); - return tmpLHS.extractBits(BitWidth, 1); + APInt Zero = APIntOps::avgFloorS(LHS.Zero, RHS.Zero); + APInt One = APIntOps::avgFloorS(LHS.One, RHS.One); + return KnownBits(Zero, One); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { - // (C1 | C2) - (C1 ^ C2).ashr(1) - unsigned BitWidth = LHS.getBitWidth(); - KnownBits tmpLHS = LHS.sext(BitWidth + 1); - KnownBits tmpRHS = RHS.sext(BitWidth + 1); - KnownBits Carry = KnownBits::makeConstant(APInt(1, 1)); - tmpLHS = KnownBits::computeForAddCarry(tmpLHS, tmpRHS, Carry); - return tmpLHS.extractBits(BitWidth, 1); + APInt Zero = APIntOps::avgCeilS(LHS.Zero, RHS.Zero); + APInt One = APIntOps::avgCeilS(LHS.One, RHS.One); + return KnownBits(Zero, One); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - // (C1 | C2) - (C1 ^ C2).lshr(1) - unsigned BitWidth = LHS.getBitWidth(); - KnownBits tmpLHS = LHS.zext(BitWidth + 1); - KnownBits tmpRHS = RHS.zext(BitWidth + 1); - KnownBits Carry = KnownBits::makeConstant(APInt(1, 0)); - tmpLHS = KnownBits::computeForAddCarry(tmpLHS, tmpRHS, Carry); - return tmpLHS.extractBits(BitWidth, 1); + APInt Zero = APIntOps::avgCeilU(LHS.Zero, RHS.Zero); + APInt One = APIntOps::avgCeilU(LHS.One, RHS.One); + return KnownBits(Zero, One); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From 1dffaa42017ab51fecd49ff26b8eaa5f67079092 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Mon, 15 Apr 2024 00:47:23 -0400 Subject: [PATCH 14/33] fix syntax --- llvm/lib/Support/KnownBits.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 20d77cf04e68b..37e126aa26f71 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -769,8 +769,8 @@ KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { - APInt Zero = APIntOps::avgFloorS(LHS.Zero, RHS.Zero); - APInt One = APIntOps::avgFloorS(LHS.One, RHS.One); + APInt Zero = APIntOps::avgFloorU(LHS.Zero, RHS.Zero); + APInt One = APIntOps::avgFloorU(LHS.One, RHS.One); return KnownBits(Zero, One); } From 61c7db79d63e698f0d59c52e046dc85883bbecaa Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Tue, 23 Apr 2024 23:56:43 -0400 Subject: [PATCH 15/33] clang format --- llvm/unittests/Support/KnownBitsTest.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp index 63f5688491de5..824cf7501fd44 100644 --- a/llvm/unittests/Support/KnownBitsTest.cpp +++ b/llvm/unittests/Support/KnownBitsTest.cpp @@ -502,13 +502,17 @@ TEST(KnownBitsTest, BinaryExhaustive) { [](const APInt &N1, const APInt &N2) { return APIntOps::mulhu(N1, N2); }, /*CheckOptimality=*/false); - testBinaryOpExhaustive("avgFloorS", KnownBits::avgFloorS, APIntOps::avgFloorS, false); + testBinaryOpExhaustive("avgFloorS", KnownBits::avgFloorS, APIntOps::avgFloorS, + false); - testBinaryOpExhaustive("avgFloorU", KnownBits::avgFloorU, APIntOps::avgFloorU, false); + testBinaryOpExhaustive("avgFloorU", KnownBits::avgFloorU, APIntOps::avgFloorU, + false); - testBinaryOpExhaustive("avgCeilU", KnownBits::avgCeilU, APIntOps::avgCeilU, false ); + testBinaryOpExhaustive("avgCeilU", KnownBits::avgCeilU, APIntOps::avgCeilU, + false); - testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS, false); + testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS, + false); } TEST(KnownBitsTest, UnaryExhaustive) { From 857f57acb98a5b3c129c3ff195f638a5fcd74814 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 20:45:01 -0400 Subject: [PATCH 16/33] try new impl --- llvm/lib/Support/KnownBits.cpp | 106 ++++++++++++++++++++++++--------- 1 file changed, 79 insertions(+), 27 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index a8257f4579313..86db9ef3b82b8 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -776,42 +776,94 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { // (C1 & C2) + (C1 ^ C2).ashr(1) - KnownBits andResult = LHS & RHS; - KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.ashrInPlace(1); - xorResult.One.ashrInPlace(1); - return computeForAddSub(/*Add*/ true, /* NSW */ true, /* NUW */ false, - andResult, xorResult); + // KnownBits andResult = LHS & RHS; + // KnownBits xorResult = LHS ^ RHS; + // xorResult.Zero.ashrInPlace(1); + // xorResult.One.ashrInPlace(1); + // return computeForAddSub(/*Add*/ true, /* NSW */ true, /* NUW */ false, + // andResult, xorResult); + KnownBits Known = LHS; + KnownBits Known2 = RHS; + bool IsCeil = false; + bool IsSigned = true; + // Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); + // Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); + unsigned BitWidth = Known.getBitWidth(); + Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); + Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); + Known = KnownBits::computeForAddCarry(Known, Known2, Carry); + Known = Known.extractBits(BitWidth, 1); + return Known; } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { - // (C1 & C2) + (C1 ^ C2).lshr(1) - KnownBits andResult = LHS & RHS; - KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.lshrInPlace(1); - xorResult.One.lshrInPlace(1); - return computeForAddSub(/*Add*/ true, /* NSW */ false, /* NUW */ true, - andResult, xorResult); + // // (C1 & C2) + (C1 ^ C2).lshr(1) + // KnownBits andResult = LHS & RHS; + // KnownBits xorResult = LHS ^ RHS; + // xorResult.Zero.lshrInPlace(1); + // xorResult.One.lshrInPlace(1); + // return computeForAddSub(/*Add*/ true, /* NSW */ false, /* NUW */ true, + // andResult, xorResult); + KnownBits Known = LHS; + KnownBits Known2 = RHS; + bool IsCeil = false; + bool IsSigned = false; + // Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); + // Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); + unsigned BitWidth = Known.getBitWidth(); + Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); + Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); + Known = KnownBits::computeForAddCarry(Known, Known2, Carry); + Known = Known.extractBits(BitWidth, 1); + return Known; } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { - // (C1 | C2) - (C1 ^ C2).ashr(1) - KnownBits orResult = LHS | RHS; - KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.ashrInPlace(1); - xorResult.One.ashrInPlace(1); - return computeForAddSub(/*Add*/ false, /* NSW */ true, /* NUW */ false, - orResult, xorResult); + // // (C1 | C2) - (C1 ^ C2).ashr(1) + // KnownBits orResult = LHS | RHS; + // KnownBits xorResult = LHS ^ RHS; + // xorResult.Zero.ashrInPlace(1); + // xorResult.One.ashrInPlace(1); + // return computeForAddSub(/*Add*/ false, /* NSW */ true, /* NUW */ false, + // orResult, xorResult); + KnownBits Known = LHS; + KnownBits Known2 = RHS; + bool IsCeil = true; + bool IsSigned = true; + // Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); + // Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); + unsigned BitWidth = Known.getBitWidth(); + Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); + Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); + Known = KnownBits::computeForAddCarry(Known, Known2, Carry); + Known = Known.extractBits(BitWidth, 1); + return Known; } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - // (C1 | C2) - (C1 ^ C2).lshr(1) - KnownBits orResult = LHS | RHS; - KnownBits xorResult = LHS ^ RHS; - xorResult.Zero.lshrInPlace(1); - xorResult.One.lshrInPlace(1); - return computeForAddSub(/*Add*/ false, /* NSW */ false, /* NUW */ true, - orResult, xorResult); + // // (C1 | C2) - (C1 ^ C2).lshr(1) + // KnownBits orResult = LHS | RHS; + // KnownBits xorResult = LHS ^ RHS; + // xorResult.Zero.lshrInPlace(1); + // xorResult.One.lshrInPlace(1); + // return computeForAddSub(/*Add*/ false, /* NSW */ false, /* NUW */ true, + // orResult, xorResult); + KnownBits Known = LHS; + KnownBits Known2 = RHS; + bool IsCeil = true; + bool IsSigned = false; + // Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); + // Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); + unsigned BitWidth = Known.getBitWidth(); + Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); + Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); + KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); + Known = KnownBits::computeForAddCarry(Known, Known2, Carry); + Known = Known.extractBits(BitWidth, 1); + return Known; } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From 672566a06b9207ee233b2624ff2b012ceba65a86 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 21:21:17 -0400 Subject: [PATCH 17/33] remove unused code --- llvm/lib/Support/KnownBits.cpp | 36 ---------------------------------- 1 file changed, 36 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 86db9ef3b82b8..e096a89075194 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -775,19 +775,10 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { } KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { - // (C1 & C2) + (C1 ^ C2).ashr(1) - // KnownBits andResult = LHS & RHS; - // KnownBits xorResult = LHS ^ RHS; - // xorResult.Zero.ashrInPlace(1); - // xorResult.One.ashrInPlace(1); - // return computeForAddSub(/*Add*/ true, /* NSW */ true, /* NUW */ false, - // andResult, xorResult); KnownBits Known = LHS; KnownBits Known2 = RHS; bool IsCeil = false; bool IsSigned = true; - // Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); - // Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); unsigned BitWidth = Known.getBitWidth(); Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); @@ -798,19 +789,10 @@ KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { - // // (C1 & C2) + (C1 ^ C2).lshr(1) - // KnownBits andResult = LHS & RHS; - // KnownBits xorResult = LHS ^ RHS; - // xorResult.Zero.lshrInPlace(1); - // xorResult.One.lshrInPlace(1); - // return computeForAddSub(/*Add*/ true, /* NSW */ false, /* NUW */ true, - // andResult, xorResult); KnownBits Known = LHS; KnownBits Known2 = RHS; bool IsCeil = false; bool IsSigned = false; - // Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); - // Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); unsigned BitWidth = Known.getBitWidth(); Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); @@ -821,19 +803,10 @@ KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { - // // (C1 | C2) - (C1 ^ C2).ashr(1) - // KnownBits orResult = LHS | RHS; - // KnownBits xorResult = LHS ^ RHS; - // xorResult.Zero.ashrInPlace(1); - // xorResult.One.ashrInPlace(1); - // return computeForAddSub(/*Add*/ false, /* NSW */ true, /* NUW */ false, - // orResult, xorResult); KnownBits Known = LHS; KnownBits Known2 = RHS; bool IsCeil = true; bool IsSigned = true; - // Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); - // Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); unsigned BitWidth = Known.getBitWidth(); Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); @@ -844,19 +817,10 @@ KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - // // (C1 | C2) - (C1 ^ C2).lshr(1) - // KnownBits orResult = LHS | RHS; - // KnownBits xorResult = LHS ^ RHS; - // xorResult.Zero.lshrInPlace(1); - // xorResult.One.lshrInPlace(1); - // return computeForAddSub(/*Add*/ false, /* NSW */ false, /* NUW */ true, - // orResult, xorResult); KnownBits Known = LHS; KnownBits Known2 = RHS; bool IsCeil = true; bool IsSigned = false; - // Known = computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1); - // Known2 = computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1); unsigned BitWidth = Known.getBitWidth(); Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); From 91e6eb28058330bcefcb6096a8959eecda26b9b0 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 21:29:55 -0400 Subject: [PATCH 18/33] missing header --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 libc/test/src/sys/ioctl/linux/ioctl_test.cpp diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp new file mode 100644 index 0000000000000..7f7ea2eb232ec --- /dev/null +++ b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp @@ -0,0 +1,36 @@ +//===-- Unittests for ioctl -----------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "src/__support/OSUtil/syscall.h" // For internal syscall function. +#include "src/errno/libc_errno.h" +#include "src/sys/ioctl/ioctl.h" +#include "test/UnitTest/ErrnoSetterMatcher.h" +#include "test/UnitTest/LibcTest.h" +#include "test/UnitTest/Test.h" + +#include +#include +#include +#include + +using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails; +using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds; + +TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { + int fd = 10; + unsigned long request = 10; + int res = LIBC_NAMESPACE::ioctl(fd, request, NULL); + EXPECT_THAT(res, Fails(EBADF, -1)); +} + +TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { + int fd = open("/dev/null", O_RDWR); + int data; + int res = LIBC_NAMESPACE::ioctl(fd, FIONREAD, &data); + EXPECT_THAT(res, Succeeds()); +} From 94ce6cbffc63e7b70224c420be4da4faca86a224 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 11 May 2024 21:31:58 -0400 Subject: [PATCH 19/33] revert --- libc/test/src/sys/ioctl/linux/ioctl_test.cpp | 36 -------------------- 1 file changed, 36 deletions(-) delete mode 100644 libc/test/src/sys/ioctl/linux/ioctl_test.cpp diff --git a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp b/libc/test/src/sys/ioctl/linux/ioctl_test.cpp deleted file mode 100644 index 7f7ea2eb232ec..0000000000000 --- a/libc/test/src/sys/ioctl/linux/ioctl_test.cpp +++ /dev/null @@ -1,36 +0,0 @@ -//===-- Unittests for ioctl -----------------------------------------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "src/__support/OSUtil/syscall.h" // For internal syscall function. -#include "src/errno/libc_errno.h" -#include "src/sys/ioctl/ioctl.h" -#include "test/UnitTest/ErrnoSetterMatcher.h" -#include "test/UnitTest/LibcTest.h" -#include "test/UnitTest/Test.h" - -#include -#include -#include -#include - -using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails; -using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds; - -TEST(LlvmLibcIoctlTest, InvalidFileDescriptor) { - int fd = 10; - unsigned long request = 10; - int res = LIBC_NAMESPACE::ioctl(fd, request, NULL); - EXPECT_THAT(res, Fails(EBADF, -1)); -} - -TEST(LlvmLibcIoctlTest, ValidFileDescriptor) { - int fd = open("/dev/null", O_RDWR); - int data; - int res = LIBC_NAMESPACE::ioctl(fd, FIONREAD, &data); - EXPECT_THAT(res, Succeeds()); -} From 7825ad7e332fb88b3658aacf9c162c61d6c28cb9 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Mon, 13 May 2024 20:46:12 -0400 Subject: [PATCH 20/33] typo --- llvm/include/llvm/Support/KnownBits.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index 6ded7df0e3205..ba4a5f01036ca 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -360,10 +360,10 @@ struct KnownBits { /// Compute knownbits resulting from APIntOps::avgFloorU static KnownBits avgFloorU(const KnownBits &LHS, const KnownBits &RHS); - /// Compute knownbits resulting from APIntOps::avgCelS + /// Compute knownbits resulting from APIntOps::avgCeilS static KnownBits avgCeilS(const KnownBits &LHS, const KnownBits &RHS); - /// Compute knownbits resulting from APIntOps::avgCelU + /// Compute knownbits resulting from APIntOps::avgCeilU static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); /// Compute known bits resulting from multiplying LHS and RHS. From 0b91c85f88ea04f390b332c874af7bc635447aec Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Thu, 16 May 2024 23:53:57 -0400 Subject: [PATCH 21/33] add helper function --- llvm/include/llvm/Support/KnownBits.h | 5 +++ llvm/lib/Support/KnownBits.cpp | 46 ++++++--------------------- 2 files changed, 15 insertions(+), 36 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index ba4a5f01036ca..97f5be5398ddc 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -366,6 +366,11 @@ struct KnownBits { /// Compute knownbits resulting from APIntOps::avgCeilU static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); + /// Return the knownbits for computing average floor or ceil + static KnownBits avgFloorCeilCompute(const KnownBits &LHS, + const KnownBits &RHS, bool IsCeil, + bool IsSigned); + /// Compute known bits resulting from multiplying LHS and RHS. static KnownBits mul(const KnownBits &LHS, const KnownBits &RHS, bool NoUndefSelfMultiply = false); diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index e096a89075194..3e98653c69cca 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -774,11 +774,10 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, LHS, RHS); } -KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { +KnownBits avgFloorCeilCompute(const KnownBits &LHS, const KnownBits &RHS, + bool IsCeil, bool IsSigned) { KnownBits Known = LHS; KnownBits Known2 = RHS; - bool IsCeil = false; - bool IsSigned = true; unsigned BitWidth = Known.getBitWidth(); Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); @@ -788,46 +787,21 @@ KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { return Known; } +KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { + return avgFloorCeilCompute(LHS, RHS, /* IsCeil */ false, /* IsSigned */ true); +} + KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { - KnownBits Known = LHS; - KnownBits Known2 = RHS; - bool IsCeil = false; - bool IsSigned = false; - unsigned BitWidth = Known.getBitWidth(); - Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); - Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); - KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); - Known = KnownBits::computeForAddCarry(Known, Known2, Carry); - Known = Known.extractBits(BitWidth, 1); - return Known; + return avgFloorCeilCompute(LHS, RHS, /* IsCeil */ false, + /* IsSigned */ false); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { - KnownBits Known = LHS; - KnownBits Known2 = RHS; - bool IsCeil = true; - bool IsSigned = true; - unsigned BitWidth = Known.getBitWidth(); - Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); - Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); - KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); - Known = KnownBits::computeForAddCarry(Known, Known2, Carry); - Known = Known.extractBits(BitWidth, 1); - return Known; + return avgFloorCeilCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ true); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - KnownBits Known = LHS; - KnownBits Known2 = RHS; - bool IsCeil = true; - bool IsSigned = false; - unsigned BitWidth = Known.getBitWidth(); - Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); - Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); - KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); - Known = KnownBits::computeForAddCarry(Known, Known2, Carry); - Known = Known.extractBits(BitWidth, 1); - return Known; + return avgFloorCeilCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ false); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From 489a371990a1ee8cd2cdc105cb3ae9dd4511dbdd Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Thu, 16 May 2024 23:59:15 -0400 Subject: [PATCH 22/33] change function name --- llvm/include/llvm/Support/KnownBits.h | 7 +++---- llvm/lib/Support/KnownBits.cpp | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index 97f5be5398ddc..55a5f3c01109f 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -366,10 +366,9 @@ struct KnownBits { /// Compute knownbits resulting from APIntOps::avgCeilU static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); - /// Return the knownbits for computing average floor or ceil - static KnownBits avgFloorCeilCompute(const KnownBits &LHS, - const KnownBits &RHS, bool IsCeil, - bool IsSigned); + /// Return the knownbits for computing average + static KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, + bool IsCeil, bool IsSigned); /// Compute known bits resulting from multiplying LHS and RHS. static KnownBits mul(const KnownBits &LHS, const KnownBits &RHS, diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 3e98653c69cca..6a4d0ac0b92d8 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -774,8 +774,8 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, LHS, RHS); } -KnownBits avgFloorCeilCompute(const KnownBits &LHS, const KnownBits &RHS, - bool IsCeil, bool IsSigned) { +KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, + bool IsSigned) { KnownBits Known = LHS; KnownBits Known2 = RHS; unsigned BitWidth = Known.getBitWidth(); From 10de0a1e52cb304e4a7819aecaf4b489cf3d7483 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 00:01:41 -0400 Subject: [PATCH 23/33] syntax fix --- llvm/lib/Support/KnownBits.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 6a4d0ac0b92d8..53d78131f5957 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -788,20 +788,20 @@ KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, } KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { - return avgFloorCeilCompute(LHS, RHS, /* IsCeil */ false, /* IsSigned */ true); + return avgCompute(LHS, RHS, /* IsCeil */ false, /* IsSigned */ true); } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { - return avgFloorCeilCompute(LHS, RHS, /* IsCeil */ false, - /* IsSigned */ false); + return avgCompute(LHS, RHS, /* IsCeil */ false, + /* IsSigned */ false); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { - return avgFloorCeilCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ true); + return avgCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ true); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - return avgFloorCeilCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ false); + return avgCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ false); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From 69c1a37f9060227131aec6dee9c873ebe73b63d5 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 00:20:32 -0400 Subject: [PATCH 24/33] syntax fix --- llvm/include/llvm/Support/KnownBits.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index 55a5f3c01109f..b5c2fbe0a1eda 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -367,7 +367,7 @@ struct KnownBits { static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); /// Return the knownbits for computing average - static KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, + inline KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, bool IsSigned); /// Compute known bits resulting from multiplying LHS and RHS. From 99e179a8c97f387df9f93626044e5c2631899852 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 00:24:17 -0400 Subject: [PATCH 25/33] syntax fix --- llvm/include/llvm/Support/KnownBits.h | 2 +- llvm/lib/Support/KnownBits.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index b5c2fbe0a1eda..f69f8c3382cea 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -367,7 +367,7 @@ struct KnownBits { static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); /// Return the knownbits for computing average - inline KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, + KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, bool IsSigned); /// Compute known bits resulting from multiplying LHS and RHS. diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 53d78131f5957..c5ae544003bdc 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -774,7 +774,7 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, LHS, RHS); } -KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, +KnownBits KnownBits::avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, bool IsSigned) { KnownBits Known = LHS; KnownBits Known2 = RHS; @@ -788,20 +788,20 @@ KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, } KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { - return avgCompute(LHS, RHS, /* IsCeil */ false, /* IsSigned */ true); + return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ false, /* IsSigned */ true); } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { - return avgCompute(LHS, RHS, /* IsCeil */ false, + return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ false, /* IsSigned */ false); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { - return avgCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ true); + return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ true); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - return avgCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ false); + return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ false); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From ab00768213f07873ae5c92af69f57954ec0c8dcf Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 00:35:39 -0400 Subject: [PATCH 26/33] some fix --- llvm/include/llvm/Support/KnownBits.h | 2 +- llvm/lib/Support/KnownBits.cpp | 31 +++++++++++++++------------ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index f69f8c3382cea..55a5f3c01109f 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -367,7 +367,7 @@ struct KnownBits { static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); /// Return the knownbits for computing average - KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, + static KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, bool IsSigned); /// Compute known bits resulting from multiplying LHS and RHS. diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index c5ae544003bdc..7c3b0d322e204 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -18,9 +18,8 @@ using namespace llvm; -static KnownBits computeForAddCarry( - const KnownBits &LHS, const KnownBits &RHS, - bool CarryZero, bool CarryOne) { +static KnownBits computeForAddCarry(const KnownBits &LHS, const KnownBits &RHS, + bool CarryZero, bool CarryOne) { assert(!(CarryZero && CarryOne) && "Carry can't be zero and one at the same time"); @@ -47,11 +46,12 @@ static KnownBits computeForAddCarry( return KnownOut; } -KnownBits KnownBits::computeForAddCarry( - const KnownBits &LHS, const KnownBits &RHS, const KnownBits &Carry) { +KnownBits KnownBits::computeForAddCarry(const KnownBits &LHS, + const KnownBits &RHS, + const KnownBits &Carry) { assert(Carry.getBitWidth() == 1 && "Carry must be 1-bit"); - return ::computeForAddCarry( - LHS, RHS, Carry.Zero.getBoolValue(), Carry.One.getBoolValue()); + return ::computeForAddCarry(LHS, RHS, Carry.Zero.getBoolValue(), + Carry.One.getBoolValue()); } KnownBits KnownBits::computeForAddSub(bool Add, bool NSW, bool NUW, @@ -475,7 +475,7 @@ KnownBits KnownBits::ashr(const KnownBits &LHS, const KnownBits &RHS, Known.Zero.setAllBits(); Known.One.setAllBits(); for (unsigned ShiftAmt = MinShiftAmount; ShiftAmt <= MaxShiftAmount; - ++ShiftAmt) { + ++ShiftAmt) { // Skip if the shift amount is impossible. if ((ShiftAmtZeroMask & ShiftAmt) != 0 || (ShiftAmtOneMask | ShiftAmt) != ShiftAmt) @@ -774,8 +774,8 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, LHS, RHS); } -KnownBits KnownBits::avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, - bool IsSigned) { +KnownBits KnownBits::avgCompute(const KnownBits &LHS, const KnownBits &RHS, + bool IsCeil, bool IsSigned) { KnownBits Known = LHS; KnownBits Known2 = RHS; unsigned BitWidth = Known.getBitWidth(); @@ -788,20 +788,23 @@ KnownBits KnownBits::avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool } KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { - return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ false, /* IsSigned */ true); + return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ false, + /* IsSigned */ true); } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ false, - /* IsSigned */ false); + /* IsSigned */ false); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { - return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ true); + return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ true, + /* IsSigned */ true); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ true, /* IsSigned */ false); + return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ true, + /* IsSigned */ false); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From d2309974fba39c2b59d9853e832a953ab6af5623 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 09:02:44 -0400 Subject: [PATCH 27/33] some fix --- llvm/include/llvm/Support/KnownBits.h | 4 ---- llvm/lib/Support/KnownBits.cpp | 20 ++++++++++---------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/llvm/include/llvm/Support/KnownBits.h b/llvm/include/llvm/Support/KnownBits.h index 55a5f3c01109f..ba4a5f01036ca 100644 --- a/llvm/include/llvm/Support/KnownBits.h +++ b/llvm/include/llvm/Support/KnownBits.h @@ -366,10 +366,6 @@ struct KnownBits { /// Compute knownbits resulting from APIntOps::avgCeilU static KnownBits avgCeilU(const KnownBits &LHS, const KnownBits &RHS); - /// Return the knownbits for computing average - static KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, - bool IsCeil, bool IsSigned); - /// Compute known bits resulting from multiplying LHS and RHS. static KnownBits mul(const KnownBits &LHS, const KnownBits &RHS, bool NoUndefSelfMultiply = false); diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 7c3b0d322e204..44e2733e0cd7c 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -774,8 +774,8 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, LHS, RHS); } -KnownBits KnownBits::avgCompute(const KnownBits &LHS, const KnownBits &RHS, - bool IsCeil, bool IsSigned) { +static KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, + bool IsCeil, bool IsSigned) { KnownBits Known = LHS; KnownBits Known2 = RHS; unsigned BitWidth = Known.getBitWidth(); @@ -788,23 +788,23 @@ KnownBits KnownBits::avgCompute(const KnownBits &LHS, const KnownBits &RHS, } KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { - return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ false, - /* IsSigned */ true); + return avgCompute(LHS, RHS, /* IsCeil */ false, + /* IsSigned */ true); } KnownBits KnownBits::avgFloorU(const KnownBits &LHS, const KnownBits &RHS) { - return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ false, - /* IsSigned */ false); + return avgCompute(LHS, RHS, /* IsCeil */ false, + /* IsSigned */ false); } KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { - return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ true, - /* IsSigned */ true); + return avgCompute(LHS, RHS, /* IsCeil */ true, + /* IsSigned */ true); } KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - return KnownBits::avgCompute(LHS, RHS, /* IsCeil */ true, - /* IsSigned */ false); + return avgCompute(LHS, RHS, /* IsCeil */ true, + /* IsSigned */ false); } KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, From eca6944f3888845668b03ece2283db4ad3028973 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 09:30:30 -0400 Subject: [PATCH 28/33] revert --- llvm/lib/Support/KnownBits.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 44e2733e0cd7c..4aa83a863c8c8 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -778,6 +778,8 @@ static KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, bool IsCeil, bool IsSigned) { KnownBits Known = LHS; KnownBits Known2 = RHS; + bool IsCeil = false; + bool IsSigned = true; unsigned BitWidth = Known.getBitWidth(); Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); From 2cd048c4babdcb5ab2641606d005382b5fadd1ee Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 09:48:24 -0400 Subject: [PATCH 29/33] make test optimal --- llvm/lib/Support/KnownBits.cpp | 27 ++++++++---------------- llvm/unittests/Support/KnownBitsTest.cpp | 14 ++++++------ 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 4aa83a863c8c8..6dfaf73fe0938 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -774,19 +774,15 @@ KnownBits KnownBits::usub_sat(const KnownBits &LHS, const KnownBits &RHS) { return computeForSatAddSub(/*Add*/ false, /*Signed*/ false, LHS, RHS); } -static KnownBits avgCompute(const KnownBits &LHS, const KnownBits &RHS, - bool IsCeil, bool IsSigned) { - KnownBits Known = LHS; - KnownBits Known2 = RHS; - bool IsCeil = false; - bool IsSigned = true; - unsigned BitWidth = Known.getBitWidth(); - Known = IsSigned ? Known.sext(BitWidth + 1) : Known.zext(BitWidth + 1); - Known2 = IsSigned ? Known2.sext(BitWidth + 1) : Known2.zext(BitWidth + 1); +static KnownBits avgCompute(KnownBits LHS, KnownBits RHS, bool IsCeil, + bool IsSigned) { + unsigned BitWidth = LHS.getBitWidth(); + LHS = IsSigned ? LHS.sext(BitWidth + 1) : LHS.zext(BitWidth + 1); + RHS = IsSigned ? RHS.sext(BitWidth + 1) : RHS.zext(BitWidth + 1); KnownBits Carry = KnownBits::makeConstant(APInt(1, IsCeil ? 1 : 0)); - Known = KnownBits::computeForAddCarry(Known, Known2, Carry); - Known = Known.extractBits(BitWidth, 1); - return Known; + LHS = KnownBits::computeForAddCarry(LHS, RHS, Carry); + LHS = LHS.extractBits(BitWidth, 1); + return LHS; } KnownBits KnownBits::avgFloorS(const KnownBits &LHS, const KnownBits &RHS) { @@ -804,11 +800,6 @@ KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { /* IsSigned */ true); } -KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { - return avgCompute(LHS, RHS, /* IsCeil */ true, - /* IsSigned */ false); -} - KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, bool NoUndefSelfMultiply) { unsigned BitWidth = LHS.getBitWidth(); @@ -1171,4 +1162,4 @@ void KnownBits::print(raw_ostream &OS) const { void KnownBits::dump() const { print(dbgs()); dbgs() << "\n"; -} +} \ No newline at end of file diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp index 824cf7501fd44..db1d35c03a958 100644 --- a/llvm/unittests/Support/KnownBitsTest.cpp +++ b/llvm/unittests/Support/KnownBitsTest.cpp @@ -502,17 +502,15 @@ TEST(KnownBitsTest, BinaryExhaustive) { [](const APInt &N1, const APInt &N2) { return APIntOps::mulhu(N1, N2); }, /*CheckOptimality=*/false); - testBinaryOpExhaustive("avgFloorS", KnownBits::avgFloorS, APIntOps::avgFloorS, - false); + testBinaryOpExhaustive("avgFloorS", KnownBits::avgFloorS, + APIntOps::avgFloorS); - testBinaryOpExhaustive("avgFloorU", KnownBits::avgFloorU, APIntOps::avgFloorU, - false); + testBinaryOpExhaustive("avgFloorU", KnownBits::avgFloorU, + APIntOps::avgFloorU); - testBinaryOpExhaustive("avgCeilU", KnownBits::avgCeilU, APIntOps::avgCeilU, - false); + testBinaryOpExhaustive("avgCeilU", KnownBits::avgCeilU, APIntOps::avgCeilU); - testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS, - false); + testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS); } TEST(KnownBitsTest, UnaryExhaustive) { From 3ae62ff6889210477baefec938ea35e5fe3f1804 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 10:05:43 -0400 Subject: [PATCH 30/33] add avgCeilU back --- llvm/lib/Support/KnownBits.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 6dfaf73fe0938..157b55677f7d6 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -800,6 +800,11 @@ KnownBits KnownBits::avgCeilS(const KnownBits &LHS, const KnownBits &RHS) { /* IsSigned */ true); } +KnownBits KnownBits::avgCeilU(const KnownBits &LHS, const KnownBits &RHS) { + return avgCompute(LHS, RHS, /* IsCeil */ true, + /* IsSigned */ false); +} + KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, bool NoUndefSelfMultiply) { unsigned BitWidth = LHS.getBitWidth(); @@ -1162,4 +1167,4 @@ void KnownBits::print(raw_ostream &OS) const { void KnownBits::dump() const { print(dbgs()); dbgs() << "\n"; -} \ No newline at end of file +} From 667c7afa9dbfca2dcaa86177aeba1b3b5c2ef6ec Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 12:03:04 -0400 Subject: [PATCH 31/33] remove spurious reformat --- llvm/lib/Support/KnownBits.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 157b55677f7d6..97b4498a6e0aa 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -18,8 +18,9 @@ using namespace llvm; -static KnownBits computeForAddCarry(const KnownBits &LHS, const KnownBits &RHS, - bool CarryZero, bool CarryOne) { +static KnownBits computeForAddCarry( + const KnownBits &LHS, const KnownBits &RHS, + bool CarryZero, bool CarryOne) { assert(!(CarryZero && CarryOne) && "Carry can't be zero and one at the same time"); @@ -46,9 +47,8 @@ static KnownBits computeForAddCarry(const KnownBits &LHS, const KnownBits &RHS, return KnownOut; } -KnownBits KnownBits::computeForAddCarry(const KnownBits &LHS, - const KnownBits &RHS, - const KnownBits &Carry) { +KnownBits KnownBits::computeForAddCarry( + const KnownBits &LHS, const KnownBits &RHS, const KnownBits &Carry) { assert(Carry.getBitWidth() == 1 && "Carry must be 1-bit"); return ::computeForAddCarry(LHS, RHS, Carry.Zero.getBoolValue(), Carry.One.getBoolValue()); @@ -475,7 +475,7 @@ KnownBits KnownBits::ashr(const KnownBits &LHS, const KnownBits &RHS, Known.Zero.setAllBits(); Known.One.setAllBits(); for (unsigned ShiftAmt = MinShiftAmount; ShiftAmt <= MaxShiftAmount; - ++ShiftAmt) { + ++ShiftAmt) { // Skip if the shift amount is impossible. if ((ShiftAmtZeroMask & ShiftAmt) != 0 || (ShiftAmtOneMask | ShiftAmt) != ShiftAmt) From 44c0b926ac73b00f6e5dd582c83e394ed860d0c0 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Fri, 17 May 2024 12:04:21 -0400 Subject: [PATCH 32/33] remove spurious reformat --- llvm/lib/Support/KnownBits.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Support/KnownBits.cpp b/llvm/lib/Support/KnownBits.cpp index 97b4498a6e0aa..d6012a8eea8a6 100644 --- a/llvm/lib/Support/KnownBits.cpp +++ b/llvm/lib/Support/KnownBits.cpp @@ -50,8 +50,8 @@ static KnownBits computeForAddCarry( KnownBits KnownBits::computeForAddCarry( const KnownBits &LHS, const KnownBits &RHS, const KnownBits &Carry) { assert(Carry.getBitWidth() == 1 && "Carry must be 1-bit"); - return ::computeForAddCarry(LHS, RHS, Carry.Zero.getBoolValue(), - Carry.One.getBoolValue()); + return ::computeForAddCarry( + LHS, RHS, Carry.Zero.getBoolValue(), Carry.One.getBoolValue()); } KnownBits KnownBits::computeForAddSub(bool Add, bool NSW, bool NUW, From 22b2aa9cdc21033341ffc11e0a6c4a31d8ad6684 Mon Sep 17 00:00:00 2001 From: changkhothuychung Date: Sat, 18 May 2024 18:07:14 -0400 Subject: [PATCH 33/33] disable optimality check --- llvm/unittests/Support/KnownBitsTest.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp index db1d35c03a958..824cf7501fd44 100644 --- a/llvm/unittests/Support/KnownBitsTest.cpp +++ b/llvm/unittests/Support/KnownBitsTest.cpp @@ -502,15 +502,17 @@ TEST(KnownBitsTest, BinaryExhaustive) { [](const APInt &N1, const APInt &N2) { return APIntOps::mulhu(N1, N2); }, /*CheckOptimality=*/false); - testBinaryOpExhaustive("avgFloorS", KnownBits::avgFloorS, - APIntOps::avgFloorS); + testBinaryOpExhaustive("avgFloorS", KnownBits::avgFloorS, APIntOps::avgFloorS, + false); - testBinaryOpExhaustive("avgFloorU", KnownBits::avgFloorU, - APIntOps::avgFloorU); + testBinaryOpExhaustive("avgFloorU", KnownBits::avgFloorU, APIntOps::avgFloorU, + false); - testBinaryOpExhaustive("avgCeilU", KnownBits::avgCeilU, APIntOps::avgCeilU); + testBinaryOpExhaustive("avgCeilU", KnownBits::avgCeilU, APIntOps::avgCeilU, + false); - testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS); + testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS, + false); } TEST(KnownBitsTest, UnaryExhaustive) {