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