Compiled size got SMALLER after setting heavily-used functions as inline?

I've got a program where I need to absolutely squeeze out as much speed as possible. I've set the Arduino IDE to pass -O3 to g++. This helped a bit, but I still need more speed if possible. So, I set a lot of heavily-used functions as inlines. I recompiled, and the output binary is a few dozen kilobytes SMALLER than before! It also feels slightly slower. Take out the "inline" attributes, and code size goes back to being large again. This is not making sense to me. Does anybody have an explanation for this?

So, I set a lot of heavily-used functions as inlines. I recompiled, and the output binary is a few dozen kilobytes SMALLER than before!

A few dozen kilobytes smaller, on an Arduino that has at most 256 kilobytes of program space stretches the limits of credibility.

Of course, you posted no code, and didn't explain which Arduino you have, or what version of the IDE you are using, so we can only shake our heads and move on.

I've got a program ...

What program?

So, I set a lot of heavily-used functions as inlines

What functions?

the output binary is a few dozen kilobytes SMALLER than before

What was it before, and what is it now?

It also feels slightly slower

Feels? What do your measurements tell you? Before and after?

Does anybody have an explanation for this?

I have to agree with PaulS that this is just handwaving.

"I had something, I changed something, it is now different, can you explain why?"