[llvm] r310115 - [GlobalISel] Remove the GISelAccessor API.

Quentin Colombet via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 7 15:14:51 PDT 2017


> On Aug 7, 2017, at 3:03 PM, Quentin Colombet <qcolombet at apple.com> wrote:
> 
> Hmm, I am puzzled.
> 
> That works for me, but the link command looks strange.
> 
> In particular, I see the GlobalISel lib being listed in the dependencies for this unittests, but it does not show up on the link command (ninja -v).

Actually, that’s probably correct (at least on MachO), because the GlobalISel lib is used when creating the AArch64CodeGen lib.

> 
> It looks like the proper dependencies are in both places for the static lib build. Sounds like llvmbuild is not handling the shared libs properly.

I am thinking either the files produced by cmake are stall or linux linker does not work the same way.

Could you (or someone else) print the detailed comment for that build (ninja -v)?

> 
> Digging.
> 
>> On Aug 7, 2017, at 1:44 PM, Quentin Colombet via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>> 
>> Thanks for the report Bill.
>> 
>> Looking.
>> 
>>> On Aug 7, 2017, at 1:37 PM, Bill Seurer <seurer at linux.vnet.ibm.com> wrote:
>>> 
>>> Starting with this revision I see the following failure when running a check-all if -DBUILD_SHARED_LIBS=ON is used on cmake:
>>> 
>>> [36/56] Linking CXX executable unittests/Target/AArch64/AArch64Tests
>>> FAILED: unittests/Target/AArch64/AArch64Tests
>>> : && /home/seurer/gcc/install/gcc-7.1.0/bin/g++   -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -O3 -L/home/seurer/gcc/install/gcc-7.1.0/lib64 -Wl,-allow-shlib-undefined  -Wl,-O3 -Wl,--gc-sections unittests/Target/AArch64/CMakeFiles/AArch64Tests.dir/InstSizes.cpp.o  -o unittests/Target/AArch64/AArch64Tests lib/libLLVMAArch64CodeGen.so.6.0.0svn lib/libLLVMAArch64Desc.so.6.0.0svn lib/libLLVMAArch64Info.so.6.0.0svn lib/libLLVMCodeGen.so.6.0.0svn lib/libLLVMCore.so.6.0.0svn lib/libLLVMMC.so.6.0.0svn lib/libLLVMMIRParser.so.6.0.0svn lib/libLLVMSelectionDAG.so.6.0.0svn lib/libLLVMTarget.so.6.0.0svn lib/libLLVMSupport.so.6.0.0svn -lpthread lib/libgtest_main.so.6.0.0svn lib/libgtest.so.6.0.0svn -lpthread -Wl,-rpath,/home/seurer/llvm/build/llvm-test3/lib && :
>>> unittests/Target/AArch64/CMakeFiles/AArch64Tests.dir/InstSizes.cpp.o:(.toc+0x0): undefined reference to `vtable for llvm::LegalizerInfo'
>>> unittests/Target/AArch64/CMakeFiles/AArch64Tests.dir/InstSizes.cpp.o:(.toc+0x8): undefined reference to `vtable for llvm::RegisterBankInfo'
>>> collect2: error: ld returned 1 exit status
>>> 
>>> 
>>> You can see the failure here on the buildbots (look at stdio):
>>> 
>>> http://lab.llvm.org:8011/builders/clang-ppc64le-linux-multistage/builds/3428
>>> 
>>> 
>>> 
>>> 
>>> On 08/04/2017 03:15 PM, Quentin Colombet via llvm-commits wrote:
>>>> Author: qcolombet
>>>> Date: Fri Aug  4 13:15:46 2017
>>>> New Revision: 310115
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=310115&view=rev
>>>> Log:
>>>> [GlobalISel] Remove the GISelAccessor API.
>>>> Its sole purpose was to avoid spreading around ifdefs related to
>>>> building global-isel. Since r309990, GlobalISel is not optional anymore,
>>>> thus, we can get rid of this mechanism all together.
>>>> NFC.
>>>> Removed:
>>>>   llvm/trunk/include/llvm/CodeGen/GlobalISel/GISelAccessor.h
>>>> Modified:
>>>>   llvm/trunk/docs/GlobalISel.rst
>>>>   llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp
>>>>   llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h
>>>>   llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.cpp
>>>>   llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.h
>>>>   llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp
>>>>   llvm/trunk/lib/Target/ARM/ARMSubtarget.h
>>>>   llvm/trunk/lib/Target/X86/X86Subtarget.cpp
>>>>   llvm/trunk/lib/Target/X86/X86Subtarget.h
>>>> Modified: llvm/trunk/docs/GlobalISel.rst
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/GlobalISel.rst?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/docs/GlobalISel.rst (original)
>>>> +++ llvm/trunk/docs/GlobalISel.rst Fri Aug  4 13:15:46 2017
>>>> @@ -633,5 +633,3 @@ Additionally:
>>>>  * ``TargetPassConfig`` --- create the passes constituting the pipeline,
>>>>  including additional passes not included in the :ref:`pipeline`.
>>>> -* ``GISelAccessor`` --- setup the various subtarget-provided classes, with a
>>>> -  graceful fallback to no-op when GlobalISel isn't enabled.
>>>> Removed: llvm/trunk/include/llvm/CodeGen/GlobalISel/GISelAccessor.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/GlobalISel/GISelAccessor.h?rev=310114&view=auto
>>>> ==============================================================================
>>>> --- llvm/trunk/include/llvm/CodeGen/GlobalISel/GISelAccessor.h (original)
>>>> +++ llvm/trunk/include/llvm/CodeGen/GlobalISel/GISelAccessor.h (removed)
>>>> @@ -1,39 +0,0 @@
>>>> -//===-- GISelAccessor.h - GISel Accessor ------------------------*- C++ -*-===//
>>>> -//
>>>> -//                     The LLVM Compiler Infrastructure
>>>> -//
>>>> -// This file is distributed under the University of Illinois Open Source
>>>> -// License. See LICENSE.TXT for details.
>>>> -//
>>>> -//===----------------------------------------------------------------------===//
>>>> -//
>>>> -/// This file declares the API to access the various APIs related
>>>> -/// to GlobalISel.
>>>> -//
>>>> -//===----------------------------------------------------------------------===/
>>>> -
>>>> -#ifndef LLVM_CODEGEN_GLOBALISEL_GISELACCESSOR_H
>>>> -#define LLVM_CODEGEN_GLOBALISEL_GISELACCESSOR_H
>>>> -
>>>> -namespace llvm {
>>>> -class CallLowering;
>>>> -class InstructionSelector;
>>>> -class LegalizerInfo;
>>>> -class RegisterBankInfo;
>>>> -
>>>> -/// The goal of this helper class is to gather the accessor to all
>>>> -/// the APIs related to GlobalISel.
>>>> -/// It should be derived to feature an actual accessor to the GISel APIs.
>>>> -/// The reason why this is not simply done into the subtarget is to avoid
>>>> -/// spreading ifdefs around.
>>>> -struct GISelAccessor {
>>>> -  virtual ~GISelAccessor() {}
>>>> -  virtual const CallLowering *getCallLowering() const { return nullptr;}
>>>> -  virtual const InstructionSelector *getInstructionSelector() const {
>>>> -    return nullptr;
>>>> -  }
>>>> -  virtual const LegalizerInfo *getLegalizerInfo() const { return nullptr; }
>>>> -  virtual const RegisterBankInfo *getRegBankInfo() const { return nullptr;}
>>>> -};
>>>> -} // End namespace llvm;
>>>> -#endif
>>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp (original)
>>>> +++ llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp Fri Aug  4 13:15:46 2017
>>>> @@ -21,7 +21,6 @@
>>>> #include "AArch64CallLowering.h"
>>>> #include "AArch64LegalizerInfo.h"
>>>> #include "AArch64RegisterBankInfo.h"
>>>> -#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
>>>> #include "llvm/CodeGen/GlobalISel/IRTranslator.h"
>>>> #include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
>>>> #include "llvm/CodeGen/GlobalISel/Legalizer.h"
>>>> @@ -141,76 +140,42 @@ void AArch64Subtarget::initializePropert
>>>>  }
>>>> }
>>>> -namespace {
>>>> -
>>>> -struct AArch64GISelActualAccessor : public GISelAccessor {
>>>> -  std::unique_ptr<CallLowering> CallLoweringInfo;
>>>> -  std::unique_ptr<InstructionSelector> InstSelector;
>>>> -  std::unique_ptr<LegalizerInfo> Legalizer;
>>>> -  std::unique_ptr<RegisterBankInfo> RegBankInfo;
>>>> -
>>>> -  const CallLowering *getCallLowering() const override {
>>>> -    return CallLoweringInfo.get();
>>>> -  }
>>>> -
>>>> -  const InstructionSelector *getInstructionSelector() const override {
>>>> -    return InstSelector.get();
>>>> -  }
>>>> -
>>>> -  const LegalizerInfo *getLegalizerInfo() const override {
>>>> -    return Legalizer.get();
>>>> -  }
>>>> -
>>>> -  const RegisterBankInfo *getRegBankInfo() const override {
>>>> -    return RegBankInfo.get();
>>>> -  }
>>>> -};
>>>> -
>>>> -} // end anonymous namespace
>>>> -
>>>> AArch64Subtarget::AArch64Subtarget(const Triple &TT, const std::string &CPU,
>>>>                                   const std::string &FS,
>>>>                                   const TargetMachine &TM, bool LittleEndian)
>>>>    : AArch64GenSubtargetInfo(TT, CPU, FS),
>>>> -      ReserveX18(TT.isOSDarwin() || TT.isOSWindows()),
>>>> -      IsLittle(LittleEndian), TargetTriple(TT), FrameLowering(),
>>>> +      ReserveX18(TT.isOSDarwin() || TT.isOSWindows()), IsLittle(LittleEndian),
>>>> +      TargetTriple(TT), FrameLowering(),
>>>>      InstrInfo(initializeSubtargetDependencies(FS, CPU)), TSInfo(),
>>>> -      TLInfo(TM, *this), GISel() {
>>>> -  AArch64GISelActualAccessor *AArch64GISel = new AArch64GISelActualAccessor();
>>>> -  AArch64GISel->CallLoweringInfo.reset(
>>>> -      new AArch64CallLowering(*getTargetLowering()));
>>>> -  AArch64GISel->Legalizer.reset(new AArch64LegalizerInfo());
>>>> +      TLInfo(TM, *this) {
>>>> +  CallLoweringInfo.reset(new AArch64CallLowering(*getTargetLowering()));
>>>> +  Legalizer.reset(new AArch64LegalizerInfo());
>>>>    auto *RBI = new AArch64RegisterBankInfo(*getRegisterInfo());
>>>>    // FIXME: At this point, we can't rely on Subtarget having RBI.
>>>>  // It's awkward to mix passing RBI and the Subtarget; should we pass
>>>>  // TII/TRI as well?
>>>> -  AArch64GISel->InstSelector.reset(createAArch64InstructionSelector(
>>>> +  InstSelector.reset(createAArch64InstructionSelector(
>>>>      *static_cast<const AArch64TargetMachine *>(&TM), *this, *RBI));
>>>> -  AArch64GISel->RegBankInfo.reset(RBI);
>>>> -  setGISelAccessor(*AArch64GISel);
>>>> +  RegBankInfo.reset(RBI);
>>>> }
>>>>  const CallLowering *AArch64Subtarget::getCallLowering() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getCallLowering();
>>>> +  return CallLoweringInfo.get();
>>>> }
>>>>  const InstructionSelector *AArch64Subtarget::getInstructionSelector() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getInstructionSelector();
>>>> +  return InstSelector.get();
>>>> }
>>>>  const LegalizerInfo *AArch64Subtarget::getLegalizerInfo() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getLegalizerInfo();
>>>> +  return Legalizer.get();
>>>> }
>>>>  const RegisterBankInfo *AArch64Subtarget::getRegBankInfo() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getRegBankInfo();
>>>> +  return RegBankInfo.get();
>>>> }
>>>>  /// Find the target operand flags that describe how a global value should be
>>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h (original)
>>>> +++ llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h Fri Aug  4 13:15:46 2017
>>>> @@ -19,7 +19,10 @@
>>>> #include "AArch64InstrInfo.h"
>>>> #include "AArch64RegisterInfo.h"
>>>> #include "AArch64SelectionDAGInfo.h"
>>>> -#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
>>>> +#include "llvm/CodeGen/GlobalISel/CallLowering.h"
>>>> +#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
>>>> +#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
>>>> +#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
>>>> #include "llvm/IR/DataLayout.h"
>>>> #include "llvm/Target/TargetSubtargetInfo.h"
>>>> #include <string>
>>>> @@ -124,10 +127,12 @@ protected:
>>>>  AArch64InstrInfo InstrInfo;
>>>>  AArch64SelectionDAGInfo TSInfo;
>>>>  AArch64TargetLowering TLInfo;
>>>> -  /// Gather the accessor points to GlobalISel-related APIs.
>>>> -  /// This is used to avoid ifndefs spreading around while GISel is
>>>> -  /// an optional library.
>>>> -  std::unique_ptr<GISelAccessor> GISel;
>>>> +
>>>> +  /// GlobalISel related APIs.
>>>> +  std::unique_ptr<CallLowering> CallLoweringInfo;
>>>> +  std::unique_ptr<InstructionSelector> InstSelector;
>>>> +  std::unique_ptr<LegalizerInfo> Legalizer;
>>>> +  std::unique_ptr<RegisterBankInfo> RegBankInfo;
>>>>  private:
>>>>  /// initializeSubtargetDependencies - Initializes using CPUString and the
>>>> @@ -146,11 +151,6 @@ public:
>>>>                   const std::string &FS, const TargetMachine &TM,
>>>>                   bool LittleEndian);
>>>> -  /// This object will take onwership of \p GISelAccessor.
>>>> -  void setGISelAccessor(GISelAccessor &GISel) {
>>>> -    this->GISel.reset(&GISel);
>>>> -  }
>>>> -
>>>>  const AArch64SelectionDAGInfo *getSelectionDAGInfo() const override {
>>>>    return &TSInfo;
>>>>  }
>>>> Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.cpp?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.cpp (original)
>>>> +++ llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.cpp Fri Aug  4 13:15:46 2017
>>>> @@ -78,29 +78,6 @@ AMDGPUSubtarget::initializeSubtargetDepe
>>>>  return *this;
>>>> }
>>>> -namespace {
>>>> -
>>>> -struct SIGISelActualAccessor : public GISelAccessor {
>>>> -  std::unique_ptr<AMDGPUCallLowering> CallLoweringInfo;
>>>> -  std::unique_ptr<InstructionSelector> InstSelector;
>>>> -  std::unique_ptr<LegalizerInfo> Legalizer;
>>>> -  std::unique_ptr<RegisterBankInfo> RegBankInfo;
>>>> -  const AMDGPUCallLowering *getCallLowering() const override {
>>>> -    return CallLoweringInfo.get();
>>>> -  }
>>>> -  const InstructionSelector *getInstructionSelector() const override {
>>>> -    return InstSelector.get();
>>>> -  }
>>>> -  const LegalizerInfo *getLegalizerInfo() const override {
>>>> -    return Legalizer.get();
>>>> -  }
>>>> -  const RegisterBankInfo *getRegBankInfo() const override {
>>>> -    return RegBankInfo.get();
>>>> -  }
>>>> -};
>>>> -
>>>> -} // end anonymous namespace
>>>> -
>>>> AMDGPUSubtarget::AMDGPUSubtarget(const Triple &TT, StringRef GPU, StringRef FS,
>>>>                                 const TargetMachine &TM)
>>>>  : AMDGPUGenSubtargetInfo(TT, GPU, FS),
>>>> @@ -354,14 +331,12 @@ SISubtarget::SISubtarget(const Triple &T
>>>>    : AMDGPUSubtarget(TT, GPU, FS, TM), InstrInfo(*this),
>>>>      FrameLowering(TargetFrameLowering::StackGrowsUp, getStackAlignment(), 0),
>>>>      TLInfo(TM, *this) {
>>>> -  SIGISelActualAccessor *GISel = new SIGISelActualAccessor();
>>>> -  GISel->CallLoweringInfo.reset(new AMDGPUCallLowering(*getTargetLowering()));
>>>> -  GISel->Legalizer.reset(new AMDGPULegalizerInfo());
>>>> -
>>>> -  GISel->RegBankInfo.reset(new AMDGPURegisterBankInfo(*getRegisterInfo()));
>>>> -  GISel->InstSelector.reset(new AMDGPUInstructionSelector(
>>>> -      *this, *static_cast<AMDGPURegisterBankInfo *>(GISel->RegBankInfo.get())));
>>>> -  setGISelAccessor(*GISel);
>>>> +  CallLoweringInfo.reset(new AMDGPUCallLowering(*getTargetLowering()));
>>>> +  Legalizer.reset(new AMDGPULegalizerInfo());
>>>> +
>>>> +  RegBankInfo.reset(new AMDGPURegisterBankInfo(*getRegisterInfo()));
>>>> +  InstSelector.reset(new AMDGPUInstructionSelector(
>>>> +      *this, *static_cast<AMDGPURegisterBankInfo *>(RegBankInfo.get())));
>>>> }
>>>>  void SISubtarget::overrideSchedPolicy(MachineSchedPolicy &Policy,
>>>> Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.h?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.h (original)
>>>> +++ llvm/trunk/lib/Target/AMDGPU/AMDGPUSubtarget.h Fri Aug  4 13:15:46 2017
>>>> @@ -16,6 +16,7 @@
>>>> #define LLVM_LIB_TARGET_AMDGPU_AMDGPUSUBTARGET_H
>>>>  #include "AMDGPU.h"
>>>> +#include "AMDGPUCallLowering.h"
>>>> #include "R600FrameLowering.h"
>>>> #include "R600ISelLowering.h"
>>>> #include "R600InstrInfo.h"
>>>> @@ -25,7 +26,9 @@
>>>> #include "SIMachineFunctionInfo.h"
>>>> #include "Utils/AMDGPUBaseInfo.h"
>>>> #include "llvm/ADT/Triple.h"
>>>> -#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
>>>> +#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
>>>> +#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
>>>> +#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
>>>> #include "llvm/CodeGen/MachineFunction.h"
>>>> #include "llvm/CodeGen/SelectionDAGTargetInfo.h"
>>>> #include "llvm/MC/MCInstrItineraries.h"
>>>> @@ -631,7 +634,12 @@ private:
>>>>  SIInstrInfo InstrInfo;
>>>>  SIFrameLowering FrameLowering;
>>>>  SITargetLowering TLInfo;
>>>> -  std::unique_ptr<GISelAccessor> GISel;
>>>> +
>>>> +  /// GlobalISel related APIs.
>>>> +  std::unique_ptr<AMDGPUCallLowering> CallLoweringInfo;
>>>> +  std::unique_ptr<InstructionSelector> InstSelector;
>>>> +  std::unique_ptr<LegalizerInfo> Legalizer;
>>>> +  std::unique_ptr<RegisterBankInfo> RegBankInfo;
>>>>  public:
>>>>  SISubtarget(const Triple &TT, StringRef CPU, StringRef FS,
>>>> @@ -650,33 +658,25 @@ public:
>>>>  }
>>>>    const CallLowering *getCallLowering() const override {
>>>> -    assert(GISel && "Access to GlobalISel APIs not set");
>>>> -    return GISel->getCallLowering();
>>>> +    return CallLoweringInfo.get();
>>>>  }
>>>>    const InstructionSelector *getInstructionSelector() const override {
>>>> -    assert(GISel && "Access to GlobalISel APIs not set");
>>>> -    return GISel->getInstructionSelector();
>>>> +    return InstSelector.get();
>>>>  }
>>>>    const LegalizerInfo *getLegalizerInfo() const override {
>>>> -    assert(GISel && "Access to GlobalISel APIs not set");
>>>> -    return GISel->getLegalizerInfo();
>>>> +    return Legalizer.get();
>>>>  }
>>>>    const RegisterBankInfo *getRegBankInfo() const override {
>>>> -    assert(GISel && "Access to GlobalISel APIs not set");
>>>> -    return GISel->getRegBankInfo();
>>>> +    return RegBankInfo.get();
>>>>  }
>>>>    const SIRegisterInfo *getRegisterInfo() const override {
>>>>    return &InstrInfo.getRegisterInfo();
>>>>  }
>>>> -  void setGISelAccessor(GISelAccessor &GISel) {
>>>> -    this->GISel.reset(&GISel);
>>>> -  }
>>>> -
>>>>  // XXX - Why is this here if it isn't in the default pass set?
>>>>  bool enableEarlyIfConversion() const override {
>>>>    return true;
>>>> Modified: llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp (original)
>>>> +++ llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp Fri Aug  4 13:15:46 2017
>>>> @@ -28,7 +28,6 @@
>>>> #include "llvm/ADT/StringRef.h"
>>>> #include "llvm/ADT/Triple.h"
>>>> #include "llvm/ADT/Twine.h"
>>>> -#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
>>>> #include "llvm/CodeGen/GlobalISel/IRTranslator.h"
>>>> #include "llvm/CodeGen/GlobalISel/InstructionSelect.h"
>>>> #include "llvm/CodeGen/GlobalISel/Legalizer.h"
>>>> @@ -97,33 +96,6 @@ ARMFrameLowering *ARMSubtarget::initiali
>>>>  return new ARMFrameLowering(STI);
>>>> }
>>>> -namespace {
>>>> -
>>>> -struct ARMGISelActualAccessor : public GISelAccessor {
>>>> -  std::unique_ptr<CallLowering> CallLoweringInfo;
>>>> -  std::unique_ptr<InstructionSelector> InstSelector;
>>>> -  std::unique_ptr<LegalizerInfo> Legalizer;
>>>> -  std::unique_ptr<RegisterBankInfo> RegBankInfo;
>>>> -
>>>> -  const CallLowering *getCallLowering() const override {
>>>> -    return CallLoweringInfo.get();
>>>> -  }
>>>> -
>>>> -  const InstructionSelector *getInstructionSelector() const override {
>>>> -    return InstSelector.get();
>>>> -  }
>>>> -
>>>> -  const LegalizerInfo *getLegalizerInfo() const override {
>>>> -    return Legalizer.get();
>>>> -  }
>>>> -
>>>> -  const RegisterBankInfo *getRegBankInfo() const override {
>>>> -    return RegBankInfo.get();
>>>> -  }
>>>> -};
>>>> -
>>>> -} // end anonymous namespace
>>>> -
>>>> ARMSubtarget::ARMSubtarget(const Triple &TT, const std::string &CPU,
>>>>                           const std::string &FS,
>>>>                           const ARMBaseTargetMachine &TM, bool IsLittle)
>>>> @@ -141,40 +113,34 @@ ARMSubtarget::ARMSubtarget(const Triple
>>>>  assert((isThumb() || hasARMOps()) &&
>>>>         "Target must either be thumb or support ARM operations!");
>>>> -  ARMGISelActualAccessor *GISel = new ARMGISelActualAccessor();
>>>> -  GISel->CallLoweringInfo.reset(new ARMCallLowering(*getTargetLowering()));
>>>> -  GISel->Legalizer.reset(new ARMLegalizerInfo(*this));
>>>> +  CallLoweringInfo.reset(new ARMCallLowering(*getTargetLowering()));
>>>> +  Legalizer.reset(new ARMLegalizerInfo(*this));
>>>>    auto *RBI = new ARMRegisterBankInfo(*getRegisterInfo());
>>>>    // FIXME: At this point, we can't rely on Subtarget having RBI.
>>>>  // It's awkward to mix passing RBI and the Subtarget; should we pass
>>>>  // TII/TRI as well?
>>>> -  GISel->InstSelector.reset(createARMInstructionSelector(
>>>> +  InstSelector.reset(createARMInstructionSelector(
>>>>      *static_cast<const ARMBaseTargetMachine *>(&TM), *this, *RBI));
>>>> -  GISel->RegBankInfo.reset(RBI);
>>>> -  setGISelAccessor(*GISel);
>>>> +  RegBankInfo.reset(RBI);
>>>> }
>>>>  const CallLowering *ARMSubtarget::getCallLowering() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getCallLowering();
>>>> +  return CallLoweringInfo.get();
>>>> }
>>>>  const InstructionSelector *ARMSubtarget::getInstructionSelector() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getInstructionSelector();
>>>> +  return InstSelector.get();
>>>> }
>>>>  const LegalizerInfo *ARMSubtarget::getLegalizerInfo() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getLegalizerInfo();
>>>> +  return Legalizer.get();
>>>> }
>>>>  const RegisterBankInfo *ARMSubtarget::getRegBankInfo() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getRegBankInfo();
>>>> +  return RegBankInfo.get();
>>>> }
>>>>  bool ARMSubtarget::isXRaySupported() const {
>>>> Modified: llvm/trunk/lib/Target/ARM/ARMSubtarget.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.h?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/ARM/ARMSubtarget.h (original)
>>>> +++ llvm/trunk/lib/Target/ARM/ARMSubtarget.h Fri Aug  4 13:15:46 2017
>>>> @@ -20,7 +20,10 @@
>>>> #include "ARMISelLowering.h"
>>>> #include "ARMSelectionDAGInfo.h"
>>>> #include "llvm/ADT/Triple.h"
>>>> -#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
>>>> +#include "llvm/CodeGen/GlobalISel/CallLowering.h"
>>>> +#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
>>>> +#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
>>>> +#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
>>>> #include "llvm/CodeGen/MachineFunction.h"
>>>> #include "llvm/MC/MCInstrItineraries.h"
>>>> #include "llvm/MC/MCSchedule.h"
>>>> @@ -419,9 +422,6 @@ public:
>>>>  ARMSubtarget(const Triple &TT, const std::string &CPU, const std::string &FS,
>>>>               const ARMBaseTargetMachine &TM, bool IsLittle);
>>>> -  /// This object will take onwership of \p GISelAccessor.
>>>> -  void setGISelAccessor(GISelAccessor &GISel) { this->GISel.reset(&GISel); }
>>>> -
>>>>  /// getMaxInlineSizeThreshold - Returns the maximum memset / memcpy size
>>>>  /// that still makes it profitable to inline the call.
>>>>  unsigned getMaxInlineSizeThreshold() const {
>>>> @@ -469,10 +469,11 @@ private:
>>>>  std::unique_ptr<ARMBaseInstrInfo> InstrInfo;
>>>>  ARMTargetLowering   TLInfo;
>>>> -  /// Gather the accessor points to GlobalISel-related APIs.
>>>> -  /// This is used to avoid ifndefs spreading around while GISel is
>>>> -  /// an optional library.
>>>> -  std::unique_ptr<GISelAccessor> GISel;
>>>> +  /// GlobalISel related APIs.
>>>> +  std::unique_ptr<CallLowering> CallLoweringInfo;
>>>> +  std::unique_ptr<InstructionSelector> InstSelector;
>>>> +  std::unique_ptr<LegalizerInfo> Legalizer;
>>>> +  std::unique_ptr<RegisterBankInfo> RegBankInfo;
>>>>    void initializeEnvironment();
>>>>  void initSubtargetFeatures(StringRef CPU, StringRef FS);
>>>> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Fri Aug  4 13:15:46 2017
>>>> @@ -348,33 +348,6 @@ X86Subtarget &X86Subtarget::initializeSu
>>>>  return *this;
>>>> }
>>>> -namespace {
>>>> -
>>>> -struct X86GISelActualAccessor : public GISelAccessor {
>>>> -  std::unique_ptr<CallLowering> CallLoweringInfo;
>>>> -  std::unique_ptr<LegalizerInfo> Legalizer;
>>>> -  std::unique_ptr<RegisterBankInfo> RegBankInfo;
>>>> -  std::unique_ptr<InstructionSelector> InstSelector;
>>>> -
>>>> -  const CallLowering *getCallLowering() const override {
>>>> -    return CallLoweringInfo.get();
>>>> -  }
>>>> -
>>>> -  const InstructionSelector *getInstructionSelector() const override {
>>>> -    return InstSelector.get();
>>>> -  }
>>>> -
>>>> -  const LegalizerInfo *getLegalizerInfo() const override {
>>>> -    return Legalizer.get();
>>>> -  }
>>>> -
>>>> -  const RegisterBankInfo *getRegBankInfo() const override {
>>>> -    return RegBankInfo.get();
>>>> -  }
>>>> -};
>>>> -
>>>> -} // end anonymous namespace
>>>> -
>>>> X86Subtarget::X86Subtarget(const Triple &TT, StringRef CPU, StringRef FS,
>>>>                           const X86TargetMachine &TM,
>>>>                           unsigned StackAlignOverride)
>>>> @@ -399,35 +372,29 @@ X86Subtarget::X86Subtarget(const Triple
>>>>    setPICStyle(PICStyles::StubPIC);
>>>>  else if (isTargetELF())
>>>>    setPICStyle(PICStyles::GOT);
>>>> -  X86GISelActualAccessor *GISel = new X86GISelActualAccessor();
>>>> -  GISel->CallLoweringInfo.reset(new X86CallLowering(*getTargetLowering()));
>>>> -  GISel->Legalizer.reset(new X86LegalizerInfo(*this, TM));
>>>> +  CallLoweringInfo.reset(new X86CallLowering(*getTargetLowering()));
>>>> +  Legalizer.reset(new X86LegalizerInfo(*this, TM));
>>>>    auto *RBI = new X86RegisterBankInfo(*getRegisterInfo());
>>>> -  GISel->RegBankInfo.reset(RBI);
>>>> -  GISel->InstSelector.reset(createX86InstructionSelector(TM, *this, *RBI));
>>>> -  setGISelAccessor(*GISel);
>>>> +  RegBankInfo.reset(RBI);
>>>> +  InstSelector.reset(createX86InstructionSelector(TM, *this, *RBI));
>>>> }
>>>>  const CallLowering *X86Subtarget::getCallLowering() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getCallLowering();
>>>> +  return CallLoweringInfo.get();
>>>> }
>>>>  const InstructionSelector *X86Subtarget::getInstructionSelector() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getInstructionSelector();
>>>> +  return InstSelector.get();
>>>> }
>>>>  const LegalizerInfo *X86Subtarget::getLegalizerInfo() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getLegalizerInfo();
>>>> +  return Legalizer.get();
>>>> }
>>>>  const RegisterBankInfo *X86Subtarget::getRegBankInfo() const {
>>>> -  assert(GISel && "Access to GlobalISel APIs not set");
>>>> -  return GISel->getRegBankInfo();
>>>> +  return RegBankInfo.get();
>>>> }
>>>>  bool X86Subtarget::enableEarlyIfConversion() const {
>>>> Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=310115&r1=310114&r2=310115&view=diff
>>>> ==============================================================================
>>>> --- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86Subtarget.h Fri Aug  4 13:15:46 2017
>>>> @@ -20,7 +20,10 @@
>>>> #include "X86SelectionDAGInfo.h"
>>>> #include "llvm/ADT/StringRef.h"
>>>> #include "llvm/ADT/Triple.h"
>>>> -#include "llvm/CodeGen/GlobalISel/GISelAccessor.h"
>>>> +#include "llvm/CodeGen/GlobalISel/CallLowering.h"
>>>> +#include "llvm/CodeGen/GlobalISel/InstructionSelector.h"
>>>> +#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
>>>> +#include "llvm/CodeGen/GlobalISel/RegisterBankInfo.h"
>>>> #include "llvm/IR/CallingConv.h"
>>>> #include "llvm/MC/MCInstrItineraries.h"
>>>> #include "llvm/Target/TargetMachine.h"
>>>> @@ -314,10 +317,11 @@ protected:
>>>>  /// Instruction itineraries for scheduling
>>>>  InstrItineraryData InstrItins;
>>>> -  /// Gather the accessor points to GlobalISel-related APIs.
>>>> -  /// This is used to avoid ifndefs spreading around while GISel is
>>>> -  /// an optional library.
>>>> -  std::unique_ptr<GISelAccessor> GISel;
>>>> +  /// GlobalISel related APIs.
>>>> +  std::unique_ptr<CallLowering> CallLoweringInfo;
>>>> +  std::unique_ptr<LegalizerInfo> Legalizer;
>>>> +  std::unique_ptr<RegisterBankInfo> RegBankInfo;
>>>> +  std::unique_ptr<InstructionSelector> InstSelector;
>>>>  private:
>>>>  /// Override the stack alignment.
>>>> @@ -346,9 +350,6 @@ public:
>>>>  X86Subtarget(const Triple &TT, StringRef CPU, StringRef FS,
>>>>               const X86TargetMachine &TM, unsigned StackAlignOverride);
>>>> -  /// This object will take onwership of \p GISelAccessor.
>>>> -  void setGISelAccessor(GISelAccessor &GISel) { this->GISel.reset(&GISel); }
>>>> -
>>>>  const X86TargetLowering *getTargetLowering() const override {
>>>>    return &TLInfo;
>>>>  }
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>> 
>>> 
>>> -- 
>>> 
>>> -Bill Seurer
>>> 
>> 
>> _______________________________________________
>> 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