所有权:StringRef 是对字符串数据的引用,不拥有字符串的所有权。需要确保 StringRef 对象的生命周期,小于实际引用字符串的生命周期,否则会带来悬空引用。 大小:StringRef 只占用很小的内存,和实际字符串相比可以忽略不计。std::string 不仅包括了指针、长度,还包括了数据的内存管理信息,它在内部维护了一个动态分配的...
AI代码解释 staticstd::unique_ptr<llvm::ModuleSummaryIndex>llvm_load_summary(llvm:
for (GlobalVariable &GV : M.globals()) { StringRef oldName = GV.getName(); Hasher.update("kanxue_"); Hasher.update(oldName); Hasher.final(Hash); SmallString<32> HexString; llvm::MD5::stringifyResult(Hash, HexString); errs() <<...
/// Return a symbol reference to the printf function, inserting it into the/// module if necessary.staticFlatSymbolRefAttrgetOrInsertPrintf(PatternRewriter&rewriter,ModuleOp module,LLVM::LLVMDialect*llvmDialect){auto*context=module.getContext();if(module.lookupSymbol<LLVM::LLVMFuncOp>("printf"))...
classCheckerFrontendAction:publicASTFrontendAction{public:autoCreateASTConsumer(clang::CompilerInstance&CI,llvm::StringRefInFile)->std::unique_ptr<clang::ASTConsumer>override{returnstd::make_unique<CheckerASTConsumer>();}}; 现在,在主函数中,我们将从 命令行接受一个文件名,并使用我们的操作将其传递给 Cl...
return {LLVM_PLUGIN_API_VERSION, "HelloWorld", LLVM_VERSION_STRING, [](PassBuilder &PB) { PB.registerPipelineParsingCallback( [](StringRef Name, FunctionPassManager &FPM, ArrayRef<PassBuilder::PipelineElement>) { if (Name == "hello-world") { ...
std::string g_identifier_str; // Filled in if TOKEN_IDENTIFIER double g_number_val; // Filled in if TOKEN_NUMBER // 从标准输入解析一个Token并返回 int GetToken() { static int last_char = ' '; // 忽略空白字符 while (isspace(last_char)) { ...
GeneratorLLVM(std::string name, bool emitDebugInfo = false) { /* Module instantiation */ this->module = std::make_unique<llvm::Module>(llvm::StringRef(name),llvmContext); /* IRBuilder instantiation */ this->builder = std::make_unique<llvm::IRBuilder<>>(llvmContext); ...
argv, llvm::makeArrayRef(argv_, argc_), ArgAllocator); if(EC) { llvm::errs() <<"error: couldn't get arguments: "<< EC.message() <<'\n'; return1; } llvm::InitializeAllTargets(); std::stringProgName = argv[0]; std::pair<std::string,std::string> TargetAndMode = ...
builder.CreateGlobalStringPtr("hello world!\n"); std::vector<llvm::Type *> putsArgs; putsArgs.push_back(builder.getInt8Ty()->getPointerTo()); llvm::ArrayRef<llvm::Type*> argsRef(putsArgs); llvm::FunctionType *putsType = llvm::FunctionType::get(builder.getInt32Ty(), argsRef, ...