Clang C/C++;可以在LLVM IR中转换为“i256”变量的类型

Clang C/C++;可以在LLVM IR中转换为“i256”变量的类型,clang,llvm,llvm-ir,Clang,Llvm,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

我注意到在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 }

链接:

您可以使用位字段结构来获取内部
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 }

链接:

它们与什么指令一起使用,可能表示芯片扩展寄存器?SIMD(用于AVX/AVX2)已从128位扩展到256位。它们与什么指令一起使用,可能表示芯片扩展寄存器?SIMD(用于AVX/AVX2)已从128位扩展到256位。