Given this simple program:
$ cat ret.imc .sub main @MAIN P5 = new PerlString P5 = "ok\n" foo() print P5 .end .sub foo .local pmc ok ok = new PerlString ok = "bug\n" .return(ok) .end
$ parrot ret.imc bug
The usage of the register P5 in main isn't invalid: the register allocator might have (in a more complex program) just not found any other free register. And as the main program just calls a function in void context the register P5 could have been used.
Defining now that P5 has to be preserved in main, because it's a possible return result of foo() and therefore may be clobbered by foo() is meaning, that we have effectively just 16 registers per kind available for allocation around a function call.
If the latter is true according to current pdd03 then we are wasting half of our registers for a very doubtful advantage: being able to pass return values in R5..R15.
leo