On Tue, Mar 12, 2013 at 10:45:27PM +0200, Dmitri Gribenko wrote: > On Tue, Mar 12, 2013 at 10:21 PM, Tom Stellard <[email protected]> wrote: > > lib/Driver/Tools.cpp | 19 +++++++++++++++++++ > > lib/Driver/Tools.h | 1 + > > Hi Tom, > > Is it possible to add tests? >
Sure, here is an updated patch with a test case. -Tom
>From 5a8dc2e69802a5d30e6c1cbac000ca534544d41d Mon Sep 17 00:00:00 2001 From: Tom Stellard <[email protected]> Date: Tue, 12 Mar 2013 14:51:01 -0400 Subject: [PATCH] R600: Handle -mcpu option v2 -v2: Add a test case --- lib/Driver/Tools.cpp | 28 ++++++++++++++++++++++++++++ lib/Driver/Tools.h | 1 + test/Driver/r600-mcpu.cl | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 0 deletions(-) create mode 100644 test/Driver/r600-mcpu.cl diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 62b1feb..7667a92 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1108,6 +1108,30 @@ void Clang::AddPPCTargetArgs(const ArgList &Args, } } +/// Get the (LLVM) name of the R600 gpu we are targeting. +static std::string getR600TargetGPU(const ArgList &Args) { + if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) { + std::string GPUName = A->getValue(); + return llvm::StringSwitch<const char *>(GPUName) + .Cases("rv610", "rv620", "rv630", "r600") + .Cases("rv635", "rs780", "rs880", "r600") + .Case("rv740", "rv770") + .Case("palm", "cedar") + .Cases("sumo", "sumo2", "redwood") + .Case("hemlock", "cypress") + .Case("aruba", "cayman") + .Default(GPUName.c_str()); + } + return ""; +} + +void Clang::AddR600TargetArgs(const ArgList &Args, + ArgStringList &CmdArgs) const { + std::string TargetGPUName = getR600TargetGPU(Args); + CmdArgs.push_back("-target-cpu"); + CmdArgs.push_back(Args.MakeArgString(TargetGPUName.c_str())); +} + void Clang::AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const { const Driver &D = getToolChain().getDriver(); @@ -2230,6 +2254,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, AddPPCTargetArgs(Args, CmdArgs); break; + case llvm::Triple::r600: + AddR600TargetArgs(Args, CmdArgs); + break; + case llvm::Triple::sparc: AddSparcTargetArgs(Args, CmdArgs); break; diff --git a/lib/Driver/Tools.h b/lib/Driver/Tools.h index 846c834..f002e30 100644 --- a/lib/Driver/Tools.h +++ b/lib/Driver/Tools.h @@ -51,6 +51,7 @@ namespace tools { bool KernelOrKext) const; void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; void AddPPCTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; + void AddR600TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const; void AddHexagonTargetArgs (const ArgList &Args, ArgStringList &CmdArgs) const; diff --git a/test/Driver/r600-mcpu.cl b/test/Driver/r600-mcpu.cl new file mode 100644 index 0000000..2242fee --- /dev/null +++ b/test/Driver/r600-mcpu.cl @@ -0,0 +1,43 @@ +// Check that -mcpu works for all supported GPUs + +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=r600 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv610 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv620 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv630 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv635 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rs780 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rs880 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv710 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv730 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=palm %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=cedar %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=sumo %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=sumo2 %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=redwood %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=juniper %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=barts %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=turks %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=caicos %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=juniper %s -o - 2>&1 | FileCheck --check-prefix=R600-CHECK %s + +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv670 %s -o - 2>&1 | FileCheck --check-prefix=R600-DOUBLE-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv740 %s -o - 2>&1 | FileCheck --check-prefix=R600-DOUBLE-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=rv770 %s -o - 2>&1 | FileCheck --check-prefix=R600-DOUBLE-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=hemlock %s -o - 2>&1 | FileCheck --check-prefix=R600-DOUBLE-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=cypress %s -o - 2>&1 | FileCheck --check-prefix=R600-DOUBLE-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=cayman %s -o - 2>&1 | FileCheck --check-prefix=R600-DOUBLE-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=aruba %s -o - 2>&1 | FileCheck --check-prefix=R600-DOUBLE-CHECK %s + +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=tahiti %s -o - 2>&1 | FileCheck --check-prefix=SI-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=pitcairn %s -o - 2>&1 | FileCheck --check-prefix=SI-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=verde %s -o - 2>&1 | FileCheck --check-prefix=SI-CHECK %s +// RUN: %clang -target r600 -x cl -S -emit-llvm -mcpu=oland %s -o - 2>&1 | FileCheck --check-prefix=SI-CHECK %s + +// R600-CHECK-NOT: is not a recognized processor for this target (ignoring processor) +// R600-CHECK: target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-v2048:2048:2048-n32:64" + +// R600-DOUBLE-CHECK-NOT: is not a recognized processor for this target (ignoring processor) +// R600-DOUBLE-CHECK: target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-v2048:2048:2048-n32:64" + +// SI-CHECK-NOT: is not a recognized processor for this target (ignoring processor) +// SI-CHECK: target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v64:64:64-v96:128:128-v128:128:128-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-v2048:2048:2048-n32:64" -- 1.7.3.4
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
