[clang] [llvm] [APInt] Consistently use the terms pdep/pext instead of expandBits/compressBits (PR #205112)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 22 07:10:51 PDT 2026
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
More information about the cfe-commits
mailing list