mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
120 lines
4.1 KiB
Plaintext
120 lines
4.1 KiB
Plaintext
// #target: macos-x64
|
|
|
|
extern fn int! testError();
|
|
|
|
fn void test()
|
|
{
|
|
|
|
double x = ((double)testError() + testError()) ?? 100;
|
|
double y = (1 << testError()) ?? 100;
|
|
double z = testError() >> 1 ?? 100;
|
|
double w = (double)testError() * testError() ?? 100;
|
|
}
|
|
|
|
/* #expect: else_checks.ll
|
|
|
|
|
|
declare i64 @testError(ptr) #0
|
|
|
|
|
|
define void @else_checks.test() #0 {
|
|
entry:
|
|
%x = alloca double, align 8
|
|
%retparam = alloca i32, align 4
|
|
%retparam1 = alloca i32, align 4
|
|
%y = alloca double, align 8
|
|
%retparam5 = alloca i32, align 4
|
|
%z = alloca double, align 8
|
|
%retparam12 = alloca i32, align 4
|
|
%w = alloca double, align 8
|
|
%retparam19 = alloca i32, align 4
|
|
%retparam23 = alloca i32, align 4
|
|
%0 = call i64 @testError(ptr %retparam)
|
|
%not_err = icmp eq i64 %0, 0
|
|
%1 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
|
br i1 %1, label %after_check, label %else_block
|
|
|
|
after_check: ; preds = %entry
|
|
%2 = load i32, ptr %retparam, align 4
|
|
%sifp = sitofp i32 %2 to double
|
|
%3 = call i64 @testError(ptr %retparam1)
|
|
%not_err2 = icmp eq i64 %3, 0
|
|
%4 = call i1 @llvm.expect.i1(i1 %not_err2, i1 true)
|
|
br i1 %4, label %after_check3, label %else_block
|
|
|
|
after_check3: ; preds = %after_check
|
|
%5 = load i32, ptr %retparam1, align 4
|
|
%sifp4 = sitofp i32 %5 to double
|
|
%fadd = fadd double %sifp, %sifp4
|
|
br label %phi_block
|
|
|
|
else_block: ; preds = %after_check, %entry
|
|
br label %phi_block
|
|
|
|
phi_block: ; preds = %else_block, %after_check3
|
|
%val = phi double [ %fadd, %after_check3 ], [ 1.000000e+02, %else_block ]
|
|
store double %val, ptr %x, align 8
|
|
%6 = call i64 @testError(ptr %retparam5)
|
|
%not_err6 = icmp eq i64 %6, 0
|
|
%7 = call i1 @llvm.expect.i1(i1 %not_err6, i1 true)
|
|
br i1 %7, label %after_check7, label %else_block9
|
|
|
|
after_check7: ; preds = %phi_block
|
|
%8 = load i32, ptr %retparam5, align 4
|
|
%shl = shl i32 1, %8
|
|
%9 = freeze i32 %shl
|
|
%sifp8 = sitofp i32 %9 to double
|
|
br label %phi_block10
|
|
|
|
else_block9: ; preds = %phi_block
|
|
br label %phi_block10
|
|
|
|
phi_block10: ; preds = %else_block9, %after_check7
|
|
%val11 = phi double [ %sifp8, %after_check7 ], [ 1.000000e+02, %else_block9 ]
|
|
store double %val11, ptr %y, align 8
|
|
%10 = call i64 @testError(ptr %retparam12)
|
|
%not_err13 = icmp eq i64 %10, 0
|
|
%11 = call i1 @llvm.expect.i1(i1 %not_err13, i1 true)
|
|
br i1 %11, label %after_check14, label %else_block16
|
|
|
|
after_check14: ; preds = %phi_block10
|
|
%12 = load i32, ptr %retparam12, align 4
|
|
%ashr = ashr i32 %12, 1
|
|
%13 = freeze i32 %ashr
|
|
%sifp15 = sitofp i32 %13 to double
|
|
br label %phi_block17
|
|
|
|
else_block16: ; preds = %phi_block10
|
|
br label %phi_block17
|
|
|
|
phi_block17: ; preds = %else_block16, %after_check14
|
|
%val18 = phi double [ %sifp15, %after_check14 ], [ 1.000000e+02, %else_block16 ]
|
|
store double %val18, ptr %z, align 8
|
|
%14 = call i64 @testError(ptr %retparam19)
|
|
%not_err20 = icmp eq i64 %14, 0
|
|
%15 = call i1 @llvm.expect.i1(i1 %not_err20, i1 true)
|
|
br i1 %15, label %after_check21, label %else_block27
|
|
|
|
after_check21: ; preds = %phi_block17
|
|
%16 = load i32, ptr %retparam19, align 4
|
|
%sifp22 = sitofp i32 %16 to double
|
|
%17 = call i64 @testError(ptr %retparam23)
|
|
%not_err24 = icmp eq i64 %17, 0
|
|
%18 = call i1 @llvm.expect.i1(i1 %not_err24, i1 true)
|
|
br i1 %18, label %after_check25, label %else_block27
|
|
|
|
after_check25: ; preds = %after_check21
|
|
%19 = load i32, ptr %retparam23, align 4
|
|
%sifp26 = sitofp i32 %19 to double
|
|
%fmul = fmul double %sifp22, %sifp26
|
|
br label %phi_block28
|
|
|
|
else_block27: ; preds = %after_check21, %phi_block17
|
|
br label %phi_block28
|
|
|
|
phi_block28: ; preds = %else_block27, %after_check25
|
|
%val29 = phi double [ %fmul, %after_check25 ], [ 1.000000e+02, %else_block27 ]
|
|
store double %val29, ptr %w, align 8
|
|
ret void
|
|
}
|