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: nob...@puremagic.com
        ReportedBy: timon.g...@gmx.ch


--- Comment #0 from timon.g...@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: -------

Reply via email to