This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ask for suggestions on init_caller_save


On 03/30/2010 12:11 AM, Jeff Law wrote:
On 03/23/10 21:30, Jie Zhang wrote:
I'm fixing a bug. It's caused by uninitialized caller save pass data.
One function in the test case uses the "optimize" attribute with "O2"
option. So even with -O0 in command line, GCC calls caller save pass
for that function. The problem is init_caller_save is called in
backend_inti_target if flag_caller_saves is set. Apparently, in this
case, flag_caller_saves is not set when came to backend_inti_target. I
think there are several ways to fix this bug, but I don't know which
way should/can I go:

1. Always call init_caller_save in backend_inti_target. But it seems a
waste for most cases if -O0.

2. Call init_caller_save in IRA main function. But by this way it will
be called multiple times unless we create a flag to remember if it has
been called or not. Maybe we can reuse test_reg or test_mem. If they
are NULL_TREE, just call init_caller_save.

3. Call init_caller_save in handle_optimize_attribute. If
flag_caller_saves is not set before parse_optimize_options but set
after, call init_caller_save. Considering there might be multiple
functions using optimize attribute, we also need a flag to remember if
init_caller_save has been called or not.

4. There are only three global function in caller-save.c:
init_save_areas, setup_save_areas, and save_call_clobbered_regs. We
can just add a check in the beginning of those functions. If the data
has not been initialized, just init_caller_save first.


Any suggestions?
I'd suggest #2 with a status flag indicating whether or not caller-saves
has been initialized. That should be low enough overhead to not be a
problem.

Thanks. I will send a patch to gcc-patches and CC you.

--
Jie Zhang
CodeSourcery
(650) 331-3385 x735


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]