Тип C / C ++, который можно преобразовать в переменную `i256` в LLVM IR - PullRequest
0 голосов
/ 24 декабря 2018

Я заметил, что в LLVM IR есть довольно длинные типы, такие как i256, i256*.Однако даже если я скомпилирую переменную unsigned long long в LLVM IR, соответствующий ей тип будет i64.

Итак, мой вопрос в том, что переменная C/C++ может быть скомпилирована в переменную i256 в LLVM IR?Спасибо.

1 Ответ

0 голосов
/ 26 декабря 2018

Вы можете использовать структуры битовых полей для получения внутреннего типа данных 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

...