shader: treat call-target registers with several reaching definitions as GPU-selected

This commit is contained in:
nmzik committed 2026-10-31 04:07:35 +01:00
1 parent ee034be4b2
commit abd77f574c
4 files changed
+24 -10

No files matched your search

+8
View File
@@ -11125,6 +11125,14 @@ void TestMemoryFedScalarLeafCall() {
const auto skipped = PrepareShaderSource(gpu_callable, options);
Check(skipped.unsupported_call_pc == 12u && skipped.calls.empty(),
"GPU-buffer callable did not report its unsupported call site");
// The table index s20 is loop-carried, so two definitions reach the call.
const uint32_t loop_callable[] = {EncodeSmem0(0x08, 20, 0), 0xfa000000u,
EncodeSmem0(0x09, 14, 0), 20u << 25u, EncodeSop1(0x21, 14, 14),
EncodeSmem0(0x08, 20, 0), 20u << 25u, EncodeSopc(0x07, 20, 128),
EncodeSopp(0x05, 0xfff9u), EncodeSopp(0x01)};
const auto loop_skipped = PrepareShaderSource(loop_callable, options);
Check(loop_skipped.unsupported_call_pc == 16u && loop_skipped.calls.empty(),
"loop-selected GPU-buffer callable did not report its unsupported call site");
auto source = PrepareShaderSource(shader, options);
Check(source.calls.size() == 1 && source.decoded.has_swap_pc &&
source.decoded.instructions[source.calls.front().instruction].branch_target == UINT32_MAX,