草庐IT

llvm插件

全部标签

c++ - 为什么 clang/llvm 不对此进行优化?

使用clang3.9编译此代码时:constexprboolis_small(longlongv){returnv它生成的程序集等同于intf(inta){returna;},因为它确定is_small(a)将始终为真,因为a是一个int,这(在我的平台)总是小于0x4000000000000000。当我将is_small更改为:constexprboolis_small(longlongv){returnv>=-0x4000000000000000;}正如预期的那样,发生了完全相同的情况。但是,当我更改is_small以检查这两个条件时:constexprboolis_small(l

c++ - LLVM 在运行时获取声明函数的参数值

我正在编写一个LLVMpass,它需要获取传递给声明函数的值并将其打印出来。请注意声明的函数在LLVMIR中被调用。我已经编写了一个模块传递来迭代程序中的所有指令。获取指令中被调用函数参数的片段如下:for(auto&B:F){for(auto&I:B){if(auto*InvokeI=dyn_cast(&I)){if(InvokeI->getCalledFunction()->getName().str()=="function_name"){errs()getOperand(0))getOperand(1))getOperand(2))但是,如果被调用函数的LLVMIR看起来像这样

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++ - 在 Lighttpd 中开发插件

我正在使用Web服务器Lighttpd,而且我对它完全陌生。我设法在CentOS6.2中安装并开始运行。我现在想使用Cpp为lighttpd制作一个插件,但我根本找不到任何有用的教程,现在完全糊涂了。谁能帮我提供清楚的信息? 最佳答案 您不会用C++编写插件,您将直接使用C。没有任何关于构建HelloWorld应用程序的教程,但有一些文档。http://redmine.lighttpd.net/projects/lighttpd/wiki#Developing-Information是开始的地方。按顺序阅读那里的链接,尤其是http

c++ - Notepad++ SourceCookifier 插件在大型 C++ header 上非常慢

我喜欢在Notepad++中浏览我的C++项目。我使用SourceCookifier插件以便轻松地在大文件的定义之间跳转。但是,如果我加载一个大的C++头文件(大约30.000行),里面有很多#define和typedef声明,它似乎挂起并需要很长时间加载时间。有谁知道是否可以设置任何选项以使其更快,或者这个插件通常不会加载这么多定义? 最佳答案 您可以通过将项目文件夹放入SourceCookifier面板来加速一切,同时(这是重要但记录不完整的部分)按下修改键(shift、ctrl或alt)。..forimportingINCLU

c++ - 插件如何调整它的窗口大小

当我使用以下html加载pdf时,pdf插件似乎会调整其窗口的大小以适应pdf文件的完整长度。我想知道插件是如何做到这一点的?Testhtmlobjecttaghtml{height:100%;}body{margin:0;padding:0;height:100%;}.my_style{width:100%;min-height:100%;}据我所知,提供给插件的窗口大小是在html对象标记中定义的。谢谢,基督徒 最佳答案 这纯粹是猜测,因为我没有所述插件的来源,但如果我试图解决这个问题,我会简单地获取对我插件的对象标签的引用并设

vscode中 rust-analyzer插件报错 failed to find any projects in [AbsPathBuf 或者FetchWorkspaceError的解决办法

背景一般来说,如果vscode打开的是rust项目的根目录(即目录下有Cargo.toml和src/文件),rust-analyzer插件可以识别到项目。而如果rust项目只是vscode资源管理器打开的子目录,则有时会出现failedtofindanyprojectsin[AbsPathBufxxx或者FetchWorkspaceError的报错,rust-analyzer也无法正常运行,如下图所示:解决办法vscode侧边栏打开rust-analyzer插件,进入扩展设置也可以ctrl+shift+P进入“首选项:工作区设置”,在上面的输入栏里输入@ext:rust-lang.rust-a

c++ - C++中插件的“Best fit”动态类型匹配

我有一个架构,其中几乎所有内容都是一个插件。该体系结构是图形用户界面的基础,其中每个插件都由“表面”(即用户可以通过其与插件进行交互的UI控件)表示。这些表面也是插件。每当添加新插件时,瘦主机都会自动确定哪个可用表面最适合它。这个问题的主题是如何在C++中实现动态类型匹配。如您所见,目前,该体系结构是使用C#实现的,很大程度上依赖于反射。但是,我现在正在为C++重新设计整个过程,但是由于C++没有反射(并且由于我是C++的新手),我需要一些有关如何最好地复制没有此功能的信息。这是目前在C#(简化和伪)中的处理方式:所有插件都是Plugin类的后代。每种表面类型均带有“目标插件类型”标记