From I've been watching my code block size increase steadily as I work on my project and I'm now aware first hand of how assembler can be much more efficient that what a compiler can do.
I wanted to share a method I use to determine if my C optimizations are reducing the code size.
If you look inside the project.map file, at the top, look for the name of the function you're working on like this:
S_main__Update_LFO_LED_Status code 0x006304 program 0x0000fa
On the end is the size of the function in bytes: 0x0000fa = 250 bytes
Every time you compile your source, the project.map will update the starting address of the functions and show the bytes it uses.