The reason here is most probably the same as it was in your other thread. If you comment "if" statement the compiler sees that it doesn't need to generate B at all and doesn't produce code which occupies registers.
but the new situation is that the if condition will hold for some unique work-item, so I can't delete the if statement since I do need the "answer in __private" copy to " __global area" and then send to "host memory".
So you have a kernel which consumes 25 registers. If you need help with reducing register usage you better copy the code of the kernel right here.
The fact that if you remove part of code you get less registers used by the kernel is irrelevant here - as far as the modified kernel doesn't do what you need.
And, by the way, could you tell me why do you need to reduce register usage? 25 registers looks fine.