So unlike loop invariant motion, moving an inline-asm out of an
if is not always profitable and the cost estimate for the instruction
inside inline-asm is unknown.
This is a regression from GCC 4.6 which didn't speculatively move inline-asm
as far as I can tell.
Bootstrapped and tested on x86_64-linux-gnu.
PR rtl-optimization/102150
gcc/ChangeLog:
* ifcvt.cc (cheap_bb_rtx_cost_p): Return false if the insn
has an inline-asm in it.
Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
{
if (NONJUMP_INSN_P (insn))
{
+ /* Inline-asm's cost is not very estimatable.
+ It could be a costly instruction but the
+ estimate would be the same as a non costly
+ instruction. */
+ if (asm_noperands (PATTERN (insn)) >= 0)
+ return false;
+
int cost = insn_cost (insn, speed) * REG_BR_PROB_BASE;
if (cost == 0)
return false;