From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 130154 invoked by alias); 11 Jun 2015 20:38:54 -0000 Mailing-List: contact jit-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Subscribe: Sender: jit-owner@gcc.gnu.org Received: (qmail 130143 invoked by uid 89); 11 Jun 2015 20:38:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.98.7 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.4 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-Spam-Status: No, score=-1.4 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: mx1.redhat.com Message-ID: <1434054685.12727.205.camel@surprise> Subject: Re: Basic blocks, jump targets and locals From: David Malcolm To: Dibyendu Majumdar Cc: jit@gcc.gnu.org Date: Thu, 01 Jan 2015 00:00:00 -0000 In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-SW-Source: 2015-q2/txt/msg00044.txt.bz2 On Thu, 2015-06-11 at 21:26 +0100, Dibyendu Majumdar wrote: > Hi, > > In LLVM the IRBuilder has the concept of a current block where > instructions are inserted. Reading the libgccjit docs I think that > there is no notion of current block - i.e. this needs to be maintained > by the caller - is that correct? Correct. > Can one create several blocks in advance - and set a block that is not > yet inserted into the function as the target for a jump? Yes. See e.g.: https://gcc.gnu.org/onlinedocs/jit/intro/tutorial04.html#populating-the-function which does two passes: (i) iterates through all of the bytecodes in a function, creating gcc_jit_block instances for each one (ii) iterates again, populating the gcc_jit_block instances with statements > The scenario > is this: when compiling Lua bytecode I already know all the jump > targets. So I pre-create all the basic blocks that relate to the jump > targets up front - and as each jump is encountered I can easily set > the jump target to the right block. As and when I cross the bytecode > that is a jump target the block gets added to the function. (nods) > I hope above is clear - if not I can explain by an example. > > Can I do something similar with libgccjit? Hopefully the example above makes it clear. > Finally - how are local variable related to blocks. In LLVM one has to > create the local vars in the entry block of the function. Is it the > same with libgccjit? Local variables in libgccjit are local to a *function*; there's no association between them and blocks. Blocks in libgccjit relate to control flow, not to scope. Note that any initialization of a local variable has to be done explicitly, by adding an assignment statement. Typically that assignment statement would be added to the initial block, as in the example above (so I suppose that's an association of sorts between locals and the entry block). Hope this is clear Dave