mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
107 lines
3.9 KiB
Plaintext
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
|
|
}
|