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