C/C++ 可以在 LLVM IR 中转换为 `i256` 变量的类型
C/C++ type that can be translated into a `i256` variable in LLVM IR
我注意到在LLVM IR中有一些很长的类型,比如i256
、i256*
。但是,即使我将unsigned long long
变量编译成LLVM IR,它对应的类型也是i64
。
所以我的问题是,什么样的 C/C++
变量可以编译成 LLVM IR 中的 i256
变量?谢谢。
您可以使用位域结构来获取内部 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 }
Link : https://godbolt.org/z/QufAIn
我注意到在LLVM IR中有一些很长的类型,比如i256
、i256*
。但是,即使我将unsigned long long
变量编译成LLVM IR,它对应的类型也是i64
。
所以我的问题是,什么样的 C/C++
变量可以编译成 LLVM IR 中的 i256
变量?谢谢。
您可以使用位域结构来获取内部 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 }
Link : https://godbolt.org/z/QufAIn