llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-llvm-adt Author: Simon Pilgrim (RKSimon) <details> <summary>Changes</summary> After some bikeshedding in #<!-- -->200570 - we decided on the terms pdep/pext --- Full diff: https://github.com/llvm/llvm-project/pull/205112.diff 9 Files Affected: - (modified) clang/lib/AST/ByteCode/InterpBuiltin.cpp (+2-2) - (modified) clang/lib/AST/ExprConstant.cpp (+4-4) - (modified) llvm/include/llvm/ADT/APInt.h (+6-6) - (modified) llvm/lib/Analysis/ConstantFolding.cpp (+2-2) - (modified) llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (+2-2) - (modified) llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (+2-2) - (modified) llvm/lib/Support/APInt.cpp (+2-2) - (modified) llvm/unittests/ADT/APIntTest.cpp (+23-38) - (modified) llvm/unittests/Support/KnownBitsTest.cpp (+2-2) ``````````diff diff --git a/clang/lib/AST/ByteCode/InterpBuiltin.cpp b/clang/lib/AST/ByteCode/InterpBuiltin.cpp index ab94bb96829ac..470ad9c338fb9 100644 --- a/clang/lib/AST/ByteCode/InterpBuiltin.cpp +++ b/clang/lib/AST/ByteCode/InterpBuiltin.cpp @@ -5178,13 +5178,13 @@ bool InterpretBuiltin(InterpState &S, CodePtr OpPC, const CallExpr *Call, case clang::X86::BI__builtin_ia32_pdep_di: case Builtin::BI__builtin_elementwise_pdep: return interp__builtin_elementwise_int_binop(S, OpPC, Call, - llvm::APIntOps::expandBits); + llvm::APIntOps::pdep); case clang::X86::BI__builtin_ia32_pext_si: case clang::X86::BI__builtin_ia32_pext_di: case Builtin::BI__builtin_elementwise_pext: return interp__builtin_elementwise_int_binop(S, OpPC, Call, - llvm::APIntOps::compressBits); + llvm::APIntOps::pext); case clang::X86::BI__builtin_ia32_addcarryx_u32: case clang::X86::BI__builtin_ia32_addcarryx_u64: diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 220a7a22c6992..de2bbdfc88fe4 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -14163,9 +14163,9 @@ bool VectorExprEvaluator::VisitCallExpr(const CallExpr *E) { case Builtin::BI__builtin_elementwise_clmul: return EvaluateBinOpExpr(llvm::APIntOps::clmul); case Builtin::BI__builtin_elementwise_pext: - return EvaluateBinOpExpr(llvm::APIntOps::compressBits); + return EvaluateBinOpExpr(llvm::APIntOps::pext); case Builtin::BI__builtin_elementwise_pdep: - return EvaluateBinOpExpr(llvm::APIntOps::expandBits); + return EvaluateBinOpExpr(llvm::APIntOps::pdep); case Builtin::BI__builtin_elementwise_fshl: case Builtin::BI__builtin_elementwise_fshr: { APValue SourceHi, SourceLo, SourceShift; @@ -17986,7 +17986,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, if (!EvaluateInteger(E->getArg(0), Val, Info) || !EvaluateInteger(E->getArg(1), Msk, Info)) return false; - return Success(llvm::APIntOps::expandBits(Val, Msk), E); + return Success(llvm::APIntOps::pdep(Val, Msk), E); } case clang::X86::BI__builtin_ia32_pext_si: @@ -17996,7 +17996,7 @@ bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, if (!EvaluateInteger(E->getArg(0), Val, Info) || !EvaluateInteger(E->getArg(1), Msk, Info)) return false; - return Success(llvm::APIntOps::compressBits(Val, Msk), E); + return Success(llvm::APIntOps::pext(Val, Msk), E); } case X86::BI__builtin_ia32_ptestz128: case X86::BI__builtin_ia32_ptestz256: diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h index 99eb758cc7a6f..026efbe866a93 100644 --- a/llvm/include/llvm/ADT/APInt.h +++ b/llvm/include/llvm/ADT/APInt.h @@ -2495,9 +2495,9 @@ LLVM_ABI APInt clmulh(const APInt &LHS, const APInt &RHS); /// and packs them contiguously into the least significant bits of the result. /// /// Examples: -/// (1) compressBits(i8 0b1010'1010, i8 0b1100'1100) = 0b0000'1010 -/// (2) compressBits(i8 0b1111'1111, i8 0b1010'1010) = 0b0000'1111 -LLVM_ABI APInt compressBits(const APInt &Val, const APInt &Mask); +/// (1) pext(i8 0b1010'1010, i8 0b1100'1100) = 0b0000'1010 +/// (2) pext(i8 0b1111'1111, i8 0b1010'1010) = 0b0000'1111 +LLVM_ABI APInt pext(const APInt &Val, const APInt &Mask); /// Perform an "expand" operation, also known as pdep or bdep. /// @@ -2505,9 +2505,9 @@ LLVM_ABI APInt compressBits(const APInt &Val, const APInt &Mask); /// has a 1-bit, and zeros the remaining bits. /// /// Examples: -/// (1) expandBits(i8 0b0000'1010, i8 0b1100'1100) = 0b1000'1000 -/// (2) expandBits(i8 0b0000'1111, i8 0b1010'1010) = 0b1010'1010 -LLVM_ABI APInt expandBits(const APInt &Val, const APInt &Mask); +/// (1) pdep(i8 0b0000'1010, i8 0b1100'1100) = 0b1000'1000 +/// (2) pdep(i8 0b0000'1111, i8 0b1010'1010) = 0b1010'1010 +LLVM_ABI APInt pdep(const APInt &Val, const APInt &Mask); } // namespace APIntOps diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index c7210b2e0c2d1..dfbb9f8809017 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -3911,11 +3911,11 @@ static Constant *ConstantFoldIntrinsicCall2(Intrinsic::ID IntrinsicID, Type *Ty, case Intrinsic::pdep: if (!C0 || !C1) return Constant::getNullValue(Ty); - return ConstantInt::get(Ty, APIntOps::expandBits(*C0, *C1)); + return ConstantInt::get(Ty, APIntOps::pdep(*C0, *C1)); case Intrinsic::pext: if (!C0 || !C1) return Constant::getNullValue(Ty); - return ConstantInt::get(Ty, APIntOps::compressBits(*C0, *C1)); + return ConstantInt::get(Ty, APIntOps::pext(*C0, *C1)); case Intrinsic::amdgcn_wave_reduce_umin: case Intrinsic::amdgcn_wave_reduce_umax: case Intrinsic::amdgcn_wave_reduce_max: diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 4fdef7d4afb5d..2bfe0cdd85433 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -12230,7 +12230,7 @@ SDValue DAGCombiner::visitPEXT(SDNode *N) { // pext(x, -1) -> x (all bits selected, packed into low positions = x) if (isAllOnesOrAllOnesSplat(N1)) return N0; - // fold pext(c1, c2) -> compressBits(c1, c2) + // fold pext(c1, c2) -> c3 if (SDValue C = DAG.FoldConstantArithmetic(ISD::PEXT, DL, VT, {N0, N1})) return C; return SDValue(); @@ -12250,7 +12250,7 @@ SDValue DAGCombiner::visitPDEP(SDNode *N) { if (isAllOnesOrAllOnesSplat(N1)) return N0; - // fold pdep(c1, c2) -> expandBits(c1, c2) + // fold pdep(c1, c2) -> c3 if (SDValue C = DAG.FoldConstantArithmetic(ISD::PDEP, DL, VT, {N0, N1})) return C; diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 76556531ada42..3c9000da9f0ae 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -7526,9 +7526,9 @@ static std::optional<APInt> FoldValue(unsigned Opcode, const APInt &C1, case ISD::CLMULH: return APIntOps::clmulh(C1, C2); case ISD::PEXT: - return APIntOps::compressBits(C1, C2); + return APIntOps::pext(C1, C2); case ISD::PDEP: - return APIntOps::expandBits(C1, C2); + return APIntOps::pdep(C1, C2); } return std::nullopt; } diff --git a/llvm/lib/Support/APInt.cpp b/llvm/lib/Support/APInt.cpp index 221d642ae8539..c5766a2613e0c 100644 --- a/llvm/lib/Support/APInt.cpp +++ b/llvm/lib/Support/APInt.cpp @@ -3239,7 +3239,7 @@ APInt llvm::APIntOps::clmulh(const APInt &LHS, const APInt &RHS) { return clmulr(LHS, RHS).lshr(1); } -APInt llvm::APIntOps::compressBits(const APInt &Val, const APInt &Mask) { +APInt llvm::APIntOps::pext(const APInt &Val, const APInt &Mask) { unsigned BW = Val.getBitWidth(); assert(BW == Mask.getBitWidth() && "Operand mismatch"); APInt Result = APInt::getZero(BW); @@ -3249,7 +3249,7 @@ APInt llvm::APIntOps::compressBits(const APInt &Val, const APInt &Mask) { return Result; } -APInt llvm::APIntOps::expandBits(const APInt &Val, const APInt &Mask) { +APInt llvm::APIntOps::pdep(const APInt &Val, const APInt &Mask) { unsigned BW = Val.getBitWidth(); assert(BW == Mask.getBitWidth() && "Operand mismatch"); APInt Result = APInt::getZero(BW); diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp index 39005969c5bad..0eea32480d0bf 100644 --- a/llvm/unittests/ADT/APIntTest.cpp +++ b/llvm/unittests/ADT/APIntTest.cpp @@ -4032,53 +4032,38 @@ TEST(APIntTest, sqrtFloor) { } } -TEST(APIntTest, compressBits) { - EXPECT_EQ(APIntOps::compressBits(APInt(8, 0), APInt(8, 0xAAU)).getZExtValue(), +TEST(APIntTest, pext) { + EXPECT_EQ(APIntOps::pext(APInt(8, 0), APInt(8, 0xAAU)).getZExtValue(), 0U); + EXPECT_EQ(APIntOps::pext(APInt(8, 0x55U), APInt(8, 0xAAU)).getZExtValue(), 0U); - EXPECT_EQ( - APIntOps::compressBits(APInt(8, 0x55U), APInt(8, 0xAAU)).getZExtValue(), - 0U); - EXPECT_EQ( - APIntOps::compressBits(APInt(8, 0xAAU), APInt(8, 0xAAU)).getZExtValue(), - 15U); - EXPECT_EQ( - APIntOps::compressBits(APInt(8, 0xFFU), APInt(8, 0xAAU)).getZExtValue(), - 15U); - EXPECT_EQ(APIntOps::compressBits(APInt(8, 0xFFU), APInt(8, 0)).getZExtValue(), - 0U); - EXPECT_EQ( - APIntOps::compressBits(APInt(4, 0xFU), APInt(4, 0xAU)).getZExtValue(), - 3U); - EXPECT_EQ( - APIntOps::compressBits(APInt(4, 0xAU), APInt(4, 0xAU)).getZExtValue(), - 3U); - EXPECT_EQ( - APIntOps::compressBits(APInt(4, 0x5U), APInt(4, 0xAU)).getZExtValue(), - 0U); -} - -TEST(APIntTest, expandBits) { - EXPECT_EQ(APIntOps::expandBits(APInt(8, 0), APInt(8, 0xAAU)).getZExtValue(), - 0U); - EXPECT_EQ(APIntOps::expandBits(APInt(8, 15U), APInt(8, 0xAAU)).getZExtValue(), + EXPECT_EQ(APIntOps::pext(APInt(8, 0xAAU), APInt(8, 0xAAU)).getZExtValue(), + 15U); + EXPECT_EQ(APIntOps::pext(APInt(8, 0xFFU), APInt(8, 0xAAU)).getZExtValue(), + 15U); + EXPECT_EQ(APIntOps::pext(APInt(8, 0xFFU), APInt(8, 0)).getZExtValue(), 0U); + EXPECT_EQ(APIntOps::pext(APInt(4, 0xFU), APInt(4, 0xAU)).getZExtValue(), 3U); + EXPECT_EQ(APIntOps::pext(APInt(4, 0xAU), APInt(4, 0xAU)).getZExtValue(), 3U); + EXPECT_EQ(APIntOps::pext(APInt(4, 0x5U), APInt(4, 0xAU)).getZExtValue(), 0U); +} + +TEST(APIntTest, pdep) { + EXPECT_EQ(APIntOps::pdep(APInt(8, 0), APInt(8, 0xAAU)).getZExtValue(), 0U); + EXPECT_EQ(APIntOps::pdep(APInt(8, 15U), APInt(8, 0xAAU)).getZExtValue(), 0xAAU); - EXPECT_EQ(APIntOps::expandBits(APInt(8, 0xFFU), APInt(8, 0)).getZExtValue(), - 0U); - EXPECT_EQ(APIntOps::expandBits(APInt(4, 3U), APInt(4, 0xAU)).getZExtValue(), - 0xAU); - EXPECT_EQ(APIntOps::expandBits(APInt(4, 1U), APInt(4, 0xAU)).getZExtValue(), - 2U); + EXPECT_EQ(APIntOps::pdep(APInt(8, 0xFFU), APInt(8, 0)).getZExtValue(), 0U); + EXPECT_EQ(APIntOps::pdep(APInt(4, 3U), APInt(4, 0xAU)).getZExtValue(), 0xAU); + EXPECT_EQ(APIntOps::pdep(APInt(4, 1U), APInt(4, 0xAU)).getZExtValue(), 2U); APInt X(8, 0b10110100U); APInt M(8, 0b11001110U); - EXPECT_EQ(APIntOps::expandBits(APIntOps::compressBits(X, M), M), X & M); + EXPECT_EQ(APIntOps::pdep(APIntOps::pext(X, M), M), X & M); } -TEST(APIntTest, compressExpandBitsExhaustive) { +TEST(APIntTest, pext_pdep_exhaustive) { for (unsigned V = 0; V < 256; ++V) { for (unsigned Mask = 0; Mask < 256; ++Mask) { APInt Val(8, V), APMask(8, Mask); - APInt Compressed = APIntOps::compressBits(Val, APMask); - APInt RoundTrip = APIntOps::expandBits(Compressed, APMask); + APInt Compressed = APIntOps::pext(Val, APMask); + APInt RoundTrip = APIntOps::pdep(Compressed, APMask); EXPECT_EQ(RoundTrip, Val & APMask); } } diff --git a/llvm/unittests/Support/KnownBitsTest.cpp b/llvm/unittests/Support/KnownBitsTest.cpp index f6f5505c67e68..d4b8dff54f3d6 100644 --- a/llvm/unittests/Support/KnownBitsTest.cpp +++ b/llvm/unittests/Support/KnownBitsTest.cpp @@ -654,8 +654,8 @@ TEST(KnownBitsTest, BinaryExhaustive) { testBinaryOpExhaustive("avgCeilS", KnownBits::avgCeilS, APIntOps::avgCeilS); testBinaryOpExhaustive("clmul", KnownBits::clmul, APIntOps::clmul); - testBinaryOpExhaustive("pext", KnownBits::pext, APIntOps::compressBits); - testBinaryOpExhaustive("pdep", KnownBits::pdep, APIntOps::expandBits); + testBinaryOpExhaustive("pext", KnownBits::pext, APIntOps::pext); + testBinaryOpExhaustive("pdep", KnownBits::pdep, APIntOps::pdep); } TEST(KnownBitsTest, UnaryExhaustive) { `````````` </details> https://github.com/llvm/llvm-project/pull/205112 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
