python-cc 0.1.0__tar.gz → 0.1.1__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 (596) hide show
  1. {python_cc-0.1.0 → python_cc-0.1.1}/.gitignore +11 -0
  2. {python_cc-0.1.0 → python_cc-0.1.1}/AGENTS.md +107 -3
  3. python_cc-0.1.1/PKG-INFO +985 -0
  4. python_cc-0.1.1/README.md +973 -0
  5. python_cc-0.1.1/docker/self-backend-linux-x86_64.Dockerfile +17 -0
  6. python_cc-0.1.1/docs/investigations/llvm-capi-vs-llvmlite-oracle-debugging.md +225 -0
  7. python_cc-0.1.1/docs/investigations/python-self-host-no-libpython-runtime-holes.md +509 -0
  8. python_cc-0.1.1/docs/issues/gc-semantics-gap.md +449 -0
  9. python_cc-0.1.1/docs/issues/open-bootstrap-issues.md +264 -0
  10. python_cc-0.1.1/docs/issues/python-data-model-gaps.md +508 -0
  11. python_cc-0.1.1/docs/issues/python-semantics-preservation.md +357 -0
  12. python_cc-0.1.1/docs/issues/self-host-ergonomics.md +539 -0
  13. python_cc-0.1.1/docs/issues/self-host-oracle-test-layer.md +344 -0
  14. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/all-pass-llvm-ir-1to1-master-plan.md +22 -37
  15. python_cc-0.1.1/docs/plans/closed-world-spike-import-experiment.md +126 -0
  16. python_cc-0.1.1/docs/plans/dual-llvm-backend-compat-plan.md +202 -0
  17. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/multi-file-compile-spike.md +2 -2
  18. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/p6c6-bootstrap-spike-report.md +28 -29
  19. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/python-frontend-interfaces.md +1 -1
  20. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/python-frontend-plan.md +52 -5
  21. python_cc-0.1.1/docs/plans/python-native-stdlib-plan.md +376 -0
  22. python_cc-0.1.1/docs/plans/python-runtime-no-c-plan.md +834 -0
  23. python_cc-0.1.1/docs/plans/self-backend-bootstrap-default-plan.md +262 -0
  24. python_cc-0.1.1/docs/plans/self-backend-translation-plan.md +1457 -0
  25. python_cc-0.1.1/docs/plans/self-backend-x86_64-linux-plan.md +389 -0
  26. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/ssa-midtier-backend-parity-plan.md +1 -1
  27. python_cc-0.1.1/docs/plans/stage1-closure-fallback-categories.md +116 -0
  28. python_cc-0.1.1/docs/plans/stage1-closure-probe-max.md +123 -0
  29. python_cc-0.1.1/docs/plans/stage1-closure-probe.md +78 -0
  30. python_cc-0.1.1/hatch_build.py +132 -0
  31. python_cc-0.1.1/pcc/__init__.py +27 -0
  32. python_cc-0.1.1/pcc/__main__.py +5 -0
  33. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/backend/__init__.py +8 -0
  34. python_cc-0.1.1/pcc/backend/self_backend.py +12 -0
  35. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin.py +189 -0
  36. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_abi.py +150 -0
  37. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_addr.py +106 -0
  38. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_calls.py +1517 -0
  39. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_compute.py +832 -0
  40. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_data.py +180 -0
  41. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_flow.py +153 -0
  42. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_materialize.py +636 -0
  43. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_mem.py +82 -0
  44. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_memory.py +132 -0
  45. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_ops.py +302 -0
  46. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_prologue.py +50 -0
  47. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_regs.py +117 -0
  48. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_returns.py +55 -0
  49. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_slots.py +272 -0
  50. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_symbols.py +26 -0
  51. python_cc-0.1.1/pcc/backend/self_backend_aarch64_darwin_terminators.py +113 -0
  52. python_cc-0.1.1/pcc/backend/self_backend_analysis.py +186 -0
  53. python_cc-0.1.1/pcc/backend/self_backend_dispatch.py +28 -0
  54. python_cc-0.1.1/pcc/backend/self_backend_emit.py +26 -0
  55. python_cc-0.1.1/pcc/backend/self_backend_instruction_dispatch.py +30 -0
  56. python_cc-0.1.1/pcc/backend/self_backend_ir.py +289 -0
  57. python_cc-0.1.1/pcc/backend/self_backend_module_symbols.py +35 -0
  58. python_cc-0.1.1/pcc/backend/self_backend_parse.py +1944 -0
  59. python_cc-0.1.1/pcc/backend/self_backend_prepare.py +52 -0
  60. python_cc-0.1.1/pcc/backend/self_backend_stackprep.py +188 -0
  61. python_cc-0.1.1/pcc/backend/self_backend_target_match.py +20 -0
  62. python_cc-0.1.1/pcc/backend/self_backend_targets.py +63 -0
  63. python_cc-0.1.1/pcc/backend/self_backend_terminator_dispatch.py +48 -0
  64. python_cc-0.1.1/pcc/backend/self_backend_x86_64_linux.py +1148 -0
  65. python_cc-0.1.1/pcc/backend/self_backend_x86_64_linux_data.py +166 -0
  66. python_cc-0.1.1/pcc/cli_bootstrap.py +312 -0
  67. python_cc-0.1.1/pcc/cli_core.py +1168 -0
  68. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/codegen/c_codegen.py +430 -50
  69. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/evaluater/c_evaluator.py +134 -21
  70. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/extern/__init__.py +20 -0
  71. python_cc-0.1.1/pcc/ir_passes/loop_distribute.py +47 -0
  72. python_cc-0.1.1/pcc/ir_passes/loop_vectorize.py +47 -0
  73. python_cc-0.1.1/pcc/ir_passes/simple_loop_unswitch.py +47 -0
  74. python_cc-0.1.1/pcc/ir_passes/slp_vectorizer.py +47 -0
  75. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/lex/c_lexer.py +2 -2
  76. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/llvm_capi/compat.py +2 -2
  77. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/llvm_capi/ir.py +557 -84
  78. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/py_lex.py +21 -27
  79. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/py_lift.py +155 -70
  80. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/py_parse.py +307 -45
  81. python_cc-0.1.1/pcc/passes/llvm_python_registry.ll +4610 -0
  82. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/llvm_python_registry.py +15 -15
  83. python_cc-0.1.1/pcc/pcc.py +281 -0
  84. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ply/lex.py +3 -8
  85. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ply/yacc.py +10 -7
  86. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/codegen/class_gen.py +354 -148
  87. python_cc-0.1.1/pcc/py_frontend/codegen/layer1.py +19530 -0
  88. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/codegen/marshal.py +79 -9
  89. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/codegen/runtime_abi.py +120 -29
  90. python_cc-0.1.1/pcc/py_frontend/export_meta.py +101 -0
  91. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/parser.py +16 -5
  92. python_cc-0.1.1/pcc/py_frontend/pipeline.py +2079 -0
  93. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/py_ast.py +1 -0
  94. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/type_infer.py +633 -59
  95. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/types.py +122 -13
  96. python_cc-0.1.1/pcc/py_runtime/Makefile +174 -0
  97. python_cc-0.1.1/pcc/py_runtime/include/py_runtime.h +515 -0
  98. python_cc-0.1.1/pcc/py_runtime/py/py_class.py +796 -0
  99. python_cc-0.1.1/pcc/py_runtime/py/py_dict.py +395 -0
  100. python_cc-0.1.1/pcc/py_runtime/py/py_exc_match.py +77 -0
  101. python_cc-0.1.1/pcc/py_runtime/py/py_exc_objects.py +162 -0
  102. python_cc-0.1.1/pcc/py_runtime/py/py_exc_table.py +84 -0
  103. python_cc-0.1.1/pcc/py_runtime/py/py_exc_tls.py +165 -0
  104. python_cc-0.1.1/pcc/py_runtime/py/py_exc_traceback.py +191 -0
  105. python_cc-0.1.1/pcc/py_runtime/py/py_int.py +178 -0
  106. python_cc-0.1.1/pcc/py_runtime/py/py_int_addsub.py +153 -0
  107. python_cc-0.1.1/pcc/py_runtime/py/py_int_bigint_convert.py +52 -0
  108. python_cc-0.1.1/pcc/py_runtime/py/py_int_bigint_pow.py +67 -0
  109. python_cc-0.1.1/pcc/py_runtime/py/py_int_bitwise.py +142 -0
  110. python_cc-0.1.1/pcc/py_runtime/py/py_int_convert.py +74 -0
  111. python_cc-0.1.1/pcc/py_runtime/py/py_int_core.py +300 -0
  112. python_cc-0.1.1/pcc/py_runtime/py/py_int_decimal.py +193 -0
  113. python_cc-0.1.1/pcc/py_runtime/py/py_int_mul.py +83 -0
  114. python_cc-0.1.1/pcc/py_runtime/py/py_int_ops.py +351 -0
  115. python_cc-0.1.1/pcc/py_runtime/py/py_int_parse.py +164 -0
  116. python_cc-0.1.1/pcc/py_runtime/py/py_int_shift.py +159 -0
  117. python_cc-0.1.1/pcc/py_runtime/py/py_list.py +474 -0
  118. python_cc-0.1.1/pcc/py_runtime/py/py_obj.py +144 -0
  119. python_cc-0.1.1/pcc/py_runtime/py/py_obj_dealloc.py +95 -0
  120. python_cc-0.1.1/pcc/py_runtime/py/py_obj_gc.py +43 -0
  121. python_cc-0.1.1/pcc/py_runtime/py/py_obj_ops_compare.py +466 -0
  122. python_cc-0.1.1/pcc/py_runtime/py/py_obj_ops_dispatch.py +378 -0
  123. python_cc-0.1.1/pcc/py_runtime/py/py_obj_stubs.py +109 -0
  124. python_cc-0.1.1/pcc/py_runtime/py/py_os_env.py +114 -0
  125. python_cc-0.1.1/pcc/py_runtime/py/py_os_path.py +324 -0
  126. python_cc-0.1.1/pcc/py_runtime/py/py_print_fmt.py +251 -0
  127. python_cc-0.1.1/pcc/py_runtime/py/py_print_sys.py +73 -0
  128. python_cc-0.1.1/pcc/py_runtime/py/py_process.py +68 -0
  129. python_cc-0.1.1/pcc/py_runtime/py/py_set.py +236 -0
  130. python_cc-0.1.1/pcc/py_runtime/py/py_str.py +45 -0
  131. python_cc-0.1.1/pcc/py_runtime/py/py_str_accessors.py +1265 -0
  132. python_cc-0.1.1/pcc/py_runtime/py/py_substrate.py +401 -0
  133. python_cc-0.1.1/pcc/py_runtime/py/py_tuple.py +221 -0
  134. python_cc-0.1.1/pcc/py_runtime/py/py_tuple_spike.py +111 -0
  135. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_runtime/src/py_class.c +89 -2
  136. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_runtime/src/py_dict.c +2 -2
  137. python_cc-0.1.1/pcc/py_runtime/src/py_dunder.c +42 -0
  138. python_cc-0.1.1/pcc/py_runtime/src/py_exc_match.c +41 -0
  139. python_cc-0.1.1/pcc/py_runtime/src/py_exc_objects.c +105 -0
  140. python_cc-0.1.1/pcc/py_runtime/src/py_exc_table.c +48 -0
  141. python_cc-0.1.1/pcc/py_runtime/src/py_exc_tls.c +147 -0
  142. python_cc-0.1.1/pcc/py_runtime/src/py_exc_traceback.c +92 -0
  143. python_cc-0.1.1/pcc/py_runtime/src/py_file.c +127 -0
  144. python_cc-0.1.1/pcc/py_runtime/src/py_int.c +308 -0
  145. python_cc-0.1.1/pcc/py_runtime/src/py_int_addsub.c +109 -0
  146. python_cc-0.1.1/pcc/py_runtime/src/py_int_bigint_convert.c +34 -0
  147. python_cc-0.1.1/pcc/py_runtime/src/py_int_bigint_pow.c +59 -0
  148. python_cc-0.1.1/pcc/py_runtime/src/py_int_bitwise.c +97 -0
  149. python_cc-0.1.1/pcc/py_runtime/src/py_int_convert.c +23 -0
  150. python_cc-0.1.1/pcc/py_runtime/src/py_int_core.c +155 -0
  151. python_cc-0.1.1/pcc/py_runtime/src/py_int_decimal.c +156 -0
  152. python_cc-0.1.1/pcc/py_runtime/src/py_int_mul.c +38 -0
  153. python_cc-0.1.1/pcc/py_runtime/src/py_int_ops.c +264 -0
  154. python_cc-0.1.1/pcc/py_runtime/src/py_int_parse.c +83 -0
  155. python_cc-0.1.1/pcc/py_runtime/src/py_int_shift.c +137 -0
  156. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_runtime/src/py_internal.h +37 -12
  157. python_cc-0.1.1/pcc/py_runtime/src/py_libpython.c +1279 -0
  158. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_runtime/src/py_list.c +22 -18
  159. python_cc-0.1.1/pcc/py_runtime/src/py_obj.c +58 -0
  160. python_cc-0.1.1/pcc/py_runtime/src/py_obj_dealloc.c +82 -0
  161. python_cc-0.1.1/pcc/py_runtime/src/py_obj_gc.c +29 -0
  162. python_cc-0.1.1/pcc/py_runtime/src/py_obj_ops_compare.c +285 -0
  163. python_cc-0.1.1/pcc/py_runtime/src/py_obj_ops_dispatch.c +190 -0
  164. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_runtime/src/py_obj_stubs.c +27 -6
  165. python_cc-0.1.1/pcc/py_runtime/src/py_os_env.c +73 -0
  166. python_cc-0.1.1/pcc/py_runtime/src/py_os_path.c +290 -0
  167. python_cc-0.1.1/pcc/py_runtime/src/py_os_substrate.c +152 -0
  168. python_cc-0.1.0/pcc/py_runtime/src/py_print.c → python_cc-0.1.1/pcc/py_runtime/src/py_print_fmt.c +76 -36
  169. python_cc-0.1.1/pcc/py_runtime/src/py_print_sys.c +40 -0
  170. python_cc-0.1.1/pcc/py_runtime/src/py_process.c +48 -0
  171. python_cc-0.1.1/pcc/py_runtime/src/py_process_substrate.c +476 -0
  172. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_runtime/src/py_set.c +7 -8
  173. python_cc-0.1.1/pcc/py_runtime/src/py_str.c +124 -0
  174. python_cc-0.1.0/pcc/py_runtime/src/py_str.c → python_cc-0.1.1/pcc/py_runtime/src/py_str_accessors.c +536 -544
  175. python_cc-0.1.1/pcc/py_runtime/src/py_substrate.c +327 -0
  176. python_cc-0.1.1/pcc/py_runtime/src/py_tuple.c +177 -0
  177. python_cc-0.1.1/pcc/py_stdlib/dataclasses.py +126 -0
  178. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/itertools.py +2 -2
  179. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/sys.py +16 -2
  180. python_cc-0.1.1/pcc/stdlib/__init__.py +21 -0
  181. python_cc-0.1.1/pcc/stdlib/_float_bits.py +127 -0
  182. python_cc-0.1.1/pcc/stdlib/struct.py +154 -0
  183. python_cc-0.1.1/pcc/unsafe/__init__.py +190 -0
  184. {python_cc-0.1.0 → python_cc-0.1.1}/pyproject.toml +21 -3
  185. {python_cc-0.1.0 → python_cc-0.1.1}/scripts/audit_selfhost.py +5 -12
  186. python_cc-0.1.1/scripts/bootstrap.sh +180 -0
  187. python_cc-0.1.1/scripts/pcc_multi.py +290 -0
  188. python_cc-0.1.1/scripts/probe_fallback_categories.py +308 -0
  189. python_cc-0.1.1/scripts/probe_stage1_closure.py +314 -0
  190. python_cc-0.1.1/scripts/probe_stage1_closure_on_mode.py +133 -0
  191. python_cc-0.1.1/scripts/run_self_backend_bootstrap_gate.py +604 -0
  192. python_cc-0.1.1/scripts/run_self_backend_linux_x86_64_c_testsuite.py +325 -0
  193. python_cc-0.1.1/scripts/run_self_backend_linux_x86_64_docker.sh +34 -0
  194. python_cc-0.1.1/scripts/run_self_backend_promotion_gate.py +278 -0
  195. python_cc-0.1.1/utils/fake_libc_include/stdlib.h +6 -0
  196. python_cc-0.1.0/PKG-INFO +0 -660
  197. python_cc-0.1.0/README.md +0 -647
  198. python_cc-0.1.0/docs/plans/dual-llvm-backend-compat-plan.md +0 -203
  199. python_cc-0.1.0/docs/plans/self-backend-translation-plan.md +0 -587
  200. python_cc-0.1.0/pcc/__init__.py +0 -3
  201. python_cc-0.1.0/pcc/__main__.py +0 -3
  202. python_cc-0.1.0/pcc/backend/self_backend.py +0 -1843
  203. python_cc-0.1.0/pcc/ir_passes/loop_distribute.py +0 -266
  204. python_cc-0.1.0/pcc/ir_passes/loop_vectorize.py +0 -313
  205. python_cc-0.1.0/pcc/ir_passes/simple_loop_unswitch.py +0 -261
  206. python_cc-0.1.0/pcc/ir_passes/slp_vectorizer.py +0 -221
  207. python_cc-0.1.0/pcc/pcc.py +0 -557
  208. python_cc-0.1.0/pcc/py_frontend/codegen/layer1.py +0 -7920
  209. python_cc-0.1.0/pcc/py_frontend/pipeline.py +0 -599
  210. python_cc-0.1.0/pcc/py_runtime/Makefile +0 -66
  211. python_cc-0.1.0/pcc/py_runtime/include/py_runtime.h +0 -286
  212. python_cc-0.1.0/pcc/py_runtime/libpy_runtime.a +0 -0
  213. python_cc-0.1.0/pcc/py_runtime/src/py_exc.c +0 -441
  214. python_cc-0.1.0/pcc/py_runtime/src/py_int.c +0 -1208
  215. python_cc-0.1.0/pcc/py_runtime/src/py_libpython.c +0 -455
  216. python_cc-0.1.0/pcc/py_runtime/src/py_obj.c +0 -185
  217. python_cc-0.1.0/pcc/py_runtime/src/py_obj_ops.c +0 -452
  218. python_cc-0.1.0/pcc/py_runtime/src/py_tuple.c +0 -77
  219. python_cc-0.1.0/pcc/py_stdlib/copy.ll +0 -847
  220. python_cc-0.1.0/pcc/py_stdlib/dataclasses.py +0 -93
  221. python_cc-0.1.0/scripts/bootstrap.sh +0 -110
  222. python_cc-0.1.0/scripts/pcc_multi.py +0 -105
  223. python_cc-0.1.0/utils/fake_libc_include/stdlib.h +0 -2
  224. {python_cc-0.1.0 → python_cc-0.1.1}/.github/workflows/workflow.yml +0 -0
  225. {python_cc-0.1.0 → python_cc-0.1.1}/LICENSE +0 -0
  226. {python_cc-0.1.0 → python_cc-0.1.1}/bench/bench.py +0 -0
  227. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/ackermann.c +0 -0
  228. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/binary_trees.c +0 -0
  229. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/bitcount.c +0 -0
  230. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/coremark_list.c +0 -0
  231. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/crc32.c +0 -0
  232. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/dhrystone.c +0 -0
  233. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/edit_distance.c +0 -0
  234. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/fannkuch_redux.c +0 -0
  235. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/fasta.c +0 -0
  236. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/fft.c +0 -0
  237. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/fib35.c +0 -0
  238. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/floyd_warshall.c +0 -0
  239. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/hash_table.c +0 -0
  240. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/heapsort.c +0 -0
  241. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/huffman.c +0 -0
  242. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/jacobi.c +0 -0
  243. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/knapsack.c +0 -0
  244. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/knucleotide.c +0 -0
  245. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/life.c +0 -0
  246. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/linked_list.c +0 -0
  247. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/livermore.c +0 -0
  248. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/lu_decompose.c +0 -0
  249. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/lzw_compress.c +0 -0
  250. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/mandelbrot.c +0 -0
  251. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/matmul.c +0 -0
  252. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/matrix_chain.c +0 -0
  253. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/nbody.c +0 -0
  254. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/nbody_shootout.c +0 -0
  255. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/parens_match.c +0 -0
  256. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/pi_digits.c +0 -0
  257. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/primes_segmented.c +0 -0
  258. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/quantify_passes.py +0 -0
  259. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/queens.c +0 -0
  260. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/quicksort.c +0 -0
  261. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/rc4.c +0 -0
  262. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/red_black_tree.c +0 -0
  263. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/regex_match.c +0 -0
  264. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/richards.c +0 -0
  265. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/run_benchmarks.py +0 -0
  266. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/sha256.c +0 -0
  267. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/sieve_large.c +0 -0
  268. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/spectral_norm.c +0 -0
  269. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/spectral_norm2.c +0 -0
  270. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/state_machine.c +0 -0
  271. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/stringsearch.c +0 -0
  272. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/tak.c +0 -0
  273. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/tower_of_hanoi.c +0 -0
  274. {python_cc-0.1.0 → python_cc-0.1.1}/benchmarks/whetstone.c +0 -0
  275. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/.gitignore +0 -0
  276. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/README.md +0 -0
  277. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/and.c +0 -0
  278. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/cast.c +0 -0
  279. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/if.c +0 -0
  280. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/malloc.c +0 -0
  281. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/simple_func.c +0 -0
  282. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/simple_int.c +0 -0
  283. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/simple_pointer.c +0 -0
  284. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/simple_printf.c +0 -0
  285. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/simple_recurse.c +0 -0
  286. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/struct.c +0 -0
  287. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/test_arrary.c +0 -0
  288. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/test_double_array.c +0 -0
  289. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/test_if_else.c +0 -0
  290. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/test_int.c +0 -0
  291. {python_cc-0.1.0 → python_cc-0.1.1}/clang_study/test_puts.c +0 -0
  292. {python_cc-0.1.0 → python_cc-0.1.1}/conftest.py +0 -0
  293. {python_cc-0.1.0 → python_cc-0.1.1}/docs/changelog.md +0 -0
  294. {python_cc-0.1.0 → python_cc-0.1.1}/docs/investigations/lua-sort-random-pivot-signedness.md +0 -0
  295. {python_cc-0.1.0 → python_cc-0.1.1}/docs/investigations/make-derived-cpp-flags-vs-explicit-project-config.md +0 -0
  296. {python_cc-0.1.0 → python_cc-0.1.1}/docs/investigations/nbody-shootout-fp-contract-and-vectorization.md +0 -0
  297. {python_cc-0.1.0 → python_cc-0.1.1}/docs/investigations/pcre-op-lengths-incomplete-array-binding.md +0 -0
  298. {python_cc-0.1.0 → python_cc-0.1.1}/docs/investigations/sqlite-forward-declared-bitfield-struct-tags.md +0 -0
  299. {python_cc-0.1.0 → python_cc-0.1.1}/docs/investigations/sqlite-integration-vfs-init-and-mcjit-lifecycle.md +0 -0
  300. {python_cc-0.1.0 → python_cc-0.1.1}/docs/investigations/zlib-integration-static-local-arrays-and-layout.md +0 -0
  301. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/all-python-llvm-pass-translation-plan.md +0 -0
  302. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/deply-spike-report.md +0 -0
  303. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/llvmcapi-beta4-backlog.md +0 -0
  304. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/llvmcapi-wire-spike-report.md +0 -0
  305. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/llvmlite-api-surface-beta5.json +0 -0
  306. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/llvmlite-api-surface-beta5.md +0 -0
  307. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/llvmlite-api-surface.json +0 -0
  308. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/llvmlite-api-surface.md +0 -0
  309. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/python-native-execution-model.md +0 -0
  310. {python_cc-0.1.0 → python_cc-0.1.1}/docs/plans/top-level-python-api-plan.md +0 -0
  311. {python_cc-0.1.0 → python_cc-0.1.1}/docs/python-howto.md +0 -0
  312. {python_cc-0.1.0 → python_cc-0.1.1}/docs/python-limitations.md +0 -0
  313. {python_cc-0.1.0 → python_cc-0.1.1}/docs/python-scorecard.md +0 -0
  314. {python_cc-0.1.0 → python_cc-0.1.1}/docs/python-tutorial.md +0 -0
  315. {python_cc-0.1.0 → python_cc-0.1.1}/docs/system-architecture.md +0 -0
  316. {python_cc-0.1.0 → python_cc-0.1.1}/fred.txt +0 -0
  317. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/api.py +0 -0
  318. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ast/__init__.py +0 -0
  319. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ast/ast.py +0 -0
  320. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ast/ast_transforms.py +0 -0
  321. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ast/c_ast.py +0 -0
  322. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/codegen/__init__.py +0 -0
  323. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/evaluater/__init__.py +0 -0
  324. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/generator/__init__.py +0 -0
  325. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/generator/c_generator.py +0 -0
  326. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/__init__.py +0 -0
  327. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/adce.py +0 -0
  328. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/alias_analysis.py +0 -0
  329. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/alignment_from_assumptions.py +0 -0
  330. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/arg_opt.py +0 -0
  331. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/argpromotion.py +0 -0
  332. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/bdce.py +0 -0
  333. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/called_value_prop.py +0 -0
  334. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/callsite_splitting.py +0 -0
  335. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/constant_lattice.py +0 -0
  336. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/constraint_elimination.py +0 -0
  337. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/correlated_propagation.py +0 -0
  338. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/dce.py +0 -0
  339. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/dominator_tree.py +0 -0
  340. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/dse.py +0 -0
  341. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/early_cse.py +0 -0
  342. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/elim_avail_extern.py +0 -0
  343. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/float2int.py +0 -0
  344. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/function_attrs.py +0 -0
  345. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/globalopt.py +0 -0
  346. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/gvn.py +0 -0
  347. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/indvars.py +0 -0
  348. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/infer_alignment.py +0 -0
  349. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/inline.py +0 -0
  350. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/instcombine.py +0 -0
  351. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/instsimplify.py +0 -0
  352. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/ipo_passes.py +0 -0
  353. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/ipsccp.py +0 -0
  354. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/ir_mutator.py +0 -0
  355. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/jump_threading.py +0 -0
  356. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/late_scalar.py +0 -0
  357. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/libcalls_shrinkwrap.py +0 -0
  358. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/licm.py +0 -0
  359. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_deletion.py +0 -0
  360. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_info.py +0 -0
  361. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_instsimplify.py +0 -0
  362. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_load_elim.py +0 -0
  363. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_passes.py +0 -0
  364. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_rotate.py +0 -0
  365. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_simplify.py +0 -0
  366. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_simplifycfg.py +0 -0
  367. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_sink.py +0 -0
  368. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/loop_unroll.py +0 -0
  369. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/lower_constant_intrinsics.py +0 -0
  370. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/lower_expect.py +0 -0
  371. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/manager.py +0 -0
  372. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/mem2reg.py +0 -0
  373. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/memcpyopt.py +0 -0
  374. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/memory_ssa.py +0 -0
  375. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/meta_passes.py +0 -0
  376. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/mldst_motion.py +0 -0
  377. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/newgvn.py +0 -0
  378. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/parity.py +0 -0
  379. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/reassociate.py +0 -0
  380. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/sccp.py +0 -0
  381. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/simplifycfg.py +0 -0
  382. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/speculative_execution.py +0 -0
  383. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/sroa.py +0 -0
  384. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/ssa_utils.py +0 -0
  385. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/tailcallelim.py +0 -0
  386. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/trivial_simplify.py +0 -0
  387. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/vector_combine.py +0 -0
  388. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ir_passes/vectorize_passes.py +0 -0
  389. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/lex/__init__.py +0 -0
  390. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/lex/lexer.py +0 -0
  391. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/lex/token.py +0 -0
  392. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/llvm_capi/__init__.py +0 -0
  393. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/llvm_capi/binding.py +0 -0
  394. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/__init__.py +0 -0
  395. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/ast_normalize.py +0 -0
  396. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/c_lex.py +0 -0
  397. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/c_parse_driver.py +0 -0
  398. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/c_parser.py +0 -0
  399. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/c_parser_actions.py +0 -0
  400. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/c_parsetab.py +0 -0
  401. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/file_parser.py +0 -0
  402. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/parser.py +0 -0
  403. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/parse/plyparser.py +0 -0
  404. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/__init__.py +0 -0
  405. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/alloc_decision.py +0 -0
  406. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ast_utils.py +0 -0
  407. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/base.py +0 -0
  408. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/canonicalize.py +0 -0
  409. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/chez_transforms.py +0 -0
  410. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/clang_compat.py +0 -0
  411. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/context.py +0 -0
  412. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/control_flow.py +0 -0
  413. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/dce.py +0 -0
  414. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/escape_analysis.py +0 -0
  415. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/global_dce.py +0 -0
  416. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/groups.py +0 -0
  417. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/inline_opt.py +0 -0
  418. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ipo_boundary.py +0 -0
  419. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ir_metadata.py +0 -0
  420. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/llvm_builtin_registry.py +0 -0
  421. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/llvm_explicit.py +0 -0
  422. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/llvm_loop_explicit.py +0 -0
  423. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/llvm_text_pipeline.py +0 -0
  424. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/loop_opt.py +0 -0
  425. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/lower_expect.py +0 -0
  426. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/memory_opt.py +0 -0
  427. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/nsw_inference.py +0 -0
  428. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/propagation.py +0 -0
  429. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_adce.py +0 -0
  430. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_bootstrap.py +0 -0
  431. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_branch_prune.py +0 -0
  432. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_dse.py +0 -0
  433. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_gvn.py +0 -0
  434. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_gvn_rewrite.py +0 -0
  435. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_loop_phi.py +0 -0
  436. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_sccp.py +0 -0
  437. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/ssa_sccp_rewrite.py +0 -0
  438. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/tbaa.py +0 -0
  439. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/whole_program.py +0 -0
  440. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/passes/whole_program_pass.py +0 -0
  441. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ply/__init__.py +0 -0
  442. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ply/cpp.py +0 -0
  443. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ply/ctokens.py +0 -0
  444. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ply/ygen.py +0 -0
  445. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/preprocessor.py +0 -0
  446. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/project.py +0 -0
  447. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/__init__.py +0 -0
  448. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_frontend/codegen/__init__.py +0 -0
  449. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/README.md +0 -0
  450. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/__init__.py +0 -0
  451. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/abc.py +0 -0
  452. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/collections.py +0 -0
  453. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/concurrent.py +0 -0
  454. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/contextlib.py +0 -0
  455. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/copy.py +0 -0
  456. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/ctypes.py +0 -0
  457. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/enum.py +0 -0
  458. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/fcntl.py +0 -0
  459. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/functools.py +0 -0
  460. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/io.py +0 -0
  461. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/json.py +0 -0
  462. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/logging.py +0 -0
  463. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/math.py +0 -0
  464. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/multiprocessing.py +0 -0
  465. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/operator.py +0 -0
  466. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/os.py +0 -0
  467. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/pathlib.py +0 -0
  468. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/platform.py +0 -0
  469. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/re.py +0 -0
  470. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/shlex.py +0 -0
  471. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/shutil.py +0 -0
  472. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/string.py +0 -0
  473. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/struct.py +0 -0
  474. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/subprocess.py +0 -0
  475. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/tempfile.py +0 -0
  476. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/time.py +0 -0
  477. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/traceback.py +0 -0
  478. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/typing.py +0 -0
  479. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/py_stdlib/warnings.py +0 -0
  480. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ssa/__init__.py +0 -0
  481. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ssa/adce.py +0 -0
  482. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ssa/builder.py +0 -0
  483. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ssa/gvn.py +0 -0
  484. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ssa/ir.py +0 -0
  485. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ssa/loop_phi.py +0 -0
  486. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/ssa/sccp.py +0 -0
  487. {python_cc-0.1.0 → python_cc-0.1.1}/pcc/util.py +0 -0
  488. {python_cc-0.1.0 → python_cc-0.1.1}/platform.info +0 -0
  489. {python_cc-0.1.0 → python_cc-0.1.1}/run.py +0 -0
  490. {python_cc-0.1.0 → python_cc-0.1.1}/scripts/build_c_oracle.py +0 -0
  491. {python_cc-0.1.0 → python_cc-0.1.1}/scripts/extract_c_parser_actions.py +0 -0
  492. {python_cc-0.1.0 → python_cc-0.1.1}/scripts/freeze_c_parser_tables.py +0 -0
  493. {python_cc-0.1.0 → python_cc-0.1.1}/scripts/parity_csmith_parser.py +0 -0
  494. {python_cc-0.1.0 → python_cc-0.1.1}/scripts/parity_real_projects.py +0 -0
  495. {python_cc-0.1.0 → python_cc-0.1.1}/scripts/trace_llvmlite_api.py +0 -0
  496. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/TargetConditionals.h +0 -0
  497. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/_ansi.h +0 -0
  498. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/_fake_defines.h +0 -0
  499. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/_fake_typedefs.h +0 -0
  500. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/_syslist.h +0 -0
  501. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/alloca.h +0 -0
  502. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/ar.h +0 -0
  503. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/argz.h +0 -0
  504. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/arpa/inet.h +0 -0
  505. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/assert.h +0 -0
  506. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/complex.h +0 -0
  507. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/ctype.h +0 -0
  508. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/dirent.h +0 -0
  509. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/dlfcn.h +0 -0
  510. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/endian.h +0 -0
  511. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/envz.h +0 -0
  512. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/errno.h +0 -0
  513. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/fastmath.h +0 -0
  514. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/fcntl.h +0 -0
  515. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/features.h +0 -0
  516. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/fenv.h +0 -0
  517. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/float.h +0 -0
  518. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/getopt.h +0 -0
  519. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/grp.h +0 -0
  520. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/iconv.h +0 -0
  521. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/ieeefp.h +0 -0
  522. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/inttypes.h +0 -0
  523. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/iso646.h +0 -0
  524. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/langinfo.h +0 -0
  525. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/libgen.h +0 -0
  526. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/libintl.h +0 -0
  527. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/limits.h +0 -0
  528. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/linux/version.h +0 -0
  529. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/locale.h +0 -0
  530. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/malloc.h +0 -0
  531. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/math.h +0 -0
  532. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/netdb.h +0 -0
  533. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/netinet/in.h +0 -0
  534. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/netinet/tcp.h +0 -0
  535. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/newlib.h +0 -0
  536. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/openssl/err.h +0 -0
  537. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/openssl/evp.h +0 -0
  538. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/openssl/hmac.h +0 -0
  539. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/openssl/ssl.h +0 -0
  540. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/openssl/x509v3.h +0 -0
  541. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/paths.h +0 -0
  542. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/poll.h +0 -0
  543. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/process.h +0 -0
  544. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/pthread.h +0 -0
  545. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/pwd.h +0 -0
  546. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/reent.h +0 -0
  547. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/regdef.h +0 -0
  548. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/regex.h +0 -0
  549. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sched.h +0 -0
  550. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/search.h +0 -0
  551. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/semaphore.h +0 -0
  552. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/setjmp.h +0 -0
  553. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/signal.h +0 -0
  554. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/stdarg.h +0 -0
  555. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/stdbool.h +0 -0
  556. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/stddef.h +0 -0
  557. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/stdint.h +0 -0
  558. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/stdio.h +0 -0
  559. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/string.h +0 -0
  560. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/strings.h +0 -0
  561. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/ioctl.h +0 -0
  562. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/mman.h +0 -0
  563. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/poll.h +0 -0
  564. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/resource.h +0 -0
  565. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/select.h +0 -0
  566. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/socket.h +0 -0
  567. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/stat.h +0 -0
  568. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/sysctl.h +0 -0
  569. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/time.h +0 -0
  570. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/types.h +0 -0
  571. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/uio.h +0 -0
  572. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/un.h +0 -0
  573. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/utsname.h +0 -0
  574. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/sys/wait.h +0 -0
  575. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/syslog.h +0 -0
  576. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/tar.h +0 -0
  577. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/termios.h +0 -0
  578. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/tgmath.h +0 -0
  579. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/time.h +0 -0
  580. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/unctrl.h +0 -0
  581. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/unistd.h +0 -0
  582. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/utime.h +0 -0
  583. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/utmp.h +0 -0
  584. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/wchar.h +0 -0
  585. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/wctype.h +0 -0
  586. {python_cc-0.1.0 → python_cc-0.1.1}/utils/fake_libc_include/zlib.h +0 -0
  587. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/constptr.c +0 -0
  588. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/example_c_file.c +0 -0
  589. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/fake_includes.py +0 -0
  590. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/make_fake_typedefs.py +0 -0
  591. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/memprofiling.py +0 -0
  592. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/refresh_c_testsuite_manifest.py +0 -0
  593. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/refresh_clang_c_manifest.py +0 -0
  594. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/refresh_gcc_torture_manifest.py +0 -0
  595. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/zc.c +0 -0
  596. {python_cc-0.1.0 → python_cc-0.1.1}/utils/internal/zz_parse.py +0 -0
@@ -148,3 +148,14 @@ projects/nginx-1.28.3/Makefile
148
148
  projects/nginx-1.28.3/objs/
149
149
  .claude/
150
150
  .pi
151
+
152
+ pcc/py_runtime/libpy_runtime.a
153
+ pcc/py_runtime/build_libpython/
154
+ pcc/py_runtime/libpy_runtime_libpython.a
155
+ $exe
156
+ .tmp_00031_dbg2.c
157
+ pcc/py_runtime/libpy_runtime_pcc.a
158
+ pcc/py_runtime/libpy_runtime_pcc_py.a
159
+ pcc/py_runtime/build_pcc/
160
+ pcc/py_runtime/build_py/
161
+ pcc/py_runtime/libpy_runtime_pcc_py_libpython.a
@@ -4,7 +4,14 @@ This file is for humans and AI agents working in this repository.
4
4
 
5
5
  ## Project Summary
6
6
 
7
- `pcc` is a C compiler implemented in Python on top of `pycparser`, `llvmlite`, and a lightweight fake-libc layer. Most fixes in this repository are not parser bugs; they are semantic bugs that only show up when expressions are combined, lowered to LLVM IR, and then exercised by real programs.
7
+ `pcc` is primarily a C compiler implemented in Python on top of
8
+ `pycparser`, LLVM (`llvmlite` and now `pcc/llvm_capi`), and a
9
+ lightweight fake-libc layer. The C path is still the most mature part of
10
+ the repository, but the repo now also contains an experimental Python
11
+ frontend (`pcc/py_frontend/` + `pcc/py_runtime/`) and an active
12
+ self-host/bootstrap track. Most fixes in this repository are not parser
13
+ bugs; they are semantic bugs that only show up when expressions are
14
+ combined, lowered to LLVM IR, and then exercised by real programs.
8
15
 
