| //===-- R600Subtarget.cpp - R600 Subtarget Information --------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| /// \file | |
| /// Implements the R600 specific subclass of TargetSubtarget. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "R600Subtarget.h" | |
| #include "MCTargetDesc/R600MCTargetDesc.h" | |
| using namespace llvm; | |
| #define DEBUG_TYPE "r600-subtarget" | |
| #define GET_SUBTARGETINFO_TARGET_DESC | |
| #define GET_SUBTARGETINFO_CTOR | |
| #include "R600GenSubtargetInfo.inc" | |
| R600Subtarget::R600Subtarget(const Triple &TT, StringRef GPU, StringRef FS, | |
| const TargetMachine &TM) | |
| : R600GenSubtargetInfo(TT, GPU, /*TuneCPU*/ GPU, FS), AMDGPUSubtarget(TT), | |
| InstrInfo(*this), | |
| FrameLowering(TargetFrameLowering::StackGrowsUp, getStackAlignment(), 0), | |
| TLInfo(TM, initializeSubtargetDependencies(TT, GPU, FS)), | |
| InstrItins(getInstrItineraryForCPU(GPU)) { | |
| AddressableLocalMemorySize = LocalMemorySize; | |
| } | |
| R600Subtarget &R600Subtarget::initializeSubtargetDependencies(const Triple &TT, | |
| StringRef GPU, | |
| StringRef FS) { | |
| SmallString<256> FullFS("+promote-alloca,"); | |
| FullFS += FS; | |
| ParseSubtargetFeatures(GPU, /*TuneCPU*/ GPU, FullFS); | |
| HasMulU24 = getGeneration() >= EVERGREEN; | |
| HasMulI24 = hasCaymanISA(); | |
| return *this; | |
| } |