https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65752
--- Comment #36 from rguenther at suse dot de <rguenther at suse dot de> --- On Tue, 26 May 2015, gil.hur at sf dot snu.ac.kr wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65752 > > --- Comment #35 from Chung-Kil Hur <gil.hur at sf dot snu.ac.kr> --- > (In reply to rguent...@suse.de from comment #34) > > On Sat, 23 May 2015, gil.hur at sf dot snu.ac.kr wrote: > > > > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65752 > > > > > > --- Comment #33 from Chung-Kil Hur <gil.hur at sf dot snu.ac.kr> --- > > > Dear Richard, > > > > > > Thanks for the detailed response. > > > > > > I have a suggestion for a solution of the problem, which is based on my > > > paper > > > to appear at PLDI 2015. > > > > > > * A Formal C Memory Model Supporting Integer-Pointer Casts. > > > Jeehoon Kang, Chung-Kil Hur, William Mansky, Dmitri Garbuzov, Steve > > > Zdancewic, Viktor Vafeiadis. > > > http://sf.snu.ac.kr/gil.hur/publications/intptrcast.pdf > > > > > > The suggestion is simple. > > > You do not need to turn off the phiopt optimizations. > > > We propose to slightly change the following assumption. > > > > > > > PTA considers that all pointers coming from integer constants > > > > point to global memory only. > > > > > > Here, if you change this as follows, you can solve the problem. > > > > > > * All pointers coming from integer constants can point to only global > > > memory > > > and > > > local variables whose addresses have been cast to integers. > > > > Ok, so you basically add a 2nd class of "escaping". So in GCC PTA > > terms you'd add a new ESCAPE-like 'INTEGER' variable with > > > > INTEGER = NONLOCAL > > > > and add > > > > INTEGER = x > > > > constraints for each > > > > .. = (integer-type) &x > > > > conversion and for the reverse > > > > ptr = (pointer-type) i > > > > add > > > > ptr = INTEGER > > > > > Also, we expect that this would not decrease the optimization performance > > > of > > > GCC very much because those variables whose addresses have been cast to > > > integers tend to be escaped (e.g. passed to a hash function, or stored in > > > the > > > memory). > > > > Well - the above basically makes _all_ pointers converted from integers > > point to non-local memory, it also basically globs all pointers > > converted from integers into a single equivalence class. > > Yes, this is right. > > > So I think you underestimate the effect on optimization (but I may > > overestimate the effect on optimization of not simply making all > > pointers converted from integers point to all globals and all > > address-taken locals, aka ANYTHING in GCC PTA terms) > > Just one minor correction: > all address-taken locals -> all address-taken-and-cast-to-integer locals > > Yes, I agree. > In order to understand the effect, we need some empirical evidence. > I am interested in this direction. > So, I wonder what benchmarks you usually use to check the effect of compiler > optimizations. > More specifically, are SPEC benchmarks enough? or do you use some other > benchmarks too? SPEC CPU tends to capture most of this though we also periodically check other "benchmarks" such as firefox and its few performance tests or similar big C++ programs.