9
16
  The fastest way to get useful results is:
10
17
 
@@ -40,6 +47,7 @@ uv run pcc hello.c
40
47
  - While debugging one failure, prefer `-n0` so xdist does not hide ordering or temp-file problems.
41
48
  - Use ripgrep (`rg`), or your agent's built-in code search tools (e.g. Grep/Glob in Claude Code) for source discovery.
42
49
  - Do not leave temporary `.c` files inside real project directories. Directory-based source collection can accidentally compile them.
50
+ - **Always cap probe / experimental binaries with a hard timeout.** When you compile a one-shot `/tmp/<name>` probe and run it (especially a self-host stage binary that might infinite-loop), wrap the run with `timeout 30s ./tmp_probe` or equivalent. Found 2026-04-26: 4 zombie `pq_probe_stage_*_self` processes from a codex session pegged 100% CPU each for 33 hours (~120 CPU-hours wasted) — they were started without a timeout and the agent moved on without verifying termination. Before ending a session, always `ps aux | grep <your-probe-name>` and `kill` any leftover children. Probe binaries that hang are *expected* during compiler bring-up; the leak is not.
43
51
 
44
52
 
45
53
  ## Repository Map
@@ -52,14 +60,66 @@ uv run pcc hello.c
52
60
  Preprocessing, parsing, IR generation, LLVM parsing, optimization, and execution.
