blob: 6902ed75d8521ac420f3b79ec5671fa7f4e7dbdc [file] [log] [blame]
Alex Bradbury89718422017-10-19 21:37:38 +00001//===-- RISCVSubtarget.cpp - RISCV Subtarget Information ------------------===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Alex Bradbury89718422017-10-19 21:37:38 +00006//
7//===----------------------------------------------------------------------===//
8//
9// This file implements the RISCV specific subclass of TargetSubtargetInfo.
10//
11//===----------------------------------------------------------------------===//
12
13#include "RISCVSubtarget.h"
14#include "RISCV.h"
15#include "RISCVFrameLowering.h"
16#include "llvm/Support/TargetRegistry.h"
17
18using namespace llvm;
19
20#define DEBUG_TYPE "riscv-subtarget"
21
22#define GET_SUBTARGETINFO_TARGET_DESC
23#define GET_SUBTARGETINFO_CTOR
24#include "RISCVGenSubtargetInfo.inc"
25
26void RISCVSubtarget::anchor() {}
27
Alex Bradburyfea49572019-03-09 09:28:06 +000028RISCVSubtarget &RISCVSubtarget::initializeSubtargetDependencies(
29 const Triple &TT, StringRef CPU, StringRef FS, StringRef ABIName) {
Alex Bradbury89718422017-10-19 21:37:38 +000030 // Determine default and user-specified characteristics
Alex Bradburyfea49572019-03-09 09:28:06 +000031 bool Is64Bit = TT.isArch64Bit();
Alex Bradbury89718422017-10-19 21:37:38 +000032 std::string CPUName = CPU;
33 if (CPUName.empty())
34 CPUName = Is64Bit ? "generic-rv64" : "generic-rv32";
35 ParseSubtargetFeatures(CPUName, FS);
36 if (Is64Bit) {
37 XLenVT = MVT::i64;
38 XLen = 64;
39 }
Alex Bradburyfea49572019-03-09 09:28:06 +000040
41 TargetABI = RISCVABI::computeTargetABI(TT, getFeatureBits(), ABIName);
Alex Bradburydab1f6f2019-03-22 11:21:40 +000042 RISCVFeatures::validate(TT, getFeatureBits());
Alex Bradbury89718422017-10-19 21:37:38 +000043 return *this;
44}
45
Alex Bradbury6aae2162019-02-19 14:42:00 +000046RISCVSubtarget::RISCVSubtarget(const Triple &TT, StringRef CPU, StringRef FS,
Alex Bradburyfea49572019-03-09 09:28:06 +000047 StringRef ABIName, const TargetMachine &TM)
Alex Bradbury89718422017-10-19 21:37:38 +000048 : RISCVGenSubtargetInfo(TT, CPU, FS),
Alex Bradburyfea49572019-03-09 09:28:06 +000049 FrameLowering(initializeSubtargetDependencies(TT, CPU, FS, ABIName)),
Alex Bradbury89718422017-10-19 21:37:38 +000050 InstrInfo(), RegInfo(getHwMode()), TLInfo(TM, *this) {}