jjzjj

c++ - 如何获取LLVM全局变量常量值?

我正在尝试从全局变量中获取浮点值并将其设置为指令的操作数。这是我想做的:@a=privateconstantfloat0x3FB99999A0000000...%1=loadfloat,float*@a--->removed%3=fmulfast%1,%2--->%3=fmulfastfloat0x3FB99999A0000000,%2下面是我到目前为止尝试过的:for(autogv_iter=llvm_module.global_begin();gv_iter!=llvm_module.global_end();gv_iter++){llvm::GlobalVariable*gv=&

c++ - llvm 属性::NoUnwind

我在里面跑http://llvm.org/demo以下片段:classX{public:~X()__attribute((nothrow));};voida(X*p);voidnothr()throw();voidb(){try{Xx;a(&x);}catch(X*foo){nothr();}}我看到一些调用(例如,对func_llvm_eh_typeid_for)设置了Attribute::NoUnwind:CallInst*int32_71=CallInst::Create(func_llvm_eh_typeid_for,const_ptr_43,"",label_49);int3

c++ - LLVM异常处理错误

我正在尝试使用CLANG++作为前端和后端作为LLVM来编译C++代码。版本是3.0。似乎异常处理有问题。每当代码抛出异常时,程序都会终止并显示“抛出异常后终止”的消息。这是我尝试使用CLANG++的示例代码之一。structA{};structB:virtualA{};structC:virtualA{};structD:virtualA{};structE:privateB,publicC,privateD{};extern"C"voidabort();voidfne(E*e){throwe;}voidcheck(E*e){intcaught;caught=0;try{fne(e)

c++ - 如何处理 LLVM metadata.h 的变化

在LLVM3.6版中,他们对元数据类进行了大量更改,并将元数据与值分开。所以我以前基于3.5版本的代码不再起作用了。我在升级代码时遇到困难。谁能帮忙。例如:以前的代码:MDNode*record;Value*undVal=record->getOperand(1);Type*type_hint=undVal->getType();有谁知道如何升级此代码以使其与3.6兼容?我试过这个:MDNode*record;constMDOperand&undVal=record->getOperand(1);Type*type_hint=undVal->getType();但它不起作用。结果编译错

c++ - LLVM IR 中的一切都是指针吗?

我遍历程序的全局变量并对它们的类​​型感兴趣。对于测试,例如:#includeinti=0;intmain(){printf("lala%d\n",i);return0;}我得到的输出是:Globals:iType:14//14==>POINTERTYPEID!StackLock:Stack1FunctionArgument:i32*@i我的代码:for(Module::global_iteratorI=M.global_begin(),E=M.global_end();I!=E;++I){std::coutgetName().str()getType()->getTypeID()ge

c++ - llvm 解释器可以处理 c++ 异常吗?

我的源码是这样的:测试.cpp:voidfunc(){throw"abc";}intmain(){try{func();}catch(...){}}我用clang编译了代码clang-S-emit-llvmtest.cpp然后用lli执行它:lli-force-interpretertest.ll然后崩溃了:terminatingwithuncaughtexceptionoftypecharconst*我正在使用macbook(llvm3.6)。 最佳答案 答案是肯定的。用clang++而不是clang编译C++代码删除选项-for

c++ - 如何在 LLVM 中获取结构成员的值?

所以我用这个创建了一个结构类型:llvm::StructType*llvm_struct=llvm::StructType::create(llvm_context,struct_name);std::vectormembers;for(size_tj=0;j!=struct_data.members.size();j++){llvm::Type*member_type=/*getmembertype*/;members.push_back(member_type);}llvm_struct->setBody(members)我想知道如何访问结构中的成员。到目前为止,我已经尝试过使用g

c++ - 你如何将 c++filt 与 llvm-cov 报告一起使用?

我正在尝试将demangler与llvm-cov报告工具结合使用。以下是我正在运行的命令:llvm-covreport/path/to/executable-instr-profile/path/to/default.profdata/path/to/src/-Xdemanglerc++filt-Xdemangler-n我尝试重新排列选项并尝试使用“-Xdemangler=c++filt-Xdemangler=-n”代替,还使用​​--no-strip-underscore代替-n。它不会提示demangler,而如果我在命令语法上犯了一个明显的错误,它会告诉我,但输出不会被deman

c++ - 如何在 Clang 中启用内联函数的编译?

我正在使用Clang作为库来生成一些LLVMIR模块。这是模块的源代码:inlineintgetSevenInline(){return7;}intgetSeven(){returngetSevenInline();}我希望LLVMIR模块包含一个函数getSeven,它返回7。这是我的程序生成的LLVMIR:;ModuleID='./test.cpp'source_filename="./test.cpp"targetdatalayout="e-m:o-i64:64-f80:128-n8:16:32:64-S128"targettriple="x86_64-apple-macosx1

c++ - 如何将 LLVM 5.0 集成到 Visual Studio 2017 中?

来自llvm'ssite,我可以下载LLVM4.0的预构建二进制文件。在使用VisualStudio2017在Windows上安装预构建二进制文件后,我可以通过Platform在VC++和Clang4.0之间轻松切换编译器工具集选项。来自GettingStartedwiththeLLVMSystemusingMicrosoftVisualStudio,我还可以在Windows上构建LLVM工具链(产生许多可执行文件)。但是,我不知道如何制作预构建的安装程序并获得与提供的官方版本相同的效果。因为llvm'ssite没有为LLVM5.0(SVN)提供预构建的二进制文件,所以我必须自己做。是