Related articles |
---|
C++ virtual function calls tim@franck.Princeton.EDU (1995-09-29) |
Re: C++ virtual function calls cliffc@ami.sps.mot.com (1995-10-05) |
Re: C++ virtual function calls dlmoore@ix.netcom.com (1995-10-14) |
Re: C++ virtual function calls genew@mindlink.bc.ca (1995-10-23) |
Re: C++ virtual function calls cliffc@ami.sps.mot.com (1995-10-25) |
Re: C++ virtual function calls joe@sanskrit.ho.att.com (1995-10-30) |
Re: C++ virtual function calls jplevyak@violet-femmes.cs.uiuc.edu (John B. Plevyak) (1995-11-09) |
Re: C++ virtual function calls cliffc@ami.sps.mot.com (1995-11-05) |
Re: C++ virtual function calls martelli@cadlab.it (1995-11-05) |
Re: C++ virtual function calls bothner@cygnus.com (Per Bothner) (1995-11-06) |
C++ virtual function calls fjh@cs.mu.OZ.AU (1995-11-12) |
Re: C++ virtual function calls jplevyak@pink-panther.cs.uiuc.edu (1995-11-16) |
Newsgroups: | comp.compilers |
From: | cliffc@ami.sps.mot.com (Cliff Click) |
Keywords: | C++, optimize |
Organization: | none |
References: | 95-10-029 95-11-020 |
Date: | Sun, 5 Nov 1995 01:22:53 GMT |
joe@sanskrit.ho.att.com (Joe Orost) writes:
> I don't think it is legal to hoist the virtual function lookup
> out of the loop:
>
> for( ...) {
> p->virt_func();
> }
>
> because "p" is passed to virt_func as "this", and therefore the
> function could change the subtype of "p", causing a different
> function to be called next time around the loop!
The compiler _could_ know something about p that precluded this.
Such as: p is a local variable whose address has not "escaped".
This all becomes more obvious if we explode this HLL call into
some low-level instructions:
loop:
ld r1 <- _p(stack) # r1 has type: ptr to object
ld r2 <- vptr_off(r1) # r2 has type: const array of member fcn ptrs
ld r3 <- virt_func(r2) # r3 has type: ptr to member fcn
mov arg0 <- r1 # Move r1 into hidden "this" parameter
call r3 # Make the call
...
goto loop
If p's address is not taken then the virtual fcn can't change it,
r1 becomes loop invariant (as does r2 and r3). Various flavors of
interprocedural analysis might discover p is invariant dispite it's
address being exposed.
Cliff
--
Cliff Click Compiler Researcher & Designer
RISC Software, Motorola PowerPC Compilers
cliffc@risc.sps.mot.com (512) 891-7240
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.