Я создаю проход LLVM, который должен знать, какой тип используется для размещения нескольких битовых полей в LLVM IR.Я провел несколько экспериментов и получил следующий результат:
Этот результат ожидается, поскольку llvm IR может использовать для упаковки тип i8два поля.Однако следующий эксперимент смущает меня.
Разве эти поля не должны подходить в {i8, i8} вместо одного i16?
Более интересный эксперимент с кодом ядра:
Как показано выше, все битовые поля помещаются в один i32,
Итак, существуют ли какие-либо правила для clang, чтобы решить, какой тип следует использовать для размещения в нескольких битовых полях?
Большое спасибо.