https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98265

--- Comment #5 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
We do not inline CwiseNullaryOp because it uses comdat local symbols.
This is because we do split the function and the .part stays local.

At least we should recompute if function calls comdat local after comdat local
function is inlined.

IPA function summary for Eigen::Matrix<float, 3, 1> should_inline(float, float,
float, float)/2 inlinable fp_expression
  global time:     36.000000
  self size:       21
  global size:     29
  min size:       24
  self stack:      16
  global stack:    20
    size:19.000000, time:18.500000
    size:4.500000, time:3.500000,  executed if:(not inlined)
  calls:
    operator*.isra/90 inlined
      freq:1.00
      Stack frame offset 16, callee self size 4
      Eigen::CwiseNullaryOp< <template-parameter-1-1>, <template-parameter-1-2>
>::CwiseNullaryOp(long int, long int, Eigen::scalar_constant_op<float>) [with
<template-parameter-1-1> = Eigen::scalar_constant_op<float>; PlainObjectType =
Eigen::Matrix<float, 4, 5, 6, 4, 5>]/20 callee refers to comdat-local symbols
        freq:1.00 loop depth: 0 size: 5 time: 14 callee size: 6 stack: 0
         op0 is compile time invariant
         op0 points to local or readonly memory
         op1 is compile time invariant
         op2 is compile time invariant
         op2 points to local or readonly memory

Reply via email to