【发布时间】:2015-02-18 04:47:46
【问题描述】:
在使用 clang 生成 LLVM IR 代码时,我想使用 __attribute__((bitwidth(N))) 来定义自定义大小的整数类型。我在is no plan to support this attribute 找到了一些信息。但是,为 IR 生成(即程序集表示)支持这样的属性将非常有帮助。
我的用例:我想以最小的努力为自定义微架构编写编译器*。该架构仅支持非常特定/不寻常的位宽。微架构的“程序”应该用 C 的有限子集编写。在这种情况下,有希望使用 clang 来生成 LLVM IR 并将其用作进一步处理的基础。如果可以使用 bitwidth 属性将有关数据类型的其他信息传递到下一步,那就太好了,如下例所示:
C-代码:
typedef int __attribute__((bitwidth(22))) int22;
int22 myVar = 0;
LLVM IR 组装:
@myVar = global i22 0, align 3
; note that the align information is not relevant
; in my case, i.e. "align 4" would also be fine
也许有一些技巧可以为 IR“启用”这个属性(恕我直言,实现起来不会太难),或者有人有比我能找到的更新的信息(llvm bugzilla 条目现在相当旧)。
如果没有,也许有一些替代方法可以“附加”有关 C 中定义的数据类型的附加信息。
*) 将自定义微架构添加到 clang(以便可以使用 -target 选项)被重新分级为非常复杂。是吗?
【问题讨论】: