Add dynamic qreg alloc for cross-qreg gate decomposition #2074
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Context:
Currently, the decomposition pass assumes all qubits involved in a gate operation come from the same quantum register (qreg). However, gates may operate on qubits from different registers, which causes decomposition failures or incorrect behaviour!
Description of the Change:
This PR introduces dynamic qreg allocation logic that automatically created when qubits from different qreg are involved in a gate operation. When such cross-qreg operations are detected:
deallocates the temporary register. It will run into an error if we deallocate this tmp registerThe implementation adds a
needAllocQreg
flag to theOpSignature
struct and implements the allocation logic inprepareCallOperands()
andprepareCallResultForQreg()
Exampe:
decmopse to
Benefits:
Possible Drawbacks:
There is a underlying issue if we deallocate the tmp qreg, for running the circuit on lightning, I removed these line. I don't think it's the right way to resolve them.
catalyst/mlir/lib/Quantum/Transforms/DecomposeLoweringPatterns.cpp
Lines 284 to 287 in 2e5d350
Related GitHub Issues:
[sc-100312]