53
61
  - `pcc/codegen/c_codegen.py`
54
62
  Main semantic lowering logic. Most tricky C correctness bugs land here.
63
+ - `pcc/py_frontend/`
64
+ Experimental Python frontend. Type inference, Python lowering, and most
65
+ self-host blockers live here.
66
+ - `pcc/py_runtime/`
67
+ Native runtime support for the Python frontend.
68
+ - `pcc/llvm_capi/`
69
+ In-repo LLVM builder/binding replacement path. Useful both for
70
+ self-host work and for isolating `llvmlite` vs native LLVM-C behavior.
55
71
  - `utils/fake_libc_include/`
56
72
  Fake libc headers. Bugs here usually look like host ABI or declaration mismatches.
57
73
  - `tests/`
58
74
  Fast regression coverage. Add small tests here for every semantic fix.
75
+ - `tests/py_corpus/`
76
+ End-to-end Python frontend corpus. Use this when validating Python-path
77
+ behavior beyond a minimized unit test.
78
+ - `scripts/pcc_multi.py`
79
+ Experimental multi-file Python entrypoint used by the bootstrap track.
59
80
  - `projects/lua-5.5.0/`
60
81
  Real-program stress target. Very effective for catching interactions missed by unit tests.
61
82
 
62
83
 
84
+ ## Python Frontend / Bootstrap Notes
85
+
86
+ The Python frontend is a separate subsystem from the mature C path. Do
87
+ not assume a C-side debugging rule automatically covers Python lowering,
88
+ runtime fallback, or bootstrap behavior.
89
+
90
+ - Single-file Python entry:
91
+ `env -u LC_ALL uv run pcc foo.py`
92
+ - Multi-file/bootstrap entry:
93
+ `env -u LC_ALL uv run python scripts/pcc_multi.py --entry pkg.main --out out_bin pkg/main.py ...`
94
+ - `pcc/llvm_capi/` is the active in-repo LLVM replacement path; `llvmlite`
95
+ is still available as a fallback/comparison path for regression
96
+ isolation.
97
+ - Current verified Issue 1 metric: the stage1 tight multi-file closure
98
+ in `--ir-scaffold=on` has zero `py_cpy_*` call instructions, guarded
99
+ by `tests/fallback_baseline.json`. This is necessary but not sufficient
100
+ for closing Issue 1.
101
+ - The remaining Issue 1 close criterion is a real link gate: build the
102
+ stage1 bootstrap binary with libpython disabled and verify there are
103
+ no unresolved `Py*` / `py_cpy_*` symbols. Do not describe the current
104
+ path as pure self-host until that link-without-libpython property has
105
+ been re-verified in the current tree.
106
+ - Some bootstrap host queries intentionally use host-tool subprocess
107
+ boundaries (`PCC_HOST_PYTHON` or `python3`) instead of in-process
108
+ libpython calls. In particular, `_link_with_self_backend` must not
109
+ reintroduce compiled-stage imports/calls of `pcc.backend.*`; doing so
110
+ brings `py_cpy_*` back into the stage1 closure. The long-term target
111
+ is to compile those backend modules natively, not to grow in-process
112
+ CPython fallback again.
113
+ - When touching Python frontend or bootstrap-shared code, run the narrow
114
+ dedicated gates first:
115
+
116
+ ```bash
117
+ env -u LC_ALL uv run pytest tests/test_py_multi_file_compile.py tests/test_py_multi_file_bootstrap_shim.py -q -n0
118
+ env -u LC_ALL uv run pytest tests/test_llvm_capi_ir_parity.py tests/test_llvm_capi_end_to_end.py -q -n0
119
+ env -u LC_ALL uv run pytest tests/test_fallback_baseline.py tests/test_ir_py_fallback_baseline.py -q -n0
120
+ ```
121
+
122
+
63
123
  ## Source Collection Modes
