Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!border3.nntp.dca.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!news.iecc.com!nerds-end From: George Neuner Newsgroups: comp.compilers Subject: Re: How to eliminate redundant constant move instructions Date: Fri, 04 Nov 2011 13:27:43 -0400 Organization: A noiseless patient Spider Lines: 28 Sender: news@iecc.com Approved: comp.compilers@iecc.com Message-ID: <11-11-023@comp.compilers> References: <11-10-019@comp.compilers> <11-11-004@comp.compilers> <11-11-005@comp.compilers> <11-11-014@comp.compilers> <11-11-018@comp.compilers> NNTP-Posting-Host: news.iecc.com X-Trace: leila.iecc.com 1320437163 97723 64.57.183.58 (4 Nov 2011 20:06:03 GMT) X-Complaints-To: abuse@iecc.com NNTP-Posting-Date: Fri, 4 Nov 2011 20:06:03 +0000 (UTC) Keywords: optimize Posted-Date: 04 Nov 2011 16:06:03 EDT X-submission-address: compilers@iecc.com X-moderator-address: compilers-request@iecc.com X-FAQ-and-archives: http://compilers.iecc.com Xref: x330-a1.tempe.blueboxinc.net comp.compilers:325 On Thu, 3 Nov 2011 03:20:32 +0000 (UTC), Kaz Kylheku wrote: >On 2011-11-02, George Neuner wrote: >> Yes. But the compiler can't count on register renaming ... it can see >> only the architectural named registers. If the code in question had >> copied Rx-> Ry then renaming would have been possible, but instead the >> code performed a constant load to each register. No possibility of >> rename sharing there. > >If the register holds a value that is used, but not clobbered, then renaming is >moot. The two blocks of code both depend on rx being zero, and so nothing is >achieved by splitting the instruction set register into two physical registers. Yes. But the original question involve 2 registers both being loaded with the same constant value. The OP asked why use a 2nd register. I gave a couple of reasons why that might be, and then Glen brought up renaming. We haven't seen the actual code, but from the description it appears that the compiler could have reused the original register but instead chose to use a different one. We also don't know what CPU, but regardless, renaming only might have been done if the compiler had used a copy instruction. With the use of constant loads there was no possibility of renaming being performed. George