When the result is already in the right place
Sometimes a function does nothing but call another and hand back what it gets. Because the callee leaves its result in r3 — exactly where our own return value must be — there is no shuffling to do between the call and the return. Consider relay(s32 n) { return mapper(n); }:
stwu r1,-16(r1)
mflr r0
stw r0,20(r1)
bl mapper
lwz r0,20(r1)
mtlr r0
addi r1,r1,16
blr
This still isn't a leaf — the bl forces the full frame so the link register survives — but between the prologue and epilogue there is just a single bl. There's no mr to move the result into place because mapper's return register and relay's return register are the same r3. The argument passes straight through r3 untouched as well.
Note this is not a tail call in the optimized sense: MWCC GC/2.0 does not do tail-call elimination, so you always get the full prologue/epilogue around the bl and a blr to return — never a bare b target that reuses the caller's frame. Don't go looking for that pattern; this compiler never emits it.
Your task
Write call_it to match the target. helper is declared for you. Expect the call surrounded only by the prologue and epilogue.