sentryward 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. sentryward-0.1.0/.gitignore +51 -0
  2. sentryward-0.1.0/ASSUMPTIONS.md +214 -0
  3. sentryward-0.1.0/CMakeLists.txt +717 -0
  4. sentryward-0.1.0/LICENSE +202 -0
  5. sentryward-0.1.0/PKG-INFO +203 -0
  6. sentryward-0.1.0/README.md +178 -0
  7. sentryward-0.1.0/assets/pipeline.svg +2 -0
  8. sentryward-0.1.0/config/assumption-pool.json +9 -0
  9. sentryward-0.1.0/config/default-assumptions.json +9 -0
  10. sentryward-0.1.0/config/result-categories.json +101 -0
  11. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/adjacency_overlay.h +79 -0
  12. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/alternate_topological_order.h +65 -0
  13. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/chain_frontier.h +249 -0
  14. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/compact_hb_reachability.h +8 -0
  15. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/family_coordinates.h +161 -0
  16. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/family_hb_reachability.h +16 -0
  17. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/family_relation_query.h +56 -0
  18. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/happens_before_graph.h +231 -0
  19. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/hb_reachability.h +91 -0
  20. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/lifecycle_checker.h +58 -0
  21. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/member_relation.h +83 -0
  22. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/member_set.h +93 -0
  23. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/parallel_reachability.h +31 -0
  24. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/phase_algebra.h +40 -0
  25. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/phase_boundary.h +163 -0
  26. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/phase_database.h +94 -0
  27. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/reachability.h +124 -0
  28. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/shared_reachability_index.h +74 -0
  29. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/trace_order.h +49 -0
  30. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/unordered_access_pairs.h +87 -0
  31. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/wait_checker.h +166 -0
  32. sentryward-0.1.0/cpp/include/sentryward/algorithm/analysis/wait_reachability_batch.h +56 -0
  33. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/affine_index.h +120 -0
  34. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/affine_sequence.h +76 -0
  35. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/checked_int.h +76 -0
  36. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/compact_id_map.h +216 -0
  37. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/compact_vector.h +25 -0
  38. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/dynamic_bitset.h +245 -0
  39. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/result.h +139 -0
  40. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/shared_array.h +174 -0
  41. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/shared_optional.h +54 -0
  42. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/shared_string.h +79 -0
  43. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/source_location.h +18 -0
  44. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/strong_id.h +42 -0
  45. sentryward-0.1.0/cpp/include/sentryward/algorithm/base/template_records.h +636 -0
  46. sentryward-0.1.0/cpp/include/sentryward/algorithm/checker/certificate.h +24 -0
  47. sentryward-0.1.0/cpp/include/sentryward/algorithm/checker/duplicate_tma_stores.h +34 -0
  48. sentryward-0.1.0/cpp/include/sentryward/algorithm/checker/family_memory_checker.h +8 -0
  49. sentryward-0.1.0/cpp/include/sentryward/algorithm/checker/memory_race_checker.h +112 -0
  50. sentryward-0.1.0/cpp/include/sentryward/algorithm/checker/result.h +122 -0
  51. sentryward-0.1.0/cpp/include/sentryward/algorithm/checker/verifier.h +39 -0
  52. sentryward-0.1.0/cpp/include/sentryward/algorithm/checker/wellsync_checker.h +46 -0
  53. sentryward-0.1.0/cpp/include/sentryward/algorithm/checker/witness.h +102 -0
  54. sentryward-0.1.0/cpp/include/sentryward/algorithm/diagnostics/compression_audit.h +173 -0
  55. sentryward-0.1.0/cpp/include/sentryward/algorithm/diagnostics/ir_size_profile.h +30 -0
  56. sentryward-0.1.0/cpp/include/sentryward/algorithm/diagnostics/memory_profile.h +115 -0
  57. sentryward-0.1.0/cpp/include/sentryward/algorithm/diagnostics/performance_profile.h +65 -0
  58. sentryward-0.1.0/cpp/include/sentryward/algorithm/diagnostics/scoped_deadline.h +29 -0
  59. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/csr_adjacency.h +55 -0
  60. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/dag.h +85 -0
  61. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/edge_records.h +82 -0
  62. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/event.h +262 -0
  63. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/event_families.h +175 -0
  64. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/event_order.h +94 -0
  65. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/event_records.h +190 -0
  66. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/event_relations.h +145 -0
  67. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/family_values.h +115 -0
  68. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/lowering.h +30 -0
  69. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/neighbors.h +121 -0
  70. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/origin_map.h +44 -0
  71. sentryward-0.1.0/cpp/include/sentryward/algorithm/event_ir/program.h +134 -0
  72. sentryward-0.1.0/cpp/include/sentryward/algorithm/io/source_json.h +94 -0
  73. sentryward-0.1.0/cpp/include/sentryward/algorithm/io/source_storage.h +9 -0
  74. sentryward-0.1.0/cpp/include/sentryward/algorithm/io/tmem_recovery.h +22 -0
  75. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/access.h +151 -0
  76. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/address_solver.h +69 -0
  77. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/conflict_candidates.h +23 -0
  78. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/conflict_order.h +30 -0
  79. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/constant_address_model.h +123 -0
  80. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/family_access.h +39 -0
  81. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/family_conflict_order.h +20 -0
  82. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/model.h +66 -0
  83. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/overlap.h +51 -0
  84. sentryward-0.1.0/cpp/include/sentryward/algorithm/memory/symbolic_address_model.h +87 -0
  85. sentryward-0.1.0/cpp/include/sentryward/algorithm/semantics/affine_template_schedule.h +142 -0
  86. sentryward-0.1.0/cpp/include/sentryward/algorithm/semantics/barrier_state.h +128 -0
  87. sentryward-0.1.0/cpp/include/sentryward/algorithm/semantics/collective_state.h +62 -0
  88. sentryward-0.1.0/cpp/include/sentryward/algorithm/semantics/reference_trace.h +127 -0
  89. sentryward-0.1.0/cpp/include/sentryward/algorithm/semantics/simulator.h +109 -0
  90. sentryward-0.1.0/cpp/include/sentryward/algorithm/semantics/template_schedule.h +219 -0
  91. sentryward-0.1.0/cpp/include/sentryward/algorithm/solver/dinic.h +67 -0
  92. sentryward-0.1.0/cpp/include/sentryward/algorithm/solver/minimum_weight_ideal.h +56 -0
  93. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/async.h +76 -0
  94. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/builder.h +34 -0
  95. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/default_assumptions.h.in +6 -0
  96. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/diagnostic.h +66 -0
  97. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/initialization_recovery.h +42 -0
  98. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/memory_effect.h +42 -0
  99. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/operation.h +174 -0
  100. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/program.h +239 -0
  101. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/ptx_assumptions.h +22 -0
  102. sentryward-0.1.0/cpp/include/sentryward/algorithm/source_ir/validator.h +16 -0
  103. sentryward-0.1.0/cpp/include/sentryward/algorithm.h +18 -0
  104. sentryward-0.1.0/cpp/include/sentryward/equivalence/bit_origins.h +87 -0
  105. sentryward-0.1.0/cpp/include/sentryward/equivalence/bounded_index_translation.h +73 -0
  106. sentryward-0.1.0/cpp/include/sentryward/equivalence/bounded_linear_reduction.h +195 -0
  107. sentryward-0.1.0/cpp/include/sentryward/equivalence/causal_region_certificate.h +263 -0
  108. sentryward-0.1.0/cpp/include/sentryward/equivalence/certified_branch_scope.h +42 -0
  109. sentryward-0.1.0/cpp/include/sentryward/equivalence/comparison_context.h +44 -0
  110. sentryward-0.1.0/cpp/include/sentryward/equivalence/constant_values.h +14 -0
  111. sentryward-0.1.0/cpp/include/sentryward/equivalence/conversion_uses.h +74 -0
  112. sentryward-0.1.0/cpp/include/sentryward/equivalence/egraph.h +101 -0
  113. sentryward-0.1.0/cpp/include/sentryward/equivalence/epoch_work_allowance.h +46 -0
  114. sentryward-0.1.0/cpp/include/sentryward/equivalence/finite_prefix_certificate.h +187 -0
  115. sentryward-0.1.0/cpp/include/sentryward/equivalence/float_from_chars.h +78 -0
  116. sentryward-0.1.0/cpp/include/sentryward/equivalence/fold_rewriting.h +16 -0
  117. sentryward-0.1.0/cpp/include/sentryward/equivalence/input_mapping.h +34 -0
  118. sentryward-0.1.0/cpp/include/sentryward/equivalence/integer_interval.h +53 -0
  119. sentryward-0.1.0/cpp/include/sentryward/equivalence/joined_body_relation.h +35 -0
  120. sentryward-0.1.0/cpp/include/sentryward/equivalence/lexical_scope.h +71 -0
  121. sentryward-0.1.0/cpp/include/sentryward/equivalence/math_intrinsics.h +96 -0
  122. sentryward-0.1.0/cpp/include/sentryward/equivalence/moment_certificate.h +142 -0
  123. sentryward-0.1.0/cpp/include/sentryward/equivalence/numeric_semantics.h +28 -0
  124. sentryward-0.1.0/cpp/include/sentryward/equivalence/numerical_abstraction.h +15 -0
  125. sentryward-0.1.0/cpp/include/sentryward/equivalence/output_family.h +27 -0
  126. sentryward-0.1.0/cpp/include/sentryward/equivalence/output_mapping.h +41 -0
  127. sentryward-0.1.0/cpp/include/sentryward/equivalence/packed_values.h +34 -0
  128. sentryward-0.1.0/cpp/include/sentryward/equivalence/partitioned_outputs.h +7 -0
  129. sentryward-0.1.0/cpp/include/sentryward/equivalence/polynomial_certificate.h +100 -0
  130. sentryward-0.1.0/cpp/include/sentryward/equivalence/program.h +22 -0
  131. sentryward-0.1.0/cpp/include/sentryward/equivalence/representation_rewriting.h +52 -0
  132. sentryward-0.1.0/cpp/include/sentryward/equivalence/scoped_body_relation.h +52 -0
  133. sentryward-0.1.0/cpp/include/sentryward/equivalence/scoped_product_relation.h +24 -0
  134. sentryward-0.1.0/cpp/include/sentryward/equivalence/scoped_work_budget.h +36 -0
  135. sentryward-0.1.0/cpp/include/sentryward/equivalence/stored_class_catalog.h +87 -0
  136. sentryward-0.1.0/cpp/include/sentryward/equivalence/structural_order.h +104 -0
  137. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/address_expression.h +12 -0
  138. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/branch_scope_capture.h +61 -0
  139. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/config.h +91 -0
  140. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/dependency_history.h +125 -0
  141. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/execution.h +288 -0
  142. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/group2_lifetime.h +48 -0
  143. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/layouts.h +165 -0
  144. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/lowering.h +45 -0
  145. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/matrix.h +36 -0
  146. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/module.h +92 -0
  147. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/named_phases.h +8 -0
  148. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/operands.h +9 -0
  149. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/public_input.h +40 -0
  150. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/readonly_origin.h +50 -0
  151. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/refinement.h +49 -0
  152. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/resources.h +159 -0
  153. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/rounded_sign.h +32 -0
  154. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/selector_patterns.h +21 -0
  155. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/semantic_program.h +201 -0
  156. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/serialization.h +11 -0
  157. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/shared_execution.h +69 -0
  158. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/source_dump.h +10 -0
  159. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/tensor_maps.h +11 -0
  160. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/tmem_lifetime.h +157 -0
  161. sentryward-0.1.0/cpp/include/sentryward/frontend/ptx/value_ir.h +79 -0
  162. sentryward-0.1.0/cpp/include/sentryward/result.h +156 -0
  163. sentryward-0.1.0/cpp/include/sentryward/scalar_fold/artifact.h +32 -0
  164. sentryward-0.1.0/cpp/include/sentryward/scalar_fold/consolidate_outputs.h +9 -0
  165. sentryward-0.1.0/cpp/include/sentryward/scalar_fold/graph.h +135 -0
  166. sentryward-0.1.0/cpp/include/sentryward/scalar_fold/output_family.h +15 -0
  167. sentryward-0.1.0/cpp/include/sentryward/scalar_fold/real_expression_builder.h +36 -0
  168. sentryward-0.1.0/cpp/include/sentryward/scalar_fold/reduction_builder.h +90 -0
  169. sentryward-0.1.0/cpp/include/sentryward/value_analysis/checkpoint.h +19 -0
  170. sentryward-0.1.0/cpp/include/sentryward/value_analysis/ideal_scalar_semantics.h +30 -0
  171. sentryward-0.1.0/cpp/include/sentryward/value_analysis/indexed_source.h +108 -0
  172. sentryward-0.1.0/cpp/include/sentryward/value_analysis/indexed_source_identity.h +79 -0
  173. sentryward-0.1.0/cpp/include/sentryward/value_analysis/memory_actions.h +169 -0
  174. sentryward-0.1.0/cpp/include/sentryward/value_analysis/memory_elimination.h +501 -0
  175. sentryward-0.1.0/cpp/include/sentryward/value_analysis/memory_instance_set.h +75 -0
  176. sentryward-0.1.0/cpp/include/sentryward/value_analysis/packed_storage.h +223 -0
  177. sentryward-0.1.0/cpp/include/sentryward/value_analysis/passes.h +34 -0
  178. sentryward-0.1.0/cpp/include/sentryward/value_analysis/printer.h +20 -0
  179. sentryward-0.1.0/cpp/include/sentryward/value_analysis/projection_ledger.h +86 -0
  180. sentryward-0.1.0/cpp/include/sentryward/value_analysis/pure_source_templates.h +679 -0
  181. sentryward-0.1.0/cpp/include/sentryward/value_analysis/scalar_fold_lowering.h +56 -0
  182. sentryward-0.1.0/cpp/include/sentryward/value_analysis/scalar_specialization.h +165 -0
  183. sentryward-0.1.0/cpp/include/sentryward/value_analysis/view_normalization.h +15 -0
  184. sentryward-0.1.0/cpp/include/sentryward/value_ir/graph.h +281 -0
  185. sentryward-0.1.0/cpp/include/sentryward/value_ir/native_matrix.h +71 -0
  186. sentryward-0.1.0/cpp/include/sentryward/value_ir/operation.h +25 -0
  187. sentryward-0.1.0/cpp/include/sentryward/value_ir/operations.h +282 -0
  188. sentryward-0.1.0/cpp/include/sentryward/value_ir/origin.h +38 -0
  189. sentryward-0.1.0/cpp/include/sentryward/value_ir/printer.h +22 -0
  190. sentryward-0.1.0/cpp/include/sentryward/value_ir/ptx_operation.h +52 -0
  191. sentryward-0.1.0/cpp/include/sentryward/value_ir/thread_members.h +114 -0
  192. sentryward-0.1.0/cpp/include/sentryward/value_ir/type.h +77 -0
  193. sentryward-0.1.0/cpp/include/sentryward/value_ir/type_conversion.h +25 -0
  194. sentryward-0.1.0/cpp/include/sentryward/value_ir/value.h +63 -0
  195. sentryward-0.1.0/cpp/src/analysis/compact_hb_reachability.cpp +140 -0
  196. sentryward-0.1.0/cpp/src/analysis/family_hb_reachability.cpp +232 -0
  197. sentryward-0.1.0/cpp/src/analysis/family_relation_query.cpp +364 -0
  198. sentryward-0.1.0/cpp/src/analysis/happens_before_graph.cpp +568 -0
  199. sentryward-0.1.0/cpp/src/analysis/hb_reachability.cpp +314 -0
  200. sentryward-0.1.0/cpp/src/analysis/lifecycle_checker.cpp +76 -0
  201. sentryward-0.1.0/cpp/src/analysis/parallel_reachability.cpp +110 -0
  202. sentryward-0.1.0/cpp/src/analysis/phase_algebra.cpp +87 -0
  203. sentryward-0.1.0/cpp/src/analysis/phase_boundary.cpp +911 -0
  204. sentryward-0.1.0/cpp/src/analysis/phase_database.cpp +469 -0
  205. sentryward-0.1.0/cpp/src/analysis/reachability.cpp +628 -0
  206. sentryward-0.1.0/cpp/src/analysis/shared_reachability_index.cpp +189 -0
  207. sentryward-0.1.0/cpp/src/analysis/trace_order.cpp +60 -0
  208. sentryward-0.1.0/cpp/src/analysis/unordered_access_pairs.cpp +365 -0
  209. sentryward-0.1.0/cpp/src/analysis/wait_checker.cpp +517 -0
  210. sentryward-0.1.0/cpp/src/analysis/wait_reachability_batch.cpp +554 -0
  211. sentryward-0.1.0/cpp/src/checker/duplicate_tma_stores.cpp +157 -0
  212. sentryward-0.1.0/cpp/src/checker/family_memory_checker.cpp +419 -0
  213. sentryward-0.1.0/cpp/src/checker/memory_race_checker.cpp +313 -0
  214. sentryward-0.1.0/cpp/src/checker/verifier.cpp +54 -0
  215. sentryward-0.1.0/cpp/src/checker/wellsync_checker.cpp +1081 -0
  216. sentryward-0.1.0/cpp/src/cli/main.cpp +117 -0
  217. sentryward-0.1.0/cpp/src/diagnostics/conflict_review.cpp +215 -0
  218. sentryward-0.1.0/cpp/src/diagnostics/graph_memory_profile.cpp +227 -0
  219. sentryward-0.1.0/cpp/src/diagnostics/memory_profile.cpp +135 -0
  220. sentryward-0.1.0/cpp/src/diagnostics/performance_profile.cpp +124 -0
  221. sentryward-0.1.0/cpp/src/diagnostics/scoped_deadline.cpp +48 -0
  222. sentryward-0.1.0/cpp/src/diagnostics/source_memory_profile.cpp +268 -0
  223. sentryward-0.1.0/cpp/src/diagnostics/trace_memory_profile.cpp +31 -0
  224. sentryward-0.1.0/cpp/src/equivalence/bit_origins.cpp +516 -0
  225. sentryward-0.1.0/cpp/src/equivalence/bounded_index_translation.cpp +241 -0
  226. sentryward-0.1.0/cpp/src/equivalence/bounded_linear_reduction.cpp +455 -0
  227. sentryward-0.1.0/cpp/src/equivalence/causal_region_certificate.cpp +762 -0
  228. sentryward-0.1.0/cpp/src/equivalence/comparison_context.cpp +259 -0
  229. sentryward-0.1.0/cpp/src/equivalence/constant_values.cpp +293 -0
  230. sentryward-0.1.0/cpp/src/equivalence/conversion_uses.cpp +320 -0
  231. sentryward-0.1.0/cpp/src/equivalence/egraph.cpp +13483 -0
  232. sentryward-0.1.0/cpp/src/equivalence/epoch_work_allowance.cpp +40 -0
  233. sentryward-0.1.0/cpp/src/equivalence/finite_prefix_certificate.cpp +299 -0
  234. sentryward-0.1.0/cpp/src/equivalence/fold_rewriting.cpp +358 -0
  235. sentryward-0.1.0/cpp/src/equivalence/input_mapping.cpp +497 -0
  236. sentryward-0.1.0/cpp/src/equivalence/integer_interval.cpp +167 -0
  237. sentryward-0.1.0/cpp/src/equivalence/lexical_scope.cpp +133 -0
  238. sentryward-0.1.0/cpp/src/equivalence/main.cpp +164 -0
  239. sentryward-0.1.0/cpp/src/equivalence/math_intrinsics.cpp +752 -0
  240. sentryward-0.1.0/cpp/src/equivalence/moment_certificate.cpp +340 -0
  241. sentryward-0.1.0/cpp/src/equivalence/numeric_semantics.cpp +88 -0
  242. sentryward-0.1.0/cpp/src/equivalence/numerical_abstraction.cpp +322 -0
  243. sentryward-0.1.0/cpp/src/equivalence/output_family.cpp +179 -0
  244. sentryward-0.1.0/cpp/src/equivalence/output_mapping.cpp +180 -0
  245. sentryward-0.1.0/cpp/src/equivalence/packed_values.cpp +388 -0
  246. sentryward-0.1.0/cpp/src/equivalence/partitioned_outputs.cpp +159 -0
  247. sentryward-0.1.0/cpp/src/equivalence/polynomial_certificate.cpp +266 -0
  248. sentryward-0.1.0/cpp/src/equivalence/program.cpp +215 -0
  249. sentryward-0.1.0/cpp/src/equivalence/representation_rewriting.cpp +371 -0
  250. sentryward-0.1.0/cpp/src/event_ir/dag.cpp +238 -0
  251. sentryward-0.1.0/cpp/src/event_ir/lowering.cpp +623 -0
  252. sentryward-0.1.0/cpp/src/event_ir/origin_map.cpp +103 -0
  253. sentryward-0.1.0/cpp/src/event_ir/program.cpp +114 -0
  254. sentryward-0.1.0/cpp/src/frontend/ptx/address_expression.cpp +99 -0
  255. sentryward-0.1.0/cpp/src/frontend/ptx/branch_scope_capture.cpp +248 -0
  256. sentryward-0.1.0/cpp/src/frontend/ptx/certified_branch_scope.cpp +429 -0
  257. sentryward-0.1.0/cpp/src/frontend/ptx/config.cpp +929 -0
  258. sentryward-0.1.0/cpp/src/frontend/ptx/correctness_checkpoint_version.h.in +2 -0
  259. sentryward-0.1.0/cpp/src/frontend/ptx/execution.cpp +3491 -0
  260. sentryward-0.1.0/cpp/src/frontend/ptx/execution_records.cpp +270 -0
  261. sentryward-0.1.0/cpp/src/frontend/ptx/group2_lifetime.cpp +596 -0
  262. sentryward-0.1.0/cpp/src/frontend/ptx/known_bits.cpp +100 -0
  263. sentryward-0.1.0/cpp/src/frontend/ptx/layouts.cpp +989 -0
  264. sentryward-0.1.0/cpp/src/frontend/ptx/lowering.cpp +2624 -0
  265. sentryward-0.1.0/cpp/src/frontend/ptx/main.cpp +121 -0
  266. sentryward-0.1.0/cpp/src/frontend/ptx/matrix.cpp +126 -0
  267. sentryward-0.1.0/cpp/src/frontend/ptx/named_phases.cpp +77 -0
  268. sentryward-0.1.0/cpp/src/frontend/ptx/operands.cpp +181 -0
  269. sentryward-0.1.0/cpp/src/frontend/ptx/parser.cpp +568 -0
  270. sentryward-0.1.0/cpp/src/frontend/ptx/public_input_inference.cpp +179 -0
  271. sentryward-0.1.0/cpp/src/frontend/ptx/public_input_memory.cpp +81 -0
  272. sentryward-0.1.0/cpp/src/frontend/ptx/public_input_normalize.cpp +357 -0
  273. sentryward-0.1.0/cpp/src/frontend/ptx/public_input_parse.cpp +278 -0
  274. sentryward-0.1.0/cpp/src/frontend/ptx/readonly_origin.cpp +247 -0
  275. sentryward-0.1.0/cpp/src/frontend/ptx/refinement.cpp +547 -0
  276. sentryward-0.1.0/cpp/src/frontend/ptx/resources.cpp +900 -0
  277. sentryward-0.1.0/cpp/src/frontend/ptx/rounded_sign.cpp +62 -0
  278. sentryward-0.1.0/cpp/src/frontend/ptx/run.cpp +1520 -0
  279. sentryward-0.1.0/cpp/src/frontend/ptx/selector_patterns.cpp +205 -0
  280. sentryward-0.1.0/cpp/src/frontend/ptx/semantic_memory_link.inc +347 -0
  281. sentryward-0.1.0/cpp/src/frontend/ptx/semantic_program.cpp +973 -0
  282. sentryward-0.1.0/cpp/src/frontend/ptx/semantics.cpp +287 -0
  283. sentryward-0.1.0/cpp/src/frontend/ptx/serialization.cpp +617 -0
  284. sentryward-0.1.0/cpp/src/frontend/ptx/shared_execution.cpp +147 -0
  285. sentryward-0.1.0/cpp/src/frontend/ptx/source_dump.cpp +325 -0
  286. sentryward-0.1.0/cpp/src/frontend/ptx/template_execution.h +314 -0
  287. sentryward-0.1.0/cpp/src/frontend/ptx/tensor_maps.cpp +187 -0
  288. sentryward-0.1.0/cpp/src/frontend/ptx/tmem_lifetime.cpp +1083 -0
  289. sentryward-0.1.0/cpp/src/frontend/ptx/value_ir.cpp +2833 -0
  290. sentryward-0.1.0/cpp/src/io/source_json.cpp +1642 -0
  291. sentryward-0.1.0/cpp/src/io/source_storage.cpp +35 -0
  292. sentryward-0.1.0/cpp/src/io/tmem_recovery.cpp +163 -0
  293. sentryward-0.1.0/cpp/src/memory/access.cpp +325 -0
  294. sentryward-0.1.0/cpp/src/memory/address_solver_none.cpp +10 -0
  295. sentryward-0.1.0/cpp/src/memory/address_solver_z3.cpp +118 -0
  296. sentryward-0.1.0/cpp/src/memory/conflict_order.cpp +122 -0
  297. sentryward-0.1.0/cpp/src/memory/constant_address_candidates.cpp +225 -0
  298. sentryward-0.1.0/cpp/src/memory/constant_address_model.cpp +333 -0
  299. sentryward-0.1.0/cpp/src/memory/family_access.cpp +77 -0
  300. sentryward-0.1.0/cpp/src/memory/family_conflict_order.cpp +128 -0
  301. sentryward-0.1.0/cpp/src/memory/symbolic_address_model.cpp +787 -0
  302. sentryward-0.1.0/cpp/src/reference_guided/affine_output_dispatch.hpp +252 -0
  303. sentryward-0.1.0/cpp/src/reference_guided/affine_output_dispatch_tests.hpp +258 -0
  304. sentryward-0.1.0/cpp/src/reference_guided/affine_state_pattern.hpp +490 -0
  305. sentryward-0.1.0/cpp/src/reference_guided/affine_state_pattern_tests.hpp +206 -0
  306. sentryward-0.1.0/cpp/src/reference_guided/blocked_component_fubini_tests.hpp +185 -0
  307. sentryward-0.1.0/cpp/src/reference_guided/body_coordinate_instantiation_tests.hpp +86 -0
  308. sentryward-0.1.0/cpp/src/reference_guided/body_predicate_instantiation_tests.hpp +48 -0
  309. sentryward-0.1.0/cpp/src/reference_guided/caller_context.hpp +66 -0
  310. sentryward-0.1.0/cpp/src/reference_guided/canonical_scaled_sum_tests.hpp +224 -0
  311. sentryward-0.1.0/cpp/src/reference_guided/certified_state_pattern_canonicalizer.hpp +151 -0
  312. sentryward-0.1.0/cpp/src/reference_guided/certified_state_pattern_canonicalizer_tests.hpp +110 -0
  313. sentryward-0.1.0/cpp/src/reference_guided/checker.hpp +1459 -0
  314. sentryward-0.1.0/cpp/src/reference_guided/cli.cpp +2 -0
  315. sentryward-0.1.0/cpp/src/reference_guided/comparison_runner.hpp +42 -0
  316. sentryward-0.1.0/cpp/src/reference_guided/compiler_log2_tests.hpp +86 -0
  317. sentryward-0.1.0/cpp/src/reference_guided/context_report.hpp +48 -0
  318. sentryward-0.1.0/cpp/src/reference_guided/coordinate_relations.hpp +243 -0
  319. sentryward-0.1.0/cpp/src/reference_guided/coordinate_relations_tests.hpp +166 -0
  320. sentryward-0.1.0/cpp/src/reference_guided/core.hpp +920 -0
  321. sentryward-0.1.0/cpp/src/reference_guided/distributed_log2e_tests.hpp +118 -0
  322. sentryward-0.1.0/cpp/src/reference_guided/equivalence_context.hpp +217 -0
  323. sentryward-0.1.0/cpp/src/reference_guided/exact_proof_reuse.hpp +105 -0
  324. sentryward-0.1.0/cpp/src/reference_guided/exact_proof_reuse_tests.hpp +60 -0
  325. sentryward-0.1.0/cpp/src/reference_guided/exponential_equivalence.hpp +64 -0
  326. sentryward-0.1.0/cpp/src/reference_guided/exponential_log_tests.hpp +119 -0
  327. sentryward-0.1.0/cpp/src/reference_guided/exponential_polynomial.hpp +419 -0
  328. sentryward-0.1.0/cpp/src/reference_guided/exponential_polynomial_tests.hpp +231 -0
  329. sentryward-0.1.0/cpp/src/reference_guided/file_runner.cpp +60 -0
  330. sentryward-0.1.0/cpp/src/reference_guided/finite_bilinear_projection.hpp +478 -0
  331. sentryward-0.1.0/cpp/src/reference_guided/finite_bilinear_projection_tests.hpp +157 -0
  332. sentryward-0.1.0/cpp/src/reference_guided/finite_piece_union.hpp +266 -0
  333. sentryward-0.1.0/cpp/src/reference_guided/finite_piece_union_tests.hpp +211 -0
  334. sentryward-0.1.0/cpp/src/reference_guided/finite_state_reuse.hpp +547 -0
  335. sentryward-0.1.0/cpp/src/reference_guided/finite_state_reuse_tests.hpp +304 -0
  336. sentryward-0.1.0/cpp/src/reference_guided/fixed_input_context_tests.hpp +168 -0
  337. sentryward-0.1.0/cpp/src/reference_guided/floating_idiom_pass.hpp +140 -0
  338. sentryward-0.1.0/cpp/src/reference_guided/fp4_boundary_tests.hpp +192 -0
  339. sentryward-0.1.0/cpp/src/reference_guided/fp4_coordinate_distribution_tests.hpp +231 -0
  340. sentryward-0.1.0/cpp/src/reference_guided/importer.hpp +2061 -0
  341. sentryward-0.1.0/cpp/src/reference_guided/importer_scope_sharing_tests.hpp +331 -0
  342. sentryward-0.1.0/cpp/src/reference_guided/index_radix_followup_tests.hpp +135 -0
  343. sentryward-0.1.0/cpp/src/reference_guided/input.hpp +99 -0
  344. sentryward-0.1.0/cpp/src/reference_guided/input_contract.hpp +64 -0
  345. sentryward-0.1.0/cpp/src/reference_guided/int4_local_rules_tests.hpp +307 -0
  346. sentryward-0.1.0/cpp/src/reference_guided/kda_small_fixes_tests.hpp +146 -0
  347. sentryward-0.1.0/cpp/src/reference_guided/legacy_fixed_input_context.hpp +359 -0
  348. sentryward-0.1.0/cpp/src/reference_guided/linear_reduction_pattern.hpp +747 -0
  349. sentryward-0.1.0/cpp/src/reference_guided/linear_reduction_pattern_tests.hpp +291 -0
  350. sentryward-0.1.0/cpp/src/reference_guided/linear_unclosed_targets_tests.hpp +121 -0
  351. sentryward-0.1.0/cpp/src/reference_guided/main.cpp +473 -0
  352. sentryward-0.1.0/cpp/src/reference_guided/online_softmax_lse_tests.hpp +203 -0
  353. sentryward-0.1.0/cpp/src/reference_guided/online_softmax_pattern.hpp +627 -0
  354. sentryward-0.1.0/cpp/src/reference_guided/online_softmax_pattern_tests.hpp +373 -0
  355. sentryward-0.1.0/cpp/src/reference_guided/packed_decode.hpp +361 -0
  356. sentryward-0.1.0/cpp/src/reference_guided/packed_decode_tests.hpp +116 -0
  357. sentryward-0.1.0/cpp/src/reference_guided/paged_maximum_domains_tests.hpp +134 -0
  358. sentryward-0.1.0/cpp/src/reference_guided/production.cpp +265 -0
  359. sentryward-0.1.0/cpp/src/reference_guided/production.hpp +11 -0
  360. sentryward-0.1.0/cpp/src/reference_guided/production_tests.hpp +296 -0
  361. sentryward-0.1.0/cpp/src/reference_guided/scalar_sum.hpp +175 -0
  362. sentryward-0.1.0/cpp/src/reference_guided/scalar_sum_tests.hpp +135 -0
  363. sentryward-0.1.0/cpp/src/reference_guided/scoped_predicate.hpp +318 -0
  364. sentryward-0.1.0/cpp/src/reference_guided/scoped_predicate_tests.hpp +138 -0
  365. sentryward-0.1.0/cpp/src/reference_guided/tests.cpp +1239 -0
  366. sentryward-0.1.0/cpp/src/reference_guided/ue4m3_input_tests.hpp +130 -0
  367. sentryward-0.1.0/cpp/src/reference_guided/unary_reduction_composition.hpp +178 -0
  368. sentryward-0.1.0/cpp/src/reference_guided/unary_reduction_composition_tests.hpp +105 -0
  369. sentryward-0.1.0/cpp/src/reference_guided/welford_pattern.hpp +520 -0
  370. sentryward-0.1.0/cpp/src/reference_guided/welford_pattern_tests.hpp +168 -0
  371. sentryward-0.1.0/cpp/src/reference_guided/whole_expression_templates.hpp +521 -0
  372. sentryward-0.1.0/cpp/src/reference_guided/whole_expression_templates_tests.hpp +173 -0
  373. sentryward-0.1.0/cpp/src/reference_guided/xor_coordinate.hpp +218 -0
  374. sentryward-0.1.0/cpp/src/reference_guided/xor_coordinate_tests.hpp +166 -0
  375. sentryward-0.1.0/cpp/src/scalar_fold/artifact.cpp +198 -0
  376. sentryward-0.1.0/cpp/src/scalar_fold/consolidate_outputs.cpp +285 -0
  377. sentryward-0.1.0/cpp/src/scalar_fold/graph.cpp +463 -0
  378. sentryward-0.1.0/cpp/src/scalar_fold/real_expression_builder.cpp +426 -0
  379. sentryward-0.1.0/cpp/src/scalar_fold/reduction_builder.cpp +721 -0
  380. sentryward-0.1.0/cpp/src/semantics/barrier_state.cpp +246 -0
  381. sentryward-0.1.0/cpp/src/semantics/collective_state.cpp +87 -0
  382. sentryward-0.1.0/cpp/src/semantics/reference_trace.cpp +146 -0
  383. sentryward-0.1.0/cpp/src/semantics/simulator.cpp +1275 -0
  384. sentryward-0.1.0/cpp/src/solver/dinic.cpp +185 -0
  385. sentryward-0.1.0/cpp/src/solver/minimum_weight_ideal.cpp +280 -0
  386. sentryward-0.1.0/cpp/src/source_ir/builder.cpp +105 -0
  387. sentryward-0.1.0/cpp/src/source_ir/diagnostic.cpp +89 -0
  388. sentryward-0.1.0/cpp/src/source_ir/initialization_recovery.cpp +215 -0
  389. sentryward-0.1.0/cpp/src/source_ir/ptx_assumptions.cpp +142 -0
  390. sentryward-0.1.0/cpp/src/source_ir/validator.cpp +786 -0
  391. sentryward-0.1.0/cpp/src/value_analysis/checkpoint.cpp +89 -0
  392. sentryward-0.1.0/cpp/src/value_analysis/indexed_source.cpp +2669 -0
  393. sentryward-0.1.0/cpp/src/value_analysis/memory_elimination.cpp +731 -0
  394. sentryward-0.1.0/cpp/src/value_analysis/passes.cpp +283 -0
  395. sentryward-0.1.0/cpp/src/value_analysis/printer.cpp +550 -0
  396. sentryward-0.1.0/cpp/src/value_analysis/scalar_fold_lowering.cpp +4239 -0
  397. sentryward-0.1.0/cpp/src/value_analysis/view_normalization.cpp +1296 -0
  398. sentryward-0.1.0/cpp/src/value_ir/checkpoint_codec.cpp +210 -0
  399. sentryward-0.1.0/cpp/src/value_ir/checkpoint_codec.h +33 -0
  400. sentryward-0.1.0/cpp/src/value_ir/graph.cpp +1268 -0
  401. sentryward-0.1.0/cpp/src/value_ir/native_matrix.cpp +135 -0
  402. sentryward-0.1.0/cpp/src/value_ir/operations.cpp +522 -0
  403. sentryward-0.1.0/cpp/src/value_ir/printer.cpp +380 -0
  404. sentryward-0.1.0/cpp/src/value_ir/ptx_operation.cpp +167 -0
  405. sentryward-0.1.0/cpp/src/value_ir/type.cpp +141 -0
  406. sentryward-0.1.0/docs/checkpoints/2026-10-08-small-fold/README.md +151 -0
  407. sentryward-0.1.0/docs/checkpoints/2026-10-08-small-fold/corpus-primary.json +3385 -0
  408. sentryward-0.1.0/docs/checkpoints/2026-10-08-small-fold/corpus-secondary.json +3352 -0
  409. sentryward-0.1.0/docs/checkpoints/2026-10-08-small-fold/paged-h128-comparison.json +21 -0
  410. sentryward-0.1.0/docs/checkpoints/2026-10-08-small-fold/paged-h128-generation.json +60 -0
  411. sentryward-0.1.0/docs/development.md +158 -0
  412. sentryward-0.1.0/docs/kernel-verification-results.json +9075 -0
  413. sentryward-0.1.0/docs/kernel-verification-results.md +325 -0
  414. sentryward-0.1.0/docs/public-api.md +39 -0
  415. sentryward-0.1.0/docs/reference-guided-integration.md +119 -0
  416. sentryward-0.1.0/docs/reference-guided-upstream-manifest.json +65 -0
  417. sentryward-0.1.0/docs/result-contract.md +223 -0
  418. sentryward-0.1.0/docs/value-expressions.md +185 -0
  419. sentryward-0.1.0/pyproject.toml +106 -0
  420. sentryward-0.1.0/sentryward/__init__.py +8 -0
  421. sentryward-0.1.0/sentryward/__main__.py +23 -0
  422. sentryward-0.1.0/sentryward/_capture_reference.py +62 -0
  423. sentryward-0.1.0/sentryward/_paths.py +34 -0
  424. sentryward-0.1.0/sentryward/_reference/__init__.py +5 -0
  425. sentryward-0.1.0/sentryward/_reference/__main__.py +41 -0
  426. sentryward-0.1.0/sentryward/_reference/capture.py +84 -0
  427. sentryward-0.1.0/sentryward/_reference/graph.py +45 -0
  428. sentryward-0.1.0/sentryward/_reference/lowering.py +410 -0
  429. sentryward-0.1.0/sentryward/_reference/normalize.py +45 -0
  430. sentryward-0.1.0/sentryward/_reference/partition.py +306 -0
  431. sentryward-0.1.0/sentryward/_reference_binding.py +95 -0
  432. sentryward-0.1.0/sentryward/api.py +106 -0
  433. sentryward-0.1.0/sentryward/assumptions.py +43 -0
  434. sentryward-0.1.0/sentryward/diagnostics/__init__.py +1 -0
  435. sentryward-0.1.0/sentryward/diagnostics/conflict_report.py +139 -0
  436. sentryward-0.1.0/sentryward/frontend/__init__.py +2 -0
  437. sentryward-0.1.0/sentryward/frontend/ptx_native.py +217 -0
  438. sentryward-0.1.0/sentryward/input_audit/__init__.py +6 -0
  439. sentryward-0.1.0/sentryward/input_audit/input/__init__.py +1 -0
  440. sentryward-0.1.0/sentryward/input_audit/input/bindings.py +33 -0
  441. sentryward-0.1.0/sentryward/input_audit/input/model.py +95 -0
  442. sentryward-0.1.0/sentryward/input_audit/input/parse.py +266 -0
  443. sentryward-0.1.0/sentryward/input_audit/input/tma.py +72 -0
  444. sentryward-0.1.0/sentryward/input_audit/ptx/__init__.py +1 -0
  445. sentryward-0.1.0/sentryward/input_audit/ptx/model.py +235 -0
  446. sentryward-0.1.0/sentryward/input_audit/ptx/parser.py +1102 -0
  447. sentryward-0.1.0/sentryward/memory.py +41 -0
  448. sentryward-0.1.0/sentryward/native.py +425 -0
  449. sentryward-0.1.0/sentryward/results.py +225 -0
  450. sentryward-0.1.0/sentryward/source_ir.py +658 -0
  451. sentryward-0.1.0/vendor/nlohmann_json/LICENSE.MIT +21 -0
  452. sentryward-0.1.0/vendor/nlohmann_json/README.md +9 -0
  453. sentryward-0.1.0/vendor/nlohmann_json/single_include/nlohmann/json.hpp +25526 -0
@@ -0,0 +1,51 @@
1
+ # OS files
2
+ .DS_Store
3
+ ._*
4
+ Thumbs.db
5
+
6
+ # Editor state
7
+ .idea/
8
+ .vscode/
9
+ *.swp
10
+ *.swo
11
+ *~
12
+
13
+ # Local environments
14
+ .env
15
+ .env.*
16
+ !.env.example
17
+ .venv/
18
+ .venv-*/
19
+ env/
20
+ venv/
21
+
22
+ # Python outputs
23
+ __pycache__/
24
+ *.py[cod]
25
+ *.egg-info/
26
+ .pytest_cache/
27
+ .mypy_cache/
28
+ .pyright/
29
+ .ruff_cache/
30
+ .coverage
31
+ .coverage.*
32
+ htmlcov/
33
+
34
+ # Tool caches and dependencies
35
+ .cache/
36
+ .ipynb_checkpoints/
37
+ node_modules/
38
+
39
+ # Project build workspace
40
+ /build/
41
+
42
+ # Python distribution outputs
43
+ /dist/
44
+ /wheelhouse/
45
+
46
+ # Local agent instructions
47
+ /AGENTS.md
48
+
49
+ # Separate repositories
50
+ /paper/
51
+ /vendor/cutlass/
@@ -0,0 +1,214 @@
1
+ # Configurable assumptions
2
+
3
+ These assumptions can be enabled or disabled to select the behavior analyzed by
4
+ the verifier. The pool is defined in [config/assumption-pool.json](config/assumption-pool.json);
5
+ defaults are maintained in [config/default-assumptions.json](config/default-assumptions.json).
6
+
7
+ ## A001 — Warp-wide TMEM read completion
8
+
9
+ Configuration key: `warp_tmem_load_completion`.
10
+
11
+ Assume that all lanes' TMEM reads complete before any lane receives its register
12
+ results. This adds completion dependencies across lanes in the same warp.
13
+
14
+ - **Enabled:** analyze with these dependencies. Lifecycle and memory-race findings
15
+ excluded by the added ordering remain visible as A001 warnings, with concrete
16
+ instruction or access pairs. Unaffected findings remain errors.
17
+ - **Disabled:** analyze the original completion dependencies and report any
18
+ resulting race or lifecycle error.
19
+
20
+ Warnings have bounded samples and a total count. The output records whether the
21
+ comparison completed; an unsuccessful comparison does not establish absence of
22
+ excluded findings.
23
+
24
+ ## A002 — Benign duplicate TMA stores
25
+
26
+ Configuration key: `duplicate_tma_store_benign`.
27
+
28
+ Assume that matching duplicate TMA stores issued by different lanes of the same
29
+ warp are benign. Matching requires the same PTX instruction occurrence and copy
30
+ footprints; equality of the stored values is assumed rather than proved.
31
+
32
+ - **Enabled:** report matching unordered stores as warnings and continue checking
33
+ other accesses. A complete check with no remaining race or unresolved query
34
+ returns `race_free`, with warnings reported separately.
35
+ - **Disabled:** report these unordered, overlapping writes as race candidates.
36
+
37
+ ## A003 — Immediate memory visibility
38
+
39
+ Configuration key: `immediate_visibility`.
40
+
41
+ Assume that a memory effect becomes visible to other participants immediately
42
+ when it executes. Asynchronous operations still execute separately from their
43
+ issue instructions and require completion synchronization.
44
+
45
+ - **Enabled:** analyze immediate visibility. Pure visibility/ordering fences add
46
+ no constraints. Async completion waits and synchronization remain modeled.
47
+ Combined operations such as `tensormap.cp_fenceproxy` retain their copy effects;
48
+ only their visibility-ordering component is ignored.
49
+ - **Disabled:** report unsupported because weak-memory analysis is unavailable,
50
+ with a suggestion to enable A003.
51
+
52
+ ## A004 — Representative elected lane
53
+
54
+ Configuration key: `representative_election`.
55
+
56
+ Assume that analyzing one representative election outcome is sufficient. Choose
57
+ lane 0 when it participates; otherwise choose the lowest-numbered participating
58
+ lane.
59
+
60
+ - **Enabled:** analyze that elected lane's execution.
61
+ - **Disabled:** report election instructions as unsupported, with a suggestion
62
+ to enable A004.
63
+
64
+ ## A005 — Failed cluster launch cancellation
65
+
66
+ Configuration key: `clc_always_fails`.
67
+
68
+ Assume that every cluster launch cancellation (CLC) request fails. A CTA therefore
69
+ does not acquire additional work from a canceled launch.
70
+
71
+ - **Enabled:** analyze the failed-request path.
72
+ - **Disabled:** report CLC instructions as unsupported, with a suggestion to
73
+ enable A005.
74
+
75
+ ## A006 — Representative data-dependent control
76
+
77
+ Configuration key: `representative_data_branches`. Related input key:
78
+ `data_branch_loop_iterations` (optional positive integer; default `4`).
79
+
80
+ Some branches and instruction guards depend on values that the fixed input does
81
+ not determine, such as tensor contents or metadata buffers that were not supplied
82
+ through `shape_arrays`. Assume that analyzing one recorded representative outcome
83
+ for such control is sufficient:
84
+
85
+ - a data-dependent loop body runs `data_branch_loop_iterations` times;
86
+ - a branch direction whose straight-line code ends in `trap` or `__assertfail`
87
+ is never chosen;
88
+ - an undetermined instruction guard executes.
89
+
90
+ Before A006 is considered, a forward region whose arms only compute or read
91
+ parameter, local or constant memory is skipped exactly, whether or not A006 is
92
+ enabled: neither outcome has a memory or synchronization effect, and every
93
+ register the region writes becomes unknown. This extends the single-arm
94
+ treatment to if-else and nested arms; results list these regions under
95
+ `frontend_assumptions.opaque_compute_regions`. Flag polling loops are left only
96
+ under A007.
97
+
98
+ A006 is a last resort. It applies only after ordinary execution, including the
99
+ shared-memory cluster re-execution and the exact treatment above, has stopped on
100
+ undetermined control, so it never changes a kernel that the fixed input already
101
+ determines. Every lane makes
102
+ the same choice at a given branch visit. Results list each decided PTX line, the
103
+ rule used and the taken/not-taken counts under
104
+ `frontend_assumptions.data_branch_decisions`.
105
+
106
+ The analyzed execution need not be one that any real input produces. Choices are
107
+ made independently, so two tests of the same value can disagree; divergence that
108
+ a real input would cause between lanes is not explored; and a race that needs
109
+ more loop iterations than the bound, such as a pipeline that has to wrap around,
110
+ is not reached. Prefer supplying the data (`arguments`, `shape_arrays`), which
111
+ keeps the analysis exact, and set the iteration bound above the deepest pipeline
112
+ the kernel cycles through.
113
+
114
+ - **Enabled:** analyze the representative outcome and record the decisions.
115
+ - **Disabled:** report `branch_not_static` (or `missing_parameter_value`), with
116
+ a suggestion to supply the data or enable A006.
117
+
118
+ ## A007 — Terminating spin-waits
119
+
120
+ Configuration key: `terminating_spin_waits`.
121
+
122
+ Assume that a loop that only polls (compute, `nanosleep`, and global or generic
123
+ reads from addresses the loop does not change) is eventually released by another
124
+ agent, such as another CTA setting a flag. Every iteration touches the same
125
+ locations, so leaving after one poll keeps the CTA's memory and synchronization
126
+ effects; registers written in the loop become unknown. Like A006, A007 applies
127
+ only after ordinary execution has stopped on the loop's undetermined condition.
128
+ Results list these loops under `frontend_assumptions.spin_wait_exits`.
129
+
130
+ A kernel whose flag is never set hangs on hardware; under A007 that hang is not
131
+ reported.
132
+
133
+ - **Enabled:** leave polling loops after one poll and record them.
134
+ - **Disabled:** report `branch_not_static` for the loop's condition.
135
+
136
+ ## Address invariants
137
+
138
+ Input key: `address_invariants` (optional array; default `[]`).
139
+
140
+ Unlike A001–A007, address invariants are not on/off flags. They are trusted
141
+ facts about runtime address values that the symbolic address model may use to
142
+ prove two memory accesses disjoint. The verifier does not check them. If an
143
+ invariant is false for the analyzed execution, a real race may be reported as
144
+ safe. Any nonempty set makes the result `assumption_dependent`, and results
145
+ repeat the set under `address_model.address_invariants`.
146
+
147
+ ### How the address model uses them
148
+
149
+ Each address is an allocation plus an offset `c0 + sum(ck * atom_k)`. An atom is
150
+ one runtime value identified by where it came from, so repeated uses of the
151
+ same value share one atom. The model first reuses the exact constant-offset
152
+ analysis. Pairs it cannot decide go through two layers:
153
+
154
+ - **Allocation separation (no invariants needed).** Accesses in different known
155
+ memory spaces, or in different named allocations of one space, are disjoint.
156
+ Allocations sharing an alias scope, `generic` addresses, and unresolved
157
+ allocations are not separated.
158
+ - **SMT layer.** For two accesses in the same allocation, the model asks Z3
159
+ whether the byte ranges can intersect under the invariants. They are disjoint
160
+ only if Z3 proves they cannot. A satisfiable result, a timeout, or an
161
+ inconsistent invariant set leaves the pair unresolved; the reason includes a
162
+ candidate valuation when one exists. Offsets differing by a constant are
163
+ decided without the solver, and an intersection is then reported as an
164
+ overlap for every valuation.
165
+
166
+ Without invariants, and in builds configured with `-DSENTRYWARD_WITH_Z3=OFF`,
167
+ same-allocation pairs with symbolic offsets stay unresolved.
168
+
169
+ ### Invariant forms
170
+
171
+ Each array entry is an object of one of these forms:
172
+
173
+ | Form | Meaning |
174
+ | --- | --- |
175
+ | `{"term": T, "lower_bound": L, "upper_bound": U, "multiple_of": M}` | `L <= T <= U` and `T` is divisible by `M` (a positive integer). At least one of the three fields is required; bounds are inclusive. |
176
+ | `{"gather": "g", "injective": true, "lower_bound": L, "upper_bound": U}` | Every lookup in table `g` lies in `[L, U]`. If injective, different ground arguments give different results. |
177
+ | `{"joint_injective": ["r", "s", ...]}` | For different ground arguments, at least one of the named tables gives different results. |
178
+ | `{"distinct_allocations": ["A", "B", ...]}` | The named allocations are pairwise distinct storage. |
179
+
180
+ Unknown fields, empty names, empty ranges and contradictory term bounds make the
181
+ input invalid.
182
+
183
+ `T` is a scalar expression:
184
+
185
+ - an integer;
186
+ - `{"operator": "param", "symbol": "PAGE"}`: an immutable runtime scalar;
187
+ - `{"operator": "gather", "symbol": "pages", "args": [3]}`: a table lookup with
188
+ integer arguments;
189
+ - `add`, `sub`, `mul` or `neg` with an `operands` array.
190
+
191
+ A product of two non-constant operands becomes its own atom with no assumed
192
+ value. A term that names that product can still bound it.
193
+
194
+ Allocation names in `distinct_allocations` are binding allocation names (for
195
+ example `epilogue.tensormaps`), or symbolic targets of runtime tensor maps. A
196
+ TMA transfer whose tensor map's global address is unknown reads
197
+ `tensor_map_target(<location>+<offset>)`, where the location and offset identify
198
+ where the tensor map is stored. Unresolved-pair diagnostics print these names.
199
+ Two tensor-map targets are never assumed equal or distinct without an
200
+ invariant.
201
+
202
+ Example: page table `pages` maps logical blocks to distinct physical pages, and
203
+ the tensor read through one tensor map does not alias a workspace:
204
+
205
+ ```json
206
+ "address_invariants": [
207
+ {"gather": "pages", "injective": true, "lower_bound": 0},
208
+ {"distinct_allocations": ["tensor_map_target(input.arg0.1184+0)", "epilogue.tensormaps"]}
209
+ ]
210
+ ```
211
+
212
+ The PTX frontend does not yet emit `param` or `gather` atoms. Today the SMT
213
+ layer applies to operand-derived offsets and to source JSON produced by other
214
+ tools, while `distinct_allocations` applies directly to frontend output.