[llvm][IROutliner] Account for return void in sort comparator
authorDavid Spickett <david.spickett@linaro.org>
Wed, 20 Jul 2022 15:55:36 +0000 (15:55 +0000)
committerDavid Spickett <david.spickett@linaro.org>
Fri, 5 Aug 2022 09:36:43 +0000 (09:36 +0000)
commitc401dbde71fdfdbdb0e77df54429408bab903991
tree9e134bbbec12a826a60128bba439c2c0d2f9e965
parent2312b747b87300d94e834f257835ce93d36037cf
[llvm][IROutliner] Account for return void in sort comparator

This fixes 69 llvm tests that failed when EXPENSIVE_CHECKS was enabled.
llvm/test/Transforms/IROutliner/outlining-commutative-operands-opposite-order.ll
is one example.

When we have EXPENSIVE_CHECKS, _GLIBCXX_DEBUG is defined. This means
that libstdc++ will call the compare function to check if it is
implemented correctly (that !(a < a) is true).

This happens even if there is only one item and here, we expect
to see one return void or multiple return constant integer.

Don't sort if we have 1 item, but do assert that it is the 1
ret void we expect. In the comparator, assert that neither
Value is a nullptr in case one ended up in a the list somehow.

Reviewed By: AndrewLitteken

Differential Revision: https://reviews.llvm.org/D130230
llvm/lib/Transforms/IPO/IROutliner.cpp