[llvm-dev] trouble hoisting GlobalValues

Steve King via llvm-dev llvm-dev at lists.llvm.org
Fri Dec 11 13:53:16 PST 2015

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.


More information about the llvm-dev mailing list