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
17using 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
25R600Subtarget::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
35R600Subtarget &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