This is the mail archive of the gcc-patches@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]

[cft] rewrite of virtual register instantiation


I was disapointed to discover that we can't actually git rid of this
entirely.  The problem is that we have to know
current_function_outgoing_args_size, and we can't get that until we
examine or expand all of the calls in the function.  And because 
arbitrary trees can expand into arbitrary libcalls, we can't get see
all of the calls without expanding the entire function.

But once again I ran into a situation in which the existing pass 
fails to do anything reasonable.  In particular, if an insn has
match_dups, and one of those dups touches a virtual register, then
instantiation will not succeed.  The reason for that is that the
existing pass instantiates each virtual register instance and
immediately calls validate_change.  If we'd processed the entire 
insn first, then we'd have been ok.

So that's what this rewrite does.  It assumes that virtual registers
don't appear outside of insn operands.  We can then process each
in turn, use predicates, and reflect changes into duplicates.  Whee!

I appear to have good results for i686, amd64, and ia64 linux.  If
folks would try this on other targets, I'd appreciate it.


r~

Attachment: d-virt-1
Description: Text document


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