samitolvanen added a comment.

In D119296#3623059 <https://reviews.llvm.org/D119296#3623059>, @nickdesaulniers 
wrote:

> I see you modified the mir parser & printer; consider adding a .mir test.

I added a .mir test for parsing the cfi-type. The machine instructions 
generated for the various call types are covered in the .ll tests.

> Might be nice to document the generated asm more for other compiler vendors 
> to better understand the implementation, rather than having to read the tests 
> added here.

The exact instruction sequence is also documented in the kernel patches in case 
other compiler vendors want to implement this, but sure, that makes sense. I 
assume comments in the various `AsmPrinter` functions would be sufficient?



================
Comment at: clang/lib/CodeGen/CodeGenFunction.h:4604
+  void EmitKCFIOperandBundle(const CGCallee &Callee,
+                             SmallVectorImpl<llvm::OperandBundleDef> &Bundles);
+
----------------
nickdesaulniers wrote:
> Should this parameter be an `ArrayRef`? This might be a more precise type, 
> but seeing an impl type kind of breaks the whole pImpl idiom; I'm pretty sure 
> that's what `ArrayRef` is for.
> https://llvm.org/docs/ProgrammersManual.html#llvm-adt-arrayref-h
> That said, this header is pretty inconsistent in the use of `SmallVectorImp` 
> vs `ArrayRef`, but I *think* `ArrayRef` is strongly preferred.
I don't believe I can use `ArrayRef` when I need to append to the list, it 
appears to be read-only.


================
Comment at: llvm/lib/CodeGen/MachineInstr.cpp:1770-1771
+  if (uint32_t CFIType = getCFIType()) {
+    if (!FirstOp) {
+      FirstOp = false;
+      OS << ',';
----------------
nickdesaulniers wrote:
> If `FirstOp` is `false`, reassign it `false`? Is that right?  I see that's 
> what's done on L1763, but..."what?"
Ah yes, it looks like this has been copied a few times earlier already. I'll 
stop the cycle.


================
Comment at: llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:7822-7840
+  ConstantInt *CFIType = nullptr;
+  auto Bundle = CB.getOperandBundle(LLVMContext::OB_kcfi);
+  if (Bundle && CB.isIndirectCall()) {
+    if (!TLI.supportKCFIBundles())
+      report_fatal_error(
+          "Target doesn't support calls with kcfi operand bundles.");
+    CFIType = cast<ConstantInt>(Bundle->Inputs[0]);
----------------
nickdesaulniers wrote:
> Are we able to reorder these?
> 
> ```
> CLI.setDebugLoc ...
>   ...
> if (Bundle && CB.isIndirectCall) {
>   ...
>   CLI.setCFIType ...
> ```
We can reorder these, but this does follow the same convention as the rest of 
the function. I assume `CallLoweringInfo` was specifically designed so that the 
arguments can all be initialized in one statement.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119296/new/

https://reviews.llvm.org/D119296

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to