The problem is, egcs detects aliases based on size of type, not type. The stores to the float array kill the values in the integer array. If you compile with -fargument-noalias you should see the optimization you want. Be careful using this flag: it makes an assertion about pointer behavior which is not valid for some programs.