[cfe-commits] [PATCH] [4/6] Hexagon TC: Add/improve support for small data, threshold, pic, pie

Sebastian Pop spop at codeaurora.org
Fri Sep 21 13:17:54 PDT 2012


Hi,

The patch looks good with two minor typos, see below.

Matthew Curtis wrote:
> 
> 
> -- 
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
> 

> From 4355ad92df91e845c439469eda70c1fca265bbc6 Mon Sep 17 00:00:00 2001
> From: Matthew Curtis <mcurtis at codeaurora.org>
> Date: Fri, 14 Sep 2012 12:18:25 -0500
> Subject: [PATCH 4/6] Hexagon TC: Add/improve support for small data
>  threshold, pic, pie
> 
> ---
>  include/clang/Driver/Options.td |    3 +-
>  lib/Driver/Tools.cpp            |   47 +++++++++++++++++++---
>  test/Driver/hexagon-toolchain.c |   85 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 128 insertions(+), 7 deletions(-)
> 
> diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
> index 17ebbef..13f440d 100644
> --- a/include/clang/Driver/Options.td
> +++ b/include/clang/Driver/Options.td
> @@ -158,7 +158,8 @@ def E : Flag<"-E">, Flags<[DriverOption,CC1Option]>, Group<Action_Group>,
>    HelpText<"Only run the preprocessor">;
>  def F : JoinedOrSeparate<"-F">, Flags<[RenderJoined,CC1Option]>,
>      HelpText<"Add directory to framework include search path">;
> -def G : Separate<"-G">, Flags<[DriverOption]>;
> +def G : JoinedOrSeparate<"-G">, Flags<[DriverOption]>;
> +def G_EQ : Joined<"-G=">, Flags<[DriverOption]>;
>  def H : Flag<"-H">, Flags<[CC1Option]>,
>      HelpText<"Show header includes and nesting depth">;
>  def I_ : Flag<"-I-">, Group<I_Group>;
> diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
> index b100192..baec90f 100644
> --- a/lib/Driver/Tools.cpp
> +++ b/lib/Driver/Tools.cpp
> @@ -1152,6 +1152,28 @@ void Clang::AddX86TargetArgs(const ArgList &Args,
>    }
>  }
>  
> +static inline bool HasPICArg(const ArgList &Args) {
> +  return Args.hasArg(options::OPT_fPIC)
> +    || Args.hasArg(options::OPT_fpic);
> +}
> +
> +static Arg* GetLastSmallDataThresholdArg(const ArgList &Args) {

s/Arg* GetLastSmallDataThresholdArg/Arg *GetLastSmallDataThresholdArg/

> +  return Args.getLastArg(options::OPT_G,
> +                         options::OPT_G_EQ,
> +                         options::OPT_msmall_data_threshold_EQ);
> +}
> +
> +static std::string GetHexagonSmallDataThresholdValue(const ArgList &Args) {
> +  std::string value;
> +  if (HasPICArg(Args))
> +    value = "0";
> +  else if (Arg *A = GetLastSmallDataThresholdArg(Args)) {
> +    value = A->getValue(Args);
> +    A->claim();
> +  }
> +  return value;
> +}
> +
>  void Clang::AddHexagonTargetArgs(const ArgList &Args,
>                                   ArgStringList &CmdArgs) const {
>    llvm::Triple Triple = getToolChain().getTriple();
> @@ -1165,13 +1187,11 @@ void Clang::AddHexagonTargetArgs(const ArgList &Args,
>    if (Args.hasArg(options::OPT_mqdsp6_compat))
>      CmdArgs.push_back("-mqdsp6-compat");
>  
> -  if (Arg *A = Args.getLastArg(options::OPT_G,
> -                               options::OPT_msmall_data_threshold_EQ)) {
> -    std::string SmallDataThreshold="-small-data-threshold=";
> -    SmallDataThreshold += A->getValue(Args);
> +  std::string SmallDataThreshold = GetHexagonSmallDataThresholdValue(Args);
> +  if (!SmallDataThreshold.empty()) {
>      CmdArgs.push_back ("-mllvm");
> -    CmdArgs.push_back(Args.MakeArgString(SmallDataThreshold));
> -    A->claim();
> +    CmdArgs.push_back(Args.MakeArgString(
> +                        "-hexagon-small-data-threshold=" + SmallDataThreshold));
>    }
>  
>    if (!Args.hasArg(options::OPT_fno_short_enums))
> @@ -3261,6 +3281,11 @@ void hexagon::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
>      CmdArgs.push_back("-fsyntax-only");
>    }
>  
> +  std::string SmallDataThreshold = GetHexagonSmallDataThresholdValue(Args);
> +  if (!SmallDataThreshold.empty()) {
> +    CmdArgs.push_back(
> +      Args.MakeArgString(std::string("-G") + SmallDataThreshold));
> +  }
>  
>    // Only pass -x if gcc will understand it; otherwise hope gcc
>    // understands the suffix correctly. The main use case this would go
> @@ -3318,6 +3343,7 @@ void hexagon::Link::ConstructJob(Compilation &C, const JobAction &JA,
>    //----------------------------------------------------------------------------
>    bool hasStaticArg = Args.hasArg(options::OPT_static);
>    bool buildingLib = Args.hasArg(options::OPT_shared);
> +  bool buildPIE = Args.hasArg(options::OPT_pie);
>    bool incStdLib = !Args.hasArg(options::OPT_nostdlib);
>    bool incStartFiles = !Args.hasArg(options::OPT_nostartfiles);
>    bool incDefLibs = !Args.hasArg(options::OPT_nodefaultlibs);
> @@ -3353,6 +3379,15 @@ void hexagon::Link::ConstructJob(Compilation &C, const JobAction &JA,
>    if (hasStaticArg)
>      CmdArgs.push_back("-static");
>  
> +  if (buildPIE && !buildingLib)
> +    CmdArgs.push_back("-pie");
> +
> +  std::string SmallDataThreshold = GetHexagonSmallDataThresholdValue(Args);
> +  if (!SmallDataThreshold.empty()) {

You don't need braces around this single stmt then clause.

> +    CmdArgs.push_back(
> +      Args.MakeArgString(std::string("-G") + SmallDataThreshold));
> +  }
> +
>    //----------------------------------------------------------------------------
>    //
>    //----------------------------------------------------------------------------
> diff --git a/test/Driver/hexagon-toolchain.c b/test/Driver/hexagon-toolchain.c
> index e891607..7f7844a 100644
> --- a/test/Driver/hexagon-toolchain.c
> +++ b/test/Driver/hexagon-toolchain.c
> @@ -433,3 +433,88 @@
>  // CHECK022: "-lstdc++" "-lm"
>  // CHECK022: "--start-group" "-lstandalone" "-lc" "-lgcc" "--end-group"
>  // CHECK022: "[[GNU_DIR]]/hexagon/lib/v4/fini.o"
> +
> +// -----------------------------------------------------------------------------
> +// pic, small data threshold
> +// -----------------------------------------------------------------------------
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK023 %s
> +// CHECK023:      "{{.*}}clang" "-cc1"
> +// CHECK023:        "-mrelocation-model" "static"
> +// CHECK023-NEXT: "[[GNU_DIR:.*]]/bin/hexagon-as"
> +// CHECK023-NOT:    "-G{{[0-9]+}}"
> +// CHECK023-NEXT: "[[GNU_DIR]]/bin/hexagon-ld"
> +// CHECK023-NOT:    "-G{{[0-9]+}}"
> +
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   -fpic \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK024 %s
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   -fPIC \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK024 %s
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   -fPIC \
> +// RUN:   -msmall_data_threshold=8 \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK024 %s
> +// CHECK024:      "{{.*}}clang" "-cc1"
> +// CHECK024-NOT:    "-mrelocation-model" "static"
> +// CHECK024:        "-pic-level" "{{[12]}}"
> +// CHECK024:        "-mllvm" "-hexagon-small-data-threshold=0"
> +// CHECK024-NEXT: "[[GNU_DIR:.*]]/bin/hexagon-as"
> +// CHECK024:        "-G0"
> +// CHECK024-NEXT: "[[GNU_DIR]]/bin/hexagon-ld"
> +// CHECK024:        "-G0"
> +
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   -G=8 \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK025 %s
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   -G 8 \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK025 %s
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   -msmall-data-threshold=8 \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK025 %s
> +// CHECK025:      "{{.*}}clang" "-cc1"
> +// CHECK025:        "-mrelocation-model" "static"
> +// CHECK025:        "-mllvm" "-hexagon-small-data-threshold=8"
> +// CHECK025-NEXT: "[[GNU_DIR:.*]]/bin/hexagon-as"
> +// CHECK025:        "-G8"
> +// CHECK025-NEXT: "[[GNU_DIR]]/bin/hexagon-ld"
> +// CHECK025:        "-G8"
> +
> +// -----------------------------------------------------------------------------
> +// pie
> +// -----------------------------------------------------------------------------
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   -pie \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK026 %s
> +// CHECK026:      "{{.*}}clang" "-cc1"
> +// CHECK026-NEXT: "[[GNU_DIR:.*]]/bin/hexagon-as"
> +// CHECK026-NEXT: "[[GNU_DIR]]/bin/hexagon-ld"
> +// CHECK026:        "-pie"
> +
> +// RUN: %clang -### -target hexagon-unknown-linux     \
> +// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
> +// RUN:   -pie -shared \
> +// RUN:   %s 2>&1 \
> +// RUN:   | FileCheck -check-prefix=CHECK027 %s
> +// CHECK027:      "{{.*}}clang" "-cc1"
> +// CHECK027-NEXT: "[[GNU_DIR:.*]]/bin/hexagon-as"
> +// CHECK027-NEXT: "[[GNU_DIR]]/bin/hexagon-ld"
> +// CHECK027-NOT:    "-pie"
> -- 
> 1.7.8.3
> 

> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation



More information about the cfe-commits mailing list