From d9a1cb6ba502c424fc7813d28a49c2831b094ec2 Mon Sep 17 00:00:00 2001 From: Yonghong Song Date: Wed, 23 Aug 2017 04:26:17 +0000 Subject: [PATCH] bpf: add -mcpu=# support for bpf -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 Acked-by: Alexei Starovoitov git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@311523 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets/BPF.h | 12 ++++++++++++ lib/Driver/ToolChains/CommonArgs.cpp | 2 ++ 2 files changed, 14 insertions(+) diff --git a/lib/Basic/Targets/BPF.h b/lib/Basic/Targets/BPF.h index 536f5c1263..4dd9cbd9d2 100644 --- a/lib/Basic/Targets/BPF.h +++ b/lib/Basic/Targets/BPF.h @@ -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 diff --git a/lib/Driver/ToolChains/CommonArgs.cpp b/lib/Driver/ToolChains/CommonArgs.cpp index f488118118..690f3b3a96 100644 --- a/lib/Driver/ToolChains/CommonArgs.cpp +++ b/lib/Driver/ToolChains/CommonArgs.cpp @@ -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: -- 2.40.0