]> granicus.if.org Git - clang/commitdiff
bpf: add -mcpu=# support for bpf
authorYonghong Song <yhs@fb.com>
Wed, 23 Aug 2017 04:26:17 +0000 (04:26 +0000)
committerYonghong Song <yhs@fb.com>
Wed, 23 Aug 2017 04:26:17 +0000 (04:26 +0000)
-mcpu=# will support:
  . generic: the default insn set
  . v1: insn set version 1, the same as generic
  . v2: insn set version 2, version 1 + additional jmp insns
  . probe: the compiler will probe the underlying kernel to
           decide proper version of insn set.

Examples:
$ clang -target bpf -mcpu=v1 -c t.c
$ clang -target bpf -mcpu=v2 -c t.c
$ clang -target bpf -mcpu=generic -c t.c
$ clang -target bpf -mcpu=probe -c t.c
$ clang -target bpf -mcpu=v3 -c t.c
error: unknown target CPU 'v3'

Signed-off-by: Yonghong Song <yhs@fb.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@311523 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets/BPF.h
lib/Driver/ToolChains/CommonArgs.cpp

index 536f5c12635ea8b8f70eb2b2c1101dce98a0ef90..4dd9cbd9d2219456e72de4162e0cad8cd2512311 100644 (file)
@@ -76,6 +76,18 @@ public:
       return CCCR_OK;
     }
   }
+
+  bool isValidCPUName(StringRef Name) const override {
+    if (Name == "generic" || Name == "v1" ||
+        Name == "v2" || Name == "probe")
+      return true;
+    return false;
+  }
+
+  bool setCPU(const std::string &Name) override {
+    StringRef CPUName(Name);
+    return isValidCPUName(CPUName);
+  }
 };
 } // namespace targets
 } // namespace clang
index f4881181181ec34c4924f3ab269a57c993a314b0..690f3b3a96b2ad918d3e73608cc9b280ef49ff9b 100644 (file)
@@ -320,6 +320,8 @@ std::string tools::getCPUName(const ArgList &Args, const llvm::Triple &T,
     return TargetCPUName;
   }
 
+  case llvm::Triple::bpfel:
+  case llvm::Triple::bpfeb:
   case llvm::Triple::sparc:
   case llvm::Triple::sparcel:
   case llvm::Triple::sparcv9: