1*48958d02SDaniil Fukalov //===-- R600Subtarget.cpp - R600 Subtarget Information --------------------===//
2*48958d02SDaniil Fukalov //
3*48958d02SDaniil Fukalov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*48958d02SDaniil Fukalov // See https://llvm.org/LICENSE.txt for license information.
5*48958d02SDaniil Fukalov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*48958d02SDaniil Fukalov //
7*48958d02SDaniil Fukalov //===----------------------------------------------------------------------===//
8*48958d02SDaniil Fukalov //
9*48958d02SDaniil Fukalov /// \file
10*48958d02SDaniil Fukalov /// Implements the R600 specific subclass of TargetSubtarget.
11*48958d02SDaniil Fukalov //
12*48958d02SDaniil Fukalov //===----------------------------------------------------------------------===//
13*48958d02SDaniil Fukalov
14*48958d02SDaniil Fukalov #include "R600Subtarget.h"
15*48958d02SDaniil Fukalov #include "MCTargetDesc/R600MCTargetDesc.h"
16*48958d02SDaniil Fukalov
17*48958d02SDaniil Fukalov using namespace llvm;
18*48958d02SDaniil Fukalov
19*48958d02SDaniil Fukalov #define DEBUG_TYPE "r600-subtarget"
20*48958d02SDaniil Fukalov
21*48958d02SDaniil Fukalov #define GET_SUBTARGETINFO_TARGET_DESC
22*48958d02SDaniil Fukalov #define GET_SUBTARGETINFO_CTOR
23*48958d02SDaniil Fukalov #include "R600GenSubtargetInfo.inc"
24*48958d02SDaniil Fukalov
R600Subtarget(const Triple & TT,StringRef GPU,StringRef FS,const TargetMachine & TM)25*48958d02SDaniil Fukalov R600Subtarget::R600Subtarget(const Triple &TT, StringRef GPU, StringRef FS,
26*48958d02SDaniil Fukalov const TargetMachine &TM)
27*48958d02SDaniil Fukalov : R600GenSubtargetInfo(TT, GPU, /*TuneCPU*/ GPU, FS), AMDGPUSubtarget(TT),
28*48958d02SDaniil Fukalov InstrInfo(*this),
29*48958d02SDaniil Fukalov FrameLowering(TargetFrameLowering::StackGrowsUp, getStackAlignment(), 0),
30*48958d02SDaniil Fukalov TLInfo(TM, initializeSubtargetDependencies(TT, GPU, FS)),
31*48958d02SDaniil Fukalov InstrItins(getInstrItineraryForCPU(GPU)) {}
32*48958d02SDaniil Fukalov
initializeSubtargetDependencies(const Triple & TT,StringRef GPU,StringRef FS)33*48958d02SDaniil Fukalov R600Subtarget &R600Subtarget::initializeSubtargetDependencies(const Triple &TT,
34*48958d02SDaniil Fukalov StringRef GPU,
35*48958d02SDaniil Fukalov StringRef FS) {
36*48958d02SDaniil Fukalov SmallString<256> FullFS("+promote-alloca,");
37*48958d02SDaniil Fukalov FullFS += FS;
38*48958d02SDaniil Fukalov ParseSubtargetFeatures(GPU, /*TuneCPU*/ GPU, FullFS);
39*48958d02SDaniil Fukalov
40*48958d02SDaniil Fukalov HasMulU24 = getGeneration() >= EVERGREEN;
41*48958d02SDaniil Fukalov HasMulI24 = hasCaymanISA();
42*48958d02SDaniil Fukalov
43*48958d02SDaniil Fukalov return *this;
44*48958d02SDaniil Fukalov }
45