首页 > 解决方案 > 可以在 LLVM IR 中转换为“i256”变量的 C/C++ 类型

问题描述

我注意到在 LLVM IR 中有一些很长的类型,例如i256, i256*. 但是,即使我unsigned long long将变量编译为 LLVM IR,其对应的类型也是i64.

所以我的问题是,什么样的C/C++变量可以编译成i256LLVM IR 中的变量?谢谢。

标签: clangllvmllvm-ir

解决方案


您可以使用位域结构来获取内部i256数据类型。例如 :

typedef struct {
    unsigned long long a : 64 ;
    unsigned long long b : 64 ;
    unsigned long long c : 64 ;
    unsigned long long d : 64 ;
} S;

S a = {1,1};

S f() {
    return a;
}

使用选项编译:clang -emit-llvm -g0 -O0

生成的IR如下:

%struct.S = type { i256 }

链接:https ://godbolt.org/z/QufAIn


推荐阅读