Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.compilers > #306
| From | George Neuner <gneuner2@comcast.net> |
|---|---|
| Newsgroups | comp.compilers |
| Subject | Re: How to eliminate redundant constant move instructions |
| Date | 2011-11-01 14:32 -0400 |
| Organization | A noiseless patient Spider |
| Message-ID | <11-11-004@comp.compilers> (permalink) |
| References | <11-10-019@comp.compilers> |
On Mon, 31 Oct 2011 17:53:46 +0800, "Amker.Cheng" <amker.cheng@gmail.com> wrote: >I found following intermediate codes are generated in gcc > >rx <- 0 >... >use rx >... >ry <- 0 >use ry >... > >It's normally a result of const propagation. >After register allocation, It is likely rx/ry get allocated into >different hard registers. >Thus in final codes, there would be a redundant "move 0" instruction. > >The story even stands for Os compiling, so the question is: >Is there any optimization technique dedicates to this kind of case? >Or is it normally handled by other optimizations as sub task? It's very hard to tell anything without more context - we need to know what CPU, what compiler, and we need to see the surrounding code. Because you mention "Os" I'm assuming you are using GCC. Incidentally, that really should be written as "-Os" so people understand you mean an option rather than thinking you're compiling an operation system 8-) GCC doesn't really perform a separate constant propagation optimization ... instead it generically tracks use of values to (try to) minimize redundant loads. There is a separate optimization, -fcprop-register, which is a peephole pass that eliminates redundant register moves (introduced by other optimizations), but that is performed after register allocation. That said: You might be asking "if the value already is in a register, why not just use it rather than load a second register?" The answer to that likely is a scheduling issue which depends on the use of the first register. You have to remember that many CPUs can execute multiple instructions in parallel, and those parallel instruction streams may be executed out of order with respect to a program listing. On most CPUs loading an immediate constant is as cheap as a register move. Also, loading a constant ties up only the target register whereas a move ties up both target and source registers. So a lot more information is needed to say whether the compiler is doing something dumb or doing something clever. George
Back to comp.compilers | Previous | Next — Previous in thread | Next in thread | Find similar
How to eliminate redundant constant move instructions "Amker.Cheng" <amker.cheng@gmail.com> - 2011-10-31 17:53 +0800
Re: How to eliminate redundant constant move instructions Kaz Kylheku <kaz@kylheku.com> - 2011-10-31 17:08 +0000
Re: How to eliminate redundant constant move instructions amker <can.finner@gmail.com> - 2011-11-01 19:01 -0700
Re: How to eliminate redundant constant move instructions mac <acolvin@efunct.com> - 2011-11-03 02:20 +0000
Re: How to eliminate redundant constant move instructions George Neuner <gneuner2@comcast.net> - 2011-11-01 14:32 -0400
Re: How to eliminate redundant constant move instructions glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2011-11-01 22:35 +0000
Re: How to eliminate redundant constant move instructions amker <can.finner@gmail.com> - 2011-11-01 19:35 -0700
Re: How to eliminate redundant constant move instructions amker <amker.cheng@gmail.com> - 2011-11-01 21:04 -0700
Re: How to eliminate redundant constant move instructions George Neuner <gneuner2@comcast.net> - 2011-11-02 12:38 -0400
Re: How to eliminate redundant constant move instructions Kaz Kylheku <kaz@kylheku.com> - 2011-11-03 03:20 +0000
Re: How to eliminate redundant constant move instructions George Neuner <gneuner2@comcast.net> - 2011-11-04 13:27 -0400
Re: How to eliminate redundant constant move instructions glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2011-11-04 21:19 +0000
Re: How to eliminate redundant constant move instructions glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2011-11-03 03:32 +0000
Re: How to eliminate redundant constant move instructions amker <can.finner@gmail.com> - 2011-11-01 19:21 -0700
Re: How to eliminate redundant constant move instructions George Neuner <gneuner2@comcast.net> - 2011-11-04 17:26 -0400
Re: How to eliminate redundant constant move instructions amker <amker.cheng@gmail.com> - 2011-11-07 17:33 -0800
Re: How to eliminate redundant constant move instructions Wei-Jen Chen <chenwj@cs.NCTU.edu.tw> - 2011-11-10 08:04 +0000
Re: How to eliminate redundant constant move instructions George Neuner <gneuner2@comcast.net> - 2011-11-10 18:18 -0500
Re: How to eliminate redundant constant move instructions amker <amker.cheng@gmail.com> - 2011-11-01 20:58 -0700
csiph-web