Re: PR 25512: pointer overflow defined?

2005-12-22 Thread Richard Guenther
On Wed, 21 Dec 2005, Robert Dewar wrote:

> Gabriel Dos Reis wrote:
> 
> >with no more qualifications (this definition is slightly different in
> >some nearby languages), it is slippery to found optimizations on
> >"pointer overflows."
> >  
> >
> Well I think unfortunately the standard does allow such "optimizations", but
> that does
> not mean it is a good thing to take advantage of this.

Another example is

char a[2];
void foo(void)
{
  char *p = &a[1];
  if (p + 0x > p)
abort ();
}

where, on a 32bit arch, p + 0x will point to a[0] (does the std
say so?), but we still optimize the test to if (1) abort (); because
we say "pointer overflow" is undefined.  Using p - 1 > p will work as
expected.

So the basic question remains - is pointer overflow defined?

Richard.


how to add source or header file in gcc

2005-12-22 Thread Liu Haibin
Hi,

I'd like to add some source and header files into gcc. I think I
probably need to make some change in Makefile.in. But the Makefile.in
looks very complicated. Could anyone give some advice on this?


Regards,
Haibin


Re: PR 25512: pointer overflow defined?

2005-12-22 Thread Richard Guenther
On Wed, 21 Dec 2005, Paolo Carlini wrote:

> Gabriel Dos Reis wrote:
> 
> >| Humpf! Can people please cite exact paragraphs of the relevant
> >| Standards? Otherwise, I think we are just adding to the confusion. For
> >| example, in my reading of C99 6.5.9 and C++03 5.10 pointers *can* be
> >| compared for equality and discussing separately and correctly relational
> >| operators and equality operators is not a language-lawyer-ism, is *very*
> >| important for its real world implications. But this is only an example...
> >
> >I don't understand your query.
> >I understood Chris' comment as having to do with the implementation of
> >std::less (and friends) as required by C++.  Our implementation is just 
> >a forwarding function to operator< (and friends) on the assumption
> >that the compiler uses the "obvious" model.
> >  
> >
> Nobody disagree with that, of course (in fact, we discussed a bit that
> specific point with Chris time ago, when probably he wanted to avail
> himself of ordering to improve some bits of debug mode). Only, I become
> nervous when I read sentences like "pointers to different objects cannot
> be compared", without qualifications. Agreed, given sufficient context
> you can disambiguate, but I would appreciate a more precise way of
> casting the various points of views, supported by citations of the
> standard (e.g., like *you* are doing ;)

The point is, to do a comparison on pointers, you should do the math
on the appropriate (unsigned) integer type.  I.e. std::less for pointers
could look like

 template 
 less(T*a, T*b) { return (uintptr_t)a < (uintptr_t)b; }

where you get the ordering defined by the bit-representation of the
pointer.  We document the implementation defined behavior here as

4.7 Arrays and pointers

* The result of converting a pointer to an integer or vice versa (C90 
6.3.4, C99 6.3.2.3).

  A cast from pointer to integer discards most-significant bits if the 
pointer representation is larger than the integer type, sign-extends1 if 
the pointer representation is smaller than the integer type, otherwise the 
bits are unchanged.

i.e. exactly as you expect.

Richard.


Re: PR 25512: pointer overflow defined?

2005-12-22 Thread Andrew Haley
Richard Guenther writes:
 > 
 > So the basic question remains - is pointer overflow defined?

No.  You've already asked, and it's already been answered, with
langauge from the standard.  What more do you want?

Andrew.


Re: PR 25512: pointer overflow defined?

2005-12-22 Thread Richard Guenther
On Wed, 21 Dec 2005, Gabriel Dos Reis wrote:

> There is:
> 
> 
>[#5] An integer  may  be  converted  to  any  pointer  type.
>Exceptaspreviouslyspecified,   the   result   is
>implementation-defined,  might  not  be  correctly  aligned,
>might  not  point  to  an entity of the referenced type, and
>might be a trap representation.56)
> 
>[#6]  Any  pointer type may be converted to an integer type.
>Except   as   previously   specified,theresultis
>implementation-defined.  If the result cannot be represented
>in the integer type, the behavior is undefined.  The  result
>need not be in the range of values of any integer type.
> 
> and
>3.4.1
>[#1] implementation-defined behavior
>unspecified behavior where each implementation documents how
>the choice is made
> 
> | other than they are value preserving, i.e. if you convert a pointer to
> | an integer
> | that is large enough, and back to a pointer, you get the pointer
> | back. As far as I
> | know nothing more can be said.
> 
> What need is to document what mapping is used to compute the result of
> the conversion. Till now, people have assumed that GCC wouold use the
> "obvious" model and write codes based on that.  On the other hand, GCC
> has been getting more "aggressive" (I don't quite like the word)
> transformations and things start breaking.  That ask for more precise
> documentation.

We do:

4.7 Arrays and pointers

* The result of converting a pointer to an integer or vice versa (C90 
6.3.4, C99 6.3.2.3).

...


> As for the comparison, lots of C programs do things like comparing for
> equality to (void *)-1; it is a question as whether you'll declare
> such programs as having undefined behaviour (if yes, I don't see how)
> or have implementation-defined semantics (if yes, then we need to say
> what can be done to such pointers).

I think equality comparisons are not a problem, imposing an ordering
on the bit-representation of pointers is, though (as the std doesn't
require this).

Richard.


Re: PR 25512: pointer overflow defined?

2005-12-22 Thread Richard Guenther
On Thu, 22 Dec 2005, Andrew Haley wrote:

> Richard Guenther writes:
>  > 
>  > So the basic question remains - is pointer overflow defined?
> 
> No.  You've already asked, and it's already been answered, with
> langauge from the standard.  What more do you want?

Well, nothing - just again clarification as there seems to be a lot
of confusion in this thread ;)

Richard.


Re: PR 25512: pointer overflow defined?

2005-12-22 Thread Andrew Haley
Richard Guenther writes:
 > On Thu, 22 Dec 2005, Andrew Haley wrote:
 > 
 > > Richard Guenther writes:
 > >  > 
 > >  > So the basic question remains - is pointer overflow defined?
 > > 
 > > No.  You've already asked, and it's already been answered, with
 > > langauge from the standard.  What more do you want?
 > 
 > Well, nothing - just again clarification as there seems to be a lot
 > of confusion in this thread ;)

Well, there were a few "red herring" moments, for sure.  But the
relevant language is Section 6.5.6 which describes the + operator.
Any operands other than the ones described in that section are
undefined.

Andrew.


Error -- Question Not Submitted

2005-12-22 Thread Rowley Support
Dear gcc@gcc.gnu.org,


Your question was not submitted to the helpdesk because of a problem:


You need to register online at http://ccgi.rowley.co.uk/support/ before you
can submit new questions via e-mail.


Why is this?  To provide better tracking of user issues and because we need to
reduce the number of spam messages that enter our e-mail support system.


You do not need to register to sumbit a question using our "Ask a Question"
form, you only need to register if you want to send new questions by e-mail.


You can send questions to us using a web interface at
http://ccgi.rowley.co.uk/support/.


Please re-submit your request again after correcting the above error,
or visit http://ccgi.rowley.co.uk/support/ to submit your question online.



asm label generation bug?

2005-12-22 Thread Piotr Wyderski
HOST: AIX, 8 * IBM POWER2 CPU
COMPILER: GCC 4.0.1, GCC 3.4.4

I am trying to compile my low-level library, which contains
several inline assembly functions. It doesn't work, because
the compiler (4.0.1) does not replace local labels from the
assembly code (i.e. "0:", "1:", etc.) with their machine-specific
replacements ("LCFI..4:" and so on). It generates the labels
literally, i.e. the template

__asm__ __volatile__("0: bne 0b")

is translated into

[...]

0: bne 0b

instead of, for example,

L0: bne L0

and then the assembler fails. If I hardcode the label manually, it works.
Even this simple excerpt form Postgres SQL (to exclude my own mistakes)
doesn't compile because of the error described above:

typedef unsigned int word_t;

static __inline__ int
tas(volatile word_t *lock)
{
 word_t _t;
 int _res;

 __asm__ __volatile__(
" lwarx   %0,0,%2  \n"
" cmpwi   %0,0  \n"
" bne 1f   \n"
" addi%0,%0,1  \n"
" stwcx.  %0,0,%2  \n"
" beq 2f  \n"
"1: li  %1,1  \n"
" b  3f   \n"
"2:  \n"
" isync\n"
" li  %1,0  \n"
"3:  \n"

: "=&r" (_t), "=r" (_res)
: "r" (lock)
: "cc", "memory"
 );
 return _res;
}

int main(int argc, char *argv[]) {

word_t x;
tas(&x);
return 0;
}

Assembler:
/tmp//cckkGueR.s: line 54: 1252-142 Syntax error.
/tmp//cckkGueR.s: line 57: 1252-142 Syntax error.
/tmp//cckkGueR.s: line 58: 1252-142 Syntax error.
/tmp//cckkGueR.s: line 59: 1252-142 Syntax error.
/tmp//cckkGueR.s: line 60: 1252-142 Syntax error.
/tmp//cckkGueR.s: line 63: 1252-142 Syntax error.

which is exactly where the labels were emitted. GCC 3.4.4 has an
additional bug/misfeature related with some missing instruction patterns:

Assembler:
/tmp//ccgioejq.s: line 538: 1252-149 Instruction lwarx is not implemented in
the current assembly mode COM.
/tmp//ccgioejq.s: line 540: 1252-142 Syntax error.
/tmp//ccgioejq.s: line 542: 1252-149 Instruction stwcx. is not implemented
in the current assembly mode COM.
/tmp//ccgioejq.s: line 543: 1252-142 Syntax error.
/tmp//ccgioejq.s: line 544: 1252-142 Syntax error.
/tmp//ccgioejq.s: line 545: 1252-142 Syntax error.
/tmp//ccgioejq.s: line 546: 1252-142 Syntax error.
/tmp//ccgioejq.s: line 549: 1252-142 Syntax error.
/tmp//ccgioejq.s: line 619: 1252-149 Instruction stwcx. is not implemented
in the current assembly mode COM.
/tmp//ccgioejq.s: line 654: 1252-149 Instruction lwarx is not implemented in
the current assembly mode COM.

Best regards
Piotr Wyderski




Re: asm label generation bug?

2005-12-22 Thread Daniel Jacobowitz
On Thu, Dec 22, 2005 at 02:28:08PM +0100, Piotr Wyderski wrote:
> HOST: AIX, 8 * IBM POWER2 CPU
> COMPILER: GCC 4.0.1, GCC 3.4.4
> 
> I am trying to compile my low-level library, which contains
> several inline assembly functions. It doesn't work, because
> the compiler (4.0.1) does not replace local labels from the
> assembly code (i.e. "0:", "1:", etc.) with their machine-specific
> replacements ("LCFI..4:" and so on). It generates the labels
> literally, i.e. the template
> 
> __asm__ __volatile__("0: bne 0b")
> 
> is translated into
> 
> [...]
> 
> 0: bne 0b
> 
> instead of, for example,
> 
> L0: bne L0
> 
> and then the assembler fails.

I don't know what you expect GCC to do here.  The contents of inline
asm are passed through without modification, except for substituting
% references.  Note, the digit labels are a standard feature of the GNU
assembler - which you are not using.

> which is exactly where the labels were emitted. GCC 3.4.4 has an
> additional bug/misfeature related with some missing instruction patterns:
> 
> Assembler:
> /tmp//ccgioejq.s: line 538: 1252-149 Instruction lwarx is not implemented in
> the current assembly mode COM.

Again, this error is coming from the AIX assembler, not from GCC.  You
ned to pass the correct options (I don't know what they are) to that
assembler to make it accept these instructions.

-- 
Daniel Jacobowitz
CodeSourcery, LLC


Re: asm label generation bug?

2005-12-22 Thread Steven Bosscher
On Dec 22, 2005 02:28 PM, Piotr Wyderski <[EMAIL PROTECTED]> wrote:

> HOST: AIX, 8 * IBM POWER2 CPU
> COMPILER: GCC 4.0.1, GCC 3.4.4
>
> I am trying to compile my low-level library, which contains
> several inline assembly functions. It doesn't work, because
> the compiler (4.0.1) does not replace local labels from the
> assembly code (i.e. "0:", "1:", etc.) with their machine-specific
> replacements ("LCFI..4:" and so on).
 
The manual says: "This assumes your assembler supports local labels, as
the GNU assembler and most Unix assemblers do."  Does your assembler
support this?
 
Gr.
Steven
 



re: An odd behavior of dynamic_cast

2005-12-22 Thread Shin-ichi MORITA
Hi Dan,

> I think the right place for this question might have
> been gcc-help (http://gcc.gnu.org/ml/gcc-help/).

Thanks to Ben, I've already posted the same question to
gcc-help.

> > [ Why doesn't dynamic_cast work when I dlopen a
> shared library? ]

I've checked out http://gcc.gnu.org/faq.html#dso.
But in fact, I'm writing python extention module,
so I can't call dlopen() with RTLD_GLOBAL flag.

My actual question is:
- Why dynamic_cast across shared libraries
  works for VirtualTag in test1?
  (though I use dlopen() in test1.)
- Is it correct to use this workaround
  (i.e. making a class polymorphic)
  when I can't use RTLD_GLOBAL flag?

Thanks.


--- Dan Kegel <[EMAIL PROTECTED]> wrote:
> [EMAIL PROTECTED] wrote:
> > [ Why doesn't dynamic_cast work when I dlopen a
> shared library? ]
> 
> I think the right place for this question might have
> been
> gcc-help (http://gcc.gnu.org/ml/gcc-help/).
> Nevertheless, I think
> http://gcc.gnu.org/faq.html#dso
> should answer your question.
> - Dan
> 
> --
> Wine for Windows ISVs: http://kegel.com/wine/isv


--
STOP HIV/AIDS.
Yahoo! JAPAN Redribbon Campaign 2005
http://pr.mail.yahoo.co.jp/redribbon/


selection or target tools

2005-12-22 Thread Gunther Nikl
Hello!

The new scheme to select target tools breaks building GCC for me. Maybe I
have an unusal setup. The problem in my case is that configure now chooses
tools from $prefix/bin. It did use tools from $prefix/$target/bin before.
On my setup I have *different* tools in those places. Until know the tools
from $prefix/$target/bin were selected and everything was fine. Now the
build process creates eg. gcc/as which uses as from $prefix/bin. That
assembler is *never* invoked when I running -gcc. Thus I am
surprised that configure now prefers that version. Is the current
behaviour a bug?

Gunther


Re: selection or target tools

2005-12-22 Thread Daniel Jacobowitz
On Thu, Dec 22, 2005 at 05:34:14PM +0100, Gunther Nikl wrote:
> Hello!
> 
> The new scheme to select target tools breaks building GCC for me. Maybe I
> have an unusal setup. The problem in my case is that configure now chooses
> tools from $prefix/bin. It did use tools from $prefix/$target/bin before.
> On my setup I have *different* tools in those places. Until know the tools
> from $prefix/$target/bin were selected and everything was fine. Now the
> build process creates eg. gcc/as which uses as from $prefix/bin. That
> assembler is *never* invoked when I running -gcc. Thus I am
> surprised that configure now prefers that version. Is the current
> behaviour a bug?

>From your description I assume this is a native build ($target ==
$host).  When did this change?  Also, _why_ do you have different tools
in those two places?

It looks to me like this last changed around 2005-06-16 on HEAD, and we
assume that the assembler installed in $prefix is the assembler you
want the compiler to be using - it's the same assembler you'd get if 
you said "as", so why shouldn't we use it?

-- 
Daniel Jacobowitz
CodeSourcery, LLC


Re: selection or target tools

2005-12-22 Thread Paolo Bonzini



It looks to me like this last changed around 2005-06-16 on HEAD, and we
assume that the assembler installed in $prefix is the assembler you
want the compiler to be using - it's the same assembler you'd get if 
you said "as", so why shouldn't we use it?


When building from a combined tree, I still see that the compiler is 
using the assembler in $prefix/$target/bin/as even for a native 
configuration.


research:/tools/paologcc/bin bonzinip$ ./i686-pc-linux-gnu-gcc -### 
~/dump-alldata.c -c

Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ../configure --enable-languages=c --prefix=/tools/paologcc
Thread model: posix
gcc version 4.2.0 20051123 (experimental)
"/tools/paologcc/libexec/gcc/i686-pc-linux-gnu/4.2.0/cc1" "-quiet" 
"-isystem" "/home/bonzinip/include" "/home/bonzinip/dump-alldata.c" 
"-quiet" "-dumpbase" "dump-alldata.c" "-mtune=pentiumpro" "-auxbase" 
"dump-alldata" "-o" "/tmp/ccrSYooh.s"
"/tools/paologcc/lib/gcc/i686-pc-linux-gnu/4.2.0/../../../../i686-pc-linux-gnu/bin/as" 
"-Qy" "-o" "dump-alldata.o" "/tmp/ccrSYooh.s"


Paolo


Re: selection or target tools

2005-12-22 Thread Daniel Jacobowitz
On Thu, Dec 22, 2005 at 05:58:34PM +0100, Paolo Bonzini wrote:
> 
> >It looks to me like this last changed around 2005-06-16 on HEAD, and we
> >assume that the assembler installed in $prefix is the assembler you
> >want the compiler to be using - it's the same assembler you'd get if 
> >you said "as", so why shouldn't we use it?
> >
> When building from a combined tree, I still see that the compiler is 
> using the assembler in $prefix/$target/bin/as even for a native 
> configuration.

Sure - after it's installed, I'm talking about the stamp-as rule during
the build.

-- 
Daniel Jacobowitz
CodeSourcery, LLC


Re: selection or target tools

2005-12-22 Thread Paolo Bonzini

Daniel Jacobowitz wrote:


On Thu, Dec 22, 2005 at 05:58:34PM +0100, Paolo Bonzini wrote:
 


It looks to me like this last changed around 2005-06-16 on HEAD, and we
assume that the assembler installed in $prefix is the assembler you
want the compiler to be using - it's the same assembler you'd get if 
you said "as", so why shouldn't we use it?


When building from a combined tree, I still see that the compiler is 
using the assembler in $prefix/$target/bin/as even for a native 
configuration.
   


Sure - after it's installed, I'm talking about the stamp-as rule during
the build.


I am a bit confused.

Does Gunther's failure mean that the default for the proposed 
--with-build-tools option, should be $prefix/$target/bin?  This would 
set AS_FOR_TARGET, etc. from within the GCC_TARGET_TOOL toplevel 
configure macro, and percolate all the way down to gcc.


Paolo


Re: selection or target tools

2005-12-22 Thread Daniel Jacobowitz
On Thu, Dec 22, 2005 at 06:13:22PM +0100, Paolo Bonzini wrote:
> I am a bit confused.
> 
> Does Gunther's failure mean that the default for the proposed 
> --with-build-tools option, should be $prefix/$target/bin?  This would 
> set AS_FOR_TARGET, etc. from within the GCC_TARGET_TOOL toplevel 
> configure macro, and percolate all the way down to gcc.

If I am following correctly:

The assembler we test for features in Gunther's case has always been
$prefix/bin/as - luckily harmless for him and he probably never
noticed.  The installed compiler uses $prefix/$target/bin/as. The
being-built compiler has switched from one to the other.

One appropriate default for --with-build-tools could be the same as
the defaults for --program-transform-name.  A default native build
would use 'as', a default cross build would use '$target-as'.  Most
people using --program-prefix would probably also pass the same value
to --with-build-tools.

-- 
Daniel Jacobowitz
CodeSourcery, LLC


Re: How can I register gcc build status for HP-UX 11i

2005-12-22 Thread Janis Johnson
On Thu, Dec 22, 2005 at 10:08:14AM +0900, 김성박 wrote:
> How can I register gcc build status for HP-UX 11i
> 
> I successfully installed gcc3.4.4 & gcc 4.0.0 for hppa64-hp-hpux11.11
> but therer are no build status in http://gcc.gnu.org/gcc-3.4/buildstat.html & 
> http://gcc.gnu.org/gcc-4.0/buildstat.html
> 
> And how can I make results for gcc.xxx testsuite like 
> http://gcc.gnu.org/ml/gcc-testresults/2004-09/msg01014.html ?
> 

Information about submitting information for the build status lists is
in http://gcc.gnu.org/install/finalinstall.html.  When you send mail to
gcc@gcc.gnu.org with the appropriate information I'll add a link to your
mail in the status list for that release.  I sometimes get behind in
updating the status lists; it's OK to send me a reminder privately.

Information about running the testsuite and submitting results is at
http://gcc.gnu.org/install/test.html.  If you include a link to the
archived test results in the build status mail I'll include it in the
build status list.  Sometimes I take the time to link to other test
results for releases, but often I get very behind on that as well.

Janis


Re: how to add source or header file in gcc

2005-12-22 Thread Mike Stump

On Dec 22, 2005, at 1:54 AM, Liu Haibin wrote:

I'd like to add some source and header files into gcc. I think I
probably need to make some change in Makefile.in. But the Makefile.in
looks very complicated. Could anyone give some advice on this?


google("make tutorial").  After that, you can just fire up your  
favorite editor and try it.  If it is too hard, try creating your own  
for a hello world style program and get that working, then,  
progressively add more complex features to the makefile that  
approximate the things that are unclear to you.


Another completely different way would be to find a file that someone  
added recently that is approximately like the file you want to add,  
then find the diff that added that file, then see what they change  
and how, you can try and structure your change the same way.  The  
classes of file to add include makefile fragments, port files,  
runtime files, language front end files, backend files, optimizer  
files and so on, all of them have different ways of going in.


Re: asm label generation bug?

2005-12-22 Thread Mike Stump

On Dec 22, 2005, at 5:28 AM, Piotr Wyderski wrote:

I am trying to compile my low-level library, which contains
several inline assembly functions. It doesn't work, because
the compiler (4.0.1) does not replace local labels from the
assembly code (i.e. "0:", "1:", etc.) with their machine-specific
replacements ("LCFI..4:" and so on). It generates the labels
literally, i.e. the template

__asm__ __volatile__("0: bne 0b")


Please submit a bug report to your assembler provider, it is  
broken.  :-)


Beyond that, you can use:

@samp{%=} outputs a number which is unique to each instruction in the
entire compilation.  This is useful for making local labels to be
referred to more than once in a single template that generates multiple
assembler instructions.

If you looked in the manual and didn't find this the first time,  
please submit a patch that would have enabled you to find it,  
thanks.  You're not the only one to not be able to find it, thanks.


auto and typedecl

2005-12-22 Thread pvderste
Hi all,

Have the keywords 'auto' and 'decltype' already have been implemented?
- as described in
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1607.pdf?
- for easier use of template expressions.


I have difficulty to find information concerning this problem.

If yes, could you please tell me where to find this information?
Which compiler flags help me to make them function.  Which compiler
version?
If no, is it plannend? When can I expect this addition?


thank you for your time.

kind regards

Peter



gcc-4.0-20051222 is now available

2005-12-22 Thread gccadmin
Snapshot gcc-4.0-20051222 is now available on
  ftp://gcc.gnu.org/pub/gcc/snapshots/4.0-20051222/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 4.0 SVN branch
with the following options: svn://gcc.gnu.org/svn/gcc/branches/gcc-4_0-branch 
revision 108980

You'll find:

gcc-4.0-20051222.tar.bz2  Complete GCC (includes all of below)

gcc-core-4.0-20051222.tar.bz2 C front end and core compiler

gcc-ada-4.0-20051222.tar.bz2  Ada front end and runtime

gcc-fortran-4.0-20051222.tar.bz2  Fortran front end and runtime

gcc-g++-4.0-20051222.tar.bz2  C++ front end and runtime

gcc-java-4.0-20051222.tar.bz2 Java front end and runtime

gcc-objc-4.0-20051222.tar.bz2 Objective-C front end and runtime

gcc-testsuite-4.0-20051222.tar.bz2The GCC testsuite

Diffs from 4.0-20051215 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-4.0
link is updated and a message is sent to the gcc list.  Please do not use
a snapshot before it has been announced that way.


GCC 3.x and -fvtable-thunks

2005-12-22 Thread John Daniels
Hi,

It appears GCC 3.x no longer supports the
-fvtable-thunks option. Is gcc 3.x using thunks by
default for its vtable format? Also, can the
_G_USING_THUNKS macro no longer used to determine if
thunks are being used?

Thanks,
John




__ 
Yahoo! for Good - Make a difference this year. 
http://brand.yahoo.com/cybergivingweek2005/


tweaking cse

2005-12-22 Thread DJ Delorie

Is there any way to tell cse how many times a value gets reused before
putting a copy in a register is profitable?  The logic seems to
compare the address costs, but doesn't account for the cost of storing
in the register.  What I'd like is some way of saying the cutoff is N
uses, not the current 2.  For example, if hard coding an address costs
an extra byte, and storing in a register costs four bytes, the cutoff
should be four uses.