What do you mean with 'the signal is generated purely by using instruction delays in the program'?
It may be that the compiler is more agressive in optimizations, and this may affect your delay instructions if they are not properly implemented.
If you are using delay routines in C, it may be a good thing to declare the loop variables/etc as volatile. Even better and recommended: implement delays in assembly code so you have complete control over it.
Some other hints: add the option -Lst (to create listing files) to your project and compile them with both compilers. Then compare them using a diff utility. Or compare the map file to find out where are the differences.
BK