Apparently, the compiler likes -floop-optimize2 very much and does not want it to be switched off:
$ gcc -O1 -fno-loop-optimize -fno-loop-optimize2 -S -fverbose-asm example.c $ cat example.s .file "example.c" .pred.safe_across_calls p1-p5,p16-p63 // GNU C version 4.0.0 20050130 (experimental) (ia64-unknown-linux-gnu) // compiled by GNU C version 4.0.0 20050130 (experimental). // GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 // options passed: -auxbase -O1 -fno-loop-optimize -fno-loop-optimize2 // -fverbose-asm // options enabled: -falign-loops -fargument-alias -fbranch-count-reg // -fcommon -fcprop-registers -fdefer-pop -feliminate-unused-debug-types // -ffunction-cse -fgcse-lm -fguess-branch-probability -fident // -fif-conversion -fif-conversion2 -fivopts -fkeep-static-consts // -fleading-underscore -floop-optimize2 -fmath-errno -fmerge-constants // -fomit-frame-pointer -fpeephole -freg-struct-return -fsched-interblock // -fsched-spec -fsched-stalled-insns-dep -fsplit-ivs-in-unroller // -ftrapping-math -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce // -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-loop-im // -ftree-loop-ivcanon -ftree-loop-optimize -ftree-lrs -ftree-sra // -ftree-ter -funwind-tables -fverbose-asm -fzero-initialized-in-bss // -mgnu-as -mgnu-ld -minline-float-divide-max-throughput -mdwarf2-asm // -mtune=itanium2 .text .align 16 .global main# .proc main# main: .prologue .body mov r8 = r0 // <result>, br.ret.sptk.many b0 // ;; .endp main# .ident "GCC: (GNU) 4.0.0 20050130 (experimental)" $ gcc -dumpmachine ia64-unknown-linux-gnu -- Summary: -fno-loop-optimize2 does not work Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: driver AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: Thomas dot Koenig at online dot de CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19825