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 33 R600Subtarget &R600Subtarget::initializeSubtargetDependencies(const Triple &TT, 34 StringRef GPU, 35 StringRef FS) { 36 SmallString<256> FullFS("+promote-alloca,"); 37 FullFS += FS; 38 ParseSubtargetFeatures(GPU, /*TuneCPU*/ GPU, FullFS); 39 40 HasMulU24 = getGeneration() >= EVERGREEN; 41 HasMulI24 = hasCaymanISA(); 42 43 return *this; 44 } 45