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] |
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] |