[PATCH] D127686: [Offloading] Embed the target features in the OffloadBinary
Artem Belevich via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 13 15:39:36 PDT 2022
tra added inline comments.
================
Comment at: clang/lib/Driver/ToolChains/Clang.cpp:8320
+ TC->getDriver().isUsingLTO(/* IsOffload */ true)
+ ? ",feature=" + llvm::join(FeatureArgs, ",feature=")
+ : "";
----------------
This makes a couple of implicit assumptions that we should probably make more explicit.
- `assert(!FeatureArgs.empty())`, otherwise we may end up passing an empty `feature=`.
- that it will be appended to the comma-separated list, which is not obvious until we actually do it later.
================
Comment at: clang/lib/Driver/ToolChains/Clang.cpp:8323-8327
CmdArgs.push_back(Args.MakeArgString(
"--image=file=" + File + "," + "triple=" + TC->getTripleString() + "," +
"arch=" + Arch + "," + "kind=" +
- Action::GetOffloadKindName(OffloadAction->getOffloadingDeviceKind())));
+ Action::GetOffloadKindName(OffloadAction->getOffloadingDeviceKind()) +
+ FeaturesStr));
----------------
I think this would look cleaner if expressed along these lines:
```
SmallVector<StringRef> Parts = {
"--image=file=" + File,
"triple=" + TC->getTripleString() ,
"arch=" + Arch,
"kind=" + Action::GetOffloadKindName(OffloadAction->getOffloadingDeviceKind()),
};
// Add "-feature=foo" arguments to `Parts` here.
llvm::join(",", Parts)
```
================
Comment at: clang/test/Driver/openmp-offload-gpu-new.c:117
+
+// CHECK-LTO-FEATURES: clang-offload-packager{{.*}}feature={{.*}}ptx
----------------
This should probably be a bit more specific/verbose. E.g. I'd want to make sure that `feature=` is part of the `--image` argument and that ptx belongs to it and is not part of some other argument (or even a file name extension).
================
Comment at: clang/tools/clang-offload-packager/ClangOffloadPackager.cpp:81-85
+ if (Args.count(KeyAndValue.first))
+ Args[KeyAndValue.first] =
+ Saver.save(Args[KeyAndValue.first] + "," + KeyAndValue.second);
+ else
+ Args[KeyAndValue.first] = KeyAndValue.second;
----------------
This looks like a homegrown version of `getLastArg()`. I wonder if there's a way to use the standard LLVM option parser for that.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127686/new/
https://reviews.llvm.org/D127686
More information about the cfe-commits
mailing list