[llvm-dev] trouble hoisting GlobalValues
Ansari, Zia via llvm-dev
llvm-dev at lists.llvm.org
Mon Dec 14 09:55:14 PST 2015
As Hal mentioned, ConstantHoisting.cpp should be able to do this fine for global values. You just need to be careful because I found that the CG needs a little work to make sure that the extra global register pressure doesn't cause any issues.
For local values, if you don't have it, check out my patch : http://reviews.llvm.org/D11363
This will run at ISEL/DAG with the intent of being more precise in the cases that it targets/catches, and to run at a point where more opportunities are exposed. It was worth a fair bit of code size (over 1% on spec2000), and can be extended to catch more cases, if need be.
|From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Hal
|Finkel via llvm-dev
|Sent: Friday, December 11, 2015 2:33 PM
|To: Rafael Espíndola
|Subject: Re: [llvm-dev] trouble hoisting GlobalValues
|----- Original Message -----
|> From: "Rafael Espíndola via llvm-dev" <llvm-dev at lists.llvm.org>
|> To: "Steve King" <steve at metrokings.com>
|> Cc: "llvm-dev" <llvm-dev at lists.llvm.org>
|> Sent: Friday, December 11, 2015 4:28:33 PM
|> Subject: Re: [llvm-dev] trouble hoisting GlobalValues
|> On 11 December 2015 at 16:53, Steve King via llvm-dev
|> <llvm-dev at lists.llvm.org> wrote:
|> > Hello LLVM,
|> > To reduce the code-size cost of relocations, I'm trying to hoist
|> > GlobalValues that are used many times. A new pass hides each
|> > hoisted GV behind a BITCAST in the dominating BB. The pass then
|> > updates users with the output of the BITCAST. This pass works
|> > properly AFAICT.
|> > The problems come in instruction selection.
|> > SelectionDAGBuilder::visitBitCast() treats the BITCAST as a no-op
|> > and eventually users of the GV fold the relocation as if hoisting
|> > never happened. Experiments turning the BITCAST into a copytoreg
|> > failed and anyway I feel like I'm just shooting in the dark.
|> > Can anyone can suggest a strategy for lowering a hoisted GV? The
|> > end result should be that the GV materializes as a simple
|> > move-immediate to register.
|Also, something similar-sounding to this is done in
|> Nothing simple. One possibility would be to make constants explicitly
|> materialized. Something like:
|> Which would also be useful for architectures where some constants are
|> expensive to place in a register.
|> LLVM Developers mailing list
|> llvm-dev at lists.llvm.org
|Assistant Computational Scientist
|Leadership Computing Facility
|Argonne National Laboratory
|LLVM Developers mailing list
|llvm-dev at lists.llvm.org
More information about the llvm-dev