问题标签 [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.
c++ - 使用 gcc 插件修改变量声明的顺序
我知道这很难做到,我应该避免这样做,但我有我的理由。我想在编译时修改一些字段声明的顺序,例如:
必须转向:
如果我选择交换 and 的顺序i
,c
我想知道如何更改location
具有它的字段声明的tree
任何人都知道我该怎么做?谢谢 !
我使用g++ 4.9.2版本的插件
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)。其他一切似乎都和以前一样。如果有人知道我做错了什么或我错过了什么,我将不胜感激。
gcc - 如何在 gcc 中间表示中保存树?可能吗?
我想以二进制形式将一棵树(特别是树的类型)保存在一个文件中,并且我需要在其他编译单元中加载这棵树。例如:
我有一个带有 2 个功能的 main.c:
我想保存结构的类型(myTypeStruct)并将其加载到另一个涉及 test.c 的编译单元中:
使用 gcc 插件,我想加载类型并构建该类型的变量以将 test.c 转换为:
我知道树是指向tree_node的指针,而 tree_node 是结构的联合。问题是一棵树与它有关系,并且有一系列难以理解的结构。在构建特定类型的变量时,我需要知道哪些数据需要树。
PD:关于 LTO 如何做这样的事情的文档不足。PD2:对不起我的英语
gcc - 如何分析 GCC 内部表示,如 GIMPLE、RTL
我使用命令生成了转储输出文件-fdump-tree-all
,-fdump-rtl-all
并且得到了很多转储文件。我读过 GIMPLE 中的代码是伪 C 语法,而 RTL 转储文件级别太低而无法理解。有什么方法可以理解 GIMPLE 和 RTL 转储文件?任何可以将其转换为 C 代码或有用的软件?有什么教程可以学习理解吗?谢谢
c - GCC SSA 格式中变量的含义
我想看看 GCC 使用的 SSA 格式,所以我尝试了以下简单的测试程序:
gcc -fdump-tree-all a.c
除其他外,编译并获得a.c.016t.ssa
了以下内容:
大部分内容都很清楚,但这是什么argc_5(D)
意思?有什么关系int D.2186
吗?
gcc - GCC 插件 API : Gimple pass
我一直在寻找有关编写 GCC 插件的在线资源。我目前正在使用 GCC 版本 7.3.0。我尝试编写一个简单的插件,其中包含一个将被调用的回调PLUGIN_FINISH_TYPE
。它工作得很好。
接下来,我正在尝试编写一个使用类似于此处列出的示例的“gimple pass”的插件。然而,struct gimple_opt_pass
似乎并不存在。
我试图寻找声明这个结构的头文件。我发现 tree-pass.h 有以下代码块:-
- 我如何从我的插件中看到这个?我似乎无法以上面链接中描述的方式使用它。
- 使用当前的 GCC 插件 API,是否可以编写纯 C 插件(而不是必须使用 C++)。
gcc - 如何在 gimple 中找到自由操作?
我现在正在修改 GCC 前端。
我想用 FOR_EACH_BB_FN 检查 GIMPLE 文件并检测“空闲”操作,该操作用于释放 C 中的内存分配。
这是我的代码:
然后我如何检查 stmt 是否是“免费”操作?
gcc - 查找函数调用 gimple 语句的参数
gimple_call_num_args(stmt)
在我的陈述中给出 2 但get_name(gimple_call_arg(stmt,1))
为空。关于如何获得论点的任何想法?
c - 给定一个有两个参数的 GIMPLE Call 语句,我想添加第三个参数,如何?
我必须做一些 GIMPLE_CALL 语句操作。这个 GIMPLE_CALL 将有两个参数,例如:foo(a,b)。我的目标是将此方法更改为具有三个参数的不同方法,例如 zoo(a,b,c)
在我目前的方法中,GCC 在编译示例源程序时崩溃。
当我所做的只是替换方法名称(即不更改参数编号)时,我的代码就可以工作。
此外,我找不到任何专用于为 GIMPLE_CALL 添加/删除参数编号的方法。这让我相信这可能不是正确的方法。
代码:
c - GCC 不会发出我的指令,我试图避免分支
我需要减少代码中的分支数量。存在称为中值的基准,它有一些代码,例如:
我在机器描述文件 *.md 中写了一个模式以避免分支:
它适用于简单比较:
GCC 发出:
但如果我尝试相同,但使用索引变量(数组):它不会工作:
GCC 发出:
我需要 GCC 发出这样的东西:
我很感激任何帮助。