This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 09/29/2015 04:31 PM, James Greenhalgh wrote:
On the other side of the equation, we want a cost for the converted sequence. We can build a cost of the generated rtl sequence, but for targets like AArch64 this is going to be wildly off. AArch64 will expand (a > b) ? x : y; as a set to the CC register, followed by a conditional move based on the CC register. Consequently, where we have multiple sets back to back we end up with: set CC (a > b) set x1 (CC ? x : y) set CC (a > b) set x2 (CC ? x : z) set CC (a > b) set x3 (CC ? x : k) Which we know will be simplified later to: set CC (a > b) set x1 (CC ? x : y) set x2 (CC ? x : z) set x3 (CC ? x : k)
I guess the transformation you want to make is a bit unusual in that it generates such extra instructions. rtx_cost has problems taking such secondary considerations into account.
I haven't quite made up my mind about the new target hook, but I wonder if it might be a good idea to try and simplify the above sequence on the spot before calculating costs for it. (Incidentally, which pass removes the extra CC sets?)
Bernd
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |