------- Comment #4 from changpeng dot fang at amd dot com 2010-06-14 22:22 ------- There is nothing wrong in the prefetch itself. The problem is __builtin_prefetch call used for prefetch instruction. Whenever, there is a non-local lable in the current function, the __builtin_prefetch inserted will be considered as a control flow statement:
is_ctrl_altering_stmt (gimple t) { .... /* A non-pure/const call alters flow control if the current function has nonlocal labels. */ if (!(flags & (ECF_CONST | ECF_PURE)) && cfun->has_nonlocal_label) { return true; ... } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44503