blob: e705bff22e67d1685703c256b85b34287a5f5130 [file] [edit]
// RUN: %clang_cc1 %s -triple x86_64-unknown-linux-gnu -std=c23 -emit-llvm -o - | FileCheck %s
struct Bits {
int pad1: 30;
bool b: 1;
int pad2: 1;
};
int main(void) {
// CHECK-LABEL: define dso_local i32 @main() #0 {
struct Bits x;
x.b += __builtin_complex(-1.0f, 0.0f);
// CHECK: %bf.load = load i32, ptr %x, align 4
// CHECK-NEXT: %bf.lshr = lshr i32 %bf.load, 30
// CHECK-NEXT: %bf.clear = and i32 %bf.lshr, 1
// CHECK-NEXT: %bf.cast = trunc i32 %bf.clear to i1
// CHECK-NEXT: %conv = uitofp i1 %bf.cast to float
// CHECK: %0 = zext i1 %tobool1 to i32
// CHECK-NEXT: %bf.load2 = load i32, ptr %x, align 4
// CHECK-NEXT: %bf.shl = shl i32 %0, 30
// CHECK-NEXT: %bf.clear3 = and i32 %bf.load2, -1073741825
// CHECK-NEXT: %bf.set = or i32 %bf.clear3, %bf.shl
// CHECK-NEXT: store i32 %bf.set, ptr %x, align 4
}