[Issue 6615] New: Implement optimization for downcast to final class
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Sep 6 16:36:16 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6615
Summary: Implement optimization for downcast to final class
Product: D
Version: D2
Platform: Other
OS/Version: Linux
Status: NEW
Severity: enhancement
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: timon.gehr at gmx.ch
--- Comment #0 from timon.gehr at gmx.ch 2011-09-06 16:36:04 PDT ---
Consider this benchmark:
import std.stdio, std.datetime;
class A{}
final class B:A{}
A x;
static this(){x=new B;}
B f1(){ return cast(B)x; }
T fastCast(T,R)(R x){return typeid(x) is typeid(T)?cast(T)cast(void*)x:null;}
B f2(){ return fastCast!(B)(x); }
void main() {
auto a=benchmark!(f1,f2)(1000000);
writeln(a[0].to!("seconds",double));
writeln(a[1].to!("seconds",double));
}
f2 is about 30x faster on my machine, compiled with dmd -O -release -inline.
(DMD 2.054). If the benchmark is changed so that the cast does not succeed, the
difference is even larger.
This means DMD should probably optimize downcasts to final classes to a simple
typeid pointer comparison. That is safe, because final classes have no
children.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list