@@ -49,7 +49,7 @@ Each promised item should end the audit in one of three states: |
| 49 | | 49 | |
| 50 | Kickoff items: | 50 | Kickoff items: |
| 51 | - source-level audit for helper-before-program entry lowering / dead-function root handling | 51 | - source-level audit for helper-before-program entry lowering / dead-function root handling |
| 52 | -- living XFAIL for module procedure host-association over module globals | 52 | +- source-level audit for module procedure host-association over module globals |
| 53 | - real-world stdlib-style kernel: | 53 | - real-world stdlib-style kernel: |
| 54 | - tridiagonal sparse matvec (`realworld_tridiag_spmv.f90`) | 54 | - tridiagonal sparse matvec (`realworld_tridiag_spmv.f90`) |
| 55 | - real-world BLAS-style kernel: | 55 | - real-world BLAS-style kernel: |
@@ -114,6 +114,23 @@ Current audit findings: |
| 114 | real-world default-kind array-query assignments could produce invalid asm like | 114 | real-world default-kind array-query assignments could produce invalid asm like |
| 115 | `mov w21, x20`; the new runtime-shape audit keeps that truncation surface | 115 | `mov w21, x20`; the new runtime-shape audit keeps that truncation surface |
| 116 | honest | 116 | honest |
| | 117 | +- fixed: fpm-style suffix classification in `realworld_suffix_scan.f90` first |
| | 118 | + needed fixed-length character arrays to lower as real element-addressable |
| | 119 | + arrays instead of scalar strings, then needed scalar character dummy intrinsics |
| | 120 | + like `INDEX(name, suffix)` to carry a real runtime length story through |
| | 121 | + `afs_c_strlen`, and finally exposed two optimizer-side bugs: mixed-width GEP |
| | 122 | + offsets were being compared without pointee-size scaling in alias analysis, |
| | 123 | + and SROA was scalarizing aggregates even when a GEP address escaped through |
| | 124 | + the synthesized descriptor. The program is now a passing audit probe with |
| | 125 | + cross-opt equality plus IR/asm/object/run reproducibility |
| | 126 | +- fixed: dummy-array `SIZE(...)` queries in `realworld_assumed_shape_size.f90` |
| | 127 | + were not actually using assumed-shape descriptors because bare `(:)` dummy |
| | 128 | + declarations lowered through the `Deferred` array-spec path, and then the |
| | 129 | + synthesized descriptor lost `rank` and `flags` at `-O2+` because mixed-width |
| | 130 | + GEP offsets in alias analysis made descriptor field stores look like they |
| | 131 | + overlapped. Assumed-shape dummies now classify as descriptor-backed, query |
| | 132 | + results are kept in default-kind scalars, and the real-world canary now |
| | 133 | + passes across optimization levels with deterministic artifacts |
| 117 | - proven: LICM hoists invariant scalar dummy loads out of a real-world affine | 134 | - proven: LICM hoists invariant scalar dummy loads out of a real-world affine |
| 118 | update loop in `realworld_affine_shift.f90` once BCE clears the loop body | 135 | update loop in `realworld_affine_shift.f90` once BCE clears the loop body |
| 119 | - proven: GVN reduces duplicated branch-join PURE helper calls in | 136 | - proven: GVN reduces duplicated branch-join PURE helper calls in |
@@ -133,14 +150,6 @@ Current audit findings: |
| 133 | (`realworld_ipo_chain.f90`), small-loop DO CONCURRENT exploitation | 150 | (`realworld_ipo_chain.f90`), small-loop DO CONCURRENT exploitation |
| 134 | (`realworld_doconc_square.f90`), and explicit-DO vectorization onto the bulk | 151 | (`realworld_doconc_square.f90`), and explicit-DO vectorization onto the bulk |
| 135 | runtime kernels (`realworld_vector_stage.f90`) | 152 | runtime kernels (`realworld_vector_stage.f90`) |
| 136 | -- deferred with living XFAIL: `FPM-SUFFIX-1` fpm-style source suffix scan still | | |
| 137 | - fails after parsing with an `i32`/`i64` IR store mismatch | | |
| 138 | -- deferred with living XFAIL: `ASHAPE-SIZE-1` dummy-array `SIZE(...)` lowering | | |
| 139 | - still routes dummy arrays into the descriptor runtime path even though ordinary | | |
| 140 | - dummy arrays are carried as base pointers today. The default-integer query | | |
| 141 | - typing bug is now fixed, so the remaining failure is the real descriptor | | |
| 142 | - mismatch: `realworld_assumed_shape_size.f90` reaches `afs_array_size` with | | |
| 143 | - bogus dummy-array metadata and panics in the runtime | | |
| 144 | - separately deferred parser gap: typed character array constructors using an | 153 | - separately deferred parser gap: typed character array constructors using an |
| 145 | explicit type-spec inside `[]` | 154 | explicit type-spec inside `[]` |
| 146 | | 155 | |
@@ -149,7 +158,7 @@ Current audit corpus snapshot: |
| 149 | - `172` programs with `CHECK` | 158 | - `172` programs with `CHECK` |
| 150 | - `30` programs with `IR_CHECK` | 159 | - `30` programs with `IR_CHECK` |
| 151 | - `6` programs with `IR_NOT` | 160 | - `6` programs with `IR_NOT` |
| 152 | -- `2` living `XFAIL`s | 161 | +- `0` living `XFAIL`s |
| 153 | | 162 | |
| 154 | ## Brutal Audit Priorities | 163 | ## Brutal Audit Priorities |
| 155 | | 164 | |