mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
58 lines
1.8 KiB
C
58 lines
1.8 KiB
C
// #target: macos-x64
|
|
module foo;
|
|
|
|
fn int foo(double b)
|
|
{
|
|
double d = $$ceil(b);
|
|
double e = $$max(1.0, d);
|
|
double f = $$fma(d, 2.0, 3.0);
|
|
int xeb = 13;
|
|
|
|
int[3] abcd;
|
|
int sy = $$volatile_load(&xeb);
|
|
$$volatile_store(&xeb, sy + 1);
|
|
$$volatile_store(&abcd[2], sy + 2);
|
|
sy = $$volatile_load(&abcd[2]);
|
|
return 1;
|
|
}
|
|
|
|
// #expect: foo.ll
|
|
|
|
define i32 @foo_foo(double %0) #0 {
|
|
entry:
|
|
%d = alloca double, align 8
|
|
%e = alloca double, align 8
|
|
%f = alloca double, align 8
|
|
%xeb = alloca i32, align 4
|
|
%abcd = alloca [3 x i32], align 4
|
|
%sy = alloca i32, align 4
|
|
%1 = call double @llvm.ceil.f64(double %0)
|
|
store double %1, double* %d, align 8
|
|
%2 = load double, double* %d, align 8
|
|
%3 = call double @llvm.maxnum.f64(double 1.000000e+00, double %2)
|
|
store double %3, double* %e, align 8
|
|
%4 = load double, double* %d, align 8
|
|
%5 = call double @llvm.fma.f64(double %4, double 2.000000e+00, double 3.000000e+00)
|
|
store double %5, double* %f, align 8
|
|
store i32 13, i32* %xeb, align 4
|
|
%6 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 0
|
|
store i32 0, i32* %6, align 4
|
|
%7 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 1
|
|
store i32 0, i32* %7, align 4
|
|
%8 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 2
|
|
store i32 0, i32* %8, align 4
|
|
%9 = load volatile i32, i32* %xeb, align 4
|
|
store i32 %9, i32* %sy, align 4
|
|
%10 = load i32, i32* %sy, align 4
|
|
%add = add i32 %10, 1
|
|
store volatile i32 %add, i32* %xeb, align 4
|
|
%11 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 2
|
|
%12 = load i32, i32* %sy, align 4
|
|
%add1 = add i32 %12, 2
|
|
store volatile i32 %add1, i32* %11, align 4
|
|
%13 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 2
|
|
%14 = load volatile i32, i32* %13, align 4
|
|
store i32 %14, i32* %sy, align 4
|
|
ret i32 1
|
|
}
|