aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorS. VenkataKeerthy <31350914+svkeerthy@users.noreply.github.com>2025-07-17 13:40:51 -0700
committerGitHub <noreply@github.com>2025-07-17 13:40:51 -0700
commit61a45d20cfe7f93ec1b73dc2dd776f493af2a7cc (patch)
tree8e9d81b161d3af778b2df458deb6f63b17a660a0 /llvm/lib
parentaea2d5396187cf19447cc80716fd483dd4b634dc (diff)
downloadllvm-61a45d20cfe7f93ec1b73dc2dd776f493af2a7cc.zip
llvm-61a45d20cfe7f93ec1b73dc2dd776f493af2a7cc.tar.gz
llvm-61a45d20cfe7f93ec1b73dc2dd776f493af2a7cc.tar.bz2
[IR2Vec][NFC] Add helper methods for numeric ID mapping in Vocabulary (#149212)
Add helper methods to IR2Vec's Vocabulary class for numeric ID mapping and vocabulary size calculation. These APIs will be useful in triplet generation for `llvm-ir2vec` tool (See #149214). (Tracking issue - #141817)
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Analysis/IR2Vec.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/IR2Vec.cpp b/llvm/lib/Analysis/IR2Vec.cpp
index 898bf5b..95f30fd 100644
--- a/llvm/lib/Analysis/IR2Vec.cpp
+++ b/llvm/lib/Analysis/IR2Vec.cpp
@@ -215,7 +215,7 @@ Vocabulary::Vocabulary(VocabVector &&Vocab)
: Vocab(std::move(Vocab)), Valid(true) {}
bool Vocabulary::isValid() const {
- return Vocab.size() == (MaxOpcodes + MaxTypeIDs + MaxOperandKinds) && Valid;
+ return Vocab.size() == Vocabulary::expectedSize() && Valid;
}
size_t Vocabulary::size() const {
@@ -324,8 +324,24 @@ Vocabulary::OperandKind Vocabulary::getOperandKind(const Value *Op) {
return OperandKind::VariableID;
}
+unsigned Vocabulary::getNumericID(unsigned Opcode) {
+ assert(Opcode >= 1 && Opcode <= MaxOpcodes && "Invalid opcode");
+ return Opcode - 1; // Convert to zero-based index
+}
+
+unsigned Vocabulary::getNumericID(Type::TypeID TypeID) {
+ assert(static_cast<unsigned>(TypeID) < MaxTypeIDs && "Invalid type ID");
+ return MaxOpcodes + static_cast<unsigned>(TypeID);
+}
+
+unsigned Vocabulary::getNumericID(const Value *Op) {
+ unsigned Index = static_cast<unsigned>(getOperandKind(Op));
+ assert(Index < MaxOperandKinds && "Invalid OperandKind");
+ return MaxOpcodes + MaxTypeIDs + Index;
+}
+
StringRef Vocabulary::getStringKey(unsigned Pos) {
- assert(Pos < MaxOpcodes + MaxTypeIDs + MaxOperandKinds &&
+ assert(Pos < Vocabulary::expectedSize() &&
"Position out of bounds in vocabulary");
// Opcode
if (Pos < MaxOpcodes)