-
Notifications
You must be signed in to change notification settings - Fork 185
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a few state-related cc ops #2354
base: main
Are you sure you want to change the base?
Conversation
Signed-off-by: Anna Gringauze <[email protected]>
…ate-ops Signed-off-by: Anna Gringauze <[email protected]>
Signed-off-by: Anna Gringauze <[email protected]>
…ate-ops Signed-off-by: Anna Gringauze <[email protected]>
Signed-off-by: Anna Gringauze <[email protected]>
Signed-off-by: Anna Gringauze <[email protected]>
Signed-off-by: Anna Gringauze <[email protected]>
…ate-ops Signed-off-by: Anna Gringauze <[email protected]>
by an intrinsic runtime call on simulators. | ||
|
||
```mlir | ||
%0 = cc.create_state %data: !cc.ptr<!cc.state> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This example only has 1 argument, but below it lists 2 arguments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm thinking we should put these in the quake dialect.
First, these really correspond to quantum
operations in the end. As such they are successively lowered to (recursive?) kernel application or high-level abstract calls to a quantum simulator/emulator.
Second, they just don't have a classical computation semantics (see issue 1). In that context, they really aren't anything the compiler can reason about in terms of classical computation and behave as opaque calls to unknown external code.
runtime call on simulators. | ||
|
||
```mlir | ||
%0 = cc.get_number_of_qubits %state : i64 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The type on this example doesn't correspond to the assembly below.
``` | ||
}]; | ||
|
||
let arguments = (ins StrAttr:$calleeName); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should probably take a !cc.ptr<?>
argument and make use of the cc.literal_string
operation. That would be more flexible in the long run.
Description
Add a few state-related cc ops:
cc.create_state
cc.get_number_of_qubits
cc.get_state
The ops are created by the kernel builder or the AST bridge and either optimized away during argument synthesis, or converted to mlir in
QuakeToCodegen
pass.This simplifies passes that seek to remove those ops, such as
DeleteStates
orArgumentConversion
.Note: this is also a prerequisite for creating a simpler quantum state synthesis passes: #2291