summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/Target/BPF/BPFSubtarget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lib/Target/BPF/BPFSubtarget.cpp')
-rw-r--r--gnu/llvm/lib/Target/BPF/BPFSubtarget.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/gnu/llvm/lib/Target/BPF/BPFSubtarget.cpp b/gnu/llvm/lib/Target/BPF/BPFSubtarget.cpp
index c3a8b1caa63..42ca87f9ef6 100644
--- a/gnu/llvm/lib/Target/BPF/BPFSubtarget.cpp
+++ b/gnu/llvm/lib/Target/BPF/BPFSubtarget.cpp
@@ -13,6 +13,7 @@
#include "BPFSubtarget.h"
#include "BPF.h"
+#include "llvm/Support/Host.h"
#include "llvm/Support/TargetRegistry.h"
using namespace llvm;
@@ -25,7 +26,30 @@ using namespace llvm;
void BPFSubtarget::anchor() {}
+BPFSubtarget &BPFSubtarget::initializeSubtargetDependencies(StringRef CPU,
+ StringRef FS) {
+ initializeEnvironment();
+ initSubtargetFeatures(CPU, FS);
+ return *this;
+}
+
+void BPFSubtarget::initializeEnvironment() {
+ HasJmpExt = 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;
+ }
+}
+
BPFSubtarget::BPFSubtarget(const Triple &TT, const std::string &CPU,
const std::string &FS, const TargetMachine &TM)
- : BPFGenSubtargetInfo(TT, CPU, FS), InstrInfo(), FrameLowering(*this),
+ : BPFGenSubtargetInfo(TT, CPU, FS), InstrInfo(),
+ FrameLowering(initializeSubtargetDependencies(CPU, FS)),
TLInfo(TM, *this) {}