X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=docs%2FExtendingLLVM.html;h=b072ed3b6e8532fdc10f66b21975813cd7a6b58f;hb=befc9c16fae1719cafe9f54ab2b67219db44dc11;hp=631a09bd6d6993742ee4cc2eaa1be9d731de7073;hpb=35dd5b0f58cba3f202a54cdfd393df3a3debdbf8;p=oota-llvm.git diff --git a/docs/ExtendingLLVM.html b/docs/ExtendingLLVM.html index 631a09bd6d6..b072ed3b6e8 100644 --- a/docs/ExtendingLLVM.html +++ b/docs/ExtendingLLVM.html @@ -87,7 +87,10 @@ function and then be turned into an instruction if warranted.

  • llvm/include/llvm/Intrinsics*.td: Add an entry for your intrinsic. Describe its memory access characteristics - for optimization (this controls whether it will be DCE'd, CSE'd, etc).
  • + for optimization (this controls whether it will be DCE'd, CSE'd, etc). Note + that any intrinsic using the llvm_int_ty type for an argument will + be deemed by tblgen as overloaded and the corresponding suffix + will be required on the intrinsic's name.
  • llvm/lib/Analysis/ConstantFolding.cpp: If it is possible to constant fold your intrinsic, add support to it in the @@ -104,19 +107,17 @@ support for it. Generally you must do the following steps:

    Add support to the C backend in lib/Target/CBackend/
    Depending on the intrinsic, there are a few ways to implement this. For -most intrinsics, it makes sense to add code to lower your intrinsic in -LowerIntrinsicCall in lib/CodeGen/IntrinsicLowering.cpp. -Second, if it makes sense to lower the intrinsic to an expanded sequence of C -code in all cases, just emit the expansion in visitCallInst in -Writer.cpp. If the intrinsic has some way to express it with GCC -(or any other compiler) extensions, it can be conditionally supported based on -the compiler compiling the CBE output (see llvm.prefetch for an -example). -Third, if the intrinsic really has no way to be lowered, just have the code -generator emit code that prints an error message and calls abort if executed. -
    + most intrinsics, it makes sense to add code to lower your intrinsic in + LowerIntrinsicCall in lib/CodeGen/IntrinsicLowering.cpp. + Second, if it makes sense to lower the intrinsic to an expanded sequence of + C code in all cases, just emit the expansion in visitCallInst in + Writer.cpp. If the intrinsic has some way to express it with GCC + (or any other compiler) extensions, it can be conditionally supported based + on the compiler compiling the CBE output (see llvm.prefetch for an + example). Third, if the intrinsic really has no way to be lowered, just + have the code generator emit code that prints an error message and calls + abort if executed. -
    Add support to the .td file for the target(s) of your choice in lib/Target/*/*.td.
    @@ -124,6 +125,7 @@ generator emit code that prints an error message and calls abort if executed. the intrinsic, though it may obviously require adding the instructions you want to generate as well. There are lots of examples in the PowerPC and X86 backend to follow. +
    @@ -225,7 +227,7 @@ complicated behavior in a single node (rotate).

    -

    WARNING: adding instructions changes the bytecode +

    WARNING: adding instructions changes the bitcode format, and it will take some effort to maintain compatibility with the previous version. Only add an instruction if it is absolutely necessary.

    @@ -248,8 +250,8 @@ necessary.

    add the grammar on how your instruction can be read and what it will construct as a result
  • -
  • llvm/lib/Bytecode/Reader/Reader.cpp: - add a case for your instruction and how it will be parsed from bytecode
  • +
  • llvm/lib/Bitcode/Reader/Reader.cpp: + add a case for your instruction and how it will be parsed from bitcode
  • llvm/lib/VMCore/Instruction.cpp: add a case for how your instruction will be printed out to assembly
  • @@ -282,7 +284,7 @@ to understand this new instruction.

    -

    WARNING: adding new types changes the bytecode +

    WARNING: adding new types changes the bitcode format, and will break compatibility with currently-existing LLVM installations. Only add new types if it is absolutely necessary.

    @@ -345,12 +347,12 @@ bool TypesEqual(const Type *Ty, const Type *Ty2,
  • llvm/lib/AsmReader/Lexer.l: add ability to parse in the type from text assembly
  • -
  • llvm/lib/ByteCode/Writer/Writer.cpp: - modify void BytecodeWriter::outputType(const Type *T) to serialize +
  • llvm/lib/BitCode/Writer/Writer.cpp: + modify void BitcodeWriter::outputType(const Type *T) to serialize your type
  • -
  • llvm/lib/ByteCode/Reader/Reader.cpp: - modify const Type *BytecodeReader::ParseType() to read your data +
  • llvm/lib/BitCode/Reader/Reader.cpp: + modify const Type *BitcodeReader::ParseType() to read your data type
  • llvm/lib/VMCore/AsmWriter.cpp: