------- Comment #4 from pinskia at gcc dot gnu dot org 2006-11-12 08:35 ------- The only thing left from __task_rq_lock is a label. If we look at that inlined function, we see: static inline __attribute__((always_inline)) struct rq *__task_rq_lock(struct task_struct *p)
{ struct rq *rq; repeat_lock_task: rq = (&(*((void)((task_cpu(p))), &per_cpu__runqueues))); do { do { } while (0); (void)0; (void)(&rq->lock); } while (0); if (__builtin_expect(!!(rq != (&(*((void)((task_cpu(p))), &per_cpu__runqueues)))), 0)) { do { do { } while (0); (void)0; (void)(&rq->lock); } while (0); goto repeat_lock_task; } return rq; } the if is never true as rq is always equal to &per_cpu__runqueues. The calls to task_cpu were inlined and we constant proped the value of rq the first of the way through the function which we inlined this to. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29792