mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
83 lines
2.2 KiB
Plaintext
83 lines
2.2 KiB
Plaintext
// #target: macos-x64
|
|
// #opt: --fp-math=relaxed
|
|
module test;
|
|
import std::io;
|
|
|
|
fn float tester1(float a, float b, float c)
|
|
{
|
|
return a * b + c;
|
|
}
|
|
fn float tester2(float a, float b, float c)
|
|
{
|
|
return c + a * b;
|
|
}
|
|
fn float tester3(float a, float b, float c)
|
|
{
|
|
c = -c;
|
|
return a * b - c;
|
|
}
|
|
fn float tester4(float a, float b, float c)
|
|
{
|
|
c = -c;
|
|
return -c + a * b;
|
|
}
|
|
|
|
fn float tester5(float a, float b, float c)
|
|
{
|
|
c = -c;
|
|
return -(c - a * b);
|
|
}
|
|
fn float tester6(float a, float b, float c)
|
|
{
|
|
c = -c;
|
|
return -(-a * b + c);
|
|
}
|
|
|
|
fn void main()
|
|
{
|
|
float a = 3.1;
|
|
float b = 1.4;
|
|
float c = 0.1;
|
|
io::printfn("%f", tester1(a, b, c));
|
|
io::printfn("%f", tester2(a, b, c));
|
|
io::printfn("%f", tester3(a, b, c));
|
|
io::printfn("%f", tester4(a, b, c));
|
|
io::printfn("%f", tester5(a, b, c));
|
|
io::printfn("%f", tester6(a, b, c));
|
|
}
|
|
|
|
/* #expect: test.ll
|
|
|
|
%3 = call reassoc arcp contract float @llvm.fmuladd.f32(float %0, float %1, float %2)
|
|
|
|
%3 = call reassoc arcp contract float @llvm.fmuladd.f32(float %0, float %1, float %2)
|
|
|
|
%3 = load float, ptr %c, align 4
|
|
%fneg = fneg reassoc arcp contract float %3
|
|
store float %fneg, ptr %c, align 4
|
|
%4 = load float, ptr %c, align 4
|
|
%5 = fneg reassoc arcp contract float %4
|
|
%6 = call reassoc arcp contract float @llvm.fmuladd.f32(float %0, float %1, float %5)
|
|
|
|
%fneg = fneg reassoc arcp contract float %3
|
|
store float %fneg, ptr %c, align 4
|
|
%4 = load float, ptr %c, align 4
|
|
%fneg1 = fneg reassoc arcp contract float %4
|
|
%5 = call reassoc arcp contract float @llvm.fmuladd.f32(float %0, float %1, float %fneg1)
|
|
|
|
%3 = load float, ptr %c, align 4
|
|
%fneg = fneg reassoc arcp contract float %3
|
|
store float %fneg, ptr %c, align 4
|
|
%4 = load float, ptr %c, align 4
|
|
%5 = fneg reassoc arcp contract float %1
|
|
%6 = call reassoc arcp contract float @llvm.fmuladd.f32(float %0, float %5, float %4)
|
|
%fneg1 = fneg reassoc arcp contract float %6
|
|
|
|
%3 = load float, ptr %c, align 4
|
|
%fneg = fneg reassoc arcp contract float %3
|
|
store float %fneg, ptr %c, align 4
|
|
%fneg1 = fneg reassoc arcp contract float %0
|
|
%4 = load float, ptr %c, align 4
|
|
%5 = call reassoc arcp contract float @llvm.fmuladd.f32(float %fneg1, float %1, float %4)
|
|
%fneg2 = fneg reassoc arcp contract float %5
|