From 5b11c5535f2d6fd68c2031932bae5419f3135916 Mon Sep 17 00:00:00 2001 From: Eric Schweitz Date: Fri, 5 Dec 2025 11:42:54 -0800 Subject: [PATCH 1/2] [NFC] Cleanup test directory structure. (#3650) For some reason, the test directories were split into two separate directory structures. This makes it confusing for maintenance and is just plain silly. This PR merges the two redundant subtrees. In the future, any PR that introduces new redundant subdirectories should be met with a "changes requested". Signed-off-by: Eric Schweitz --- test/{Quake => Transforms}/add_dealloc-0.qke | 0 test/{Quake => Transforms}/add_dealloc-1.qke | 0 test/{Quake => Transforms}/add_measurements-0.qke | 0 test/{Quake => Transforms}/add_measurements-1.qke | 0 test/{Quake => Transforms}/adjoint-1.qke | 0 test/{Quake => Transforms}/adjoint-2.qke | 0 test/{Quake => Transforms}/aggressive_inline_prevented.qke | 0 test/{Quake => Transforms}/apply-0.qke | 0 test/{Quake => Transforms}/apply-1.qke | 0 test/{Quake => Transforms}/apply-2.qke | 0 test/{Quake => Transforms}/apply_noise_conversion.qke | 0 test/{Quake => Transforms}/arg_subst-1.txt | 0 test/{Quake => Transforms}/arg_subst-2.txt | 0 test/{Quake => Transforms}/arg_subst-3.txt | 0 test/{Quake => Transforms}/arg_subst-4.txt | 0 test/{Quake => Transforms}/arg_subst-5.txt | 0 test/{Quake => Transforms}/arg_subst-6.txt | 0 test/{Quake => Transforms}/arg_subst-7.txt | 0 test/{Quake => Transforms}/arg_subst-8.txt | 0 test/{Quake => Transforms}/arg_subst.txt | 0 test/{Quake => Transforms}/arg_subst_func.qke | 0 test/{Quake => Transforms}/basic-sroa.qke | 0 test/{Quake => Transforms}/basic.qke | 0 test/{Quake => Transforms}/bell.qke | 0 test/{Quake => Transforms}/canonical-1.qke | 0 test/{Quake => Transforms}/canonical-2.qke | 0 test/{Quake => Transforms}/canonical-3.qke | 0 test/{Quake => Transforms}/cast.qke | 0 test/{Quake => Transforms}/cast_fold.qke | 0 test/{Quake => Transforms}/cc_execution_manager.qke | 0 test/{Quake => Transforms}/classical_optimization.qke | 0 test/{Quake => Transforms}/coalesce.qke | 0 test/{Quake => Transforms}/codegen_dialect.qke | 0 test/{Quake => Transforms}/combine.qke | 0 test/{Quake => Transforms}/combine_measurements.qke | 0 test/{Quake => Transforms}/complex.qke | 0 test/{Quake => Transforms}/compute_action.qke | 0 test/{Quake => Transforms}/compute_ptr.qke | 0 test/{Quake => Transforms}/const_prop_complex.qke | 0 test/{Quake => Transforms}/control_and_adjoint.qke | 0 test/{Quake => Transforms}/control_flow.qke | 0 test/{Quake => Transforms}/control_on_adjoint.qke | 0 test/{Quake => Transforms}/cse.qke | 0 test/{Quake => Transforms}/custom_pass.qke | 0 test/{Quake => Transforms}/delete_states.qke | 0 test/{Quake => Transforms}/dep_analysis.qke | 0 test/{Quake => Transforms}/dep_analysis_bug_classical.qke | 0 test/{Quake => Transforms}/dep_analysis_bug_lifting_schedule.qke | 0 test/{Quake => Transforms}/dep_analysis_bug_lowering.qke | 0 test/{Quake => Transforms}/dep_analysis_classical.qke | 0 test/{Quake => Transforms}/dep_analysis_lifting.qke | 0 test/{Quake => Transforms}/deuteron.qke | 0 test/{Quake => Transforms}/device_call.qke | 0 test/{Quake => Transforms}/dsr.qke | 0 test/{Quake => Transforms}/dummy.qke | 0 test/{Quake => Transforms}/erase_vcc.qke | 0 test/{Quake => Transforms}/exp_pauli-1.qke | 0 test/{Quake => Transforms}/expand_veqs.qke | 0 test/{Quake => Transforms}/inline.qke | 0 test/{Quake => Transforms}/inline_simplify.qke | 0 test/{Quake => Transforms}/invalid.qke | 0 test/{Quake => Transforms}/kernel_exec-1.qke | 0 test/{Quake => Transforms}/kernel_exec-2.qke | 0 test/{Quake => Transforms}/lambda_kernel_exec.qke | 0 test/{Quake => Transforms}/lambda_variable-1.qke | 0 test/{Quake => Transforms}/lambda_variable-2.qke | 0 test/{Quake => Transforms}/lift_array.qke | 0 test/{Quake => Transforms}/linear_control.qke | 0 test/{Quake => Transforms}/loop.qke | 0 test/{Quake => Transforms}/loop_peeling.qke | 0 test/{Quake => Transforms}/memtoreg-1.qke | 0 test/{Quake => Transforms}/memtoreg-2.qke | 0 test/{Quake => Transforms}/memtoreg-3.qke | 0 test/{Quake => Transforms}/memtoreg-4.qke | 0 test/{Quake => Transforms}/memtoreg-5.qke | 0 test/{Quake => Transforms}/memtoreg-6.qke | 0 test/{Quake => Transforms}/memtoreg-7.qke | 0 test/{Quake => Transforms}/merge_rotation.qke | 0 test/{Quake => Transforms}/mz.qke | 0 test/{Quake => Transforms}/nullwire.qke | 0 test/{Quake => Transforms}/observeAnsatz.qke | 0 test/{Quake => Transforms}/phase_folding.qke | 0 test/{Quake => Transforms}/pruned_control.qke | 0 test/{Quake => Transforms}/qir_api_branching.qke | 0 test/{Quake => Transforms}/qpe.qke | 0 test/{Quake => Transforms}/quake-errors.qke | 0 test/{Quake => Transforms}/quake_simplify.qke | 0 test/{Quake => Transforms}/quake_to_cc.qke | 0 test/{Quake => Transforms}/regtomem.qke | 0 test/{Quake => Transforms}/reify_span-0.qke | 0 test/{Quake => Transforms}/reify_span-0.txt | 0 test/{Quake => Transforms}/reify_span-1.qke | 0 test/{Quake => Transforms}/reify_span-2.qke | 0 test/{Quake => Transforms}/replace_state_with_kernel.qke | 0 test/{Quake => Transforms}/resource_count_preprocess.qke | 0 test/{Quake => Transforms}/return_vector.qke | 0 test/{Quake => Transforms}/roundtrip-ops.qke | 0 test/{Quake => Transforms}/sfp.qke | 0 test/{Quake => Transforms}/sroa.qke | 0 test/{Quake => Transforms}/stack.qke | 0 test/{Quake => Transforms}/state_prep.qke | 0 test/{Quake => Transforms}/to_cfg.qke | 0 test/{Quake => Transforms}/unroll_loop_with_break.qke | 0 test/{Quake => Transforms}/vector.qke | 0 test/{Quake => Transforms}/wire_sink.qke | 0 test/{Quake => Transforms}/wires_to_wireset.qke | 0 test/{Quake => Transforms}/wireset_codegen.qke | 0 test/{Quake => Transforms}/write_after_write_elimination.qke | 0 108 files changed, 0 insertions(+), 0 deletions(-) rename test/{Quake => Transforms}/add_dealloc-0.qke (100%) rename test/{Quake => Transforms}/add_dealloc-1.qke (100%) rename test/{Quake => Transforms}/add_measurements-0.qke (100%) rename test/{Quake => Transforms}/add_measurements-1.qke (100%) rename test/{Quake => Transforms}/adjoint-1.qke (100%) rename test/{Quake => Transforms}/adjoint-2.qke (100%) rename test/{Quake => Transforms}/aggressive_inline_prevented.qke (100%) rename test/{Quake => Transforms}/apply-0.qke (100%) rename test/{Quake => Transforms}/apply-1.qke (100%) rename test/{Quake => Transforms}/apply-2.qke (100%) rename test/{Quake => Transforms}/apply_noise_conversion.qke (100%) rename test/{Quake => Transforms}/arg_subst-1.txt (100%) rename test/{Quake => Transforms}/arg_subst-2.txt (100%) rename test/{Quake => Transforms}/arg_subst-3.txt (100%) rename test/{Quake => Transforms}/arg_subst-4.txt (100%) rename test/{Quake => Transforms}/arg_subst-5.txt (100%) rename test/{Quake => Transforms}/arg_subst-6.txt (100%) rename test/{Quake => Transforms}/arg_subst-7.txt (100%) rename test/{Quake => Transforms}/arg_subst-8.txt (100%) rename test/{Quake => Transforms}/arg_subst.txt (100%) rename test/{Quake => Transforms}/arg_subst_func.qke (100%) rename test/{Quake => Transforms}/basic-sroa.qke (100%) rename test/{Quake => Transforms}/basic.qke (100%) rename test/{Quake => Transforms}/bell.qke (100%) rename test/{Quake => Transforms}/canonical-1.qke (100%) rename test/{Quake => Transforms}/canonical-2.qke (100%) rename test/{Quake => Transforms}/canonical-3.qke (100%) rename test/{Quake => Transforms}/cast.qke (100%) rename test/{Quake => Transforms}/cast_fold.qke (100%) rename test/{Quake => Transforms}/cc_execution_manager.qke (100%) rename test/{Quake => Transforms}/classical_optimization.qke (100%) rename test/{Quake => Transforms}/coalesce.qke (100%) rename test/{Quake => Transforms}/codegen_dialect.qke (100%) rename test/{Quake => Transforms}/combine.qke (100%) rename test/{Quake => Transforms}/combine_measurements.qke (100%) rename test/{Quake => Transforms}/complex.qke (100%) rename test/{Quake => Transforms}/compute_action.qke (100%) rename test/{Quake => Transforms}/compute_ptr.qke (100%) rename test/{Quake => Transforms}/const_prop_complex.qke (100%) rename test/{Quake => Transforms}/control_and_adjoint.qke (100%) rename test/{Quake => Transforms}/control_flow.qke (100%) rename test/{Quake => Transforms}/control_on_adjoint.qke (100%) rename test/{Quake => Transforms}/cse.qke (100%) rename test/{Quake => Transforms}/custom_pass.qke (100%) rename test/{Quake => Transforms}/delete_states.qke (100%) rename test/{Quake => Transforms}/dep_analysis.qke (100%) rename test/{Quake => Transforms}/dep_analysis_bug_classical.qke (100%) rename test/{Quake => Transforms}/dep_analysis_bug_lifting_schedule.qke (100%) rename test/{Quake => Transforms}/dep_analysis_bug_lowering.qke (100%) rename test/{Quake => Transforms}/dep_analysis_classical.qke (100%) rename test/{Quake => Transforms}/dep_analysis_lifting.qke (100%) rename test/{Quake => Transforms}/deuteron.qke (100%) rename test/{Quake => Transforms}/device_call.qke (100%) rename test/{Quake => Transforms}/dsr.qke (100%) rename test/{Quake => Transforms}/dummy.qke (100%) rename test/{Quake => Transforms}/erase_vcc.qke (100%) rename test/{Quake => Transforms}/exp_pauli-1.qke (100%) rename test/{Quake => Transforms}/expand_veqs.qke (100%) rename test/{Quake => Transforms}/inline.qke (100%) rename test/{Quake => Transforms}/inline_simplify.qke (100%) rename test/{Quake => Transforms}/invalid.qke (100%) rename test/{Quake => Transforms}/kernel_exec-1.qke (100%) rename test/{Quake => Transforms}/kernel_exec-2.qke (100%) rename test/{Quake => Transforms}/lambda_kernel_exec.qke (100%) rename test/{Quake => Transforms}/lambda_variable-1.qke (100%) rename test/{Quake => Transforms}/lambda_variable-2.qke (100%) rename test/{Quake => Transforms}/lift_array.qke (100%) rename test/{Quake => Transforms}/linear_control.qke (100%) rename test/{Quake => Transforms}/loop.qke (100%) rename test/{Quake => Transforms}/loop_peeling.qke (100%) rename test/{Quake => Transforms}/memtoreg-1.qke (100%) rename test/{Quake => Transforms}/memtoreg-2.qke (100%) rename test/{Quake => Transforms}/memtoreg-3.qke (100%) rename test/{Quake => Transforms}/memtoreg-4.qke (100%) rename test/{Quake => Transforms}/memtoreg-5.qke (100%) rename test/{Quake => Transforms}/memtoreg-6.qke (100%) rename test/{Quake => Transforms}/memtoreg-7.qke (100%) rename test/{Quake => Transforms}/merge_rotation.qke (100%) rename test/{Quake => Transforms}/mz.qke (100%) rename test/{Quake => Transforms}/nullwire.qke (100%) rename test/{Quake => Transforms}/observeAnsatz.qke (100%) rename test/{Quake => Transforms}/phase_folding.qke (100%) rename test/{Quake => Transforms}/pruned_control.qke (100%) rename test/{Quake => Transforms}/qir_api_branching.qke (100%) rename test/{Quake => Transforms}/qpe.qke (100%) rename test/{Quake => Transforms}/quake-errors.qke (100%) rename test/{Quake => Transforms}/quake_simplify.qke (100%) rename test/{Quake => Transforms}/quake_to_cc.qke (100%) rename test/{Quake => Transforms}/regtomem.qke (100%) rename test/{Quake => Transforms}/reify_span-0.qke (100%) rename test/{Quake => Transforms}/reify_span-0.txt (100%) rename test/{Quake => Transforms}/reify_span-1.qke (100%) rename test/{Quake => Transforms}/reify_span-2.qke (100%) rename test/{Quake => Transforms}/replace_state_with_kernel.qke (100%) rename test/{Quake => Transforms}/resource_count_preprocess.qke (100%) rename test/{Quake => Transforms}/return_vector.qke (100%) rename test/{Quake => Transforms}/roundtrip-ops.qke (100%) rename test/{Quake => Transforms}/sfp.qke (100%) rename test/{Quake => Transforms}/sroa.qke (100%) rename test/{Quake => Transforms}/stack.qke (100%) rename test/{Quake => Transforms}/state_prep.qke (100%) rename test/{Quake => Transforms}/to_cfg.qke (100%) rename test/{Quake => Transforms}/unroll_loop_with_break.qke (100%) rename test/{Quake => Transforms}/vector.qke (100%) rename test/{Quake => Transforms}/wire_sink.qke (100%) rename test/{Quake => Transforms}/wires_to_wireset.qke (100%) rename test/{Quake => Transforms}/wireset_codegen.qke (100%) rename test/{Quake => Transforms}/write_after_write_elimination.qke (100%) diff --git a/test/Quake/add_dealloc-0.qke b/test/Transforms/add_dealloc-0.qke similarity index 100% rename from test/Quake/add_dealloc-0.qke rename to test/Transforms/add_dealloc-0.qke diff --git a/test/Quake/add_dealloc-1.qke b/test/Transforms/add_dealloc-1.qke similarity index 100% rename from test/Quake/add_dealloc-1.qke rename to test/Transforms/add_dealloc-1.qke diff --git a/test/Quake/add_measurements-0.qke b/test/Transforms/add_measurements-0.qke similarity index 100% rename from test/Quake/add_measurements-0.qke rename to test/Transforms/add_measurements-0.qke diff --git a/test/Quake/add_measurements-1.qke b/test/Transforms/add_measurements-1.qke similarity index 100% rename from test/Quake/add_measurements-1.qke rename to test/Transforms/add_measurements-1.qke diff --git a/test/Quake/adjoint-1.qke b/test/Transforms/adjoint-1.qke similarity index 100% rename from test/Quake/adjoint-1.qke rename to test/Transforms/adjoint-1.qke diff --git a/test/Quake/adjoint-2.qke b/test/Transforms/adjoint-2.qke similarity index 100% rename from test/Quake/adjoint-2.qke rename to test/Transforms/adjoint-2.qke diff --git a/test/Quake/aggressive_inline_prevented.qke b/test/Transforms/aggressive_inline_prevented.qke similarity index 100% rename from test/Quake/aggressive_inline_prevented.qke rename to test/Transforms/aggressive_inline_prevented.qke diff --git a/test/Quake/apply-0.qke b/test/Transforms/apply-0.qke similarity index 100% rename from test/Quake/apply-0.qke rename to test/Transforms/apply-0.qke diff --git a/test/Quake/apply-1.qke b/test/Transforms/apply-1.qke similarity index 100% rename from test/Quake/apply-1.qke rename to test/Transforms/apply-1.qke diff --git a/test/Quake/apply-2.qke b/test/Transforms/apply-2.qke similarity index 100% rename from test/Quake/apply-2.qke rename to test/Transforms/apply-2.qke diff --git a/test/Quake/apply_noise_conversion.qke b/test/Transforms/apply_noise_conversion.qke similarity index 100% rename from test/Quake/apply_noise_conversion.qke rename to test/Transforms/apply_noise_conversion.qke diff --git a/test/Quake/arg_subst-1.txt b/test/Transforms/arg_subst-1.txt similarity index 100% rename from test/Quake/arg_subst-1.txt rename to test/Transforms/arg_subst-1.txt diff --git a/test/Quake/arg_subst-2.txt b/test/Transforms/arg_subst-2.txt similarity index 100% rename from test/Quake/arg_subst-2.txt rename to test/Transforms/arg_subst-2.txt diff --git a/test/Quake/arg_subst-3.txt b/test/Transforms/arg_subst-3.txt similarity index 100% rename from test/Quake/arg_subst-3.txt rename to test/Transforms/arg_subst-3.txt diff --git a/test/Quake/arg_subst-4.txt b/test/Transforms/arg_subst-4.txt similarity index 100% rename from test/Quake/arg_subst-4.txt rename to test/Transforms/arg_subst-4.txt diff --git a/test/Quake/arg_subst-5.txt b/test/Transforms/arg_subst-5.txt similarity index 100% rename from test/Quake/arg_subst-5.txt rename to test/Transforms/arg_subst-5.txt diff --git a/test/Quake/arg_subst-6.txt b/test/Transforms/arg_subst-6.txt similarity index 100% rename from test/Quake/arg_subst-6.txt rename to test/Transforms/arg_subst-6.txt diff --git a/test/Quake/arg_subst-7.txt b/test/Transforms/arg_subst-7.txt similarity index 100% rename from test/Quake/arg_subst-7.txt rename to test/Transforms/arg_subst-7.txt diff --git a/test/Quake/arg_subst-8.txt b/test/Transforms/arg_subst-8.txt similarity index 100% rename from test/Quake/arg_subst-8.txt rename to test/Transforms/arg_subst-8.txt diff --git a/test/Quake/arg_subst.txt b/test/Transforms/arg_subst.txt similarity index 100% rename from test/Quake/arg_subst.txt rename to test/Transforms/arg_subst.txt diff --git a/test/Quake/arg_subst_func.qke b/test/Transforms/arg_subst_func.qke similarity index 100% rename from test/Quake/arg_subst_func.qke rename to test/Transforms/arg_subst_func.qke diff --git a/test/Quake/basic-sroa.qke b/test/Transforms/basic-sroa.qke similarity index 100% rename from test/Quake/basic-sroa.qke rename to test/Transforms/basic-sroa.qke diff --git a/test/Quake/basic.qke b/test/Transforms/basic.qke similarity index 100% rename from test/Quake/basic.qke rename to test/Transforms/basic.qke diff --git a/test/Quake/bell.qke b/test/Transforms/bell.qke similarity index 100% rename from test/Quake/bell.qke rename to test/Transforms/bell.qke diff --git a/test/Quake/canonical-1.qke b/test/Transforms/canonical-1.qke similarity index 100% rename from test/Quake/canonical-1.qke rename to test/Transforms/canonical-1.qke diff --git a/test/Quake/canonical-2.qke b/test/Transforms/canonical-2.qke similarity index 100% rename from test/Quake/canonical-2.qke rename to test/Transforms/canonical-2.qke diff --git a/test/Quake/canonical-3.qke b/test/Transforms/canonical-3.qke similarity index 100% rename from test/Quake/canonical-3.qke rename to test/Transforms/canonical-3.qke diff --git a/test/Quake/cast.qke b/test/Transforms/cast.qke similarity index 100% rename from test/Quake/cast.qke rename to test/Transforms/cast.qke diff --git a/test/Quake/cast_fold.qke b/test/Transforms/cast_fold.qke similarity index 100% rename from test/Quake/cast_fold.qke rename to test/Transforms/cast_fold.qke diff --git a/test/Quake/cc_execution_manager.qke b/test/Transforms/cc_execution_manager.qke similarity index 100% rename from test/Quake/cc_execution_manager.qke rename to test/Transforms/cc_execution_manager.qke diff --git a/test/Quake/classical_optimization.qke b/test/Transforms/classical_optimization.qke similarity index 100% rename from test/Quake/classical_optimization.qke rename to test/Transforms/classical_optimization.qke diff --git a/test/Quake/coalesce.qke b/test/Transforms/coalesce.qke similarity index 100% rename from test/Quake/coalesce.qke rename to test/Transforms/coalesce.qke diff --git a/test/Quake/codegen_dialect.qke b/test/Transforms/codegen_dialect.qke similarity index 100% rename from test/Quake/codegen_dialect.qke rename to test/Transforms/codegen_dialect.qke diff --git a/test/Quake/combine.qke b/test/Transforms/combine.qke similarity index 100% rename from test/Quake/combine.qke rename to test/Transforms/combine.qke diff --git a/test/Quake/combine_measurements.qke b/test/Transforms/combine_measurements.qke similarity index 100% rename from test/Quake/combine_measurements.qke rename to test/Transforms/combine_measurements.qke diff --git a/test/Quake/complex.qke b/test/Transforms/complex.qke similarity index 100% rename from test/Quake/complex.qke rename to test/Transforms/complex.qke diff --git a/test/Quake/compute_action.qke b/test/Transforms/compute_action.qke similarity index 100% rename from test/Quake/compute_action.qke rename to test/Transforms/compute_action.qke diff --git a/test/Quake/compute_ptr.qke b/test/Transforms/compute_ptr.qke similarity index 100% rename from test/Quake/compute_ptr.qke rename to test/Transforms/compute_ptr.qke diff --git a/test/Quake/const_prop_complex.qke b/test/Transforms/const_prop_complex.qke similarity index 100% rename from test/Quake/const_prop_complex.qke rename to test/Transforms/const_prop_complex.qke diff --git a/test/Quake/control_and_adjoint.qke b/test/Transforms/control_and_adjoint.qke similarity index 100% rename from test/Quake/control_and_adjoint.qke rename to test/Transforms/control_and_adjoint.qke diff --git a/test/Quake/control_flow.qke b/test/Transforms/control_flow.qke similarity index 100% rename from test/Quake/control_flow.qke rename to test/Transforms/control_flow.qke diff --git a/test/Quake/control_on_adjoint.qke b/test/Transforms/control_on_adjoint.qke similarity index 100% rename from test/Quake/control_on_adjoint.qke rename to test/Transforms/control_on_adjoint.qke diff --git a/test/Quake/cse.qke b/test/Transforms/cse.qke similarity index 100% rename from test/Quake/cse.qke rename to test/Transforms/cse.qke diff --git a/test/Quake/custom_pass.qke b/test/Transforms/custom_pass.qke similarity index 100% rename from test/Quake/custom_pass.qke rename to test/Transforms/custom_pass.qke diff --git a/test/Quake/delete_states.qke b/test/Transforms/delete_states.qke similarity index 100% rename from test/Quake/delete_states.qke rename to test/Transforms/delete_states.qke diff --git a/test/Quake/dep_analysis.qke b/test/Transforms/dep_analysis.qke similarity index 100% rename from test/Quake/dep_analysis.qke rename to test/Transforms/dep_analysis.qke diff --git a/test/Quake/dep_analysis_bug_classical.qke b/test/Transforms/dep_analysis_bug_classical.qke similarity index 100% rename from test/Quake/dep_analysis_bug_classical.qke rename to test/Transforms/dep_analysis_bug_classical.qke diff --git a/test/Quake/dep_analysis_bug_lifting_schedule.qke b/test/Transforms/dep_analysis_bug_lifting_schedule.qke similarity index 100% rename from test/Quake/dep_analysis_bug_lifting_schedule.qke rename to test/Transforms/dep_analysis_bug_lifting_schedule.qke diff --git a/test/Quake/dep_analysis_bug_lowering.qke b/test/Transforms/dep_analysis_bug_lowering.qke similarity index 100% rename from test/Quake/dep_analysis_bug_lowering.qke rename to test/Transforms/dep_analysis_bug_lowering.qke diff --git a/test/Quake/dep_analysis_classical.qke b/test/Transforms/dep_analysis_classical.qke similarity index 100% rename from test/Quake/dep_analysis_classical.qke rename to test/Transforms/dep_analysis_classical.qke diff --git a/test/Quake/dep_analysis_lifting.qke b/test/Transforms/dep_analysis_lifting.qke similarity index 100% rename from test/Quake/dep_analysis_lifting.qke rename to test/Transforms/dep_analysis_lifting.qke diff --git a/test/Quake/deuteron.qke b/test/Transforms/deuteron.qke similarity index 100% rename from test/Quake/deuteron.qke rename to test/Transforms/deuteron.qke diff --git a/test/Quake/device_call.qke b/test/Transforms/device_call.qke similarity index 100% rename from test/Quake/device_call.qke rename to test/Transforms/device_call.qke diff --git a/test/Quake/dsr.qke b/test/Transforms/dsr.qke similarity index 100% rename from test/Quake/dsr.qke rename to test/Transforms/dsr.qke diff --git a/test/Quake/dummy.qke b/test/Transforms/dummy.qke similarity index 100% rename from test/Quake/dummy.qke rename to test/Transforms/dummy.qke diff --git a/test/Quake/erase_vcc.qke b/test/Transforms/erase_vcc.qke similarity index 100% rename from test/Quake/erase_vcc.qke rename to test/Transforms/erase_vcc.qke diff --git a/test/Quake/exp_pauli-1.qke b/test/Transforms/exp_pauli-1.qke similarity index 100% rename from test/Quake/exp_pauli-1.qke rename to test/Transforms/exp_pauli-1.qke diff --git a/test/Quake/expand_veqs.qke b/test/Transforms/expand_veqs.qke similarity index 100% rename from test/Quake/expand_veqs.qke rename to test/Transforms/expand_veqs.qke diff --git a/test/Quake/inline.qke b/test/Transforms/inline.qke similarity index 100% rename from test/Quake/inline.qke rename to test/Transforms/inline.qke diff --git a/test/Quake/inline_simplify.qke b/test/Transforms/inline_simplify.qke similarity index 100% rename from test/Quake/inline_simplify.qke rename to test/Transforms/inline_simplify.qke diff --git a/test/Quake/invalid.qke b/test/Transforms/invalid.qke similarity index 100% rename from test/Quake/invalid.qke rename to test/Transforms/invalid.qke diff --git a/test/Quake/kernel_exec-1.qke b/test/Transforms/kernel_exec-1.qke similarity index 100% rename from test/Quake/kernel_exec-1.qke rename to test/Transforms/kernel_exec-1.qke diff --git a/test/Quake/kernel_exec-2.qke b/test/Transforms/kernel_exec-2.qke similarity index 100% rename from test/Quake/kernel_exec-2.qke rename to test/Transforms/kernel_exec-2.qke diff --git a/test/Quake/lambda_kernel_exec.qke b/test/Transforms/lambda_kernel_exec.qke similarity index 100% rename from test/Quake/lambda_kernel_exec.qke rename to test/Transforms/lambda_kernel_exec.qke diff --git a/test/Quake/lambda_variable-1.qke b/test/Transforms/lambda_variable-1.qke similarity index 100% rename from test/Quake/lambda_variable-1.qke rename to test/Transforms/lambda_variable-1.qke diff --git a/test/Quake/lambda_variable-2.qke b/test/Transforms/lambda_variable-2.qke similarity index 100% rename from test/Quake/lambda_variable-2.qke rename to test/Transforms/lambda_variable-2.qke diff --git a/test/Quake/lift_array.qke b/test/Transforms/lift_array.qke similarity index 100% rename from test/Quake/lift_array.qke rename to test/Transforms/lift_array.qke diff --git a/test/Quake/linear_control.qke b/test/Transforms/linear_control.qke similarity index 100% rename from test/Quake/linear_control.qke rename to test/Transforms/linear_control.qke diff --git a/test/Quake/loop.qke b/test/Transforms/loop.qke similarity index 100% rename from test/Quake/loop.qke rename to test/Transforms/loop.qke diff --git a/test/Quake/loop_peeling.qke b/test/Transforms/loop_peeling.qke similarity index 100% rename from test/Quake/loop_peeling.qke rename to test/Transforms/loop_peeling.qke diff --git a/test/Quake/memtoreg-1.qke b/test/Transforms/memtoreg-1.qke similarity index 100% rename from test/Quake/memtoreg-1.qke rename to test/Transforms/memtoreg-1.qke diff --git a/test/Quake/memtoreg-2.qke b/test/Transforms/memtoreg-2.qke similarity index 100% rename from test/Quake/memtoreg-2.qke rename to test/Transforms/memtoreg-2.qke diff --git a/test/Quake/memtoreg-3.qke b/test/Transforms/memtoreg-3.qke similarity index 100% rename from test/Quake/memtoreg-3.qke rename to test/Transforms/memtoreg-3.qke diff --git a/test/Quake/memtoreg-4.qke b/test/Transforms/memtoreg-4.qke similarity index 100% rename from test/Quake/memtoreg-4.qke rename to test/Transforms/memtoreg-4.qke diff --git a/test/Quake/memtoreg-5.qke b/test/Transforms/memtoreg-5.qke similarity index 100% rename from test/Quake/memtoreg-5.qke rename to test/Transforms/memtoreg-5.qke diff --git a/test/Quake/memtoreg-6.qke b/test/Transforms/memtoreg-6.qke similarity index 100% rename from test/Quake/memtoreg-6.qke rename to test/Transforms/memtoreg-6.qke diff --git a/test/Quake/memtoreg-7.qke b/test/Transforms/memtoreg-7.qke similarity index 100% rename from test/Quake/memtoreg-7.qke rename to test/Transforms/memtoreg-7.qke diff --git a/test/Quake/merge_rotation.qke b/test/Transforms/merge_rotation.qke similarity index 100% rename from test/Quake/merge_rotation.qke rename to test/Transforms/merge_rotation.qke diff --git a/test/Quake/mz.qke b/test/Transforms/mz.qke similarity index 100% rename from test/Quake/mz.qke rename to test/Transforms/mz.qke diff --git a/test/Quake/nullwire.qke b/test/Transforms/nullwire.qke similarity index 100% rename from test/Quake/nullwire.qke rename to test/Transforms/nullwire.qke diff --git a/test/Quake/observeAnsatz.qke b/test/Transforms/observeAnsatz.qke similarity index 100% rename from test/Quake/observeAnsatz.qke rename to test/Transforms/observeAnsatz.qke diff --git a/test/Quake/phase_folding.qke b/test/Transforms/phase_folding.qke similarity index 100% rename from test/Quake/phase_folding.qke rename to test/Transforms/phase_folding.qke diff --git a/test/Quake/pruned_control.qke b/test/Transforms/pruned_control.qke similarity index 100% rename from test/Quake/pruned_control.qke rename to test/Transforms/pruned_control.qke diff --git a/test/Quake/qir_api_branching.qke b/test/Transforms/qir_api_branching.qke similarity index 100% rename from test/Quake/qir_api_branching.qke rename to test/Transforms/qir_api_branching.qke diff --git a/test/Quake/qpe.qke b/test/Transforms/qpe.qke similarity index 100% rename from test/Quake/qpe.qke rename to test/Transforms/qpe.qke diff --git a/test/Quake/quake-errors.qke b/test/Transforms/quake-errors.qke similarity index 100% rename from test/Quake/quake-errors.qke rename to test/Transforms/quake-errors.qke diff --git a/test/Quake/quake_simplify.qke b/test/Transforms/quake_simplify.qke similarity index 100% rename from test/Quake/quake_simplify.qke rename to test/Transforms/quake_simplify.qke diff --git a/test/Quake/quake_to_cc.qke b/test/Transforms/quake_to_cc.qke similarity index 100% rename from test/Quake/quake_to_cc.qke rename to test/Transforms/quake_to_cc.qke diff --git a/test/Quake/regtomem.qke b/test/Transforms/regtomem.qke similarity index 100% rename from test/Quake/regtomem.qke rename to test/Transforms/regtomem.qke diff --git a/test/Quake/reify_span-0.qke b/test/Transforms/reify_span-0.qke similarity index 100% rename from test/Quake/reify_span-0.qke rename to test/Transforms/reify_span-0.qke diff --git a/test/Quake/reify_span-0.txt b/test/Transforms/reify_span-0.txt similarity index 100% rename from test/Quake/reify_span-0.txt rename to test/Transforms/reify_span-0.txt diff --git a/test/Quake/reify_span-1.qke b/test/Transforms/reify_span-1.qke similarity index 100% rename from test/Quake/reify_span-1.qke rename to test/Transforms/reify_span-1.qke diff --git a/test/Quake/reify_span-2.qke b/test/Transforms/reify_span-2.qke similarity index 100% rename from test/Quake/reify_span-2.qke rename to test/Transforms/reify_span-2.qke diff --git a/test/Quake/replace_state_with_kernel.qke b/test/Transforms/replace_state_with_kernel.qke similarity index 100% rename from test/Quake/replace_state_with_kernel.qke rename to test/Transforms/replace_state_with_kernel.qke diff --git a/test/Quake/resource_count_preprocess.qke b/test/Transforms/resource_count_preprocess.qke similarity index 100% rename from test/Quake/resource_count_preprocess.qke rename to test/Transforms/resource_count_preprocess.qke diff --git a/test/Quake/return_vector.qke b/test/Transforms/return_vector.qke similarity index 100% rename from test/Quake/return_vector.qke rename to test/Transforms/return_vector.qke diff --git a/test/Quake/roundtrip-ops.qke b/test/Transforms/roundtrip-ops.qke similarity index 100% rename from test/Quake/roundtrip-ops.qke rename to test/Transforms/roundtrip-ops.qke diff --git a/test/Quake/sfp.qke b/test/Transforms/sfp.qke similarity index 100% rename from test/Quake/sfp.qke rename to test/Transforms/sfp.qke diff --git a/test/Quake/sroa.qke b/test/Transforms/sroa.qke similarity index 100% rename from test/Quake/sroa.qke rename to test/Transforms/sroa.qke diff --git a/test/Quake/stack.qke b/test/Transforms/stack.qke similarity index 100% rename from test/Quake/stack.qke rename to test/Transforms/stack.qke diff --git a/test/Quake/state_prep.qke b/test/Transforms/state_prep.qke similarity index 100% rename from test/Quake/state_prep.qke rename to test/Transforms/state_prep.qke diff --git a/test/Quake/to_cfg.qke b/test/Transforms/to_cfg.qke similarity index 100% rename from test/Quake/to_cfg.qke rename to test/Transforms/to_cfg.qke diff --git a/test/Quake/unroll_loop_with_break.qke b/test/Transforms/unroll_loop_with_break.qke similarity index 100% rename from test/Quake/unroll_loop_with_break.qke rename to test/Transforms/unroll_loop_with_break.qke diff --git a/test/Quake/vector.qke b/test/Transforms/vector.qke similarity index 100% rename from test/Quake/vector.qke rename to test/Transforms/vector.qke diff --git a/test/Quake/wire_sink.qke b/test/Transforms/wire_sink.qke similarity index 100% rename from test/Quake/wire_sink.qke rename to test/Transforms/wire_sink.qke diff --git a/test/Quake/wires_to_wireset.qke b/test/Transforms/wires_to_wireset.qke similarity index 100% rename from test/Quake/wires_to_wireset.qke rename to test/Transforms/wires_to_wireset.qke diff --git a/test/Quake/wireset_codegen.qke b/test/Transforms/wireset_codegen.qke similarity index 100% rename from test/Quake/wireset_codegen.qke rename to test/Transforms/wireset_codegen.qke diff --git a/test/Quake/write_after_write_elimination.qke b/test/Transforms/write_after_write_elimination.qke similarity index 100% rename from test/Quake/write_after_write_elimination.qke rename to test/Transforms/write_after_write_elimination.qke From dcf700cab424701fdc55babe72b5083caf72d1e3 Mon Sep 17 00:00:00 2001 From: Eric Schweitz Date: Fri, 5 Dec 2025 13:44:49 -0800 Subject: [PATCH 2/2] Fix for issue #3638. (#3649) This patch fixed a codegen issue for when a closure contained a single value when lowering to QIR as the transport layer. Add regression test. Signed-off-by: Eric Schweitz --- lib/Optimizer/CodeGen/CCToLLVM.cpp | 11 ++- test/Translate/callable_closure.qke | 105 ++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 test/Translate/callable_closure.qke diff --git a/lib/Optimizer/CodeGen/CCToLLVM.cpp b/lib/Optimizer/CodeGen/CCToLLVM.cpp index 4304ce48992..f710b4e94d5 100644 --- a/lib/Optimizer/CodeGen/CCToLLVM.cpp +++ b/lib/Optimizer/CodeGen/CCToLLVM.cpp @@ -93,8 +93,15 @@ class CallableClosureOpPattern auto one = DenseI64ArrayAttr::get(ctx, ArrayRef{1}); auto extract = rewriter.create( loc, structTy.getBody()[1], operands[0], one); - auto tupleVal = rewriter.create(loc, tuplePtrTy, extract); - rewriter.replaceOpWithNewOp(callable, tupleTy, tupleVal); + if (resTy.size() == 1 && resTy[0] != tupleTy) { + auto tupleVal = rewriter.create( + loc, cudaq::opt::factory::getPointerType(resTy[0]), extract); + rewriter.replaceOpWithNewOp(callable, tupleVal); + } else { + auto tupleVal = + rewriter.create(loc, tuplePtrTy, extract); + rewriter.replaceOpWithNewOp(callable, tupleTy, tupleVal); + } return success(); } }; diff --git a/test/Translate/callable_closure.qke b/test/Translate/callable_closure.qke new file mode 100644 index 00000000000..c2ddfb9ec34 --- /dev/null +++ b/test/Translate/callable_closure.qke @@ -0,0 +1,105 @@ +// ========================================================================== // +// Copyright (c) 2022 - 2025 NVIDIA Corporation & Affiliates. // +// All rights reserved. // +// // +// This source code and the accompanying materials are made available under // +// the terms of the Apache License 2.0 which accompanies this distribution. // +// ========================================================================== // + +// RUN: cudaq-translate --convert-to=qir %s | FileCheck %s + +module attributes {cc.python_uniqued = "kernel0..0x7c72351ce620", llvm.data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128", quake.mangled_name_map = {__nvqpp__mlirgen__kernel0..0x7c72351ce620 = "__nvqpp__mlirgen__kernel0..0x7c72351ce620_PyKernelEntryPointRewrite"}} { + func.func @__nvqpp__mlirgen__kernel0..0x7c72351ce620(%arg0: i64 {quake.pylifted}) attributes {"cudaq-entrypoint", "cudaq-kernel"} { + %c0_i64 = arith.constant 0 : i64 + %c1_i64 = arith.constant 1 : i64 + %c4_i64 = arith.constant 4 : i64 + %0 = cc.alloca i64 + cc.store %c4_i64, %0 : !cc.ptr + %1 = cc.instantiate_callable @__nvqpp__callable.thunk.lambda.0(%0) : (!cc.ptr) -> !cc.callable<() -> ()> + %2 = cc.callable_closure %1 : (!cc.callable<() -> ()>) -> !cc.ptr + %3 = cc.load %2 : !cc.ptr + %4 = quake.alloca !quake.veq[%3 : i64] + %5 = quake.veq_size %4 : (!quake.veq) -> i64 + %6 = cc.loop while ((%arg1 = %c0_i64) -> (i64)) { + %7 = arith.cmpi slt, %arg1, %5 : i64 + cc.condition %7(%arg1 : i64) + } do { + ^bb0(%arg1: i64): + %7 = quake.extract_ref %4[%arg1] : (!quake.veq, i64) -> !quake.ref + quake.x %7 : (!quake.ref) -> () + cc.continue %arg1 : i64 + } step { + ^bb0(%arg1: i64): + %7 = arith.addi %arg1, %c1_i64 : i64 + cc.continue %7 : i64 + } {invariant} + quake.dealloc %4 : !quake.veq + return + } + func.func private @__nvqpp__callable.thunk.lambda.0(%arg0: !cc.callable<() -> ()>) attributes {"cudaq-kernel"} { + %c0_i64 = arith.constant 0 : i64 + %c1_i64 = arith.constant 1 : i64 + %0 = cc.callable_closure %arg0 : (!cc.callable<() -> ()>) -> !cc.ptr + %1 = cc.load %0 : !cc.ptr + %2 = quake.alloca !quake.veq[%1 : i64] + %3 = quake.veq_size %2 : (!quake.veq) -> i64 + %4 = cc.loop while ((%arg1 = %c0_i64) -> (i64)) { + %5 = arith.cmpi slt, %arg1, %3 : i64 + cc.condition %5(%arg1 : i64) + } do { + ^bb0(%arg1: i64): + %5 = quake.extract_ref %2[%arg1] : (!quake.veq, i64) -> !quake.ref + quake.x %5 : (!quake.ref) -> () + cc.continue %arg1 : i64 + } step { + ^bb0(%arg1: i64): + %5 = arith.addi %arg1, %c1_i64 : i64 + cc.continue %5 : i64 + } {invariant} + quake.dealloc %2 : !quake.veq + return + } +} + +// CHECK-LABEL: define void @__nvqpp__mlirgen__kernel0..0x7c72351ce620(i64 +// CHECK-SAME: %[[VAL_0:.*]]) local_unnamed_addr { +// CHECK: %[[VAL_1:.*]] = tail call %[[VAL_2:.*]]* @__quantum__rt__qubit_allocate_array(i64 4) +// CHECK: %[[VAL_3:.*]] = tail call i64 @__quantum__rt__array_get_size_1d(%[[VAL_2]]* %[[VAL_1]]) +// CHECK: %[[VAL_4:.*]] = icmp sgt i64 %[[VAL_3]], 0 +// CHECK: br i1 %[[VAL_4]], label %[[VAL_5:.*]], label %[[VAL_6:.*]] +// CHECK: ; preds = %[[VAL_7:.*]], %[[VAL_5]] +// CHECK: %[[VAL_8:.*]] = phi i64 [ %[[VAL_9:.*]], %[[VAL_5]] ], [ 0, %[[VAL_7]] ] +// CHECK: %[[VAL_10:.*]] = tail call %[[VAL_11:.*]]** @__quantum__rt__array_get_element_ptr_1d(%[[VAL_2]]* %[[VAL_1]], i64 %[[VAL_8]]) +// CHECK: %[[VAL_12:.*]] = load %[[VAL_11]]*, %[[VAL_11]]** %[[VAL_10]], align 8 +// CHECK: tail call void @__quantum__qis__x(%[[VAL_11]]* %[[VAL_12]]) +// CHECK: %[[VAL_9]] = add nuw nsw i64 %[[VAL_8]], 1 +// CHECK: %[[VAL_13:.*]] = icmp eq i64 %[[VAL_9]], %[[VAL_3]] +// CHECK: br i1 %[[VAL_13]], label %[[VAL_6]], label %[[VAL_5]] +// CHECK: ; preds = %[[VAL_5]], %[[VAL_7]] +// CHECK: tail call void @__quantum__rt__qubit_release_array(%[[VAL_2]]* %[[VAL_1]]) +// CHECK: ret void +// CHECK: } + +// CHECK-LABEL: define void @__nvqpp__callable.thunk.lambda.0({ i8*, i8* } +// CHECK-SAME: %[[VAL_0:.*]]) local_unnamed_addr { +// CHECK: %[[VAL_1:.*]] = extractvalue { i8*, i8* } %[[VAL_0]], 1 +// CHECK: %[[VAL_2:.*]] = bitcast i8* %[[VAL_1]] to i64** +// CHECK: %[[VAL_3:.*]] = load i64*, i64** %[[VAL_2]], align 8 +// CHECK: %[[VAL_4:.*]] = load i64, i64* %[[VAL_3]], align 8 +// CHECK: %[[VAL_5:.*]] = tail call %[[VAL_6:.*]]* @__quantum__rt__qubit_allocate_array(i64 %[[VAL_4]]) +// CHECK: %[[VAL_7:.*]] = tail call i64 @__quantum__rt__array_get_size_1d(%[[VAL_6]]* %[[VAL_5]]) +// CHECK: %[[VAL_8:.*]] = icmp sgt i64 %[[VAL_7]], 0 +// CHECK: br i1 %[[VAL_8]], label %[[VAL_9:.*]], label %[[VAL_10:.*]] +// CHECK: ; preds = %[[VAL_11:.*]], %[[VAL_9]] +// CHECK: %[[VAL_12:.*]] = phi i64 [ %[[VAL_13:.*]], %[[VAL_9]] ], [ 0, %[[VAL_11]] ] +// CHECK: %[[VAL_14:.*]] = tail call %[[VAL_15:.*]]** @__quantum__rt__array_get_element_ptr_1d(%[[VAL_6]]* %[[VAL_5]], i64 %[[VAL_12]]) +// CHECK: %[[VAL_16:.*]] = load %[[VAL_15]]*, %[[VAL_15]]** %[[VAL_14]], align 8 +// CHECK: tail call void @__quantum__qis__x(%[[VAL_15]]* %[[VAL_16]]) +// CHECK: %[[VAL_13]] = add nuw nsw i64 %[[VAL_12]], 1 +// CHECK: %[[VAL_17:.*]] = icmp eq i64 %[[VAL_13]], %[[VAL_7]] +// CHECK: br i1 %[[VAL_17]], label %[[VAL_10]], label %[[VAL_9]] +// CHECK: ; preds = %[[VAL_9]], %[[VAL_11]] +// CHECK: tail call void @__quantum__rt__qubit_release_array(%[[VAL_6]]* %[[VAL_5]]) +// CHECK: ret void +// CHECK: } +