[llvm-branch-commits] [DirectX] Lower `@llvm.dx.typedBufferStore` to DXIL ops (PR #104253)
Justin Bogner via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Sep 9 17:33:42 PDT 2024
================
@@ -94,6 +95,7 @@ class OpLowerer {
DiagnosticInfoUnsupported Diag(*CI->getFunction(), Message,
CI->getDebugLoc());
M.getContext().diagnose(Diag);
+ HasErrors = true;
----------------
bogner wrote:
Even if we did parallel codegen we'd surely have different instances of the `OpLowerer` in different threads, no? In any case, I do like this suggestion for readability reasons since updating a member variable like this is harder to follow than control flow.
One thing that makes it tricky is that it really is easiest to turn the error into a diagnostic in `replaceFunction` - that's where we have the context of which call couldn't be replaced and access to its `DebugInfo`. So there are a couple of options:
1. Create a custom `ErrorInfo` subclass so that we can propagate info about the call instruction up. This would need to live somewhere shared between `DXILOpLowering` and `DXILOpBuilder`.
2. Keep handling the error in `replaceFunction` but also return a `bool` to indicate success/failure
3. Handle the error in `replaceFunction` but then return an Error anyway. This would probably need a different `ErrorInfo` subclass so we could differentiate between errors we handled and one's we didn't.
Option (3) just seems too messy, and option (1) adds quite a bit of code without a lot of advantage. Option (2) is very simple but `bool Success` return values make me sad.
Thoughts?
https://github.com/llvm/llvm-project/pull/104253
More information about the llvm-branch-commits
mailing list