问题标签 [gimple]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
10907 浏览

c - 玩 gcc 的中间 GIMPLE 格式

根据这篇文章gcc 在生成代码之前使用了几种中间格式。我读到 GIMPLE 格式使用三个地址码,这似乎是最容易使用的中间语言。但我需要更多细节,因为我需要构建一个可以获取中间代码并在生成最终代码之前向其中插入一些代码的工具。

为此,我首先需要知道如何生成 GIMPLE 格式代码并将其保存在文件中。所以我正在寻找一些文件和例子。另外,如果有人做过这样的事情,我能知道这个任务的复杂性,即在中间代码中插入一些代码吗?

0 投票
1 回答
168 浏览

c++ - 无法从 gcc 的 -fdump-tree-gimple 中找出 /[ex] 运算符

使用 -fdump-tree-gimple 选项(GCC 4.6.1)编译 C++ 时,我得到的代码中包含以下函数:

您可以通过制作一个使用std::vector<int>. 无论如何,我不明白的代码部分是D.8487 = D.8486 /[ex] 4;. 我查看了 的源代码/usr/include/c++/4.6.1/std_vector.h,它的析构函数是一个调用_M_deallocate. 有谁知道运营商/[ex]代表什么?到目前为止,我唯一注意到的是 RHS 操作数是向量参数化的类型的大小。

0 投票
2 回答
239 浏览

c - 为什么小于表达式转换为小于或等于 gcc 中的表达式

我正在研究代码优化并通过 gcc 内部。我在我的程序中写了一个简单的表达式,我检查了那个表达式的 gimple 表示,我不知道为什么 gcc 会这样做。说我有一个表达:

然后在 gimple 表示中它将被转换为

我不知道为什么 gcc 会这样做。是某种优化吗,如果是,那么谁能告诉我它如何优化我们的程序?

0 投票
2 回答
1742 浏览

gcc - GCC可以编译GIMPLE吗?

GIMPLE 是 GCC 系统的内部表示之一。可以通过 -fdump-* 编译器参数转储 GIMPLE 或任何其他内部表示。但是有没有办法编译转储的 GIMPLE 或任何其他表示?GCC 似乎没有 GIMPLE 前端。我想做的是转储、分析、修改然后重新编译转储的 GIMPLE 以执行各种代码检测。

PS 我了解 GCC 插件,也了解 LLVM/Clang,所以请尝试回答确切的问题,不要建议替代解决方案。谢谢!

0 投票
1 回答
332 浏览

gcc - How to register a GIMPLE_PASS?

I'm trying to do a simple plugin example like this:

But GIMPLE_PASS is not a predefined event in gcc-plugin.h and I know I have to do something with PLUGIN_PASS_MANAGER_SETUP and struct pass_data in tree-pass.h, but I don't know exactly how and I didn't find any examples.

Somebody would show me how? iThanks.

0 投票
1 回答
725 浏览

c++ - 在 gimple 中插入函数调用

我在弄清楚如何做下一件事时遇到了问题。

我有以下代码:

测试.cpp

我想把它变成下一个:

带有 gcc 插件。

在我的插件中不起作用的代码是这个:

然后,当我使用插件编译 test.cpp 时,出现下一条错误消息:

/tmp/cc2VRszt.o: 在函数main': test.cpp:(.text+0x60): Undefined reference to函数中'

任何人都可以帮助我吗?

0 投票
2 回答
1595 浏览

gcc - 如何转储所有 Gimple 树?

我需要转储所有 Gimple 树(-fdump-tree-whatever 之类的)。我为此创建了一个插件,但我不确定我应该如何访问 Gimple 树。插件与 GIMPLE_PASS 挂钩:

我尝试使用 gsi (gimple_stmt_iterator) 迭代基本块,但是,我的转储不完整。

你能帮我吗,我应该如何访问 Gimple 树,以便倾倒每一棵树?

0 投票
0 回答
974 浏览

c++ - 如何将C/C++代码编译成C/C++代码编写的三地址代码?

我想把一个C/C++代码编译成一个三地址代码,这也是合法的C/C++代码。

我正在做一个实验,我要分析三地址代码,并在生成的三地址代码中添加一些C代码。修改后的三地址代码将被编译成可执行文件。

我用 gcc 尝试过 gimple,但 gimple 只是一个类似 C 的演示文稿。有什么好用的工具吗?谢谢~

0 投票
2 回答
886 浏览

c++ - 使用 GCC 插件打印调用的函数名

我需要打印程序的调用函数的名称,gcc plugins 为此我创建了一个将在之后调用的传递ssa pass,我已经启动了插件,我可以循环它的语句,使用gimple_stmt_iterator

如何使用其 gimple 节点打印被调用函数的名称?我还可以打印其他信息,例如调用它的行号、调用它的函数的名称等吗?

0 投票
2 回答
197 浏览

gcc - 获取使用gcc Plugin编译的c++文件的函数个数

我正在使用 GCC 插件创建一个通行证,这是我的通行证:

所以 toto() 为每个定义的函数执行toto(),如果没有,是否可以在执行时获取所有函数的数量,我怎样才能对整个文件只执行一次传递,并使用 FOR_EACH_FUNCTION() 循环遍历所有函数?