SelectionDAGBuilder: When emitting small compare chains for switches order them by...
authorBenjamin Kramer <benny.kra@googlemail.com>
Sat, 26 May 2012 20:01:32 +0000 (20:01 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sat, 26 May 2012 20:01:32 +0000 (20:01 +0000)
commitc511b2a5a1b91f08be6572ca7d7215c261176bc4
tree32b2663e0556d667b84ec29288f3a03b3e158243
parenteacc31acf515c79338e8c94ce8c7c26dd7b2d32a
SelectionDAGBuilder: When emitting small compare chains for switches order them by using edge weights.

SimplifyCFG tends to form a lot of 2-3 case switches when merging branches. Move
the most likely condition to the front so it is checked first and the others can
be skipped. This is currently not as effective as it could be because SimplifyCFG
destroys profiling metadata when merging branches and switches. Merging branch
weight metadata is tricky though.

This code touches at most 3 cases so I didn't use a proper sorting algorithm.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157521 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
test/CodeGen/X86/switch-order-weight.ll [new file with mode: 0644]