Two case switch to select optimization

Description

Two case switch to select optimization

This optimization tries to convert switch instructions that are used to select a value with only 2 unique cases + default block
to a select or a couple of selects (depending if the default block is reachable or not).

The typical case this optimization wants to be able to optimize is this one:

Example:
switch (a) {

case 10:                %0 = icmp eq i32 %a, 10
  return 10;            %1 = select i1 %0, i32 10, i32 4
case 20:        ---->   %2 = icmp eq i32 %a, 20
  return 2;             %3 = select i1 %2, i32 2, i32 %1
default:
  return 4;

}

It also sets the base for further optimizations that are planned and being reviewed.

Details

Committed
mggmOct 7 2014, 11:16 AM
Parents
rL219222: PR21180: Lambda closure types are neither aggregates nor literal types.
Branches
Unknown
Tags
Unknown