Files
c3c/test/test_suite/expressions/ternary_bool.c3t
2025-01-06 03:01:13 +01:00

107 lines
3.9 KiB
Plaintext

// #target: macos-x64
extern fn void printf(char *, ...);
fn void main()
{
bool b = true;
bool* c = &b;
if (*c ? *c : *c) printf("Woa!\n");
if (b ? b : b) printf("Woa!\n");
if (*c ?: *c) printf("Woa!\n");
if (b ?: b) printf("Woa!\n");
}
/* #expect: ternary_bool.ll
define void @ternary_bool.main() #0 {
entry:
%b = alloca i8, align 1
%c = alloca ptr, align 8
%.anon = alloca i8, align 1
%.anon13 = alloca i8, align 1
store i8 1, ptr %b, align 1
store ptr %b, ptr %c, align 8
%0 = load ptr, ptr %c, align 8
%1 = load i8, ptr %0, align 1
%2 = trunc i8 %1 to i1
br i1 %2, label %cond.lhs, label %cond.rhs
cond.lhs: ; preds = %entry
%3 = load ptr, ptr %c, align 8
%4 = load i8, ptr %3, align 1
%5 = trunc i8 %4 to i1
br label %cond.phi
cond.rhs: ; preds = %entry
%6 = load ptr, ptr %c, align 8
%7 = load i8, ptr %6, align 1
%8 = trunc i8 %7 to i1
br label %cond.phi
cond.phi: ; preds = %cond.rhs, %cond.lhs
%val = phi i1 [ %5, %cond.lhs ], [ %8, %cond.rhs ]
br i1 %val, label %if.then, label %if.exit
if.then: ; preds = %cond.phi
call void (ptr, ...) @printf(ptr @.str)
br label %if.exit
if.exit: ; preds = %if.then, %cond.phi
%9 = load i8, ptr %b, align 1
%10 = trunc i8 %9 to i1
br i1 %10, label %cond.lhs1, label %cond.rhs2
cond.lhs1: ; preds = %if.exit
%11 = load i8, ptr %b, align 1
%12 = trunc i8 %11 to i1
br label %cond.phi3
cond.rhs2: ; preds = %if.exit
%13 = load i8, ptr %b, align 1
%14 = trunc i8 %13 to i1
br label %cond.phi3
cond.phi3: ; preds = %cond.rhs2, %cond.lhs1
%val4 = phi i1 [ %12, %cond.lhs1 ], [ %14, %cond.rhs2 ]
br i1 %val4, label %if.then5, label %if.exit6
if.then5: ; preds = %cond.phi3
call void (ptr, ...) @printf(ptr @.str.1)
br label %if.exit6
if.exit6: ; preds = %if.then5, %cond.phi3
%15 = load ptr, ptr %c, align 8
%16 = load i8, ptr %15, align 1
store i8 %16, ptr %.anon, align 1
%17 = trunc i8 %16 to i1
br i1 %17, label %cond.lhs7, label %cond.rhs8
cond.lhs7: ; preds = %if.exit6
%18 = load i8, ptr %.anon, align 1
%19 = trunc i8 %18 to i1
br label %cond.phi9
cond.rhs8: ; preds = %if.exit6
%20 = load ptr, ptr %c, align 8
%21 = load i8, ptr %20, align 1
%22 = trunc i8 %21 to i1
br label %cond.phi9
cond.phi9: ; preds = %cond.rhs8, %cond.lhs7
%val10 = phi i1 [ %19, %cond.lhs7 ], [ %22, %cond.rhs8 ]
br i1 %val10, label %if.then11, label %if.exit12
if.then11: ; preds = %cond.phi9
call void (ptr, ...) @printf(ptr @.str.2)
br label %if.exit12
if.exit12: ; preds = %if.then11, %cond.phi9
%23 = load i8, ptr %b, align 1
store i8 %23, ptr %.anon13, align 1
%24 = trunc i8 %23 to i1
br i1 %24, label %cond.lhs14, label %cond.rhs15
cond.lhs14: ; preds = %if.exit12
%25 = load i8, ptr %.anon13, align 1
%26 = trunc i8 %25 to i1
br label %cond.phi16
cond.rhs15: ; preds = %if.exit12
%27 = load i8, ptr %b, align 1
%28 = trunc i8 %27 to i1
br label %cond.phi16
cond.phi16: ; preds = %cond.rhs15, %cond.lhs14
%val17 = phi i1 [ %26, %cond.lhs14 ], [ %28, %cond.rhs15 ]
br i1 %val17, label %if.then18, label %if.exit19
if.then18: ; preds = %cond.phi16
call void (ptr, ...) @printf(ptr @.str.3)
br label %if.exit19
if.exit19: ; preds = %if.then18, %cond.phi16
ret void
}