I am using icpc version 13.1.0 and I am puzzled why my function is not inlined. The function is a overloaded + operator, with only a few additions inside. I tried to put the definition inside the class (implicit inlining?), but also the keywords __inline and __forceinline when the definition was not put in the class. In addition, I also tried the compiler options -inline-forceinline and -no-inline-factor, but all without luck. To understand why this function is not inlined, I am using option -opt-report. Find below a report snippet of what I think is the relevant part:
INLINING REPORT: (main) [1/2=50.0%]
-> (NOFORCE): _ZN6md_vecplERKS_(1) (isz = 13) (sz = 22 (7+15))
INLINING REPORT: (_ZN6md_vecplERKS_) [2/2=100.0%]
The problem is that I don't know how to read this. So here are my questions:
- can the verbosity be increased, or can it be printed in a more human readable form?
- is there any documentation on this?
- I also tried option -diag-dump and do see some
"forceinline could not be honored due to safety/correctness checks"
"__inline and __forceinline are not allowed here"
but I am not sure to what it applies, so it doesn't give me more clues either.
Any idea is more than welcome.
Thanks in advance,