reinstate r222872: Peephole optimization in switch table lookup: reuse the guarding...
authorErik Eckstein <eeckstein@apple.com>
Thu, 27 Nov 2014 15:13:14 +0000 (15:13 +0000)
committerErik Eckstein <eeckstein@apple.com>
Thu, 27 Nov 2014 15:13:14 +0000 (15:13 +0000)
commit6cfbf12d7726f7c26583286bafd50ce1a6a461e0
tree828fdf62b173cad6653ebbeb1271128e2c9104fe
parentc0b24f79495e97235fcbccec8310c2f7954b7385
reinstate r222872: Peephole optimization in switch table lookup: reuse the guarding table comparison if possible.

Fixed missing dominance check.
Original commit message:

This optimization tries to reuse the generated compare instruction, if there is a comparison against the default value after the switch.
Example:
   if (idx < tablesize)
      r = table[idx]; // table does not contain default_value
   else
      r = default_value;
   if (r != default_value)
      ...
Is optimized to:
   cond = idx < tablesize;
   if (cond)
      r = table[idx];
   else
      r = default_value;
   if (cond)
      ...
Jump threading will then eliminate the second if(cond).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222891 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Utils/SimplifyCFG.cpp
test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll