10b57cec5SDimitry Andric //===- LanaiSubtarget.cpp - Lanai Subtarget Information -----------*- C++ -*-=// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This file implements the Lanai specific subclass of TargetSubtarget. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #include "LanaiSubtarget.h" 140b57cec5SDimitry Andric 150b57cec5SDimitry Andric #include "Lanai.h" 160b57cec5SDimitry Andric 170b57cec5SDimitry Andric #define DEBUG_TYPE "lanai-subtarget" 180b57cec5SDimitry Andric 190b57cec5SDimitry Andric #define GET_SUBTARGETINFO_TARGET_DESC 200b57cec5SDimitry Andric #define GET_SUBTARGETINFO_CTOR 210b57cec5SDimitry Andric #include "LanaiGenSubtargetInfo.inc" 220b57cec5SDimitry Andric 230b57cec5SDimitry Andric using namespace llvm; 240b57cec5SDimitry Andric 250b57cec5SDimitry Andric void LanaiSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) { 265ffd83dbSDimitry Andric std::string CPUName = std::string(CPU); 270b57cec5SDimitry Andric if (CPUName.empty()) 280b57cec5SDimitry Andric CPUName = "generic"; 290b57cec5SDimitry Andric 30e8d8bef9SDimitry Andric ParseSubtargetFeatures(CPUName, /*TuneCPU*/ CPUName, FS); 310b57cec5SDimitry Andric } 320b57cec5SDimitry Andric 330b57cec5SDimitry Andric LanaiSubtarget &LanaiSubtarget::initializeSubtargetDependencies(StringRef CPU, 340b57cec5SDimitry Andric StringRef FS) { 350b57cec5SDimitry Andric initSubtargetFeatures(CPU, FS); 360b57cec5SDimitry Andric return *this; 370b57cec5SDimitry Andric } 380b57cec5SDimitry Andric 390b57cec5SDimitry Andric LanaiSubtarget::LanaiSubtarget(const Triple &TargetTriple, StringRef Cpu, 400b57cec5SDimitry Andric StringRef FeatureString, const TargetMachine &TM, 410b57cec5SDimitry Andric const TargetOptions & /*Options*/, 420b57cec5SDimitry Andric CodeModel::Model /*CodeModel*/, 43*5f757f3fSDimitry Andric CodeGenOptLevel /*OptLevel*/) 44e8d8bef9SDimitry Andric : LanaiGenSubtargetInfo(TargetTriple, Cpu, /*TuneCPU*/ Cpu, FeatureString), 450b57cec5SDimitry Andric FrameLowering(initializeSubtargetDependencies(Cpu, FeatureString)), 4604eeddc0SDimitry Andric TLInfo(TM, *this) {} 47