Skip to content

Commit da9bc6f

Browse files
Pass finalizer options through VCApi interface
1 parent 240b587 commit da9bc6f

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

include/clang/FrontendWrapper/Frontend.h

+8-15
Original file line numberDiff line numberDiff line change
@@ -37,31 +37,24 @@ struct InputArgs final : public Intel::CM::ClangFE::IInputArgs {
3737
};
3838

3939
using StringVect_t = std::vector<std::string>;
40-
inline StringVect_t
41-
convertBackendArgsToVcOpts(const StringVect_t &BackendArgs) {
42-
std::vector<std::string> VcOpts;
43-
std::vector<std::string> AllFinalizerOpts;
40+
inline std::pair<StringVect_t, StringVect_t>
41+
convertBackendArgsToVcAndFinalizerOpts(const StringVect_t &BackendArgs) {
42+
StringVect_t VcOpts;
43+
StringVect_t FinalizerOpts;
4444

4545
const std::string FinalizerOptPrefix = "-finalizer-opts=";
4646
auto IsFinalizerOpts = [&FinalizerOptPrefix](const std::string &Opt) {
4747
return Opt.find(FinalizerOptPrefix) == 0;
4848
};
4949
std::partition_copy(BackendArgs.begin(), BackendArgs.end(),
50-
std::back_inserter(AllFinalizerOpts),
50+
std::back_inserter(FinalizerOpts),
5151
std::back_inserter(VcOpts), IsFinalizerOpts);
52-
std::transform(AllFinalizerOpts.begin(), AllFinalizerOpts.end(),
53-
AllFinalizerOpts.begin(),
52+
std::transform(FinalizerOpts.begin(), FinalizerOpts.end(),
53+
FinalizerOpts.begin(),
5454
[&FinalizerOptPrefix](const std::string &Opt) {
5555
return Opt.substr(FinalizerOptPrefix.size());
5656
});
57-
if (!AllFinalizerOpts.empty()) {
58-
// TODO: we should escape the joined finalizer options
59-
VcOpts.emplace_back((llvm::StringRef(FinalizerOptPrefix) + "\"" +
60-
llvm::join(AllFinalizerOpts, " ") + "\"")
61-
.str());
62-
}
63-
64-
return VcOpts;
57+
return {VcOpts, FinalizerOpts};
6558
}
6659

6760
using IOutputArgs = Intel::CM::ClangFE::IOutputArgs;

tools/cmoc/cmoc.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -253,12 +253,17 @@ void CmocContext::runVCOpt(const BinaryData &In, InputKind IK,
253253
}
254254
assert(!BinFormat.empty());
255255

256-
std::vector<std::string> VcOpts =
257-
IGC::AdaptorCM::Frontend::convertBackendArgsToVcOpts(DriverInvocation->getBEArgs());
256+
std::vector<std::string> VcOpts;
257+
std::vector<std::string> FinalizerOpts;
258+
std::tie(VcOpts, FinalizerOpts) =
259+
IGC::AdaptorCM::Frontend::convertBackendArgsToVcAndFinalizerOpts(
260+
DriverInvocation->getBEArgs());
258261

259262
const auto &TargetFeatures = DriverInvocation->getTargetFeaturesStr();
260263

261264
std::string APIOptions = getVCApiOptions();
265+
if (!FinalizerOpts.empty())
266+
APIOptions += " -Xfinalizer '" + llvm::join(FinalizerOpts, " ") + "'";
262267
int RevId = getRevId();
263268

264269
bool PrintStats = getPrintStats();

0 commit comments

Comments
 (0)