public inbox for java@gcc.gnu.org
 help / color / mirror / Atom feed
From: Li junsong <ljs.darkfish@gmail.com>
To: java@gcc.gnu.org
Subject: Why does a 'new' statement produce so many temporary variables
Date: Tue, 09 Aug 2011 07:18:00 -0000	[thread overview]
Message-ID: <CA+kGxtNcCNWxYUs_Bz9a+9ULfy4MHP=JghUVz0_HL7ztL+Pjmw@mail.gmail.com> (raw)
In-Reply-To: <CA+kGxtPef8Xojf-+amOehmUsY_5MQreWUPdnODZUoX-tqX1RTg@mail.gmail.com>

Hi,

I am writing a plugin to add a pass in gcc 4.6.1. the pass will do
some optimizations before high gimple lowering,
moving some gimple nodes from one place to another. In cc1, the gimple
code is quite
understandable.  But I'm confused by the gimple that Java front end converts to.

I dump the file, here is a piece of code doing "new".

#ref#2#4 = _Jv_AllocObjectNoFinalizer (&Number.class$$);
#ref#3#6 = #ref#2#4;
#ref#2#4 = #ref#3#6;
D.459 = #slot#1#1;
#slot#4#7 = D.459;
#ref#3#6.1 = #ref#3#6;
(#ref#3#6.1, #slot#4#7);

the corresponding Java source code is

        int sum = 4;
        Number number;
        if ( sum < 100 )
            number = new Number(sum);   <=here

the Number class is a simple one:

class Number
{
    int i;
    Number(int inputi){
        i = inputi;
    }
}

Here comes my question:
 1. I am wondering why we don't use 'NEW_EXPR' to represent a "new" statement?
     The 'NEW_EXPR' has already been defined in the cp-tree.def.( As I know, the
     "new" statement in cp front end is also represented as that in
Java front end,
     which is "gimple_call" in gimple code, "ADDR_EXPR" in tree code,
is it? why?)

 2. How can I figure out which pieces of code are corresponding
     to 'NEW' statement? ( Can I always first find the
"_Jv_AllocObjectNoFinalize" or "_Jv_AllocObject"
     gimple_call and then "<init>" gimple_call to locate the code?)

 3. I find that there is no document to describe the implementation of
Java front end.
     I don't understand why we need so many temporary variables:

     #ref#2#4 = _Jv_AllocObjectNoFinalizer (&Number.class$$);
     #ref#3#6 = #ref#2#4;
     #ref#2#4 = #ref#3#6;

     Here, the #ref#3#6 and #ref#2#4 is a kind waste. But each "new" statement
     does the same thing.

Please tell me where can I find some resources to solve these
question. I have read some paper about
generic and gimple, researched the whole gcj mail list, read the gcc
internals. These questions must have
been too detailed. I did not find anything useful. Is it about alias?

I appreciate any explanations and advices.
Thanks.

       reply	other threads:[~2011-08-09  7:18 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CA+kGxtPef8Xojf-+amOehmUsY_5MQreWUPdnODZUoX-tqX1RTg@mail.gmail.com>
2011-08-09  7:18 ` Li junsong [this message]
2011-08-09 16:22   ` Andrew Pinski
2011-08-15  9:40   ` Andrew Haley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CA+kGxtNcCNWxYUs_Bz9a+9ULfy4MHP=JghUVz0_HL7ztL+Pjmw@mail.gmail.com' \
    --to=ljs.darkfish@gmail.com \
    --cc=java@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).