64
124
 
65
125
  The repository has multiple ways to compile projects. Be explicit about which one you are debugging.
@@ -112,6 +172,47 @@ When the bug appears in a real program:
112
172
  This separates "the program is odd" from "the compiler lowered it incorrectly".
113
173
 
114
174
 
175
+ ### 2a. Use `llvmlite` as an oracle for `llvm_capi` parity
176
+
177
+ If the failure looks like a codegen / IR-builder regression in
178
+ `pcc/llvm_capi/`, do not guess blindly. Re-run the same minimized repro with
179
+ the `llvmlite` backend and use that as the oracle.
180
+
181
+ The switch is:
182
+
183
+ ```bash
184
+ PCC_USE_LLVMLITE_C=1 env -u LC_ALL uv run pytest 'tests/test_clang_compat.py::test_unsigned_int_to_float_conversion_uses_unsigned_semantics' -q -n0
185
+ ```
186
+
187
+ Use this workflow:
188
+
189
+ 1. shrink the failure to the smallest C repro or single pytest node
190
+ 2. run it under the default `llvm_capi` path
191
+ 3. run the exact same repro with `PCC_USE_LLVMLITE_C=1`
192
+ 4. compare compile result, runtime result, and when needed the emitted IR
193
+ 5. patch only the smallest semantic gap in `pcc/llvm_capi` or codegen
194
+ 6. add one focused regression test before moving on
195
+
196
+ This is especially effective for:
197
+
198
+ - missing `IRBuilder` ops such as `uitofp`, `fptoui`, `fpext`, or `fneg`
199
+ - constant `gep` / `bitcast` expression lowering
200
+ - typed-pointer semantics hidden by opaque `ptr`
201
+ - function-type / function-pointer decay mismatches
202
+
203
+ Do **not** assume `llvmlite` is the oracle for everything. It is a good oracle
204
+ for backend parity bugs, but not for:
205
+
206
+ - system preprocessor behavior
207
+ - fake-libc or header rewrite policy
208
+ - compile-only diagnostics policy
209
+ - parser acceptance / rejection mismatches
210
+
211
+ If both backends fail the same minimized repro, the bug is probably above the
212
+ backend layer and you should move back to parser, preprocessor, headers, or
213
+ semantic lowering.
214
+
215
+
115
216
  ### 3. Shrink the reproducer in stages
