问题标签 [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 投票
2 回答
315 浏览

c++ - 使用 gcc 插件修改变量声明的顺序

我知道这很难做到,我应该避免这样做,但我有我的理由。我想在编译时修改一些字段声明的顺序,例如:

必须转向:

如果我选择交换 and 的顺序ic我想知道如何更改location具有它的字段声明的tree

任何人都知道我该怎么做?谢谢 !

我使用g++ 4.9.2版本的插件

0 投票
1 回答
294 浏览

c++ - 在 gcc 5.1.0 中注册一个 GIMPLE pass

嗨,我一直在为 gcc 4.8 和 4.9 做 gcc 插件,但我在 gcc 5.1.0 中遇到了问题。问题是我无法在这个新的 gcc 版本中注册 GIMPLE 通行证。

这是一个示例插件代码:

使用此插件编译某些文件时,应打印一些 B 和 C,但没有打印任何内容。

与 gcc 4.9 的不同之处在于“pass_data”类型比以前少了两个字段(has_gate 和 has_execute)。其他一切似乎都和以前一样。如果有人知道我做错了什么或我错过了什么,我将不胜感激。

0 投票
1 回答
84 浏览

gcc - 如何在 gcc 中间表示中保存树?可能吗?

我想以二进制形式将一棵树(特别是树的类型)保存在一个文件中,并且我需要在其他编译单元中加载这棵树。例如:

我有一个带有 2 个功能的 main.c:

我想保存结构的类型(myTypeStruct)并将其加载到另一个涉及 test.c 的编译单元中:

使用 gcc 插件,我想加载类型并构建该类型的变量以将 test.c 转换为:

我知道是指向tree_node的指针,而 tree_node 是结构的联合。问题是一棵树与它有关系,并且有一系列难以理解的结构。在构建特定类型的变量时,我需要知道哪些数据需要树。

PD:关于 LTO 如何做这样的事情的文档不足。PD2:对不起我的英语

0 投票
1 回答
1577 浏览

gcc - 如何分析 GCC 内部表示,如 GIMPLE、RTL

我使用命令生成了转储输出文件-fdump-tree-all-fdump-rtl-all并且得到了很多转储文件。我读过 GIMPLE 中的代码是伪 C 语法,而 RTL 转储文件级别太低而无法理解。有什么方法可以理解 GIMPLE 和 RTL 转储文件?任何可以将其转换为 C 代码或有用的软件?有什么教程可以学习理解吗?谢谢

0 投票
1 回答
145 浏览

c - GCC SSA 格式中变量的含义

我想看看 GCC 使用的 SSA 格式,所以我尝试了以下简单的测试程序:

gcc -fdump-tree-all a.c除其他外,编译并获得a.c.016t.ssa了以下内容:

大部分内容都很清楚,但这是什么argc_5(D)意思?有什么关系int D.2186吗?

0 投票
1 回答
351 浏览

gcc - GCC 插件 API : Gimple pass

我一直在寻找有关编写 GCC 插件的在线资源。我目前正在使用 GCC 版本 7.3.0。我尝试编写一个简单的插件,其中包含一个将被调用的回调PLUGIN_FINISH_TYPE。它工作得很好。

接下来,我正在尝试编写一个使用类似于此处列出的示例的“gimple pass”的插件。然而,struct gimple_opt_pass似乎并不存在。

我试图寻找声明这个结构的头文件。我发现 tree-pass.h 有以下代码块:-

  1. 我如何从我的插件中看到这个?我似乎无法以上面链接中描述的方式使用它。
  2. 使用当前的 GCC 插件 API,是否可以编写纯 C 插件(而不是必须使用 C++)。
0 投票
0 回答
52 浏览

gcc - 如何在 gimple 中找到自由操作?

我现在正在修改 GCC 前端。
我想用 FOR_EACH_BB_FN 检查 GIMPLE 文件并检测“空闲”操作,该操作用于释放 C 中的内存分配。
这是我的代码:

然后我如何检查 stmt 是否是“免费”操作?

0 投票
0 回答
57 浏览

gcc - 查找函数调用 gimple 语句的参数

gimple_call_num_args(stmt)在我的陈述中给出 2 但get_name(gimple_call_arg(stmt,1))为空。关于如何获得论点的任何想法?

0 投票
1 回答
103 浏览

c - 给定一个有两个参数的 GIMPLE Call 语句,我想添加第三个参数,如何?

我必须做一些 GIMPLE_CALL 语句操作。这个 GIMPLE_CALL 将有两个参数,例如:foo(a,b)。我的目标是将此方法更改为具有三个参数的不同方法,例如 zoo(a,b,c)

在我目前的方法中,GCC 在编译示例源程序时崩溃。

当我所做的只是替换方法名称(即不更改参数编号)时,我的代码就可以工作。

此外,我找不到任何专用于为 GIMPLE_CALL 添加/删除参数编号的方法。这让我相信这可能不是正确的方法。

代码:

0 投票
1 回答
101 浏览

c - GCC 不会发出我的指令,我试图避免分支

我需要减少代码中的分支数量。存在称为中值的基准,它有一些代码,例如:

我在机器描述文件 *.md 中写了一个模式以避免分支:

它适用于简单比较:

GCC 发出:

但如果我尝试相同,但使用索引变量(数组):它不会工作:

GCC 发出:

我需要 GCC 发出这样的东西:

我很感激任何帮助。