[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