116
217
 
117
218
  A productive sequence is:
@@ -350,10 +451,13 @@ Before you stop, confirm all of the following:
350
451
 
351
452
  ## LLVM Version Mismatch
352
453
 
353
- `llvmlite` bundles its own LLVM version, which may be newer than the system `clang`.
454
+ `llvmlite` bundles its own LLVM version, which may be newer than the
455
+ system `clang`. The repository also has an in-repo LLVM-C replacement
456
+ path under `pcc/llvm_capi`, so treat "LLVM behavior" and "llvmlite
457
+ behavior" as related but not identical questions when debugging.
354
458
 
355
459
  - Older repository paths wrote LLVM IR text to disk and then asked the system compiler to compile that IR. In that setup, LLVM O2 could emit attributes the system `clang` did not understand, such as `nuw`, `nneg`, `range()`, `initializes()`, and `dead_on_unwind`.
356
- - The current system-link path does **not** rely on the system compiler parsing LLVM IR text. `run_translation_units_with_system_cc()` optimizes each module with llvmlite's LLVM and emits native object files directly, then links those objects with `cc`.
460
+ - The current system-link path does **not** rely on the system compiler parsing LLVM IR text. `run_translation_units_with_system_cc()` optimizes each module with repository-managed LLVM and emits native object files directly, then links those objects with `cc`.
357
461
  - The remaining limitation is not "no optimization". It is "no cross-translation-unit optimization" in the separate-TU path. Each TU gets optimized on its own before linking, but there is no LTO-style whole-program pass over the linked module set.
358
462
  - If you ever reintroduce a text-IR handoff to the system compiler, keep the attribute-stripping warning in mind and centralize those rewrites in `postprocess_ir_text()`.
359
463