Skip to content

Fix Tier-0 fusion failure on graphs with QLinearConcat - #85

Merged
tperry-amd merged 2 commits into
mainfrom
fix_qlinearconcat_fusion_fail
Aug 13, 2026
Merged

Fix Tier-0 fusion failure on graphs with QLinearConcat#85
tperry-amd merged 2 commits into
mainfrom
fix_qlinearconcat_fusion_fail

Conversation

@KenLagos

Copy link
Copy Markdown
Collaborator

Two bugs in the multi-op-translation path blocked QLinearConcat from fusing, forcing per-op fallback:

  1. RebuildTensorDescPointers / RebuildSubNodePointers set op_desc.Desc = desc_storage.get(), assuming the operator desc is the first member of the storage object. The concat's primary dequant and Join sub-node point desc_storage at the shared QLinConcatStorage (first member is a vector), so op_desc.Desc was left pointing at the wrong bytes. Restore the correct pointer at the end of both fixups.

  2. Sub-node graph_inputs wiring handled constants and partition-boundary inputs but not partition-internal producers, leaving such inputs with no graph edge. Add a value_producer branch in both Compile and TryCompilePartition.

Also switch the concat's dequant/quantize decomposition to the modern DML_OPERATOR_DEQUANTIZE / DML_OPERATOR_QUANTIZE, which take per-tensor scalar scale/zero-point natively via QuantizationTensors.

Two bugs in the multi-op-translation path blocked QLinearConcat from
fusing, forcing per-op fallback:

1. RebuildTensorDescPointers / RebuildSubNodePointers set
   op_desc.Desc = desc_storage.get(), assuming the operator desc is the
   first member of the storage object. The concat's primary dequant and
   Join sub-node point desc_storage at the shared QLinConcatStorage
   (first member is a vector), so op_desc.Desc was left pointing at the
   wrong bytes. Restore the correct pointer at the end of both fixups.

2. Sub-node graph_inputs wiring handled constants and partition-boundary
   inputs but not partition-internal producers, leaving such inputs with
   no graph edge. Add a value_producer branch in both Compile and
   TryCompilePartition.

Also switch the concat's dequant/quantize decomposition to the modern
DML_OPERATOR_DEQUANTIZE / DML_OPERATOR_QUANTIZE, which take per-tensor
scalar scale/zero-point natively via QuantizationTensors.
@KenLagos KenLagos self-assigned this Aug 12, 2026
@tperry-amd
tperry-amd merged commit bd42f3c into main Aug 13, 2026
1 check passed
@tperry-amd
tperry-amd deleted the fix_qlinearconcat_fusion_fail branch August 13, 2026 20:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants