| //===-- 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; |
| } |