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

Daniel Sanders via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 8 01:40:14 PDT 2017


Galina told me that "Requires a clean build." in the commit message will force a clean build but I haven't used that yet. The method I usually use is to force a build using buildbot's web ui with one of the properties set to 'clean' and 'true' in the name and value textboxes.

> On 8 Aug 2017, at 09:33, Diana Picus <diana.picus at linaro.org> wrote:
> 
> On 8 August 2017 at 02:45, Quentin Colombet via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>> Ran on a Linux box (thanks to Ahmed) and it just worked.
>> 
>> Is there a way to trigger a build from scratch?
>> 
> 
> IIRC you need to put "Requires a clean build." somewhere in the commit
> message. Daniel might remember better.
> 
>>> Le 7 août 2017 à 15:14, Quentin Colombet via llvm-commits <llvm-commits at lists.llvm.org> a écrit :
>>> 
>>> 
>>>> 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
>>>> 
>>> 
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>> _______________________________________________
>> 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