MSP430 Stack pointer and frame pointer behavior
It looks like the compiler has allocated space for the local variable on the stack, rather than using a spare register.
You asked specifically about these lines:
    mov     #0, -4(r4) ; assign 0 to i
    add     #1, -4(r4) ; Adds one to int i

We see an unusual disassembly of -4(r4) as the destination for two instructions.  This is called register indexed addressing and you can read more about it in the msp-gcc manual:

MSP430 addressing modes
Indexed. The operand is in memory at address Rn+x

Therefore the destination for these instructions is located 4 bytes before the address stored in r4.  It's a bit like the equivalent in C: *(pointer - 4).
Although it is a simple program you might like to recompile with varying levels of optimisation.  You should see GCC start to do interesting things like omitting the function prologue where it isn't required and perhaps using a register for the i variable.