two-element struct performance (was: strict-aliasing and typedefs)

Gabriel Dos Reis gdr@integrable-solutions.net
Tue Feb 24 10:29:00 GMT 2004


law@redhat.com writes:

| In message <20040220080315.GA25175@redhat.com>, Richard Henderson writes:
|  >On Thu, Feb 19, 2004 at 04:16:59PM -0700, law@redhat.com wrote:
|  >> Doing better would require that the tree-ssa optimizers know about ABI
|  >> details for passing parameters and return values -- if it had that knowledg
|  >e
|  >> then it would know that the caller will provide a suitable memory location
|  >> for the return value and we could use it directly instead of first building
|  >> the return value in T.6.
|  >
|  >I don't know that tree-ssa knowledge of ABI details is quite necessary.
|  >
|  >I think if we'd performed the computation into a RESULT_DECL rather than
|  >into a VAR_DECL temporary, that would effectively do the job since we
|  >can arrange for the RESULT_DECL to have rtl appropriate for a caller
|  >provided memory location.
| Done.  It's pretty trivial.  We now get the following:
| 
|   T.2 = arg->im + 0.0;
|   T.6.re = arg->re + 1.0e+0;
|   T.6.im = T.2;
|   return T.6;
| 
| The only thing I see now is that TER didn't replace the use of T.2 with
| its earlier assignment.  Probably due to the store between the assignment
| to T.2 and the later use of T.2.

Hey, pretty amazing progress, Jeff! Wow.

-- Gaby



More information about the Gcc mailing list