Skip to content

Commit 78667b2

Browse files
committed
Joel changes
1 parent da623e1 commit 78667b2

File tree

2 files changed

+53
-4
lines changed

2 files changed

+53
-4
lines changed

clang/test/Driver/linker-wrapper-passes.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
// RUN: --linker-path=/usr/bin/true %t/host-x86_64-unknown-linux-gnu.o \
2828
// RUN: %offload-opt-loadbye --offload-opt=-wave-goodbye \
2929
// RUN: --offload-opt=-passes="function(goodbye),module(inline)" 2>&1 | \
30+
// RUN: grep -v "warning: argument unused during compilation: '--no-default-config'" | \
3031
// RUN: FileCheck -match-full-lines -check-prefixes=OUT %s
3132

3233
// Check plugin, -p, and remarks.
@@ -38,6 +39,7 @@
3839
// RUN: --offload-opt=-pass-remarks-output=%t/remarks.yml \
3940
// RUN: --offload-opt=-pass-remarks-filter=inline \
4041
// RUN: --offload-opt=-pass-remarks-format=yaml 2>&1 | \
42+
// RUN: grep -v "warning: argument unused during compilation: '--no-default-config'" | \
4143
// RUN: FileCheck -match-full-lines -check-prefixes=OUT,REM %s
4244
// RUN: FileCheck -input-file=%t/remarks.yml -match-full-lines \
4345
// RUN: -check-prefixes=YML %s
@@ -50,7 +52,7 @@
5052
// OUT-NOT: {{.}}
5153
// OUT: Bye: f
5254
// OUT-NEXT: Bye: test
53-
// REM-NEXT: remark: {{.*}} 'f' inlined into 'test' {{.*}}
55+
// REM-NEXT: {{.*}} 'f' inlined into 'test' {{.*}}
5456
// OUT-NOT: {{.}}
5557

5658
// YML-NOT: {{.}}

clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -527,9 +527,56 @@ Expected<StringRef> clang(ArrayRef<StringRef> InputFiles, const ArgList &Args) {
527527

528528
// Forward all of the `--offload-opt` and similar options to the device.
529529
if (linkerSupportsLTO(Args)) {
530-
for (auto &Arg : Args.filtered(OPT_offload_opt_eq_minus, OPT_mllvm))
531-
CmdArgs.push_back(
532-
Args.MakeArgString("-Wl,--plugin-opt=" + StringRef(Arg->getValue())));
530+
for (auto &Arg : Args.filtered(OPT_offload_opt_eq_minus, OPT_mllvm)) {
531+
StringRef Val = Arg->getValue();
532+
// --help documents them with "--" but option parsing accepts them with
533+
// "-" too, so either could arrive here.
534+
auto consumeOpt = [](StringRef &Val, StringRef Opt) {
535+
assert(Opt.starts_with("--"));
536+
return Val.consume_front(Opt) || Val.consume_front(Opt.substr(1));
537+
};
538+
// Use -Xlinker not -Wl, which doesn't treat commas as plain text.
539+
if (consumeOpt(Val, "--pass-remarks-with-hotness=")) {
540+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
541+
CmdArgs.push_back(Args.MakeArgString("--opt-remarks-with-hotness"));
542+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
543+
CmdArgs.push_back(Args.MakeArgString(Val));
544+
} else if (consumeOpt(Val, "--pass-remarks-hotness-threshold=")) {
545+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
546+
CmdArgs.push_back(Args.MakeArgString("--opt-remarks-hotness-threshold"));
547+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
548+
CmdArgs.push_back(Args.MakeArgString(Val));
549+
} else if (consumeOpt(Val, "--pass-remarks-output=")) {
550+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
551+
CmdArgs.push_back(Args.MakeArgString("--opt-remarks-filename"));
552+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
553+
CmdArgs.push_back(Args.MakeArgString(Val));
554+
} else if (consumeOpt(Val, "--pass-remarks-filter=")) {
555+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
556+
CmdArgs.push_back(Args.MakeArgString("--opt-remarks-passes"));
557+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
558+
CmdArgs.push_back(Args.MakeArgString(Val));
559+
} else if (consumeOpt(Val, "--pass-remarks-format=")) {
560+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
561+
CmdArgs.push_back(Args.MakeArgString("--opt-remarks-format"));
562+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
563+
CmdArgs.push_back(Args.MakeArgString(Val));
564+
} else if (consumeOpt(Val, "--load-pass-plugin=")) {
565+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
566+
CmdArgs.push_back(Args.MakeArgString("--load-pass-plugin=" + Val));
567+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
568+
CmdArgs.push_back(Args.MakeArgString("-mllvm=-load=" + Val));
569+
} else if (consumeOpt(Val, "--passes=") || Val.consume_front("-p=")) {
570+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
571+
CmdArgs.push_back(Args.MakeArgString("--lto-newpm-passes=" + Val));
572+
} else {
573+
// This is needed for at least -pass-remarks and options defined by any
574+
// loaded plugins (e.g., -wave-goodbye defined by Bye.so).
575+
CmdArgs.push_back(Args.MakeArgString("-Xlinker"));
576+
CmdArgs.push_back(
577+
Args.MakeArgString("-mllvm=" + StringRef(Arg->getValue())));
578+
}
579+
}
533580
}
534581

535582
if (!Triple.isNVPTX())

0 commit comments

Comments
 (0)