[llvm] r258344 - [GlobalISel] Add the proper cmake plumbing.
Quentin Colombet via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 20 13:13:16 PST 2016
> On Jan 20, 2016, at 12:58 PM, Quentin Colombet via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Author: qcolombet
> Date: Wed Jan 20 14:58:56 2016
> New Revision: 258344
>
> URL: http://llvm.org/viewvc/llvm-project?rev=258344&view=rev
> Log:
> [GlobalISel] Add the proper cmake plumbing.
>
> This patch adds the necessary plumbing to cmake to build the sources related to
> GlobalISel.
>
> To build the sources related to GlobalISel, we need to add -DBUILD_GLOBAL_ISEL=ON.
This one reads LLVM_BUILD_GLOBAL_ISEL.
> By default, this is OFF, thus GlobalISel sources will not impact people that do
> not explicitly opt-in.
>
> Differential Revision: http://reviews.llvm.org/D15983
>
> Added:
> llvm/trunk/include/llvm/CodeGen/GlobalISel/
> llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h
> llvm/trunk/include/llvm/CodeGen/GlobalISel/Types.h
> llvm/trunk/lib/CodeGen/GlobalISel/
> llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt
> llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp
> llvm/trunk/lib/CodeGen/GlobalISel/LLVMBuild.txt
> Modified:
> llvm/trunk/CMakeLists.txt
> llvm/trunk/lib/CodeGen/CMakeLists.txt
> llvm/trunk/lib/CodeGen/LLVMBuild.txt
> llvm/trunk/tools/llc/CMakeLists.txt
>
> Modified: llvm/trunk/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=258344&r1=258343&r2=258344&view=diff
> ==============================================================================
> --- llvm/trunk/CMakeLists.txt (original)
> +++ llvm/trunk/CMakeLists.txt Wed Jan 20 14:58:56 2016
> @@ -68,6 +68,8 @@ if(LLVM_PARALLEL_COMPILE_JOBS)
> endif()
> endif()
>
> +set(LLVM_BUILD_GLOBAL_ISEL OFF CACHE BOOL "Experimental: Build GlobalISel")
> +
> set(LLVM_PARALLEL_LINK_JOBS "" CACHE STRING
> "Define the maximum number of concurrent link jobs.")
> if(LLVM_PARALLEL_LINK_JOBS)
>
> Added: llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h?rev=258344&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h (added)
> +++ llvm/trunk/include/llvm/CodeGen/GlobalISel/IRTranslator.h Wed Jan 20 14:58:56 2016
> @@ -0,0 +1,127 @@
> +//===-- llvm/CodeGen/GlobalISel/IRTranslator.h - IRTranslator ---*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +/// \file
> +/// This file declares the IRTranslator pass.
> +/// This pass is responsible for translating LLVM IR into MachineInstr.
> +/// It uses target hooks to lower the ABI but aside from that, the pass
> +/// generated code is generic. This is the default translator used for
> +/// GlobalISel.
> +///
> +/// \todo Replace the comments with actual doxygen comments.
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_CODEGEN_GLOBALISEL_IRTRANSLATOR_H
> +#define LLVM_CODEGEN_GLOBALISEL_IRTRANSLATOR_H
> +
> +#include "Types.h"
> +#include "llvm/CodeGen/MachineFunctionPass.h"
> +#include "llvm/IR/Constants.h"
> +
> +namespace llvm {
> +// Forward declarations.
> +class Constant;
> +class Instruction;
> +class MachineInstr;
> +class MachineIRBuilder;
> +
> +// Technically the pass should run on an hypothetical MachineModule,
> +// since it should translate Global into some sort of MachineGlobal.
> +// The MachineGlobal should ultimately just be a transfer of ownership of
> +// the interesting bits that are relevant to represent a global value.
> +// That being said, we could investigate what would it cost to just duplicate
> +// the information from the LLVM IR.
> +// The idea is that ultimately we would be able to free up the memory used
> +// by the LLVM IR as soon as the translation is over.
> +class IRTranslator : public MachineFunctionPass {
> +public:
> + static char ID;
> +
> +private:
> + // Interface used to lower the everything related to calls.
> + // TargetLowering *CallLowering;
> + // Mapping of the values of the current LLVM IR function
> + // to the related virtual registers.
> + // We need several virtual registers for the lowering of things
> + // like structures. Right now, this is just a list of virtual
> + // registers, but we would need to encapsulate that in a higher
> + // level class.
> + ValueToVRegs ValToVRegs;
> + // Mapping of a constant to the instructions to produce
> + // that constant.
> + // Constants are special because when we encounter one,
> + // we do not know at first where to insert the definition since
> + // this depends on all its uses.
> + // Thus, we will insert the sequences to materialize them when
> + // we know all their users.
> + // In the meantime, just keep it in a map.
> + // Note: Constants that end up as immediate in the related instructions,
> + // do not appear in that map.
> + DenseMap<const Constant *, SmallVector<MachineInstr *, 1>> ConstantToSequence;
> +
> + /* A bunch of methods targeting ADD, SUB, etc. */
> + // Return true if the translation was successful, false
> + // otherwise.
> + // Note: The MachineIRBuilder would encapsulate a
> + // MachineRegisterInfo to create virtual registers.
> + //
> + // Algo:
> + // 1. Look for a virtual register for each operand or
> + // create one.
> + // 2 Update the ValToVReg accordingly.
> + // 2.alt. For constant arguments, if they are compile time constants,
> + // produce an immediate in the right operand and do not touch
> + // ValToReg. Otherwise, update ValToVReg and register the
> + // sequence to materialize the constant in ConstantToSequence.
> + // 3. Create the generic instruction.
> + bool translateADD(const Instruction &Inst);
> +
> + // Builder for machine instruction a la IRBuilder.
> + // I.e., compared to regular MIBuilder, this one also inserts the instruction
> + // in the current block, it can creates block, etc., basically a kind of
> + // IRBuilder, but for Machine IR.
> + MachineIRBuilder *MIRBuilder;
> +
> + // Return true if the translation from LLVM IR to Machine IR
> + // suceeded.
> + // See translateXXX for details.
> + bool translate(const Instruction &);
> +
> + // * Insert all the code needed to materialize the constants
> + // at the proper place. E.g., Entry block or dominator block
> + // of each constant depending ob how fancy we want to be.
> + // * Clear the different maps.
> + void finalize();
> +public:
> + // Ctor, nothing fancy.
> + IRTranslator();
> +
> + // Instead of having the instance of the IRTranslatorToolkit
> + // as an argument of the constructor of IRTranslator, we ask
> + // the target the instance of the toolkit for each MachineFunction.
> + // The interest is that we may have different translator for different
> + // subtract or optimization. E.g., we could have a translator optimized
> + // to produce small code size.
> + //
> + // Algo:
> + // CallLowering = MF.subtarget.getCallLowering()
> + // F = MF.getParent()
> + // MIRBuilder.reset(MF)
> + // MIRBuilder.getOrCreateBB(F.getEntryBB())
> + // CallLowering->translateArguments(MIRBuilder, F, ValToVReg)
> + // for each bb in F
> + // MIRBuilder.getOrCreateBB(bb)
> + // for each inst in bb
> + // if (!translate(MIRBuilder, inst, ValToVReg, ConstantToSequence))
> + // report_fatal_error(âDonât know how to translate input");
> + // finalize()
> + bool runOnMachineFunction(MachineFunction &MF) override;
> +};
> +
> +} // End namespace llvm.
> +#endif
>
> Added: llvm/trunk/include/llvm/CodeGen/GlobalISel/Types.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/Types.h?rev=258344&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/GlobalISel/Types.h (added)
> +++ llvm/trunk/include/llvm/CodeGen/GlobalISel/Types.h Wed Jan 20 14:58:56 2016
> @@ -0,0 +1,34 @@
> +//===-- llvm/CodeGen/GlobalISel/Types.h - Types used by GISel ----*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +///
> +/// \file
> +/// This file describes high level types that are used by several passes or
> +/// APIs involved in the GlobalISel pipeline.
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_CODEGEN_GLOBALISEL_TYPES_H
> +#define LLVM_CODEGEN_GLOBALISEL_TYPES_H
> +
> +#include "llvm/ADT/DenseMap.h"
> +#include "llvm/ADT/SmallVector.h"
> +#include "llvm/IR/Value.h"
> +
> +namespace llvm {
> +
> +/// Map a value to virtual registers.
> +/// We must support several virtual registers for a value.
> +/// Indeed each virtual register is mapped to one EVT, but a value
> +/// may span over several EVT when it is a type representing a structure.
> +/// In that case the value will be break into EVTs.
> +/// Note: We need to expose this type to the target hooks for thing like
> +/// ABI lowering that would be used during IRTranslation.
> +typedef DenseMap<const Value *, SmallVector<unsigned, 1>> ValueToVRegs;
> +
> +} // End namespace llvm.
> +#endif
>
> Modified: llvm/trunk/lib/CodeGen/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/CMakeLists.txt?rev=258344&r1=258343&r2=258344&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/CMakeLists.txt (original)
> +++ llvm/trunk/lib/CodeGen/CMakeLists.txt Wed Jan 20 14:58:56 2016
> @@ -142,3 +142,6 @@ add_dependencies(LLVMCodeGen intrinsics_
> add_subdirectory(SelectionDAG)
> add_subdirectory(AsmPrinter)
> add_subdirectory(MIRParser)
> +if(LLVM_BUILD_GLOBAL_ISEL)
> + add_subdirectory(GlobalISel)
> +endif()
>
> Added: llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt?rev=258344&view=auto
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt (added)
> +++ llvm/trunk/lib/CodeGen/GlobalISel/CMakeLists.txt Wed Jan 20 14:58:56 2016
> @@ -0,0 +1,5 @@
> +add_llvm_library(LLVMGlobalISel
> + IRTranslator.cpp
> + )
> +
> +add_dependencies(LLVMGlobalISel intrinsics_gen)
>
> Added: llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp?rev=258344&view=auto
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp (added)
> +++ llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp Wed Jan 20 14:58:56 2016
> @@ -0,0 +1,37 @@
> +//===-- llvm/CodeGen/GlobalISel/IRTranslator.cpp - IRTranslator --*- C++ -*-==//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +/// \file
> +/// This file implements the IRTranslator class.
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/CodeGen/GlobalISel/IRTranslator.h"
> +
> +using namespace llvm;
> +
> +char IRTranslator::ID = 0;
> +
> +bool IRTranslator::translateADD(const Instruction &Inst) {
> + return false;
> +}
> +
> +bool IRTranslator::translate(const Instruction &) {
> + return false;
> +}
> +
> +
> +void IRTranslator::finalize() {
> +}
> +
> +IRTranslator::IRTranslator()
> + : MachineFunctionPass(ID) {
> +}
> +
> +bool IRTranslator::runOnMachineFunction(MachineFunction &MF) {
> + return false;
> +}
>
> Added: llvm/trunk/lib/CodeGen/GlobalISel/LLVMBuild.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/LLVMBuild.txt?rev=258344&view=auto
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/GlobalISel/LLVMBuild.txt (added)
> +++ llvm/trunk/lib/CodeGen/GlobalISel/LLVMBuild.txt Wed Jan 20 14:58:56 2016
> @@ -0,0 +1,22 @@
> +;===- ./lib/CodeGen/GlobalISel/LLVMBuild.txt -----------------*- Conf -*--===;
> +;
> +; The LLVM Compiler Infrastructure
> +;
> +; This file is distributed under the University of Illinois Open Source
> +; License. See LICENSE.TXT for details.
> +;
> +;===------------------------------------------------------------------------===;
> +;
> +; This is an LLVMBuild description file for the components in this subdirectory.
> +;
> +; For more information on the LLVMBuild system, please see:
> +;
> +; http://llvm.org/docs/LLVMBuild.html
> +;
> +;===------------------------------------------------------------------------===;
> +
> +[component_0]
> +type = Library
> +name = GlobalISel
> +parent = CodeGen
> +required_libraries = Analysis CodeGen Core MC Support Target TransformUtils
>
> Modified: llvm/trunk/lib/CodeGen/LLVMBuild.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LLVMBuild.txt?rev=258344&r1=258343&r2=258344&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/LLVMBuild.txt (original)
> +++ llvm/trunk/lib/CodeGen/LLVMBuild.txt Wed Jan 20 14:58:56 2016
> @@ -16,7 +16,7 @@
> ;===------------------------------------------------------------------------===;
>
> [common]
> -subdirectories = AsmPrinter SelectionDAG MIRParser
> +subdirectories = AsmPrinter SelectionDAG MIRParser GlobalISel
>
> [component_0]
> type = Library
>
> Modified: llvm/trunk/tools/llc/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/CMakeLists.txt?rev=258344&r1=258343&r2=258344&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llc/CMakeLists.txt (original)
> +++ llvm/trunk/tools/llc/CMakeLists.txt Wed Jan 20 14:58:56 2016
> @@ -1,3 +1,10 @@
> +# Add GlobalISel to the dependencies if the user wants to build it.
> +if(LLVM_BUILD_GLOBAL_ISEL)
> + set(GLOBAL_ISEL GlobalISel)
> +else()
> + set(GLOBAL_ISEL "")
> +endif()
> +
> set(LLVM_LINK_COMPONENTS
> ${LLVM_TARGETS_TO_BUILD}
> Analysis
> @@ -5,6 +12,7 @@ set(LLVM_LINK_COMPONENTS
> CodeGen
> Core
> IRReader
> + ${GLOBAL_ISEL}
> MC
> MIRParser
> ScalarOpts
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list