
#9159: cmm case, binary search instead of jump table --------------------------------------------+------------------------------ Reporter: wojteknar | Owner: Type: feature request | Status: new Priority: lowest | Milestone: Component: Compiler | Version: 7.8.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime performance bug | Unknown/Multiple Test Case: | Difficulty: Unknown Blocking: | Blocked By: | Related Tickets: --------------------------------------------+------------------------------ Comment (by arotenberg): For comparison: The Java Virtual Machine has two instructions called `tableswitch` and `lookupswitch`, which are normally implemented as a lookup table and a binary search, respectively. [http://cr.openjdk.java.net/~forax/lambda/src/share/classes/com/sun/tools/jav... Here] is the code javac uses to decide whether to generate a `tableswitch` or `lookupswitch` for a `switch` statement: {{{ // Determine whether to issue a tableswitch or a lookupswitch // instruction. long table_space_cost = 4 + ((long) hi - lo + 1); // words long table_time_cost = 3; // comparisons long lookup_space_cost = 3 + 2 * (long) nlabels; long lookup_time_cost = nlabels; int opcode = nlabels > 0 && table_space_cost + 3 * table_time_cost <= lookup_space_cost + 3 * lookup_time_cost ? tableswitch : lookupswitch; }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9159#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler