Skip to content

Commit

Permalink
Reuse getDemangledName in core.cpp
Browse files Browse the repository at this point in the history
Also fix a memory leak caused by not freeing the `__cxx::demangle`
return pointer
  • Loading branch information
necessary129 committed Jul 17, 2023
1 parent 721e299 commit a12c85a
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
11 changes: 4 additions & 7 deletions Manylinux2014_Compliant_Source/pkg/IR2Vec/core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -239,10 +239,10 @@ PyObject *IR2Vec_generateEmbeddings(PyObject *self, PyObject *args) {
// containers

vector<double> temp2;
const char *readable_name = "";
char *readable_name;
string demangledName;
size_t sz = 17;
int status;
int status = 0;
// coying llvm samll map vector data into c++ map

// for InstVecMap
Expand All @@ -260,6 +260,7 @@ PyObject *IR2Vec_generateEmbeddings(PyObject *self, PyObject *args) {
readable_name =
__cxxabiv1::__cxa_demangle(instName.c_str(), 0, &sz, &status);
demangledName = status == 0 ? std::string(readable_name) : instName;
free(readable_name);
InstVecMap[demangledName] = temp2;
} else // if Value does not has a name
{
Expand All @@ -286,12 +287,8 @@ PyObject *IR2Vec_generateEmbeddings(PyObject *self, PyObject *args) {
for (auto &Vec_it : Func_it.second)
temp2.push_back(Vec_it);

auto temp1 = Func_it.first->getName(); // getName returns StringRef
// apply __cxx::demangle just to be cautious
auto funcName = temp1.str();
readable_name =
__cxxabiv1::__cxa_demangle(funcName.c_str(), 0, &sz, &status);
demangledName = status == 0 ? std::string(readable_name) : funcName;
demangledName = IR2Vec::getDemagledName(Func_it.first);
FuncVecMap[demangledName] = temp2;

temp2.clear();
Expand Down
2 changes: 1 addition & 1 deletion src/include/utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ std::unique_ptr<llvm::Module> getLLVMIR();
void collectDataFromVocab(std::map<std::string, Vector> &opcMap);
void scaleVector(Vector &vec, float factor);
// newly added
auto getDemagledName(llvm::Function *function);
std::string getDemagledName(const llvm::Function *function);
char *getActualName(llvm::Function *function);
std::string updatedRes(IR2Vec::Vector tmp, llvm::Function *f, llvm::Module *M);
} // namespace IR2Vec
Expand Down
7 changes: 5 additions & 2 deletions src/utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "utils.h"
#include "IR2Vec.h"
#include <fstream>
#include <string>

using namespace llvm;
using namespace IR2Vec;
Expand Down Expand Up @@ -69,13 +70,15 @@ void IR2Vec::scaleVector(Vector &vec, float factor) {
}

// Function to get demangled function name
auto IR2Vec::getDemagledName(llvm::Function *function) {
std::string IR2Vec::getDemagledName(const llvm::Function *function) {
auto functionName = function->getName().str();
std::size_t sz = 17;
int status;
char *const readable_name =
__cxa_demangle(functionName.c_str(), 0, &sz, &status);
auto demangledName = status == 0 ? std::string(readable_name) : functionName;
auto demangledName =
status == 0 ? std::string(readable_name) : std::string(functionName);
free(readable_name);
return demangledName;
}

Expand Down

0 comments on commit a12c85a

Please sign in to comment.