This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Scheduling problem
- From: "袁立威" <xzfkiller at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Mon, 8 Oct 2007 17:06:37 +0800
- Subject: Scheduling problem
Hi, everyone
I'm a guy working on IA64 with gcc version 4.1.1, and I need to do
some instrumentation to do information flow tracking.
Instrumentation is insert after register allocation and before the
second scheduling, I suppose gcc will automatic maintain data flow,
and it seems to be
except one situation:
consider the following code:
mov r8=pr
cmp.eq p6,p7=something0
(p6) something1
(p7) something2
mov pr=r8,-1
when I can't find dead predicate register, I find a general register
and save pr into the general reigster, now pr can be freely used,
after using, I restore
the previous pr.
This code is right, but after scheduling. It will change into:
mov r8=pr
cmp.eq p6,p7=something0
(p6) something1
mov pr=r8,-1
(p7) something2
now p7 is not the right value set by the cmp because it is restored to
the original value.
How this can be solve, or how to tell gcc that this 'mov pr'
instruction must after '(p7) something2'?