[Mono-bugs] [Bug 524595] New: JIT produces very slow code if you use a temporary variable outside a try/catch block
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Thu Jul 23 09:01:12 EDT 2009
http://bugzilla.novell.com/show_bug.cgi?id=524595
Summary: JIT produces very slow code if you use a temporary
variable outside a try/catch block
Classification: Mono
Product: Mono: Runtime
Version: unspecified
Platform: x86
OS/Version: Linux
Status: NEW
Severity: Enhancement
Priority: P5 - None
Component: JIT
AssignedTo: lupus at novell.com
ReportedBy: anto.cuni at gmail.com
QAContact: mono-bugs at lists.ximian.com
Found By: ---
Created an attachment (id=307179)
--> (http://bugzilla.novell.com/attachment.cgi?id=307179)
C# program to reproduce the behaviour
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10)
Gecko/2009071311 Gentoo Firefox/3.0.10
Consider these two methods:
public static int Fast()
{
int i = 0;
int step = 3;
while (i < N) {
try {
i = checked(i + step);
}
catch (OverflowException) {
return -1;
}
}
return i;
}
public static int Slow()
{
int i = 0;
int step = 3;
int tmp = 0;
while (i < N) {
try {
tmp = checked(i + step);
}
catch (OverflowException) {
return -1;
}
i = tmp;
}
return i;
}
The only difference between the twos is the presence of the "tmp" variable in
the "Slow" method. However, this seems to be enough to make the resulting code
2x slower.
Reproducible: Always
Steps to Reproduce:
1. gmcs tempvar.cs # (see attachment)
2. mono tempvar.cs
Actual Results:
viper tmp $ mono tempvar.exe
Fast: 00:00:01.1878510
Slow: 00:00:02.0227760
Expected Results:
viper tmp $ mono tempvar.exe
Fast: 00:00:01.1878510
Slow: 00:00:01.1878510
(well, maybe not exactly the same time, but still :-))
viper tmp $ mono -V
Mono JIT compiler version 2.4.2 (tarball Thu Jul 23 14:13:20 CEST 2009)
Copyright (C) 2002-2008 Novell, Inc and Contributors. www.mono-project.com
TLS: __thread
GC: Included Boehm (with typed GC)
SIGSEGV: altstack
Notifications: epoll
Architecture: x86
Disabled: none
--
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list