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