blob: 42ca87f9ef67800bad6dafc2151ad824021391b1 [file] [log] [blame]
Alexei Starovoitove4c8c802015-01-24 17:51:26 +00001//===-- BPFSubtarget.cpp - BPF Subtarget Information ----------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the BPF specific subclass of TargetSubtargetInfo.
11//
12//===----------------------------------------------------------------------===//
13
14#include "BPFSubtarget.h"
15#include "BPF.h"
Yonghong Songdc1dbf62017-08-23 04:25:57 +000016#include "llvm/Support/Host.h"
Alexei Starovoitove4c8c802015-01-24 17:51:26 +000017#include "llvm/Support/TargetRegistry.h"
18
19using namespace llvm;
20
21#define DEBUG_TYPE "bpf-subtarget"
22
23#define GET_SUBTARGETINFO_TARGET_DESC
24#define GET_SUBTARGETINFO_CTOR
25#include "BPFGenSubtargetInfo.inc"
26
27void BPFSubtarget::anchor() {}
28
Yonghong Songdc1dbf62017-08-23 04:25:57 +000029BPFSubtarget &BPFSubtarget::initializeSubtargetDependencies(StringRef CPU,
30 StringRef FS) {
31 initializeEnvironment();
32 initSubtargetFeatures(CPU, FS);
33 return *this;
34}
35
36void BPFSubtarget::initializeEnvironment() {
37 HasJmpExt = false;
38}
39
40void BPFSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
41 if (CPU == "probe")
42 CPU = sys::detail::getHostCPUNameForBPF();
43 if (CPU == "generic" || CPU == "v1")
44 return;
45 if (CPU == "v2") {
46 HasJmpExt = true;
47 return;
48 }
49}
50
Daniel Sandersa73f1fd2015-06-10 12:11:26 +000051BPFSubtarget::BPFSubtarget(const Triple &TT, const std::string &CPU,
Alexei Starovoitove4c8c802015-01-24 17:51:26 +000052 const std::string &FS, const TargetMachine &TM)
Yonghong Songdc1dbf62017-08-23 04:25:57 +000053 : BPFGenSubtargetInfo(TT, CPU, FS), InstrInfo(),
54 FrameLowering(initializeSubtargetDependencies(CPU, FS)),
Daniel Sanders50f17232015-09-15 16:17:27 +000055 TLInfo(TM, *this) {}