Description
This is a tracking issue for QASM2 extension deprecations, this won't happen until the squin dialect is complete enough to directly compile QASM2, STIM and being used in combination with qourier.
I know this is breaking however as we planned before open-source, and being pointed by @kaihsin explicitly in QuEraComputing/bloqade#4 we want QASM2 to stay as a compile target as much as possible and use a friendlier IR/language as the main interface for users to program circuits and connect with our low-level stack which would simplified the work by an order of magnitude on compiler development.
Now since QuEraComputing/bloqade#194 is merged, pending on a few rewrites to QASM2 and STIM, we will have QuEraComputing/bloqade#194 as a foundation for other compiler components. Given we would like more expressive hints for a parallel statement such as
%wire_1, %wire_2, %wire_3 squin.parallel(some hints as attributes...) {
%wire_op_1, %wire_op_2 = apply(%op, %wire_a, %wire_b)
%wire_op_3 = apply(%op, %wire_c)
squin.yield %wire_op_1, %wire_op_2, %wire_op_3
}
(in a separate RFC incoming) that is similar to a standard scf
statement definition but with strict definition on what's inside (only apply
). This is always possible because apply
is always quantum and whatever produces %op
is always classical so one can always shuffle them without breaking any scheduling assumption by assuming classical operations a 1000x faster than quantum ones.