Loading mlir/qir_qrt/qir-qrt.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -538,6 +538,15 @@ void __quantum__rt__end_multi_ctrl_u_region( return; } void __quantum__rt__start_validated_region() { // TODO: Implement this std::cout << "__quantum__rt__start_validated_region() not implemented\n"; } void __quantum__rt__end_validated_region() { // TODO: Implement this std::cout << "__quantum__rt__end_validated_region() not implemented\n"; } int8_t *__quantum__rt__array_get_element_ptr_1d(Array *q, uint64_t idx) { Array &arr = *q; int8_t *ptr = arr[idx]; Loading mlir/qir_qrt/qir-qrt.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,10 @@ void __quantum__rt__end_pow_u_region(int64_t power); void __quantum__rt__mark_compute(); void __quantum__rt__unmark_compute(); // Validation API: void __quantum__rt__start_validated_region(); void __quantum__rt__end_validated_region(); // ------- // Array API Loading mlir/transforms/validation/MirrorCircuitPass.cpp +42 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,47 @@ void MirrorCircuitTransformPass::getDependentDialects( } void MirrorCircuitTransformPass::runOnOperation() { // TODO std::cout << "MirrorCircuitTransformPass:\n"; getOperation().dump(); getOperation().walk([&](mlir::FuncOp funcOp) { if (funcOp.getName().str().rfind("__internal_mlir_", 0) == 0) { mlir::OpBuilder builder(funcOp); { mlir::OpBuilder::InsertionGuard guard(builder); auto parentModule = funcOp->getParentOfType<mlir::ModuleOp>(); builder.setInsertionPointToStart( &parentModule.getRegion().getBlocks().front()); auto func_decl = builder.create<mlir::FuncOp>( builder.getUnknownLoc(), "__quantum__rt__start_validated_region", builder.getFunctionType(llvm::None, llvm::None)); func_decl.setVisibility(mlir::SymbolTable::Visibility::Private); mlir::Block &fnBody = funcOp.getBody().getBlocks().front(); builder.setInsertionPointToStart(&fnBody); builder.create<mlir::CallOp>(builder.getUnknownLoc(), func_decl); } { mlir::OpBuilder::InsertionGuard guard(builder); auto parentModule = funcOp->getParentOfType<mlir::ModuleOp>(); builder.setInsertionPointToStart( &parentModule.getRegion().getBlocks().front()); auto func_decl = builder.create<mlir::FuncOp>( builder.getUnknownLoc(), "__quantum__rt__end_validated_region", builder.getFunctionType(llvm::None, llvm::None)); func_decl.setVisibility(mlir::SymbolTable::Visibility::Private); mlir::Block &fnBody = funcOp.getBody().getBlocks().back(); builder.setInsertionPoint(fnBody.getTerminator()); builder.create<mlir::CallOp>(builder.getUnknownLoc(), func_decl); } } }); std::cout << "After MirrorCircuitTransformPass:\n"; getOperation().dump(); } } // namespace qcor No newline at end of file tools/driver/qcor.in +4 −0 Original line number Diff line number Diff line Loading @@ -714,6 +714,10 @@ def main(argv=None): if '--q-optimize' in sys.argv[1:]: sys.argv.remove('--q-optimize') extra_args.append('--q-optimize') # Passing -validate to qcor-mlir will enable execution validation if '-D__internal__qcor__validate__execution' in sys.argv: extra_args.append('--q-validate') # Parse clang -Ox optimization level: opt_level_options = ['-O0', '-O1', '-O2', '-O3'] for opt_level_option in opt_level_options: Loading Loading
mlir/qir_qrt/qir-qrt.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -538,6 +538,15 @@ void __quantum__rt__end_multi_ctrl_u_region( return; } void __quantum__rt__start_validated_region() { // TODO: Implement this std::cout << "__quantum__rt__start_validated_region() not implemented\n"; } void __quantum__rt__end_validated_region() { // TODO: Implement this std::cout << "__quantum__rt__end_validated_region() not implemented\n"; } int8_t *__quantum__rt__array_get_element_ptr_1d(Array *q, uint64_t idx) { Array &arr = *q; int8_t *ptr = arr[idx]; Loading
mlir/qir_qrt/qir-qrt.hpp +4 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,10 @@ void __quantum__rt__end_pow_u_region(int64_t power); void __quantum__rt__mark_compute(); void __quantum__rt__unmark_compute(); // Validation API: void __quantum__rt__start_validated_region(); void __quantum__rt__end_validated_region(); // ------- // Array API Loading
mlir/transforms/validation/MirrorCircuitPass.cpp +42 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,47 @@ void MirrorCircuitTransformPass::getDependentDialects( } void MirrorCircuitTransformPass::runOnOperation() { // TODO std::cout << "MirrorCircuitTransformPass:\n"; getOperation().dump(); getOperation().walk([&](mlir::FuncOp funcOp) { if (funcOp.getName().str().rfind("__internal_mlir_", 0) == 0) { mlir::OpBuilder builder(funcOp); { mlir::OpBuilder::InsertionGuard guard(builder); auto parentModule = funcOp->getParentOfType<mlir::ModuleOp>(); builder.setInsertionPointToStart( &parentModule.getRegion().getBlocks().front()); auto func_decl = builder.create<mlir::FuncOp>( builder.getUnknownLoc(), "__quantum__rt__start_validated_region", builder.getFunctionType(llvm::None, llvm::None)); func_decl.setVisibility(mlir::SymbolTable::Visibility::Private); mlir::Block &fnBody = funcOp.getBody().getBlocks().front(); builder.setInsertionPointToStart(&fnBody); builder.create<mlir::CallOp>(builder.getUnknownLoc(), func_decl); } { mlir::OpBuilder::InsertionGuard guard(builder); auto parentModule = funcOp->getParentOfType<mlir::ModuleOp>(); builder.setInsertionPointToStart( &parentModule.getRegion().getBlocks().front()); auto func_decl = builder.create<mlir::FuncOp>( builder.getUnknownLoc(), "__quantum__rt__end_validated_region", builder.getFunctionType(llvm::None, llvm::None)); func_decl.setVisibility(mlir::SymbolTable::Visibility::Private); mlir::Block &fnBody = funcOp.getBody().getBlocks().back(); builder.setInsertionPoint(fnBody.getTerminator()); builder.create<mlir::CallOp>(builder.getUnknownLoc(), func_decl); } } }); std::cout << "After MirrorCircuitTransformPass:\n"; getOperation().dump(); } } // namespace qcor No newline at end of file
tools/driver/qcor.in +4 −0 Original line number Diff line number Diff line Loading @@ -714,6 +714,10 @@ def main(argv=None): if '--q-optimize' in sys.argv[1:]: sys.argv.remove('--q-optimize') extra_args.append('--q-optimize') # Passing -validate to qcor-mlir will enable execution validation if '-D__internal__qcor__validate__execution' in sys.argv: extra_args.append('--q-validate') # Parse clang -Ox optimization level: opt_level_options = ['-O0', '-O1', '-O2', '-O3'] for opt_level_option in opt_level_options: Loading