[llvm-dev] getUserCost(): "Ext of i/fcmp results are mostly optimized away in codegen"

Evgeny Astigeevich via llvm-dev llvm-dev at lists.llvm.org
Tue Oct 30 10:54:03 PDT 2018


Hi Jonas,

I tried to trace the history of the code. I found it was introduced in r172998(http://www.llvm.org/viewvc/llvm-project?view=revision&revision=172998) in 2013. I don’t see any tests in the commit.
I think this code might be outdated. Maybe it was related to vector code.
There are tests for vector code. See test/Analysis/CostModel/SystemZ/cmp-ext.ll.
I don’t know if there are any tests for scalar code.
I checked the inline cost calculation. In case of the ARM targets the cost of the cast was reported as free but it was lowered into real instruction. Of course, they are very light and have no impact at O2/O3 because of very high inlining thresholds. However they will have impact at Os/Oz where thresholds are much lower.

Thanks,
Evgeny Astigeevich


On 26 Oct 2018, at 14:20, Jonas Paulsson <paulsson at linux.vnet.ibm.com<mailto:paulsson at linux.vnet.ibm.com>> wrote:

Hi,

I wonder why the extension of i1 is per default considered free in getUserCost(). The comment says that these are "mostly optimized away in codegen", but I wonder how that can be: If the i1 is extended then a register must be loaded with either a 0 or (-)1 after the comparison, or?

I have made some test functions that seem to result in compare + conditional move on SystemZ (or a setcc on Intel). See https://reviews.llvm.org/D53373. On both of these targets this is clearly not free.

Are those simple tests I made special in any way so that they might call for some general rule in the generic implementation?

Any example of when this extension is actually free?

/Jonas



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181030/245bcff9/attachment.html>


More information about the llvm-dev mailing list