[PATCH] D16250: Respect bound archs, even when they don't alter the toolchain.

Eric Christopher via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 15 17:58:16 PST 2016


Ultimately they probably shouldn't map to the same toolchain and we can use
that as a key. Looks OK for now though.

On Fri, Jan 15, 2016, 5:48 PM Justin Lebar <jlebar at google.com> wrote:

> jlebar created this revision.
> jlebar added a reviewer: tra.
> jlebar added subscribers: cfe-commits, beanz, echristo.
> Herald added a subscriber: aemerson.
>
> It's possible to BindArch without changing the toolchain at all.  For
> example, armv7 and armv7s have exactly the same triple.
>
> Therefore the code in the Driver that checks that we're not creating a
> job for the same Action twice needs to consider (Action, Toolchain,
> BoundArch) tuples.
>
> http://reviews.llvm.org/D16250
>
> Files:
>   include/clang/Driver/Driver.h
>   lib/Driver/Driver.cpp
>   test/Driver/darwin-multiarch-arm.c
>
> Index: test/Driver/darwin-multiarch-arm.c
> ===================================================================
> --- /dev/null
> +++ test/Driver/darwin-multiarch-arm.c
> @@ -0,0 +1,18 @@
> +// Check that we compile correctly with multiple ARM -arch options.
> +//
> +// RUN: %clang -target arm7-apple-darwin10 -### \
> +// RUN:   -arch armv7 -arch armv7s %s 2>&1 | FileCheck %s
> +
> +// CHECK: "-cc1" "-triple" "thumbv7-apple-ios5.0.0"
> +// CHECK-SAME: "-o" "[[CC_OUT1:[^"]*]]"
> +// CHECK:ld
> +// CHECK-SAME: "-o" "[[LD_OUT1:[^"]*]]"
> +// CHECK-SAME: "[[CC_OUT1]]"
> +// CHECK:"-cc1" "-triple" "thumbv7s-apple-ios5.0.0"
> +// CHECK-SAME: "-o" "[[CC_OUT2:[^"]*]]"
> +// CHECK:ld
> +// CHECK-SAME: "-o" "[[LD_OUT2:[^"]*]]"
> +// CHECK-SAME: "[[CC_OUT2]]"
> +// CHECK:lipo
> +// CHECK-DAG: "[[LD_OUT1]]"
> +// CHECK-DAG: "[[LD_OUT2]]"
> Index: lib/Driver/Driver.cpp
> ===================================================================
> --- lib/Driver/Driver.cpp
> +++ lib/Driver/Driver.cpp
> @@ -1803,8 +1803,15 @@
>      bool AtTopLevel, bool MultipleArchs, const char *LinkingOutput,
>      std::map<std::pair<const Action *, std::string>, InputInfo>
> &CachedResults)
>      const {
> -  std::pair<const Action *, std::string> ActionTC = {
> -      A, TC->getTriple().normalize()};
> +  // The bound arch is not necessarily represented in the toolchain's
> triple --
> +  // for example, armv7 and armv7s both map to the same triple -- so we
> need
> +  // both in our map.
> +  std::string TriplePlusArch = TC->getTriple().normalize();
> +  if (BoundArch) {
> +    TriplePlusArch += "-";
> +    TriplePlusArch += BoundArch;
> +  }
> +  std::pair<const Action *, std::string> ActionTC = {A, TriplePlusArch};
>    auto CachedResult = CachedResults.find(ActionTC);
>    if (CachedResult != CachedResults.end()) {
>      return CachedResult->second;
> Index: include/clang/Driver/Driver.h
> ===================================================================
> --- include/clang/Driver/Driver.h
> +++ include/clang/Driver/Driver.h
> @@ -380,9 +380,9 @@
>                                 const llvm::opt::ArgList &Args, phases::ID
> Phase,
>                                 Action *Input) const;
>
> -  /// BuildJobsForAction - Construct the jobs to perform for the
> -  /// action \p A and return an InputInfo for the result of running \p A.
> -  /// Will only construct jobs for a given (Action, ToolChain) pair once.
> +  /// BuildJobsForAction - Construct the jobs to perform for the action
> \p A and
> +  /// return an InputInfo for the result of running \p A.  Will only
> construct
> +  /// jobs for a given (Action, ToolChain, BoundArch) tuple once.
>    InputInfo BuildJobsForAction(Compilation &C, const Action *A,
>                                 const ToolChain *TC, const char *BoundArch,
>                                 bool AtTopLevel, bool MultipleArchs,
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160116/044f8d77/attachment.html>


More information about the cfe-commits mailing list