mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Added $$muladd built-in.
This commit is contained in:
committed by
Christoffer Lerno
parent
d5f965e137
commit
3624c2a72c
@@ -6,6 +6,7 @@ fn int foo(double b)
|
||||
double d = $$ceil(b);
|
||||
double e = $$max(1.0, d);
|
||||
double f = $$fma(d, 2.0, 3.0);
|
||||
double m = $$muladd(d, 2.0, 3.0);
|
||||
int xeb = 13;
|
||||
|
||||
int[3] abcd;
|
||||
@@ -16,13 +17,14 @@ fn int foo(double b)
|
||||
return 1;
|
||||
}
|
||||
|
||||
// #expect: foo.ll
|
||||
/* #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
|
||||
%m = alloca double, align 8
|
||||
%xeb = alloca i32, align 4
|
||||
%abcd = alloca [3 x i32], align 4
|
||||
%sy = alloca i32, align 4
|
||||
@@ -34,24 +36,27 @@ entry:
|
||||
%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
|
||||
%6 = load double, double* %d, align 8
|
||||
%7 = call double @llvm.fmuladd.f64(double %6, double 2.000000e+00, double 3.000000e+00)
|
||||
store double %7, double* %m, 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
|
||||
%8 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 0
|
||||
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
|
||||
%9 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 1
|
||||
store i32 0, i32* %9, align 4
|
||||
%10 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 2
|
||||
store i32 0, i32* %10, align 4
|
||||
%11 = load volatile i32, i32* %xeb, align 4
|
||||
store i32 %11, i32* %sy, align 4
|
||||
%12 = load i32, i32* %sy, align 4
|
||||
%add1 = add i32 %12, 2
|
||||
store volatile i32 %add1, i32* %11, align 4
|
||||
%add = add i32 %12, 1
|
||||
store volatile i32 %add, i32* %xeb, 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
|
||||
%14 = load i32, i32* %sy, align 4
|
||||
%add1 = add i32 %14, 2
|
||||
store volatile i32 %add1, i32* %13, align 4
|
||||
%15 = getelementptr inbounds [3 x i32], [3 x i32]* %abcd, i64 0, i64 2
|
||||
%16 = load volatile i32, i32* %15, align 4
|
||||
store i32 %16, i32* %sy, align 4
|
||||
ret i32 1
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ fn int foo(double b)
|
||||
double d = $$ceil(b);
|
||||
double e = $$max(1.0, d);
|
||||
double f = $$fma(d, 2.0, 3.0);
|
||||
double m = $$muladd(d, 2.0, 3.0);
|
||||
int xeb = 13;
|
||||
|
||||
int[3] abcd;
|
||||
@@ -23,6 +24,7 @@ entry:
|
||||
%d = alloca double, align 8
|
||||
%e = alloca double, align 8
|
||||
%f = alloca double, align 8
|
||||
%m = alloca double, align 8
|
||||
%xeb = alloca i32, align 4
|
||||
%abcd = alloca [3 x i32], align 4
|
||||
%sy = alloca i32, align 4
|
||||
@@ -34,24 +36,27 @@ entry:
|
||||
%4 = load double, ptr %d, align 8
|
||||
%5 = call double @llvm.fma.f64(double %4, double 2.000000e+00, double 3.000000e+00)
|
||||
store double %5, ptr %f, align 8
|
||||
%6 = load double, ptr %d, align 8
|
||||
%7 = call double @llvm.fmuladd.f64(double %6, double 2.000000e+00, double 3.000000e+00)
|
||||
store double %7, ptr %m, align 8
|
||||
store i32 13, ptr %xeb, align 4
|
||||
%6 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 0
|
||||
store i32 0, ptr %6, align 4
|
||||
%7 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 1
|
||||
store i32 0, ptr %7, align 4
|
||||
%8 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 2
|
||||
%8 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 0
|
||||
store i32 0, ptr %8, align 4
|
||||
%9 = load volatile i32, ptr %xeb, align 4
|
||||
store i32 %9, ptr %sy, align 4
|
||||
%10 = load i32, ptr %sy, align 4
|
||||
%add = add i32 %10, 1
|
||||
store volatile i32 %add, ptr %xeb, align 4
|
||||
%11 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 2
|
||||
%9 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 1
|
||||
store i32 0, ptr %9, align 4
|
||||
%10 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 2
|
||||
store i32 0, ptr %10, align 4
|
||||
%11 = load volatile i32, ptr %xeb, align 4
|
||||
store i32 %11, ptr %sy, align 4
|
||||
%12 = load i32, ptr %sy, align 4
|
||||
%add1 = add i32 %12, 2
|
||||
store volatile i32 %add1, ptr %11, align 4
|
||||
%add = add i32 %12, 1
|
||||
store volatile i32 %add, ptr %xeb, align 4
|
||||
%13 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 2
|
||||
%14 = load volatile i32, ptr %13, align 4
|
||||
store i32 %14, ptr %sy, align 4
|
||||
%14 = load i32, ptr %sy, align 4
|
||||
%add1 = add i32 %14, 2
|
||||
store volatile i32 %add1, ptr %13, align 4
|
||||
%15 = getelementptr inbounds [3 x i32], ptr %abcd, i64 0, i64 2
|
||||
%16 = load volatile i32, ptr %15, align 4
|
||||
store i32 %16, ptr %sy, align 4
|
||||
ret i32 1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user