digitalmars.D.bugs - [Issue 13170] New: Optimizer - improve branch prediction for final
- via Digitalmars-d-bugs (38/38) Jul 20 2014 https://issues.dlang.org/show_bug.cgi?id=13170
https://issues.dlang.org/show_bug.cgi?id=13170 Issue ID: 13170 Summary: Optimizer - improve branch prediction for final switch Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: enhancement Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: bugzilla digitalmars.com void A(); void B(); void C(); void D(); void E(); void test(int i) { while (1) { final switch (i) { case 1: A(); break; case 2: B(); break; case 3: C(); break; case 4: D(); break; case 5: E(); break; } ++i; } } Instead of using one dispatch at the start of the loop, put the dispatch at each break;, which will produce much better branch prediction. See also: http://eli.thegreenplace.net/2012/07/12/computed-goto-for-efficient-dispatch-tables/ --
Jul 20 2014