@@ -60,14 +60,11 @@ AnalysisKey IR2VecVocabAnalysis::Key;
6060// Embedder and its subclasses
6161// ===----------------------------------------------------------------------===//
6262
63- #define RETURN_LOOKUP_IF (CONDITION, KEY_STR ) \
64- if (CONDITION) \
65- return lookupVocab(KEY_STR);
66-
6763Embedder::Embedder (const Function &F, const Vocab &Vocabulary,
6864 unsigned Dimension)
69- : F(F), Vocabulary(Vocabulary), Dimension(Dimension), OpcWeight(OpcWeight),
70- TypeWeight(TypeWeight), ArgWeight(ArgWeight) {}
65+ : F(F), Vocabulary(Vocabulary), Dimension(Dimension),
66+ OpcWeight(::OpcWeight), TypeWeight(::TypeWeight), ArgWeight(::ArgWeight) {
67+ }
7168
7269ErrorOr<std::unique_ptr<Embedder>> Embedder::create (IR2VecKind Mode,
7370 const Function &F,
@@ -77,7 +74,8 @@ ErrorOr<std::unique_ptr<Embedder>> Embedder::create(IR2VecKind Mode,
7774 case IR2VecKind::Symbolic:
7875 return std::make_unique<SymbolicEmbedder>(F, Vocabulary, Dimension);
7976 default :
80- return errc::invalid_argument;
77+ return errorToErrorCode (
78+ make_error<StringError>(" Unknown IR2VecKind" , errc::invalid_argument));
8179 }
8280}
8381
@@ -96,7 +94,7 @@ void Embedder::addScaledVector(Embedding &Dst, const Embedding &Src,
9694
9795// FIXME: Currently lookups are string based. Use numeric Keys
9896// for efficiency
99- Embedding Embedder::lookupVocab (const std::string &Key) {
97+ Embedding Embedder::lookupVocab (const std::string &Key) const {
10098 Embedding Vec (Dimension, 0 );
10199 // FIXME: Use zero vectors in vocab and assert failure for
102100 // unknown entities rather than silently returning zeroes here.
@@ -108,7 +106,11 @@ Embedding Embedder::lookupVocab(const std::string &Key) {
108106 return Vec;
109107}
110108
111- Embedding SymbolicEmbedder::getTypeEmbedding (const Type *Ty) {
109+ #define RETURN_LOOKUP_IF (CONDITION, KEY_STR ) \
110+ if (CONDITION) \
111+ return lookupVocab(KEY_STR);
112+
113+ Embedding SymbolicEmbedder::getTypeEmbedding (const Type *Ty) const {
112114 RETURN_LOOKUP_IF (Ty->isVoidTy (), " voidTy" );
113115 RETURN_LOOKUP_IF (Ty->isFloatingPointTy (), " floatTy" );
114116 RETURN_LOOKUP_IF (Ty->isIntegerTy (), " integerTy" );
@@ -124,13 +126,15 @@ Embedding SymbolicEmbedder::getTypeEmbedding(const Type *Ty) {
124126 return lookupVocab (" unknownTy" );
125127}
126128
127- Embedding SymbolicEmbedder::getOperandEmbedding (const Value *Op) {
129+ Embedding SymbolicEmbedder::getOperandEmbedding (const Value *Op) const {
128130 RETURN_LOOKUP_IF (isa<Function>(Op), " function" );
129131 RETURN_LOOKUP_IF (isa<PointerType>(Op->getType ()), " pointer" );
130132 RETURN_LOOKUP_IF (isa<Constant>(Op), " constant" );
131133 return lookupVocab (" variable" );
132134}
133135
136+ #undef RETURN_LOOKUP_IF
137+
134138void SymbolicEmbedder::computeEmbeddings () {
135139 if (F.isDeclaration ())
136140 return ;
@@ -147,17 +151,17 @@ Embedding SymbolicEmbedder::computeBB2Vec(const BasicBlock &BB) {
147151 for (const auto &I : BB) {
148152 Embedding InstVector (Dimension, 0 );
149153
150- auto OpcVec = lookupVocab (I.getOpcodeName ());
154+ const auto OpcVec = lookupVocab (I.getOpcodeName ());
151155 addScaledVector (InstVector, OpcVec, OpcWeight);
152156
153157 // FIXME: Currently lookups are string based. Use numeric Keys
154158 // for efficiency.
155- auto Type = I.getType ();
156- auto TypeVec = getTypeEmbedding (Type);
159+ const auto Type = I.getType ();
160+ const auto TypeVec = getTypeEmbedding (Type);
157161 addScaledVector (InstVector, TypeVec, TypeWeight);
158162
159163 for (const auto &Op : I.operands ()) {
160- auto OperandVec = getOperandEmbedding (Op.get ());
164+ const auto OperandVec = getOperandEmbedding (Op.get ());
161165 addScaledVector (InstVector, OperandVec, ArgWeight);
162166 }
163167 InstVecMap[&I] = InstVector;
@@ -184,8 +188,9 @@ unsigned IR2VecVocabResult::getDimension() const {
184188}
185189
186190// For now, assume vocabulary is stable unless explicitly invalidated.
187- bool IR2VecVocabResult::invalidate (Module &M, const PreservedAnalyses &PA,
188- ModuleAnalysisManager::Invalidator &Inv) {
191+ bool IR2VecVocabResult::invalidate (
192+ Module &M, const PreservedAnalyses &PA,
193+ ModuleAnalysisManager::Invalidator &Inv) const {
189194 auto PAC = PA.getChecker <IR2VecVocabAnalysis>();
190195 return !(PAC.preservedWhenStateless ());
191196}
0 commit comments