The order that tablegen fastisel instruction code is generated is currently based on the text of the predicate (using string lessthan). This patch changes this to instead use the instruction complexity. Because the complexities are not unique a C++ multimap is used instead of a map.
This fixes the problem where code with no predicate always comes out first (the empty string always compares as less than all other strings) thus making the code with predicates dead code. See the FMUL code in PPCFastISel.cpp for an example. It also more closely matches the normal codegen ordering. Some error checking in the tablegen fastisel code is fixed as well.
Is there a reason we either a) don't want this on by default, or b) would never want this on?