[Mono-bugs] [Bug 462457] New: Simd instructions fail under some optimization levels.

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Wed Dec 24 13:23:35 EST 2008


https://bugzilla.novell.com/show_bug.cgi?id=462457


           Summary: Simd instructions fail under some optimization levels.
           Product: Mono: Runtime
           Version: 2.2.x
          Platform: x86
        OS/Version: Mac OS X 10.5
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: misc
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: guy.oliver at gmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: Development


When compiling a program using the new Mono.Simd library, and no optimizations
turned on, the output of my test program is what I expected it to be.

But, when running with optimizations (all or ssa or ssapre, perhaps others) the
output is very much incorrect.

For instance, when the application is compiled with the command line:

gmcs -reference:Mono.Simd.dll -d:SIMD -out:NN.exe *.cs

and run with:

mono NN.exe or mono --optimize:sse2,simd NN.exe

the results are as expected;

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 7
8 8 8 8
9 9 9 9
10 10 10 10
11 11 11 11
12 12 12 12



But, if run with --optimize:ssa I get:


1 1 1 1
2 2 2 2
1 1 -0.999629 1
1 1 -0.999629 1
1 1 -0.999629 1
1 1 -0.999629 1
1 1 -0.999629 1
1 1 -0.999629 1
1 1 -0.999629 1
1 1 -0.999629 1
1 1 -0.999629 1
1 1 -0.999629 1


Those first two lines that show the correct answer we're done as single inline
add statements, the failures occurs inside a simple for loop.  the program is
attached, but the code in question is below:


Vector4f sum = new Vector4f(0,0,0,0);
Vector4f add = new Vector4f(1.0F,1.0F,1.0F,1.0F);

sum = sum + add;
Console.WriteLine("{0} {1} {2} {3}", sum.X, sum.Y, sum.Z, sum.W);
// Looks OK

sum = sum + add;
Console.WriteLine("{0} {1} {2} {3}", sum.X, sum.Y, sum.Z, sum.W);
// Looks OK

for (int i = 0; i < 10; ++i)
{
        sum = sum + add;
        Console.WriteLine("{0} {1} {2} {3}", sum.X, sum.Y, sum.Z, sum.W);
        // Fails on optimizations
}


Surprisingly, as the problem only shows up in loops, i tried it with loop
optimization on, but the error wasn't there.  I am not sure if other
optimizations or combinations cause the problem or not, though I suspect they
do, as I did a --optimize=all,-ssa,-ssapre and the error showed up.


-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the mono-bugs mailing list