On 2015-08-25 10:47, Niall Douglas wrote:
On 25 Aug 2015 at 16:32, Andreas Schäfer wrote:
I'm still unsure what "51 opcodes <= Value transport <= 32 opcodes" is supposed to mean.
Min/max code bloat for a monad<int> or future<int>.
So the minimum is 51 and the maximum is 32?
Correct. That non-sensical outcome is due to definition. The minimum code bloat _should_ result from a known-memory outcome where the compiler knows for a fact memory has some value, and therefore can prune branching down to no code output at all. The maximum code bloat is where memory has unknown state, and therefore the compiler must generate all possible branches for that unknown state.
Compiler optimisers are not as deterministic as perhaps they should be, so you get this weird outcome where the compiler generates more bloat for the known case than the unknown case. Which is a compiler optimiser bug, strictly speaking.
In this case perhaps you should document these differently. Label the two values for what they are, rather than using misleading inequalities; something like: Code bloat when memory known: 51 Code bloat when memory unknown: 32 (and each case should ideally link to the source code you're using to measure this bloat so someone who needs to understand the details can do so, or at least link back to the definitions). John