------- Comment #2 from brian dot e dot bliss at intel dot com 2009-08-05 18:46 ------- My interpretation of that rule is that this is a legal testcase as long as ub is even at runtime. If ub is odd, then the behavior is undefined.
Anyway - that is a subject for bug 39495. What I'm trying to address here is the codegen problem, which doesn't seem to depend on the termination condition. Try #include <stdlib.h> #include <omp.h> void foo(unsigned ub, unsigned N, unsigned *array) { unsigned i; #pragma omp for schedule(dynamic) for (i = ub; i > N; i -=2) { array[i] = i; } } and you still see ia32 code in setting up the parameters for the call to GOMP_loop_dynamic_start: movl $1, %ecx movl $4294967294, %edx movq %rbx, %rsi movq %rax, %rdi call GOMP_loop_dynamic_start -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40967