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