diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/BPF/BPFSubtarget.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/Target/BPF/BPFSubtarget.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/BPF/BPFSubtarget.cpp b/contrib/llvm-project/llvm/lib/Target/BPF/BPFSubtarget.cpp new file mode 100644 index 000000000000..ab3452501b95 --- /dev/null +++ b/contrib/llvm-project/llvm/lib/Target/BPF/BPFSubtarget.cpp @@ -0,0 +1,63 @@ +//===-- BPFSubtarget.cpp - BPF Subtarget Information ----------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements the BPF specific subclass of TargetSubtargetInfo. +// +//===----------------------------------------------------------------------===// + +#include "BPFSubtarget.h" +#include "BPF.h" +#include "llvm/Support/Host.h" +#include "llvm/Support/TargetRegistry.h" + +using namespace llvm; + +#define DEBUG_TYPE "bpf-subtarget" + +#define GET_SUBTARGETINFO_TARGET_DESC +#define GET_SUBTARGETINFO_CTOR +#include "BPFGenSubtargetInfo.inc" + +void BPFSubtarget::anchor() {} + +BPFSubtarget &BPFSubtarget::initializeSubtargetDependencies(StringRef CPU, + StringRef FS) { + initializeEnvironment(); + initSubtargetFeatures(CPU, FS); + ParseSubtargetFeatures(CPU, FS); + return *this; +} + +void BPFSubtarget::initializeEnvironment() { + HasJmpExt = false; + HasJmp32 = false; + HasAlu32 = false; + UseDwarfRIS = false; +} + +void BPFSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) { + if (CPU == "probe") + CPU = sys::detail::getHostCPUNameForBPF(); + if (CPU == "generic" || CPU == "v1") + return; + if (CPU == "v2") { + HasJmpExt = true; + return; + } + if (CPU == "v3") { + HasJmpExt = true; + HasJmp32 = true; + return; + } +} + +BPFSubtarget::BPFSubtarget(const Triple &TT, const std::string &CPU, + const std::string &FS, const TargetMachine &TM) + : BPFGenSubtargetInfo(TT, CPU, FS), InstrInfo(), + FrameLowering(initializeSubtargetDependencies(CPU, FS)), + TLInfo(TM, *this) {} |
