[LLVMdev] Selection of multiple instructions
evan.cheng at apple.com
Wed Jul 8 13:50:57 PDT 2009
On Jul 8, 2009, at 10:16 AM, Artjom Kochtchi wrote:
> I'm currently trying to modify LLVM to include runtime checks into X86
> binaries. I've looked into some of the possibilities during the phases
> happening in LLVM and have the impression that inserting runtime
> during selection would be great, since lots of optimizations are
> done and I can work directly with X86 instructions.
> I've read through the documentation for code generation
> (http://www.llvm.org/docs/CodeGenerator.html) and am unsure if I
> it correctly, because I have trouble figuring out what actually to
> do in the
> code to accomplish my aim.
> There are the tablegen generated functions and custom C++ code (I
> guess that
> will be X86DAGToDAGISel::Select(SDValue)) that deal with selection.
> The runtime checks I want to add concern indirect jumps. So for
> example for
> all calls that jump to register values like
> call eax
> I want to insert a check
> ... (some test) ...# perform test
> jne error_label # jump if test fails
> call eax # otherwise execute original call
> So the check is a sequence of instructions before the call
> Is it possible to do that at the selection level? If yes, could you
> give a
> simple example or some hint how it would be done? I only find
> examples where
> exactly one instruction is emitted (and/or returned).
It's not. It requires updating CFG. I'd do this as a separate pass.
Another possibility is to use the usesCustomDAGSchedInserter hack.
That is, isel to a pseudo instruction and expand it to a series of
instructions and update cfg at scheduling time. Look for the
usesCustomDAGSchedInserter in X86InstrInfo.td and
EmitInstrWithCustomInserter in X86ISelLowering.cpp.
> Do you think it's the right approach or is there a better place?
> I'd really appreciate your help.
> Artjom Kochtchi
> View this message in context: http://www.nabble.com/Selection-of-multiple-instructions-tp24395706p24395706.html
> Sent from the LLVM - Dev mailing list archive at Nabble.com.
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
More information about the llvm-dev