xiaoming gu wrote:
Hi, all. Previously, Harmony Jira 5901 brought some benefits. Now I'm
working on generalized multiplication replacement with shift and addition.

Today I checked with gcc and found whether a multiplication is replaced or
not in gcc mainly (not strictly) depends on the number of the replaced
operations. There are some exceptions in gcc and I couldn't summarize the
rule without reading the source code. So I'm planning to round it to a
simple decision as following: if it needs >=4 shift/add operations, don't do
replacement; Otherwise, replace it with a combination of shift/add.

For example x*20 (20=00010100) is replaced by (x<<2+x)<<2  and x*56
(56=00111000) is replaced by (x<<3-x)<<3 but x*29 (29=00011101) is not
optimized by ((x<<3)-x)<<2+x.

Any comments?

Another question - may I read the source code of gcc since it is opensource
in GPL? Thanks.

Xiaoming
Hi Xiaoming,

IANAL but I guess it's not allowed to base your implementation on GCC. I wrote the same code for Jikes RVM [1] and I'd be happy for this CPL code also to be available under the ASF. This code doesn't handle the use of subtraction and partially computed results from earlier stages, I would very much like to improve it to do this. There is a tracker for Jikes RVM for this [2], there are also papers/programs explaining how to do the better approach [3][4] and some other considerations are mentioned in [5].

Regards,
Ian Rogers

[1] http://jikesrvm.svn.sourceforge.net/viewvc/jikesrvm/rvmroot/trunk/rvm/src/org/jikesrvm/compilers/opt/Simplifier.java?revision=14704&view=markup#l_1385
[2] http://jira.codehaus.org/browse/RVM-256
[3] http://portal.acm.org/citation.cfm?id=178249
[4] http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/25112.PDF pages 160 and 186
[5] http://www.intel.com/design/processor/manuals/248966.pdf
--
http://www.cs.man.ac.uk/~irogers

Reply via email to