offtarget 0.1.0__py3-none-any.whl
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.
- offload/__init__.py +10 -0
- offload/__main__.py +5 -0
- offload/_bundle.py +74 -0
- offload/_root/catalog/acc/claims.yaml +197 -0
- offload/_root/catalog/acc/clauses.yaml +391 -0
- offload/_root/catalog/acc/no_oracle.yaml +89 -0
- offload/_root/catalog/acc/out_of_scope.yaml +17 -0
- offload/_root/catalog/acc/rules.yaml +433 -0
- offload/_root/catalog/acc/semantic_atoms.yaml +27 -0
- offload/_root/catalog/acc/skeleton.yaml +1567 -0
- offload/_root/catalog/acc/spec_overrides.yaml +72 -0
- offload/_root/catalog/later_forms.yaml +76 -0
- offload/_root/catalog/machines.yaml +218 -0
- offload/_root/catalog/omp/claims.yaml +2047 -0
- offload/_root/catalog/omp/clauses.yaml +914 -0
- offload/_root/catalog/omp/derivations.yaml +177 -0
- offload/_root/catalog/omp/memory_modes.yaml +40 -0
- offload/_root/catalog/omp/no_oracle.yaml +373 -0
- offload/_root/catalog/omp/omp50_delta.yaml +377 -0
- offload/_root/catalog/omp/out_of_scope.yaml +64 -0
- offload/_root/catalog/omp/port_equivalence.yaml +352 -0
- offload/_root/catalog/omp/rules.yaml +3131 -0
- offload/_root/catalog/omp/rules_coverage.yaml +9939 -0
- offload/_root/catalog/omp/semantic_atoms.yaml +34 -0
- offload/_root/catalog/omp/skeleton.yaml +9181 -0
- offload/_root/catalog/omp/spec_overrides.yaml +932 -0
- offload/_root/catalog/toolchains.yaml +472 -0
- offload/_root/catalog/vendor_claims_generic.yaml +40925 -0
- offload/_root/data/canuse/b.json +1 -0
- offload/_root/data/canuse/c.json +1 -0
- offload/_root/data/canuse/columns.json +1 -0
- offload/_root/data/canuse/d.json +1 -0
- offload/_root/data/canuse/f.json +1 -0
- offload/_root/data/canuse/index.json +1 -0
- offload/_root/data/canuse/p.json +1 -0
- offload/_root/data/compilers/afar.json +1 -0
- offload/_root/data/compilers/cce19.json +1 -0
- offload/_root/data/compilers/cce20.json +1 -0
- offload/_root/data/compilers/cce21.json +1 -0
- offload/_root/data/compilers/cce21_4.json +1 -0
- offload/_root/data/compilers/gcc.json +1 -0
- offload/_root/data/compilers/gcc_sm80.json +1 -0
- offload/_root/data/compilers/nvhpc.json +1 -0
- offload/_root/data/compilers/nvhpc269.json +1 -0
- offload/_root/data/findings/AUTHORING.md +107 -0
- offload/_root/data/findings/README.md +33 -0
- offload/_root/data/findings/afar-c-error-directive-in-target-link.c +37 -0
- offload/_root/data/findings/afar-c-lastprivate-distribute-parallel-for-small-type.c +56 -0
- offload/_root/data/findings/afar-c-teams-distribute-reduction-first-team.c +59 -0
- offload/_root/data/findings/afar-c-update-iterator-copy-mode.c +45 -0
- offload/_root/data/findings/afar-c-xnack1-target-is-present.c +31 -0
- offload/_root/data/findings/afar-cce19-character-defaultmap.f90 +27 -0
- offload/_root/data/findings/afar-cce19-task-in-target-ice.f90 +23 -0
- offload/_root/data/findings/afar-clang-requires-device-safesync-hang.c +24 -0
- offload/_root/data/findings/afar-flang-firstprivate-map-two-targets.f90 +34 -0
- offload/_root/data/findings/afar-flang-loop-bind-teams-reduction.f90 +27 -0
- offload/_root/data/findings/afar-flang-task-reduction-max.f90 +31 -0
- offload/_root/data/findings/afar-flang-thread-limit-target-parallel-do.f90 +22 -0
- offload/_root/data/findings/afar-linear-ref-omp50.f90 +29 -0
- offload/_root/data/findings/afar-loop-bind-thread-in-teams.f90 +44 -0
- offload/_root/data/findings/afar-nontemporal-assumed-shape-ice.f90 +38 -0
- offload/_root/data/findings/afar-udr-derived-type-link.f90 +41 -0
- offload/_root/data/findings/afar-xnack1-atomic-min-nested-parallel.f90 +53 -0
- offload/_root/data/findings/afar-xnack1-present-not-enforced.f90 +36 -0
- offload/_root/data/findings/afar-xnack1-target-is-present.f90 +47 -0
- offload/_root/data/findings/apps/afar-cce-teams-private-array-nested-parallel-wrong.f90 +100 -0
- offload/_root/data/findings/apps/cce20-device-link-infer-address-spaces-crash.f90 +159 -0
- offload/_root/data/findings/apps/cce21-device-link-agpr-copy-mfma-assert.f90 +343 -0
- offload/_root/data/findings/apps/cce21-private-array-loaded-subscript-wrong.f90 +113 -0
- offload/_root/data/findings/apps/controls/bubble-simple-rddot.f90 +284 -0
- offload/_root/data/findings/apps/controls/bubble-two-substeps.f90 +287 -0
- offload/_root/data/findings/apps/controls/cbc-inline.f90 +97 -0
- offload/_root/data/findings/apps/controls/cbc-integers.f90 +91 -0
- offload/_root/data/findings/apps/controls/cbc-only-density.f90 +97 -0
- offload/_root/data/findings/apps/controls/cbc-only-velocity.f90 +97 -0
- offload/_root/data/findings/apps/controls/gcc-acc-c-tile-control.c +26 -0
- offload/_root/data/findings/apps/controls/gcc-acc-tile-control.f90 +29 -0
- offload/_root/data/findings/apps/controls/private-array-subscript-probes.f90 +45 -0
- offload/_root/data/findings/apps/controls/teams-private-array-read-par.f90 +31 -0
- offload/_root/data/findings/apps/controls/teams-private-array-seq.f90 +30 -0
- offload/_root/data/findings/apps/controls/teams-private-array-shared.f90 +34 -0
- offload/_root/data/findings/apps/controls/teams-private-array-split.f90 +36 -0
- offload/_root/data/findings/apps/controls/teams-private-array-write-par.f90 +31 -0
- offload/_root/data/findings/apps/gcc-acc-c-tile-partial-tiles-wrong.c +60 -0
- offload/_root/data/findings/apps/gcc-acc-tile-partial-tiles-wrong.f90 +64 -0
- offload/_root/data/findings/catalog/afar-c-complex-reduction-link.c +66 -0
- offload/_root/data/findings/catalog/afar-c-critical-hint-link.c +68 -0
- offload/_root/data/findings/catalog/afar-c-ordered-doacross-link.c +62 -0
- offload/_root/data/findings/catalog/afar-c-reduction-task-link.c +81 -0
- offload/_root/data/findings/catalog/afar-flang-absent-optional-target-crash.f90 +76 -0
- offload/_root/data/findings/catalog/afar-flang-critical-target-parallel-wrong.f90 +74 -0
- offload/_root/data/findings/catalog/afar-flang-dist-schedule-chunk.f90 +80 -0
- offload/_root/data/findings/catalog/afar-flang-linear-parallel-ice.f90 +68 -0
- offload/_root/data/findings/catalog/afar-flang-named-critical-link.f90 +67 -0
- offload/_root/data/findings/catalog/afar-flang-ordered-wrong.f90 +78 -0
- offload/_root/data/findings/catalog/afar-flang-reduction-minus-rejected.f90 +77 -0
- offload/_root/data/findings/catalog/afar-flang-reduction-task-ice.f90 +68 -0
- offload/_root/data/findings/catalog/afar-flang-sections-in-target-ice.f90 +67 -0
- offload/_root/data/findings/catalog/afar-flang-workdistribute-ice.f90 +71 -0
- offload/_root/data/findings/catalog/c-allocate-const-mem-firstprivate-wrong.c +79 -0
- offload/_root/data/findings/catalog/cce-acc-allocate-in-compute-crash.f90 +65 -0
- offload/_root/data/findings/catalog/cce-acc-character-dummy-routine-ice.f90 +81 -0
- offload/_root/data/findings/catalog/cce-acc-loop-seq-in-routine-wrong.f90 +81 -0
- offload/_root/data/findings/catalog/cce-acc-stop-in-compute-crash.f90 +62 -0
- offload/_root/data/findings/catalog/cce-allocators-stack-ice.f90 +81 -0
- offload/_root/data/findings/catalog/cce-atomic-default-mem-order-acquire-release-rejected.f90 +61 -0
- offload/_root/data/findings/catalog/cce-c-allocate-align-link.c +83 -0
- offload/_root/data/findings/catalog/cce-c-allocate-allocator-modifier-rejected.c +77 -0
- offload/_root/data/findings/catalog/cce-c-device-type-directive-name-ice.c +70 -0
- offload/_root/data/findings/catalog/cce-c-dist-schedule-chunk.c +81 -0
- offload/_root/data/findings/catalog/cce-c-f-pointer-device-link.f90 +70 -0
- offload/_root/data/findings/catalog/cce-c-lastprivate-parallel-in-seq-loop-wrong.c +64 -0
- offload/_root/data/findings/catalog/cce-c-long-double-ice.c +61 -0
- offload/_root/data/findings/catalog/cce-c-map-iterator-ice.c +92 -0
- offload/_root/data/findings/catalog/cce-c-motion-iterator-rejected.c +68 -0
- offload/_root/data/findings/catalog/cce-c-ordered-doacross-link.c +64 -0
- offload/_root/data/findings/catalog/cce-c-ordered-link.c +77 -0
- offload/_root/data/findings/catalog/cce-c-recursive-function-ice.c +62 -0
- offload/_root/data/findings/catalog/cce-c-reduction-inscan-ice.c +67 -0
- offload/_root/data/findings/catalog/cce-c-reduction-task-link.c +73 -0
- offload/_root/data/findings/catalog/cce-c-sections-in-target-wrong.c +70 -0
- offload/_root/data/findings/catalog/cce-c-single-masked-task-link.c +66 -0
- offload/_root/data/findings/catalog/cce-c-task-in-target-link.c +75 -0
- offload/_root/data/findings/catalog/cce-c-uses-allocators-traits-rejected.c +71 -0
- offload/_root/data/findings/catalog/cce-flang-allocate-const-mem-ice.f90 +67 -0
- offload/_root/data/findings/catalog/cce-flang-allocate-in-target-crash.f90 +68 -0
- offload/_root/data/findings/catalog/cce-flang-lastprivate-parallel-in-seq-loop-wrong.f90 +83 -0
- offload/_root/data/findings/catalog/cce-flang-stop-in-target-crash.f90 +64 -0
- offload/_root/data/findings/catalog/cce-iterator-link.f90 +67 -0
- offload/_root/data/findings/catalog/cce-linear-lastprivate-ice.f90 +69 -0
- offload/_root/data/findings/catalog/cce-nohost-link.f90 +90 -0
- offload/_root/data/findings/catalog/cce-reduction-inscan-ice.f90 +66 -0
- offload/_root/data/findings/catalog/cce-reduction-task-link.f90 +76 -0
- offload/_root/data/findings/catalog/cce19-reduction-task-addrspacecast-ice.f90 +77 -0
- offload/_root/data/findings/catalog/cce20-c-defaultmap-private-storage-rejected.c +85 -0
- offload/_root/data/findings/catalog/cce20-map-self-rejected.f90 +64 -0
- offload/_root/data/findings/catalog/cce21-c-declare-target-local-rejected.c +73 -0
- offload/_root/data/findings/catalog/cce21-c-target-loop-ice.c +77 -0
- offload/_root/data/findings/catalog/defaultmap-present-private-array-abort.f90 +73 -0
- offload/_root/data/findings/catalog/nvhpc-acc-associate-illegal-address.f90 +66 -0
- offload/_root/data/findings/catalog/nvhpc-c-function-pointer-kernel-missing.c +68 -0
- offload/_root/data/findings/catalog/nvhpc-c-long-double-kernel-missing.c +64 -0
- offload/_root/data/findings/catalog/nvhpc-c-static-local-kernel-missing.c +73 -0
- offload/_root/data/findings/catalog/nvhpc-c-vla-kernel-missing.c +63 -0
- offload/_root/data/findings/catalog/nvhpc-flang-type-bound-kernel-missing.f90 +86 -0
- offload/_root/data/findings/cce-acc-init-set-runtime-assert.f90 +35 -0
- offload/_root/data/findings/cce-acc-reduction-200-int8-scalars-wrong.f90 +1278 -0
- offload/_root/data/findings/cce-acc-routine-bind-module-ice.f90 +35 -0
- offload/_root/data/findings/cce-acc-self-condition-ignored.f90 +17 -0
- offload/_root/data/findings/cce-c-dist-schedule-segv.c +34 -0
- offload/_root/data/findings/cce-c-map-delete-refcount.c +47 -0
- offload/_root/data/findings/cce-c-map-present-assert.c +45 -0
- offload/_root/data/findings/cce-c-openmp45-device-link.c +34 -0
- offload/_root/data/findings/cce-c-parallel-for-in-target.c +73 -0
- offload/_root/data/findings/cce-defaultmap-tofrom-explicit-map.f90 +92 -0
- offload/_root/data/findings/cce-mapper-next-map-copy-back.f90 +48 -0
- offload/_root/data/findings/cce-trim-merge-output-one-character.f90 +40 -0
- offload/_root/data/findings/cce-uses-allocators-traits-omp50.f90 +28 -0
- offload/_root/data/findings/cce19-acc-if-false-link.f90 +17 -0
- offload/_root/data/findings/cce19-c-reduction-63-scalars-one-wrong.c +235 -0
- offload/_root/data/findings/cce19-target-parallel-guarded-loop.f90 +35 -0
- offload/_root/data/findings/cce19-target-parallel-single-ice.f90 +38 -0
- offload/_root/data/findings/cce21-alloc-2e32-sum-wrong.f90 +68 -0
- offload/_root/data/findings/cce21-defaultmap-aggregate-flag.f90 +52 -0
- offload/_root/data/findings/cce21-in-reduction-assumed-shape-write-lost.f90 +61 -0
- offload/_root/data/findings/cce21-in-reduction-taskwait-link.f90 +59 -0
- offload/_root/data/findings/cce21-linear-modifier-default-none.f90 +59 -0
- offload/_root/data/findings/clang-c-declare-target-to-omp52.c +50 -0
- offload/_root/data/findings/clang-c-linear-directive-name-hang.c +30 -0
- offload/_root/data/findings/clang-c-map-iterator-omp51.c +51 -0
- offload/_root/data/findings/clang-c-shared-declare-target-combined.c +58 -0
- offload/_root/data/findings/dataenv/cce-value-dummy-target-write-visible.f90 +74 -0
- offload/_root/data/findings/defaultmap-none-loop-variable.f90 +69 -0
- offload/_root/data/findings/fortran-loop-bind-thread-in-parallel.f90 +53 -0
- offload/_root/data/findings/fortran-schedule-static-in-target.f90 +55 -0
- offload/_root/data/findings/fresh/cce-common-block-name-in-map-rejected.f90 +47 -0
- offload/_root/data/findings/fresh/cce-if-stop-in-target-ice-one-condition.f90 +38 -0
- offload/_root/data/findings/fresh/cce-if-stop-in-target-ice.f90 +43 -0
- offload/_root/data/findings/fresh/cce-list-directed-print-in-target-copy-crash.f90 +40 -0
- offload/_root/data/findings/fresh/cce19-acc-automatic-array-copyout-copy-crash.f90 +56 -0
- offload/_root/data/findings/fresh/cce21-combined-if-runtime-expr-loop-skipped.f90 +57 -0
- offload/_root/data/findings/fresh/nvhpc-acc-gang-worker-collapse-nested-vector-reduction-lost.f90 +67 -0
- offload/_root/data/findings/fresh/nvhpc-teams-loop-module-allocatable-assign-fort2-crash.f90 +73 -0
- offload/_root/data/findings/fuzz/1131-afar.f90 +48 -0
- offload/_root/data/findings/fuzz/1391-cce20.f90 +40 -0
- offload/_root/data/findings/fuzz/14-cce20.f90 +36 -0
- offload/_root/data/findings/fuzz/1505-cce20.f90 +88 -0
- offload/_root/data/findings/fuzz/1540-afar.f90 +44 -0
- offload/_root/data/findings/fuzz/158-afar.f90 +63 -0
- offload/_root/data/findings/fuzz/16-cce20.f90 +39 -0
- offload/_root/data/findings/fuzz/1644-cce21.f90 +31 -0
- offload/_root/data/findings/fuzz/165-cce19.f90 +52 -0
- offload/_root/data/findings/fuzz/1749-cce20.f90 +34 -0
- offload/_root/data/findings/fuzz/1936-afar.f90 +61 -0
- offload/_root/data/findings/fuzz/1978-cce19.f90 +41 -0
- offload/_root/data/findings/fuzz/2014-cce19.f90 +46 -0
- offload/_root/data/findings/fuzz/2224-cce19.f90 +30 -0
- offload/_root/data/findings/fuzz/2334-cce19.f90 +57 -0
- offload/_root/data/findings/fuzz/536-cce19.f90 +38 -0
- offload/_root/data/findings/fuzz/591-cce19.f90 +54 -0
- offload/_root/data/findings/fuzz/650-afar.f90 +58 -0
- offload/_root/data/findings/fuzz/698-afar.f90 +68 -0
- offload/_root/data/findings/fuzz/700-afar.f90 +46 -0
- offload/_root/data/findings/fuzz/775-cce21.f90 +33 -0
- offload/_root/data/findings/fuzz/87-afar.f90 +47 -0
- offload/_root/data/findings/fuzz/916-afar.f90 +67 -0
- offload/_root/data/findings/fuzz/958-cce20.f90 +44 -0
- offload/_root/data/findings/fuzz/98-cce19.f90 +40 -0
- offload/_root/data/findings/fuzz/README.md +236 -0
- offload/_root/data/findings/fuzz/b1-121-afar.f90 +47 -0
- offload/_root/data/findings/fuzz/b1-183-afar.f90 +55 -0
- offload/_root/data/findings/fuzz/b1-22-cce20.f90 +38 -0
- offload/_root/data/findings/fuzz/b1-231-afar.f90 +56 -0
- offload/_root/data/findings/fuzz/b1-268-afar.f90 +46 -0
- offload/_root/data/findings/fuzz/b2-183-afar.f90 +57 -0
- offload/_root/data/findings/fuzz/b2-209-cce19.f90 +51 -0
- offload/_root/data/findings/fuzz/b2-213-afar.f90 +63 -0
- offload/_root/data/findings/fuzz/b2-52-afar.f90 +56 -0
- offload/_root/data/findings/fuzz/b2-68-afar.f90 +54 -0
- offload/_root/data/findings/fuzz/b2-85-cce20.f90 +55 -0
- offload/_root/data/findings/fuzz/b3-188-cce19.f90 +90 -0
- offload/_root/data/findings/fuzz/b3-190-cce21.f90 +88 -0
- offload/_root/data/findings/fuzz/b3-197-cce19.f90 +77 -0
- offload/_root/data/findings/fuzz/b3-250-cce20.f90 +89 -0
- offload/_root/data/findings/fuzz/b3-278-cce19.f90 +70 -0
- offload/_root/data/findings/fuzz/b3-45-cce21.f90 +83 -0
- offload/_root/data/findings/fuzz/b3-54-afar.f90 +67 -0
- offload/_root/data/findings/fuzz/b3-61-cce20.f90 +100 -0
- offload/_root/data/findings/fuzz/b3-9-afar.f90 +100 -0
- offload/_root/data/findings/fuzz/b3-9-cce21.f90 +103 -0
- offload/_root/data/findings/fuzz/b3-94-afar.f90 +80 -0
- offload/_root/data/findings/fuzz/b4-39-afar.f90 +141 -0
- offload/_root/data/findings/fuzz/b4-86-cce19.f90 +71 -0
- offload/_root/data/findings/fuzz/controls/gcc-complex-pointer-store-control.f90 +28 -0
- offload/_root/data/findings/fuzz/controls/gcc-declare-reduction-module-control.f90 +29 -0
- offload/_root/data/findings/fuzz/controls/gcc-target-simd-map-nontemporal-control.f90 +21 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-allocatable-component-mapped-control.f90 +22 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-allocatable-component-unreferenced-control.f90 +22 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-default-none-removed-control.f90 +18 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-default-shared-control.f90 +18 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-firstprivate-removed-control.f90 +15 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-to-scalar-reduction-mapped-control.f90 +17 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-to-scalar-removed-control.f90 +17 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-tofrom-lastprivate-control.f90 +15 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-depend-explicit-map-control.f90 +22 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-depend-removed-control.f90 +22 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-distribute-end-distribute-control.f90 +16 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-distribute-parallel-num-threads-removed-control.f90 +26 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-distribute-parallel-removed-control.f90 +22 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-distribute-simd-no-end-directive-control.f90 +15 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-explicit-length-character-dummy-control.f90 +18 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-loop-character-array-value-control.f90 +23 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-loop-character-distribute-control.f90 +20 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-map-always-first-control.f90 +15 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-map-always-removed-control.f90 +15 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-num-threads-removed-control.f90 +12 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-firstprivate-dropped-control.f90 +15 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-single-nowait-control.f90 +13 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-split-control.f90 +15 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-collapse-split-control.f90 +21 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-end-directive-control.f90 +14 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-no-collapse-control.f90 +19 -0
- offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-split-no-end-directive-control.f90 +15 -0
- offload/_root/data/findings/fuzz/gcc-declare-reduction-module-not-found.f90 +66 -0
- offload/_root/data/findings/fuzz/gcc-strided-target-update-rejected.f90 +58 -0
- offload/_root/data/findings/fuzz/gcc-target-simd-map-nontemporal-rejected.f90 +54 -0
- offload/_root/data/findings/fuzz/nvhpc-allocatable-component-implicit-map-illegal-address.f90 +84 -0
- offload/_root/data/findings/fuzz/nvhpc-assumed-length-character-dummy-map-ice.f90 +69 -0
- offload/_root/data/findings/fuzz/nvhpc-default-none-reduction-lastprivate-fort1-crash.f90 +70 -0
- offload/_root/data/findings/fuzz/nvhpc-defaultmap-firstprivate-lastprivate-ice.f90 +71 -0
- offload/_root/data/findings/fuzz/nvhpc-defaultmap-to-scalar-reduction-lost.f90 +82 -0
- offload/_root/data/findings/fuzz/nvhpc-depend-implicit-map-illegal-address.f90 +81 -0
- offload/_root/data/findings/fuzz/nvhpc-distribute-parallel-num-threads-writes-lost.f90 +79 -0
- offload/_root/data/findings/fuzz/nvhpc-end-distribute-simd-rejected.f90 +70 -0
- offload/_root/data/findings/fuzz/nvhpc-loop-character-achar-unsupported.f90 +75 -0
- offload/_root/data/findings/fuzz/nvhpc-map-always-after-map-to-not-copied-back.f90 +70 -0
- offload/_root/data/findings/fuzz/nvhpc-num-threads-reduction-identity-lost.f90 +54 -0
- offload/_root/data/findings/fuzz/nvhpc-target-parallel-firstprivate-translate-failure.f90 +66 -0
- offload/_root/data/findings/fuzz/nvhpc-target-parallel-single-hang.f90 +68 -0
- offload/_root/data/findings/fuzz/nvhpc-target-simd-collapse-translate-failure.f90 +73 -0
- offload/_root/data/findings/fuzz/nvhpc-target-simd-no-end-directive-rejected.f90 +68 -0
- offload/_root/data/findings/fuzz/par-s1-2082-gcc_g90.f90 +71 -0
- offload/_root/data/findings/fuzz/s1-2370-cce21.f90 +67 -0
- offload/_root/data/findings/fuzz/s1-2592-cce21.f90 +56 -0
- offload/_root/data/findings/fuzz/s1-3463-cce21.f90 +92 -0
- offload/_root/data/findings/fuzz/s1-4339-afar.f90 +79 -0
- offload/_root/data/findings/fuzz/s1-6085-cce21.f90 +96 -0
- offload/_root/data/findings/fuzz/s1-6760-cce20.f90 +65 -0
- offload/_root/data/findings/fuzz/s1-6888-cce21.f90 +76 -0
- offload/_root/data/findings/fuzz/s1-7882-cce20.f90 +63 -0
- offload/_root/data/findings/fuzz/s1-8634-cce21.f90 +45 -0
- offload/_root/data/findings/fuzz/s1-91-cce21.f90 +92 -0
- offload/_root/data/findings/fuzz/s1-9443-afar.f90 +59 -0
- offload/_root/data/findings/fuzz/s1-9914-cce19.f90 +78 -0
- offload/_root/data/findings/gcc/controls/gcc-acc-c-detach-control.c +34 -0
- offload/_root/data/findings/gcc/controls/gcc-acc-detach-control.f90 +26 -0
- offload/_root/data/findings/gcc/controls/gcc-defaultmap-to-pointer-control.f90 +31 -0
- offload/_root/data/findings/gcc/controls/gcc-target-in-task-control.c +26 -0
- offload/_root/data/findings/gcc/controls/gcc-target-in-task-control.f90 +21 -0
- offload/_root/data/findings/gcc/gcc-acc-bind-device-type-rejected.f90 +71 -0
- offload/_root/data/findings/gcc/gcc-acc-c-bind-device-type-rejected.c +76 -0
- offload/_root/data/findings/gcc/gcc-acc-c-detach-delete-attach-underflow.c +74 -0
- offload/_root/data/findings/gcc/gcc-acc-c-gang-dim-rejected.c +79 -0
- offload/_root/data/findings/gcc/gcc-acc-c-link-in-routine-rejected.c +82 -0
- offload/_root/data/findings/gcc/gcc-acc-detach-delete-attach-underflow.f90 +66 -0
- offload/_root/data/findings/gcc/gcc-acc-gang-dim-collapse-force-rejected.f90 +69 -0
- offload/_root/data/findings/gcc/gcc-acc-init-set-shutdown-rejected.f90 +70 -0
- offload/_root/data/findings/gcc/gcc-acc-link-in-routine-rejected.f90 +82 -0
- offload/_root/data/findings/gcc/gcc-acc-use-device-allocatable-rejected.f90 +88 -0
- offload/_root/data/findings/gcc/gcc-c-motion-mapper-rejected.c +110 -0
- offload/_root/data/findings/gcc/gcc-c-omp60-undocumented-rejected.c +76 -0
- offload/_root/data/findings/gcc/gcc-c-omp60-unimplemented-rejected.c +119 -0
- offload/_root/data/findings/gcc/gcc-c-target-in-task-mandatory-device-not-found.c +87 -0
- offload/_root/data/findings/gcc/gcc-c-uses-allocators-traits-unimplemented.c +85 -0
- offload/_root/data/findings/gcc/gcc-declare-mapper-rejected.f90 +85 -0
- offload/_root/data/findings/gcc/gcc-defaultmap-to-pointer-copy-back.f90 +66 -0
- offload/_root/data/findings/gcc/gcc-loop-bind-default-none-rejected.f90 +93 -0
- offload/_root/data/findings/gcc/gcc-omp60-undocumented-rejected.f90 +72 -0
- offload/_root/data/findings/gcc/gcc-omp60-unimplemented-rejected.f90 +112 -0
- offload/_root/data/findings/gcc/gcc-target-in-task-mandatory-device-not-found.f90 +83 -0
- offload/_root/data/findings/gcc/gcc-uses-allocators-traits-unimplemented.f90 +78 -0
- offload/_root/data/findings/harvest/afar-flang-strided-target-update.f90 +96 -0
- offload/_root/data/findings/harvest/cce-acc-declare-create-module-allocatable-xnack1-fault.f90 +58 -0
- offload/_root/data/findings/harvest/cce-c-implicit-struct-map-partly-present.c +100 -0
- offload/_root/data/findings/harvest/cce-c-strided-target-update.c +74 -0
- offload/_root/data/findings/harvest/cce-ftn-target-parallel-thread-query-ice.f90 +67 -0
- offload/_root/data/findings/harvest/cce-named-constant-array-declare-target-routine-rejected.f90 +69 -0
- offload/_root/data/findings/harvest/cce-use-device-ptr-c-ptr-not-converted.f90 +64 -0
- offload/_root/data/findings/harvest/cce21-declare-target-link-module-variable-write-lost.f90 +63 -0
- offload/_root/data/findings/harvest/cce21-internal-procedure-calls-internal-in-target-fault.f90 +71 -0
- offload/_root/data/findings/harvest/controls/cce-c-implicit-struct-map-partly-present-target-only-control.c +22 -0
- offload/_root/data/findings/harvest/controls/cce-c-implicit-struct-map-partly-present-whole-control.c +23 -0
- offload/_root/data/findings/harvest/controls/gcc-acc-declare-create-allocatable-control.f90 +34 -0
- offload/_root/data/findings/harvest/controls/gcc-c-same-item-two-maps-control.c +17 -0
- offload/_root/data/findings/harvest/controls/gcc-c-target-data-struct-pointer-section-control.c +27 -0
- offload/_root/data/findings/harvest/controls/gcc-c-target-data-two-maps-control.c +20 -0
- offload/_root/data/findings/harvest/controls/gcc-same-item-two-maps-control.f90 +16 -0
- offload/_root/data/findings/harvest/controls/gcc-teams-simd-matmul-allocatable-control.f90 +27 -0
- offload/_root/data/findings/harvest/gcc-acc-declare-create-allocatable-not-mapped.f90 +66 -0
- offload/_root/data/findings/harvest/gcc-c-same-item-two-maps-rejected.c +45 -0
- offload/_root/data/findings/harvest/gcc-c-strided-section-rejected.c +70 -0
- offload/_root/data/findings/harvest/gcc-c-target-data-struct-pointer-section-ice.c +78 -0
- offload/_root/data/findings/harvest/gcc-c-target-data-two-maps-ice.c +49 -0
- offload/_root/data/findings/harvest/gcc-same-item-two-maps-rejected.f90 +46 -0
- offload/_root/data/findings/harvest/gcc-teams-simd-matmul-allocatable-ice.f90 +53 -0
- offload/_root/data/findings/harvest/nvhpc-c-target-data-if-false-use-device-ptr-garbage.c +49 -0
- offload/_root/data/findings/harvest/nvhpc-named-constant-array-declare-target-routine-rejected.f90 +65 -0
- offload/_root/data/findings/harvest/nvhpc-use-device-ptr-c-ptr-not-found.f90 +60 -0
- offload/_root/data/findings/harvest/nvhpc2511-target-nowait-in-parallel-for-ice.c +59 -0
- offload/_root/data/findings/hecbench/controls/f16-ctl-float-array.c +28 -0
- offload/_root/data/findings/hecbench/controls/pc-ctl-builtin-popcount.c +37 -0
- offload/_root/data/findings/hecbench/controls/pc-ctl-shift-sum.c +43 -0
- offload/_root/data/findings/hecbench/gcc-c-float16-array-in-target-lto-ice.c +65 -0
- offload/_root/data/findings/hecbench/gcc-c-swar-popcount-assembler-error.c +80 -0
- offload/_root/data/findings/index.yaml +2453 -0
- offload/_root/data/findings/malloc/afar-device-malloc-in-kernel-corrupts-records.c +371 -0
- offload/_root/data/findings/malloc/controls/afar-first-use-malloc-direct.c +52 -0
- offload/_root/data/findings/malloc/controls/afar-first-use-malloc-fence.c +57 -0
- offload/_root/data/findings/malloc/controls/afar-first-use-malloc-flush.c +57 -0
- offload/_root/data/findings/malloc/controls/afar-first-use-malloc-stack.c +52 -0
- offload/_root/data/findings/multithread-allocatable-section-maps.f90 +91 -0
- offload/_root/data/findings/nested/afar-cce-c-call-result-member-in-target-rejected.c +69 -0
- offload/_root/data/findings/nested/afar-cce-c-update-struct-and-member-rejected.c +92 -0
- offload/_root/data/findings/nested/afar-flang-pointer-root-allocatable-component-enter-data-fault.f90 +121 -0
- offload/_root/data/findings/nested/cce-c-struct-and-nested-pointee-sections-ice.c +79 -0
- offload/_root/data/findings/nested/cce-fortran-nested-allocatable-component-copy-fault.f90 +64 -0
- offload/_root/data/findings/nested/cce-fortran-pointer-to-type-with-allocatable-scalar-component-typed-transfer.f90 +93 -0
- offload/_root/data/findings/nested/cce-fortran-update-to-pointer-root-allocatable-scalar-component-no-accelerator-object.f90 +80 -0
- offload/_root/data/findings/nested/controls/c3-ctl-nested-data.c +27 -0
- offload/_root/data/findings/nested/controls/c5-acc-serial-struct-and-array.c +26 -0
- offload/_root/data/findings/nested/controls/e2-ctl-two-directives.c +42 -0
- offload/_root/data/findings/nested/controls/e3-ctl-attach-clause.c +42 -0
- offload/_root/data/findings/nested/controls/f3-pointer-array-only.c +33 -0
- offload/_root/data/findings/nested/controls/f5-ctl-copyout-exit.c +33 -0
- offload/_root/data/findings/nested/controls/f6-ctl-pointer-to-struct-array.c +28 -0
- offload/_root/data/findings/nested/controls/g2-ctl-allocatable.f90 +34 -0
- offload/_root/data/findings/nested/controls/g2-ctl-entered-to.f90 +34 -0
- offload/_root/data/findings/nested/controls/g3-ctl-from-struct-no-element.c +27 -0
- offload/_root/data/findings/nested/controls/g3-ptrs-two-elements-to.c +27 -0
- offload/_root/data/findings/nested/controls/g3-ptrs-two-elements-tofrom.c +27 -0
- offload/_root/data/findings/nested/controls/g5-ctl-element-pointers-only.f90 +36 -0
- offload/_root/data/findings/nested/controls/g5-ctl-root-pointer-only.f90 +36 -0
- offload/_root/data/findings/nested/controls/gp2-ctl-no-mapper-explicit-maps.c +24 -0
- offload/_root/data/findings/nested/controls/gt2-ctl-no-always.c +26 -0
- offload/_root/data/findings/nested/controls/gt3-ctl-always-on-structure-only.c +26 -0
- offload/_root/data/findings/nested/controls/j1-embedded-struct-pointer-to-struct.c +24 -0
- offload/_root/data/findings/nested/controls/j2-ctl-pointer-instead-of-embedded.c +24 -0
- offload/_root/data/findings/nested/controls/j6-ctl-struct-and-one-pointee-level.c +23 -0
- offload/_root/data/findings/nested/controls/j7-ctl-struct-and-embedded-pointee.c +24 -0
- offload/_root/data/findings/nested/controls/m2-ctl-variable-root.f90 +32 -0
- offload/_root/data/findings/nested/controls/m3-ctl-fixed-array-component.f90 +32 -0
- offload/_root/data/findings/nested/controls/m5-ctl-no-enter-data.f90 +33 -0
- offload/_root/data/findings/nested/controls/n8-ctl-fixed-array-in-component.f90 +33 -0
- offload/_root/data/findings/nested/controls/n9-ctl-allocatable-in-the-variable.f90 +33 -0
- offload/_root/data/findings/nested/controls/ns4-ctl-two-directives-struct-then-pointee.c +27 -0
- offload/_root/data/findings/nested/controls/ns8-ctl-enter-together-exit-split.c +26 -0
- offload/_root/data/findings/nested/controls/nu3-ctl-update-pointee-only.c +28 -0
- offload/_root/data/findings/nested/controls/p2-ctl-pointer-variable.c +27 -0
- offload/_root/data/findings/nested/controls/p3-ctl-direct-member.c +26 -0
- offload/_root/data/findings/nested/controls/q2-ctl-fixed-array.f90 +37 -0
- offload/_root/data/findings/nested/controls/q3-ctl-allocatable-component-of-the-variable.f90 +38 -0
- offload/_root/data/findings/nested/controls/ta2-ctl-no-allocatable-component.f90 +42 -0
- offload/_root/data/findings/nested/controls/ta3-ctl-allocatable-scalar-in-the-variable.f90 +38 -0
- offload/_root/data/findings/nested/controls/ta4-ctl-pointer-component-only.f90 +42 -0
- offload/_root/data/findings/nested/controls/u3-ctl-update-member-only.c +24 -0
- offload/_root/data/findings/nested/controls/u4-ctl-two-updates.c +25 -0
- offload/_root/data/findings/nested/controls/u5-ctl-same-list-in-map.c +25 -0
- offload/_root/data/findings/nested/controls/ua2-ctl-variable-root.f90 +37 -0
- offload/_root/data/findings/nested/controls/ua4-ctl-to-in-place-of-alloc-and-update.f90 +37 -0
- offload/_root/data/findings/nested/controls/v2-ctl-parent-first.c +25 -0
- offload/_root/data/findings/nested/controls/v4-ctl-embedded-member.c +24 -0
- offload/_root/data/findings/nested/gcc-acc-c-exit-data-of-a-pointer-array-element-target-hangs.c +83 -0
- offload/_root/data/findings/nested/gcc-acc-c-parent-and-shared-pointee-one-directive.c +88 -0
- offload/_root/data/findings/nested/gcc-acc-c-struct-and-member-array-one-directive.c +84 -0
- offload/_root/data/findings/nested/gcc-c-always-on-pointer-member-section-ice.c +75 -0
- offload/_root/data/findings/nested/gcc-c-declare-mapper-pointer-member-section-gpu-fault.c +93 -0
- offload/_root/data/findings/nested/gcc-c-from-struct-and-pointee-section-rejected.c +83 -0
- offload/_root/data/findings/nested/gcc-fortran-pointer-component-alloc-bounds-lost.f90 +62 -0
- offload/_root/data/findings/nested/gcc-fortran-root-and-element-pointer-components-ice.f90 +77 -0
- offload/_root/data/findings/nested/nvhpc-c-pointee-before-parent-in-one-map-list-copy-fault.c +55 -0
- offload/_root/data/findings/nested/nvhpc-c-update-from-structure-overwrites-attached-pointer-segv.c +86 -0
- offload/_root/data/findings/nvhpc-acc-atomic-update-sum-fort2-crash.f90 +53 -0
- offload/_root/data/findings/nvhpc-c-acc-atomic-update-sum-ice.c +43 -0
- offload/_root/data/findings/nvhpc-c-dist-schedule-chunk-compile-hang.c +41 -0
- offload/_root/data/findings/nvhpc-c-map-present-ignored.c +42 -0
- offload/_root/data/findings/nvhpc-c-ordered-in-target-nvcpfe-crash.c +92 -0
- offload/_root/data/findings/nvhpc-c-parallel-for-firstprivate-in-target.c +62 -0
- offload/_root/data/findings/nvhpc-c-parallel-if-in-target-nvvm-ice.c +56 -0
- offload/_root/data/findings/nvhpc-defaultmap-firstprivate-explicit-map.f90 +45 -0
- offload/_root/data/findings/nvhpc-defaultmap-from-allocatable-indexing.f90 +60 -0
- offload/_root/data/findings/nvhpc-depend-inoutset-ignored.f90 +64 -0
- offload/_root/data/findings/nvhpc-dist-schedule-chunk-illegal-address.f90 +52 -0
- offload/_root/data/findings/nvhpc-managed-acc-shutdown-host-access.f90 +42 -0
- offload/_root/data/findings/nvhpc-parallel-if-in-target-nvvm-ice.f90 +60 -0
- offload/_root/data/findings/oop/afar-final-dealloc-device-link.f90 +85 -0
- offload/_root/data/findings/oop/afar-pdt-length-parameter-not-implemented.f90 +65 -0
- offload/_root/data/findings/oop/cce-class-is-device-link.f90 +86 -0
- offload/_root/data/findings/oop/cce-copy-alloc-component-section-fault.f90 +73 -0
- offload/_root/data/findings/oop/cce-copy-parent-to-component-tofrom-lost.f90 +65 -0
- offload/_root/data/findings/oop/cce-copy-second-member-section-lost.f90 +65 -0
- offload/_root/data/findings/oop/cce-element-component-map-lost.f90 +64 -0
- offload/_root/data/findings/oop/cce-final-dealloc-device-abort.f90 +85 -0
- offload/_root/data/findings/oop/cce-pdt-default-mapper-rejected.f90 +71 -0
- offload/_root/data/findings/oop/cce-polymorphic-dispatch-device-link.f90 +100 -0
- offload/_root/data/findings/oop/cce-section-of-element-component-overlap.f90 +76 -0
- offload/_root/data/findings/oop/cce-select-type-guard-not-taken.f90 +91 -0
- offload/_root/data/findings/oop/cce-udr-derived-type-unsupported.f90 +69 -0
- offload/_root/data/findings/oop/cce21-element-component-map-lost.f90 +62 -0
- offload/_root/data/findings/oop/controls/alloccomp-comp-only.f90 +44 -0
- offload/_root/data/findings/oop/controls/alloccomp-whole-explicit-component.f90 +50 -0
- offload/_root/data/findings/oop/controls/alloccomp-whole.f90 +49 -0
- offload/_root/data/findings/oop/controls/elemsec-element.f90 +47 -0
- offload/_root/data/findings/oop/controls/final-local.f90 +64 -0
- offload/_root/data/findings/oop/controls/host-class-star-select-type.f90 +58 -0
- offload/_root/data/findings/oop/controls/host-firstprivate-defined-assignment.f90 +54 -0
- offload/_root/data/findings/oop/controls/host-lastprivate-defined-assignment.f90 +58 -0
- offload/_root/data/findings/oop/controls/host-private-finalization.f90 +51 -0
- offload/_root/data/findings/oop/controls/host-select-type.f90 +65 -0
- offload/_root/data/findings/oop/controls/parent-and-comp-component-only.f90 +45 -0
- offload/_root/data/findings/oop/controls/pdt-kind.f90 +46 -0
- offload/_root/data/findings/oop/controls/pdt-len-host.f90 +43 -0
- offload/_root/data/findings/oop/controls/pdt-len-unparameterized.f90 +46 -0
- offload/_root/data/findings/oop/controls/poly-dispatch-static.f90 +75 -0
- offload/_root/data/findings/oop/controls/section-alloc-whole-component.f90 +49 -0
- offload/_root/data/findings/oop/controls/section-element-whole-array.f90 +50 -0
- offload/_root/data/findings/oop/controls/section-element-whole-component.f90 +50 -0
- offload/_root/data/findings/oop/controls/section-fixed.f90 +43 -0
- offload/_root/data/findings/oop/controls/tbp-override.f90 +64 -0
- offload/_root/data/findings/oop/gcc-acc-parent-and-member-data-rejected.f90 +63 -0
- offload/_root/data/findings/oop/gcc-pdt-length-parameter-abort.f90 +68 -0
- offload/_root/data/findings/oop/gcc-polymorphic-dispatch-abort.f90 +97 -0
- offload/_root/data/findings/oop/gcc-vtab-not-marked-for-offload.f90 +94 -0
- offload/_root/data/findings/oop/nvhpc-copy-alloc-component-illegal-address.f90 +76 -0
- offload/_root/data/findings/oop/nvhpc-copy-pdt-length-parameter-illegal-address.f90 +69 -0
- offload/_root/data/findings/oop/nvhpc-named-mapper-rejected.f90 +65 -0
- offload/_root/data/findings/oop/nvhpc-polymorphic-dispatch-translate-failure.f90 +90 -0
- offload/_root/data/findings/oop/nvhpc-polymorphism-runtime-unsupported.f90 +94 -0
- offload/_root/data/findings/oop/nvhpc-type-bound-call-rejected.f90 +89 -0
- offload/_root/data/findings/oop/nvhpc-udr-derived-type-rejected.f90 +67 -0
- offload/_root/data/findings/reviews/afar-c-error-directive-in-target-link.json +217 -0
- offload/_root/data/findings/reviews/afar-c-lastprivate-distribute-parallel-for-small-type.json +113 -0
- offload/_root/data/findings/reviews/afar-c-teams-distribute-reduction-first-team.json +130 -0
- offload/_root/data/findings/reviews/afar-c-update-iterator-copy-mode.json +113 -0
- offload/_root/data/findings/reviews/afar-cce19-character-defaultmap.json +292 -0
- offload/_root/data/findings/reviews/afar-clang-requires-device-safesync-hang.json +191 -0
- offload/_root/data/findings/reviews/afar-flang-firstprivate-map-two-targets.json +130 -0
- offload/_root/data/findings/reviews/afar-flang-loop-bind-teams-reduction.json +126 -0
- offload/_root/data/findings/reviews/afar-flang-task-reduction-max.json +113 -0
- offload/_root/data/findings/reviews/afar-flang-thread-limit-target-parallel-do.json +113 -0
- offload/_root/data/findings/reviews/afar-loop-bind-thread-in-teams.json +191 -0
- offload/_root/data/findings/reviews/afar-nontemporal-assumed-shape-ice.json +113 -0
- offload/_root/data/findings/reviews/afar-udr-derived-type-link.json +113 -0
- offload/_root/data/findings/reviews/afar-xnack1-atomic-min-nested-parallel.json +113 -0
- offload/_root/data/findings/reviews/afar-xnack1-target-is-present.json +113 -0
- offload/_root/data/findings/reviews/apps--afar-cce-teams-private-array-nested-parallel-wrong.json +113 -0
- offload/_root/data/findings/reviews/apps--cce20-device-link-infer-address-spaces-crash.json +113 -0
- offload/_root/data/findings/reviews/apps--cce21-device-link-agpr-copy-mfma-assert.json +113 -0
- offload/_root/data/findings/reviews/apps--cce21-private-array-loaded-subscript-wrong.json +113 -0
- offload/_root/data/findings/reviews/apps--gcc-acc-c-tile-partial-tiles-wrong.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-c-ordered-doacross-link.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-c-reduction-task-link.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-absent-optional-target-crash.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-critical-target-parallel-wrong.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-dist-schedule-chunk.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-linear-parallel-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-named-critical-link.json +126 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-ordered-wrong.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-reduction-minus-rejected.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-sections-in-target-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--afar-flang-workdistribute-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--c-allocate-const-mem-firstprivate-wrong.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-acc-character-dummy-routine-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-acc-loop-seq-in-routine-wrong.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-allocators-stack-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-c-allocate-align-link.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-c-allocate-allocator-modifier-rejected.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-c-dist-schedule-chunk.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-c-f-pointer-device-link.json +130 -0
- offload/_root/data/findings/reviews/catalog--cce-c-long-double-ice.json +217 -0
- offload/_root/data/findings/reviews/catalog--cce-c-map-iterator-ice.json +217 -0
- offload/_root/data/findings/reviews/catalog--cce-c-recursive-function-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-c-sections-in-target-wrong.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-flang-allocate-in-target-crash.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-flang-lastprivate-parallel-in-seq-loop-wrong.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-flang-stop-in-target-crash.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-iterator-link.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-linear-lastprivate-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-reduction-inscan-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce-reduction-task-link.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce19-reduction-task-addrspacecast-ice.json +113 -0
- offload/_root/data/findings/reviews/catalog--cce20-c-defaultmap-private-storage-rejected.json +217 -0
- offload/_root/data/findings/reviews/catalog--cce20-map-self-rejected.json +204 -0
- offload/_root/data/findings/reviews/catalog--cce21-c-target-loop-ice.json +126 -0
- offload/_root/data/findings/reviews/catalog--defaultmap-present-private-array-abort.json +236 -0
- offload/_root/data/findings/reviews/catalog--nvhpc-acc-associate-illegal-address.json +113 -0
- offload/_root/data/findings/reviews/catalog--nvhpc-c-function-pointer-kernel-missing.json +268 -0
- offload/_root/data/findings/reviews/cce-acc-init-set-runtime-assert.json +113 -0
- offload/_root/data/findings/reviews/cce-acc-reduction-200-int8-scalars-wrong.json +113 -0
- offload/_root/data/findings/reviews/cce-acc-routine-bind-module-ice.json +113 -0
- offload/_root/data/findings/reviews/cce-c-dist-schedule-segv.json +113 -0
- offload/_root/data/findings/reviews/cce-c-map-delete-refcount.json +149 -0
- offload/_root/data/findings/reviews/cce-c-map-present-assert.json +126 -0
- offload/_root/data/findings/reviews/cce-c-openmp45-device-link.json +113 -0
- offload/_root/data/findings/reviews/cce-c-parallel-for-in-target.json +141 -0
- offload/_root/data/findings/reviews/cce-mapper-next-map-copy-back.json +208 -0
- offload/_root/data/findings/reviews/cce-uses-allocators-traits-omp50.json +191 -0
- offload/_root/data/findings/reviews/cce19-c-reduction-63-scalars-one-wrong.json +113 -0
- offload/_root/data/findings/reviews/cce19-target-parallel-guarded-loop.json +113 -0
- offload/_root/data/findings/reviews/cce19-target-parallel-single-ice.json +113 -0
- offload/_root/data/findings/reviews/cce21-alloc-2e32-sum-wrong.json +113 -0
- offload/_root/data/findings/reviews/cce21-defaultmap-aggregate-flag.json +210 -0
- offload/_root/data/findings/reviews/cce21-in-reduction-assumed-shape-write-lost.json +113 -0
- offload/_root/data/findings/reviews/cce21-in-reduction-taskwait-link.json +113 -0
- offload/_root/data/findings/reviews/clang-c-declare-target-to-omp52.json +113 -0
- offload/_root/data/findings/reviews/clang-c-linear-directive-name-hang.json +113 -0
- offload/_root/data/findings/reviews/clang-c-shared-declare-target-combined.json +132 -0
- offload/_root/data/findings/reviews/dataenv--cce-value-dummy-target-write-visible.json +113 -0
- offload/_root/data/findings/reviews/defaultmap-none-loop-variable.json +113 -0
- offload/_root/data/findings/reviews/fortran-schedule-static-in-target.json +113 -0
- offload/_root/data/findings/reviews/fresh--cce-common-block-name-in-map-rejected.json +113 -0
- offload/_root/data/findings/reviews/fresh--cce-list-directed-print-in-target-copy-crash.json +217 -0
- offload/_root/data/findings/reviews/fresh--cce19-acc-automatic-array-copyout-copy-crash.json +113 -0
- offload/_root/data/findings/reviews/fresh--cce21-combined-if-runtime-expr-loop-skipped.json +113 -0
- offload/_root/data/findings/reviews/fresh--nvhpc-acc-gang-worker-collapse-nested-vector-reduction-lost.json +113 -0
- offload/_root/data/findings/reviews/fresh--nvhpc-teams-loop-module-allocatable-assign-fort2-crash.json +113 -0
- offload/_root/data/findings/reviews/fuzz--1505-cce20.json +113 -0
- offload/_root/data/findings/reviews/fuzz--1540-afar.json +113 -0
- offload/_root/data/findings/reviews/fuzz--1978-cce19.json +130 -0
- offload/_root/data/findings/reviews/fuzz--2334-cce19.json +113 -0
- offload/_root/data/findings/reviews/fuzz--591-cce19.json +147 -0
- offload/_root/data/findings/reviews/fuzz--650-afar.json +113 -0
- offload/_root/data/findings/reviews/fuzz--916-afar.json +130 -0
- offload/_root/data/findings/reviews/fuzz--98-cce19.json +113 -0
- offload/_root/data/findings/reviews/fuzz--b1-121-afar.json +160 -0
- offload/_root/data/findings/reviews/fuzz--b2-209-cce19.json +141 -0
- offload/_root/data/findings/reviews/fuzz--b2-68-afar.json +113 -0
- offload/_root/data/findings/reviews/fuzz--b2-85-cce20.json +217 -0
- offload/_root/data/findings/reviews/fuzz--b3-188-cce19.json +113 -0
- offload/_root/data/findings/reviews/fuzz--b3-278-cce19.json +212 -0
- offload/_root/data/findings/reviews/fuzz--b3-54-afar.json +113 -0
- offload/_root/data/findings/reviews/fuzz--b3-61-cce20.json +191 -0
- offload/_root/data/findings/reviews/fuzz--b4-86-cce19.json +113 -0
- offload/_root/data/findings/reviews/fuzz--gcc-declare-reduction-module-not-found.json +113 -0
- offload/_root/data/findings/reviews/fuzz--gcc-target-simd-map-nontemporal-rejected.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-allocatable-component-implicit-map-illegal-address.json +141 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-assumed-length-character-dummy-map-ice.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-default-none-reduction-lastprivate-fort1-crash.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-defaultmap-firstprivate-lastprivate-ice.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-defaultmap-to-scalar-reduction-lost.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-depend-implicit-map-illegal-address.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-distribute-parallel-num-threads-writes-lost.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-end-distribute-simd-rejected.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-loop-character-achar-unsupported.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-map-always-after-map-to-not-copied-back.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-num-threads-reduction-identity-lost.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-target-parallel-firstprivate-translate-failure.json +191 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-target-parallel-single-hang.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-target-simd-collapse-translate-failure.json +113 -0
- offload/_root/data/findings/reviews/fuzz--nvhpc-target-simd-no-end-directive-rejected.json +113 -0
- offload/_root/data/findings/reviews/fuzz--par-s1-2082-gcc_g90.json +126 -0
- offload/_root/data/findings/reviews/fuzz--s1-2370-cce21.json +113 -0
- offload/_root/data/findings/reviews/fuzz--s1-2592-cce21.json +113 -0
- offload/_root/data/findings/reviews/fuzz--s1-3463-cce21.json +113 -0
- offload/_root/data/findings/reviews/fuzz--s1-6760-cce20.json +130 -0
- offload/_root/data/findings/reviews/fuzz--s1-6888-cce21.json +113 -0
- offload/_root/data/findings/reviews/fuzz--s1-7882-cce20.json +113 -0
- offload/_root/data/findings/reviews/fuzz--s1-8634-cce21.json +113 -0
- offload/_root/data/findings/reviews/fuzz--s1-91-cce21.json +113 -0
- offload/_root/data/findings/reviews/fuzz--s1-9443-afar.json +113 -0
- offload/_root/data/findings/reviews/fuzz--s1-9914-cce19.json +141 -0
- offload/_root/data/findings/reviews/gcc--gcc-acc-bind-device-type-rejected.json +113 -0
- offload/_root/data/findings/reviews/gcc--gcc-acc-detach-delete-attach-underflow.json +314 -0
- offload/_root/data/findings/reviews/gcc--gcc-acc-gang-dim-collapse-force-rejected.json +113 -0
- offload/_root/data/findings/reviews/gcc--gcc-acc-init-set-shutdown-rejected.json +113 -0
- offload/_root/data/findings/reviews/gcc--gcc-acc-link-in-routine-rejected.json +113 -0
- offload/_root/data/findings/reviews/gcc--gcc-acc-use-device-allocatable-rejected.json +113 -0
- offload/_root/data/findings/reviews/gcc--gcc-c-motion-mapper-rejected.json +113 -0
- offload/_root/data/findings/reviews/gcc--gcc-c-omp60-undocumented-rejected.json +217 -0
- offload/_root/data/findings/reviews/gcc--gcc-c-omp60-unimplemented-rejected.json +236 -0
- offload/_root/data/findings/reviews/gcc--gcc-c-target-in-task-mandatory-device-not-found.json +236 -0
- offload/_root/data/findings/reviews/gcc--gcc-c-uses-allocators-traits-unimplemented.json +113 -0
- offload/_root/data/findings/reviews/gcc--gcc-declare-mapper-rejected.json +113 -0
- offload/_root/data/findings/reviews/gcc--gcc-defaultmap-to-pointer-copy-back.json +217 -0
- offload/_root/data/findings/reviews/gcc--gcc-loop-bind-default-none-rejected.json +113 -0
- offload/_root/data/findings/reviews/harvest--afar-flang-strided-target-update.json +141 -0
- offload/_root/data/findings/reviews/harvest--cce-acc-declare-create-module-allocatable-xnack1-fault.json +113 -0
- offload/_root/data/findings/reviews/harvest--cce-c-implicit-struct-map-partly-present.json +217 -0
- offload/_root/data/findings/reviews/harvest--cce-c-strided-target-update.json +141 -0
- offload/_root/data/findings/reviews/harvest--cce-ftn-target-parallel-thread-query-ice.json +130 -0
- offload/_root/data/findings/reviews/harvest--cce-named-constant-array-declare-target-routine-rejected.json +113 -0
- offload/_root/data/findings/reviews/harvest--cce-use-device-ptr-c-ptr-not-converted.json +113 -0
- offload/_root/data/findings/reviews/harvest--cce21-declare-target-link-module-variable-write-lost.json +113 -0
- offload/_root/data/findings/reviews/harvest--cce21-internal-procedure-calls-internal-in-target-fault.json +158 -0
- offload/_root/data/findings/reviews/harvest--gcc-acc-declare-create-allocatable-not-mapped.json +204 -0
- offload/_root/data/findings/reviews/harvest--gcc-c-same-item-two-maps-rejected.json +143 -0
- offload/_root/data/findings/reviews/harvest--gcc-c-strided-section-rejected.json +164 -0
- offload/_root/data/findings/reviews/harvest--gcc-c-target-data-struct-pointer-section-ice.json +113 -0
- offload/_root/data/findings/reviews/harvest--gcc-c-target-data-two-maps-ice.json +113 -0
- offload/_root/data/findings/reviews/harvest--gcc-teams-simd-matmul-allocatable-ice.json +113 -0
- offload/_root/data/findings/reviews/harvest--nvhpc-c-target-data-if-false-use-device-ptr-garbage.json +113 -0
- offload/_root/data/findings/reviews/harvest--nvhpc-named-constant-array-declare-target-routine-rejected.json +126 -0
- offload/_root/data/findings/reviews/harvest--nvhpc-use-device-ptr-c-ptr-not-found.json +113 -0
- offload/_root/data/findings/reviews/harvest--nvhpc2511-target-nowait-in-parallel-for-ice.json +130 -0
- offload/_root/data/findings/reviews/hecbench--gcc-c-float16-array-in-target-lto-ice.json +217 -0
- offload/_root/data/findings/reviews/hecbench--gcc-c-swar-popcount-assembler-error.json +126 -0
- offload/_root/data/findings/reviews/malloc--afar-device-malloc-in-kernel-corrupts-records.json +270 -0
- offload/_root/data/findings/reviews/multithread-allocatable-section-maps.json +191 -0
- offload/_root/data/findings/reviews/nested--afar-cce-c-call-result-member-in-target-rejected.json +113 -0
- offload/_root/data/findings/reviews/nested--afar-cce-c-update-struct-and-member-rejected.json +126 -0
- offload/_root/data/findings/reviews/nested--afar-flang-pointer-root-allocatable-component-enter-data-fault.json +191 -0
- offload/_root/data/findings/reviews/nested--cce-c-struct-and-nested-pointee-sections-ice.json +113 -0
- offload/_root/data/findings/reviews/nested--cce-fortran-nested-allocatable-component-copy-fault.json +214 -0
- offload/_root/data/findings/reviews/nested--cce-fortran-pointer-to-type-with-allocatable-scalar-component-typed-transfer.json +191 -0
- offload/_root/data/findings/reviews/nested--cce-fortran-update-to-pointer-root-allocatable-scalar-component-no-accelerator-object.json +297 -0
- offload/_root/data/findings/reviews/nested--gcc-acc-c-exit-data-of-a-pointer-array-element-target-hangs.json +204 -0
- offload/_root/data/findings/reviews/nested--gcc-acc-c-parent-and-shared-pointee-one-directive.json +130 -0
- offload/_root/data/findings/reviews/nested--gcc-acc-c-struct-and-member-array-one-directive.json +141 -0
- offload/_root/data/findings/reviews/nested--gcc-c-always-on-pointer-member-section-ice.json +113 -0
- offload/_root/data/findings/reviews/nested--gcc-c-declare-mapper-pointer-member-section-gpu-fault.json +113 -0
- offload/_root/data/findings/reviews/nested--gcc-c-from-struct-and-pointee-section-rejected.json +113 -0
- offload/_root/data/findings/reviews/nested--gcc-fortran-pointer-component-alloc-bounds-lost.json +217 -0
- offload/_root/data/findings/reviews/nested--gcc-fortran-root-and-element-pointer-components-ice.json +217 -0
- offload/_root/data/findings/reviews/nested--nvhpc-c-pointee-before-parent-in-one-map-list-copy-fault.json +204 -0
- offload/_root/data/findings/reviews/nested--nvhpc-c-update-from-structure-overwrites-attached-pointer-segv.json +191 -0
- offload/_root/data/findings/reviews/nvhpc-c-acc-atomic-update-sum-ice.json +277 -0
- offload/_root/data/findings/reviews/nvhpc-c-dist-schedule-chunk-compile-hang.json +113 -0
- offload/_root/data/findings/reviews/nvhpc-c-map-present-ignored.json +113 -0
- offload/_root/data/findings/reviews/nvhpc-c-ordered-in-target-nvcpfe-crash.json +113 -0
- offload/_root/data/findings/reviews/nvhpc-c-parallel-for-firstprivate-in-target.json +113 -0
- offload/_root/data/findings/reviews/nvhpc-defaultmap-firstprivate-explicit-map.json +113 -0
- offload/_root/data/findings/reviews/nvhpc-defaultmap-from-allocatable-indexing.json +132 -0
- offload/_root/data/findings/reviews/nvhpc-depend-inoutset-ignored.json +113 -0
- offload/_root/data/findings/reviews/nvhpc-dist-schedule-chunk-illegal-address.json +113 -0
- offload/_root/data/findings/reviews/nvhpc-managed-acc-shutdown-host-access.json +113 -0
- offload/_root/data/findings/reviews/nvhpc-parallel-if-in-target-nvvm-ice.json +113 -0
- offload/_root/data/findings/reviews/oop--afar-final-dealloc-device-link.json +132 -0
- offload/_root/data/findings/reviews/oop--afar-pdt-length-parameter-not-implemented.json +113 -0
- offload/_root/data/findings/reviews/oop--cce-class-is-device-link.json +130 -0
- offload/_root/data/findings/reviews/oop--cce-copy-alloc-component-section-fault.json +217 -0
- offload/_root/data/findings/reviews/oop--cce-copy-parent-to-component-tofrom-lost.json +217 -0
- offload/_root/data/findings/reviews/oop--cce-copy-second-member-section-lost.json +113 -0
- offload/_root/data/findings/reviews/oop--cce-element-component-map-lost.json +113 -0
- offload/_root/data/findings/reviews/oop--cce-final-dealloc-device-abort.json +208 -0
- offload/_root/data/findings/reviews/oop--cce-pdt-default-mapper-rejected.json +191 -0
- offload/_root/data/findings/reviews/oop--cce-polymorphic-dispatch-device-link.json +247 -0
- offload/_root/data/findings/reviews/oop--cce-section-of-element-component-overlap.json +113 -0
- offload/_root/data/findings/reviews/oop--cce-select-type-guard-not-taken.json +191 -0
- offload/_root/data/findings/reviews/oop--cce-udr-derived-type-unsupported.json +132 -0
- offload/_root/data/findings/reviews/oop--gcc-acc-parent-and-member-data-rejected.json +141 -0
- offload/_root/data/findings/reviews/oop--gcc-pdt-length-parameter-abort.json +141 -0
- offload/_root/data/findings/reviews/oop--gcc-polymorphic-dispatch-abort.json +217 -0
- offload/_root/data/findings/reviews/oop--gcc-vtab-not-marked-for-offload.json +113 -0
- offload/_root/data/findings/reviews/oop--nvhpc-copy-alloc-component-illegal-address.json +113 -0
- offload/_root/data/findings/reviews/oop--nvhpc-copy-pdt-length-parameter-illegal-address.json +236 -0
- offload/_root/data/findings/reviews/oop--nvhpc-named-mapper-rejected.json +113 -0
- offload/_root/data/findings/reviews/oop--nvhpc-polymorphic-dispatch-translate-failure.json +223 -0
- offload/_root/data/findings/reviews/oop--nvhpc-polymorphism-runtime-unsupported.json +126 -0
- offload/_root/data/findings/reviews/oop--nvhpc-type-bound-call-rejected.json +113 -0
- offload/_root/data/findings/reviews/oop--nvhpc-udr-derived-type-rejected.json +113 -0
- offload/_root/data/findings/reviews/stress--afar-c-lastprivate-combined-target-not-mapped.json +113 -0
- offload/_root/data/findings/reviews/stress--afar-target-scalar-implicit-firstprivate.json +175 -0
- offload/_root/data/findings/reviews/stress--cce-acc-declare-create-scalar-serial-firstprivate.json +113 -0
- offload/_root/data/findings/reviews/stress--cce-c-distribute-lastprivate-lost.json +113 -0
- offload/_root/data/findings/reviews/stress--cce-c-flto-offload-dropped.json +204 -0
- offload/_root/data/findings/reviews/stress--cce-ftn-cif-record-split-abort.json +113 -0
- offload/_root/data/findings/reviews/stress--cce-lastprivate-num-threads-collapse-simd.json +113 -0
- offload/_root/data/findings/reviews/stress--cce-teams-reduction-many-teams-wrap.json +113 -0
- offload/_root/data/findings/reviews/stress--cce21-declare-target-scalar-map-write-lost.json +113 -0
- offload/_root/data/findings/reviews/stress--gcc-declare-target-allocatable-component-ice.json +191 -0
- offload/_root/data/findings/reviews/stress--nvhpc-acc-derived-type-component-not-copied.json +126 -0
- offload/_root/data/findings/reviews/stress--nvhpc-c-lastprivate-teams-distribute-parallel-for-lost.json +113 -0
- offload/_root/data/findings/reviews/stress--nvhpc-declare-target-scalar-write-lost.json +113 -0
- offload/_root/data/findings/reviews/stress--nvhpc-lastprivate-combined-target-not-mapped.json +113 -0
- offload/_root/data/findings/reviews/stress--nvhpc-target-scalar-implicit-firstprivate.json +130 -0
- offload/_root/data/findings/reviews/target-update-sections-in-parallel.json +113 -0
- offload/_root/data/findings/stress/afar-c-lastprivate-combined-target-not-mapped.c +72 -0
- offload/_root/data/findings/stress/afar-target-scalar-implicit-firstprivate.f90 +47 -0
- offload/_root/data/findings/stress/cce-acc-declare-create-scalar-serial-firstprivate.f90 +43 -0
- offload/_root/data/findings/stress/cce-c-distribute-lastprivate-lost.c +52 -0
- offload/_root/data/findings/stress/cce-c-flto-offload-dropped.c +73 -0
- offload/_root/data/findings/stress/cce-ftn-cif-record-split-abort.f90 +109 -0
- offload/_root/data/findings/stress/cce-lastprivate-num-threads-collapse-simd.f90 +66 -0
- offload/_root/data/findings/stress/cce-teams-reduction-many-teams-wrap.f90 +55 -0
- offload/_root/data/findings/stress/cce21-declare-target-scalar-map-write-lost.f90 +58 -0
- offload/_root/data/findings/stress/controls/gcc-declare-target-allocatable-component-control.f90 +29 -0
- offload/_root/data/findings/stress/gcc-declare-target-allocatable-component-ice.f90 +61 -0
- offload/_root/data/findings/stress/nvhpc-acc-derived-type-component-not-copied.f90 +33 -0
- offload/_root/data/findings/stress/nvhpc-c-lastprivate-teams-distribute-parallel-for-lost.c +62 -0
- offload/_root/data/findings/stress/nvhpc-declare-target-scalar-write-lost.f90 +43 -0
- offload/_root/data/findings/stress/nvhpc-lastprivate-combined-target-not-mapped.f90 +60 -0
- offload/_root/data/findings/stress/nvhpc-target-scalar-implicit-firstprivate.f90 +41 -0
- offload/_root/data/findings/target-update-sections-in-parallel.f90 +53 -0
- offload/_root/data/issues.json +1 -0
- offload/_root/data/search.json +1 -0
- offload/_root/data/vendor/checks/build.py +288 -0
- offload/_version.py +24 -0
- offload/canuse.py +88 -0
- offload/cli.py +52 -0
- offload/data.py +85 -0
- offload/engine/__init__.py +0 -0
- offload/engine/acc_c_gen.py +415 -0
- offload/engine/acc_gen.py +1104 -0
- offload/engine/acc_rules.py +656 -0
- offload/engine/apps.py +804 -0
- offload/engine/baseline.py +324 -0
- offload/engine/c_gen.py +883 -0
- offload/engine/c_program.py +913 -0
- offload/engine/c_rules.py +503 -0
- offload/engine/campaign.py +1180 -0
- offload/engine/campaigns/__init__.py +2 -0
- offload/engine/campaigns/hecbench.py +153 -0
- offload/engine/campaigns/nested.py +76 -0
- offload/engine/campaigns/oop.py +61 -0
- offload/engine/canary.py +275 -0
- offload/engine/catalog.py +860 -0
- offload/engine/citations.py +532 -0
- offload/engine/clang_oracle.py +208 -0
- offload/engine/combos.py +234 -0
- offload/engine/confirm/__init__.py +2 -0
- offload/engine/confirm/backlog.py +159 -0
- offload/engine/confirm/claims.py +423 -0
- offload/engine/confirm/collectors.py +665 -0
- offload/engine/confirm/decisions.py +202 -0
- offload/engine/confirm/draft.py +195 -0
- offload/engine/confirm/engine.py +157 -0
- offload/engine/confirm/execute.py +382 -0
- offload/engine/confirm/facts.py +467 -0
- offload/engine/confirm/findings.py +617 -0
- offload/engine/confirm/forms.py +145 -0
- offload/engine/confirm/ingest.py +372 -0
- offload/engine/confirm/jobs.py +215 -0
- offload/engine/confirm/legality.py +323 -0
- offload/engine/confirm/machines.py +254 -0
- offload/engine/confirm/minimize.py +268 -0
- offload/engine/confirm/model.py +249 -0
- offload/engine/confirm/ports.py +107 -0
- offload/engine/confirm/programs.py +222 -0
- offload/engine/confirm/registry.py +151 -0
- offload/engine/confirm/regress.py +278 -0
- offload/engine/confirm/rules.py +565 -0
- offload/engine/confirm/store.py +63 -0
- offload/engine/confirm/triage.py +838 -0
- offload/engine/confirm/validate.py +607 -0
- offload/engine/confirm/witness.py +355 -0
- offload/engine/corpus_check.py +388 -0
- offload/engine/coverage.py +318 -0
- offload/engine/dataenv_gen.py +1318 -0
- offload/engine/dataenv_rules.py +278 -0
- offload/engine/devtemps.py +146 -0
- offload/engine/expected.py +2559 -0
- offload/engine/f2c.py +1783 -0
- offload/engine/finding_claims.py +330 -0
- offload/engine/finding_header.py +229 -0
- offload/engine/finding_rows.py +382 -0
- offload/engine/flang_oracle.py +299 -0
- offload/engine/fsource.py +620 -0
- offload/engine/fuzz.py +2455 -0
- offload/engine/fuzz_base.py +2016 -0
- offload/engine/fuzz_campaign.py +592 -0
- offload/engine/fuzz_exec.py +798 -0
- offload/engine/fuzz_min.py +1049 -0
- offload/engine/fuzz_profile.py +340 -0
- offload/engine/fuzz_report.py +1270 -0
- offload/engine/fuzz_steer.py +181 -0
- offload/engine/gate.py +1013 -0
- offload/engine/gate_report.py +711 -0
- offload/engine/gate_run.py +118 -0
- offload/engine/gate_stored.py +466 -0
- offload/engine/gen.py +1114 -0
- offload/engine/gen_templates.py +2583 -0
- offload/engine/grammar.py +695 -0
- offload/engine/harness.py +1472 -0
- offload/engine/harvest/__init__.py +3 -0
- offload/engine/harvest/c_runtime.py +465 -0
- offload/engine/harvest/checks.py +534 -0
- offload/engine/harvest/convert.py +784 -0
- offload/engine/harvest/f_runtime.py +668 -0
- offload/engine/harvest/filters.py +338 -0
- offload/engine/harvest/history.py +122 -0
- offload/engine/harvest/inventory.py +399 -0
- offload/engine/harvest2/__init__.py +5 -0
- offload/engine/harvest2/aomp.py +119 -0
- offload/engine/harvest2/examples.py +116 -0
- offload/engine/harvest2/gomp.py +679 -0
- offload/engine/harvest2/hand.py +150 -0
- offload/engine/harvest2/split.py +78 -0
- offload/engine/harvest_known/__init__.py +2 -0
- offload/engine/harvest_known/apps.py +65 -0
- offload/engine/harvest_known/cases.py +128 -0
- offload/engine/harvest_known/centres.py +184 -0
- offload/engine/harvest_known/forum.py +180 -0
- offload/engine/harvest_known/relnotes.py +42 -0
- offload/engine/harvest_known/textscan.py +107 -0
- offload/engine/hdrwrap.py +42 -0
- offload/engine/hecbench.py +568 -0
- offload/engine/hecbench_report.py +265 -0
- offload/engine/hecbench_run.py +483 -0
- offload/engine/idioms.py +1427 -0
- offload/engine/kbody_cites.py +81 -0
- offload/engine/kbody_emit.py +949 -0
- offload/engine/kbody_gen.py +795 -0
- offload/engine/legality_review.py +236 -0
- offload/engine/localcfg.py +58 -0
- offload/engine/malloc_dd.py +267 -0
- offload/engine/mutate.py +1933 -0
- offload/engine/nested_cites.py +196 -0
- offload/engine/nested_emit.py +789 -0
- offload/engine/nested_gen.py +1721 -0
- offload/engine/offload_scope.py +197 -0
- offload/engine/ompvv.py +624 -0
- offload/engine/oop_gen.py +2249 -0
- offload/engine/prerun.py +1435 -0
- offload/engine/program_source.py +739 -0
- offload/engine/provenance.py +103 -0
- offload/engine/reduce.py +2098 -0
- offload/engine/report.py +3374 -0
- offload/engine/root.py +33 -0
- offload/engine/rules.py +4256 -0
- offload/engine/run_matrix.py +325 -0
- offload/engine/site/__init__.py +1 -0
- offload/engine/site/columns.py +53 -0
- offload/engine/site/data.py +648 -0
- offload/engine/site/header.py +228 -0
- offload/engine/site/inputs.py +115 -0
- offload/engine/site/matrix.py +434 -0
- offload/engine/site/scrub.py +294 -0
- offload/engine/skeleton.py +121 -0
- offload/engine/spec_text.py +242 -0
- offload/engine/stress.py +4122 -0
- offload/engine/stress_c.py +1000 -0
- offload/engine/stress_exec.py +805 -0
- offload/engine/stress_min.py +248 -0
- offload/engine/stress_report.py +552 -0
- offload/engine/textclean.py +97 -0
- offload/engine/toolchains.py +1070 -0
- offload/engine/transforms.py +511 -0
- offload/engine/usage.py +1252 -0
- offload/engine/widen.py +673 -0
- offload/engine/widen_progs.py +2396 -0
- offload/issues.py +146 -0
- offtarget-0.1.0.dist-info/METADATA +86 -0
- offtarget-0.1.0.dist-info/RECORD +886 -0
- offtarget-0.1.0.dist-info/WHEEL +4 -0
- offtarget-0.1.0.dist-info/entry_points.txt +2 -0
- offtarget-0.1.0.dist-info/licenses/LICENSE +21 -0
- offtarget-0.1.0.dist-info/licenses/THIRD_PARTY_NOTICES.md +20 -0
offload/engine/gate.py
ADDED
|
@@ -0,0 +1,1013 @@
|
|
|
1
|
+
"""The reproduction gate: a failure counts only after the tools reproduce it.
|
|
2
|
+
|
|
3
|
+
Each failing campaign row is rerun in four environments (``environments``):
|
|
4
|
+
(a) its original build directory and node, (b) a differently named build
|
|
5
|
+
directory, (c) the path of (a) on another node or GPU, (d) a second run in
|
|
6
|
+
(a). ``verdict(row, reruns)`` returns ``not_reproduced``, ``nondeterministic``
|
|
7
|
+
(an environment disagrees with itself), ``confirmed`` (every valid rerun
|
|
8
|
+
matches the row) or ``environment`` (the environments differ). ``unchecked``
|
|
9
|
+
marks a failure not rerun, ``illegal`` a program violating a rule. A
|
|
10
|
+
``harness_error`` rerun or one killed by signal 9 is not valid.
|
|
11
|
+
``plan`` fits the reruns into a GPU-second budget (``cost_s``): one failure
|
|
12
|
+
per new compile-time signature, then run-time failures round-robin, then up
|
|
13
|
+
to ``per_signature`` more. ``inherit`` copies a signature's verdict to its
|
|
14
|
+
unrerun rows. Campaign kinds are in ``KINDS``. The gate adds verdicts and
|
|
15
|
+
never deletes rows; ``counts_as_failure`` tells which count."""
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import hashlib
|
|
19
|
+
import json
|
|
20
|
+
import os
|
|
21
|
+
import re
|
|
22
|
+
from collections import defaultdict
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
from offload.engine.root import ROOT # noqa: E402
|
|
26
|
+
RESULTS = ROOT / "results" / "gate"
|
|
27
|
+
VERDICTS = ("confirmed", "environment", "nondeterministic",
|
|
28
|
+
"not_reproduced", "unchecked", "illegal", "not_a_failure")
|
|
29
|
+
REVIEW = ("environment", "nondeterministic", "not_reproduced")
|
|
30
|
+
# most doubtful first: the verdict a signature's unsampled rows inherit
|
|
31
|
+
WORST_FIRST = ("nondeterministic", "environment", "not_reproduced",
|
|
32
|
+
"confirmed")
|
|
33
|
+
COMPILE_CLASSES = ("rejected", "ice", "accepted_ignored")
|
|
34
|
+
ENVS = ("a", "b", "c", "d")
|
|
35
|
+
PASSING = ("correct_on_device", "unobservable")
|
|
36
|
+
NOT_EVIDENCE = ("harness_error", "skipped")
|
|
37
|
+
# a capacity limit the runtime reports (offload.engine.harness.CAPACITY): a
|
|
38
|
+
# break point, never a compiler failure (the decisions)
|
|
39
|
+
CAPACITY_CLASSES = ("capacity",)
|
|
40
|
+
PER_SIGNATURE = 3
|
|
41
|
+
|
|
42
|
+
# a stored row of any format -> the confirmer's outcome classes
|
|
43
|
+
# (offload.engine.confirm.model.OUTCOMES) plus the stress limits
|
|
44
|
+
_CLS = {"agree": "correct_on_device", "compile_reject": "rejected",
|
|
45
|
+
"ice": "ice", "wrong_code": "wrong_answer",
|
|
46
|
+
"host_fallback": "fell_back_to_host", "harness_error":
|
|
47
|
+
"harness_error", "timeout": "timeout", "run_timeout": "timeout",
|
|
48
|
+
"compile_timeout": "timeout", "compile_oom": "compile_oom",
|
|
49
|
+
"probe_rejected": "correct_on_device",
|
|
50
|
+
"probe_accepted": "wrong_answer", "skipped": "skipped",
|
|
51
|
+
"prerun_refused": "refused"}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# --- what a row says ----------------------------------------------------------------
|
|
55
|
+
|
|
56
|
+
def outcome_class(d: dict) -> str:
|
|
57
|
+
"""The outcome class of a row of any format: a harness Result
|
|
58
|
+
(``outcome``, ``reason``), a fuzz or stress result (``cls``), a
|
|
59
|
+
confirmer Run (``outcome`` already a class)."""
|
|
60
|
+
cls = _outcome_class(d)
|
|
61
|
+
if cls in ("crash", "run_error", "timeout") and not _compile_side(d):
|
|
62
|
+
from offload.engine.harness import capacity_message
|
|
63
|
+
# (a stress rerun keeps its run output in compile_log)
|
|
64
|
+
text = "\n".join(str(d.get(k) or "") for k in (
|
|
65
|
+
"output", "stdout", "stderr", "reason", "compile_log"))
|
|
66
|
+
if capacity_message(str(d.get("toolchain") or ""), text):
|
|
67
|
+
return "capacity"
|
|
68
|
+
return cls
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _compile_side(d: dict) -> bool:
|
|
72
|
+
return "compile" in str(d.get("reason") or "")[:40]
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def _outcome_class(d: dict) -> str:
|
|
76
|
+
if "cls" in d and d.get("cls"):
|
|
77
|
+
cls, reason = d["cls"], d.get("reason") or ""
|
|
78
|
+
if cls == "run_error":
|
|
79
|
+
return "crash" if reason.startswith("crash") else "run_error"
|
|
80
|
+
return _CLS.get(cls, cls)
|
|
81
|
+
from offload.engine.confirm.model import outcome_of_result
|
|
82
|
+
try:
|
|
83
|
+
return outcome_of_result(d.get("outcome", ""), d.get("reason", ""))
|
|
84
|
+
except ValueError:
|
|
85
|
+
return d.get("outcome", "")
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _head(reason: str) -> str:
|
|
89
|
+
return (reason or "").split("; repeats")[0].split("; note:")[0]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def message_key(reason: str) -> str:
|
|
93
|
+
"""A compiler message without positions, paths, names, numbers and
|
|
94
|
+
version hashes (the confirmer's message key)."""
|
|
95
|
+
from offload.engine.confirm.decisions import _msg_key
|
|
96
|
+
text = re.sub(r"version \S+", "version", _head(reason))
|
|
97
|
+
text = text.split("; also:")[0]
|
|
98
|
+
# names a build derives from the file's path or inode (clang's
|
|
99
|
+
# __omp_offloading_<dev>_<file id>_<function>_l<line>) and hashes
|
|
100
|
+
text = re.sub(r"__omp_offloading_\w+", "__omp_offloading_", text)
|
|
101
|
+
text = re.sub(r"\b[0-9a-fA-F]{8,}\b", "H", text)
|
|
102
|
+
short = _msg_key(text)
|
|
103
|
+
# the confirmer's key keeps 120 characters: the hash of the whole
|
|
104
|
+
# normalised message tells apart diagnostics whose difference comes
|
|
105
|
+
# later ("... \")\" was expected but found \":\"")
|
|
106
|
+
t = re.sub(r"File = [^|]*\|", "", text)
|
|
107
|
+
t = re.sub(r"ftn: ERROR \S+", "ftn: ERROR", t)
|
|
108
|
+
t = re.sub(r'loc\("[^"]*":\d+:\d+\)', "loc", t)
|
|
109
|
+
t = re.sub(r"<tmpdir>\S*|/\S+", "<path>", t)
|
|
110
|
+
t = re.sub(r'"[A-Za-z0-9_$%]+"', '"X"', t)
|
|
111
|
+
t = re.sub(r"0x[0-9a-fA-F]+|\d+", "N", t)
|
|
112
|
+
full = " ".join(t.split("; repeats")[0].split())
|
|
113
|
+
if len(full) <= 120:
|
|
114
|
+
return short
|
|
115
|
+
return f"{short}#{hashlib.sha1(full.encode()).hexdigest()[:8]}"
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# an ICE line that names no defect: the driver's or the front end's own
|
|
119
|
+
# report that something crashed (which of them a run prints first, and
|
|
120
|
+
# how its lines wrap, depends on the build path's length and the output
|
|
121
|
+
# kept), so two ICE observations with one of these are the same failure
|
|
122
|
+
_GENERIC_ICE = re.compile(r"PLEASE submit a bug report|frontend command "
|
|
123
|
+
r"failed|terminated due to receipt of signal|"
|
|
124
|
+
r"ftn: INTERNAL|unable to execute command|"
|
|
125
|
+
r"TERMINATED by signal")
|
|
126
|
+
# CCE's quoted ICE message; a long build path can cut the line inside the
|
|
127
|
+
# quotes (no closing quote: the key ends with "...")
|
|
128
|
+
_CCE_ICE_MSG = re.compile(r'INTERNAL COMPILER ERROR:\s*"([^"]*)("?)')
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def generic(key: str) -> bool:
|
|
132
|
+
"""An ICE key that names no defect (a generic crash report)."""
|
|
133
|
+
return bool(_GENERIC_ICE.search(key or ""))
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def _ice_msg(key: str) -> tuple[str, bool] | None:
|
|
137
|
+
"""(message, cut) of a CCE ICE key, None for another key."""
|
|
138
|
+
m = re.match(r'ICE "(.*?)(\.\.\.)?"?(?: @ .*)?$', key or "")
|
|
139
|
+
if not m:
|
|
140
|
+
return None
|
|
141
|
+
return m.group(1), bool(m.group(2))
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
_ICE_FINDINGS: list | None = None
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def ice_findings() -> list:
|
|
148
|
+
"""[(toolchains, message regex, file)] of the findings index's ICE
|
|
149
|
+
findings that carry a message pattern (data/findings/index.yaml)."""
|
|
150
|
+
global _ICE_FINDINGS
|
|
151
|
+
if _ICE_FINDINGS is None:
|
|
152
|
+
import yaml
|
|
153
|
+
idx = ROOT / "data" / "findings" / "index.yaml"
|
|
154
|
+
out = []
|
|
155
|
+
if idx.is_file():
|
|
156
|
+
doc = yaml.safe_load(idx.read_text()) or {}
|
|
157
|
+
for f in next(iter(doc.values()), []) if isinstance(
|
|
158
|
+
doc, dict) else doc:
|
|
159
|
+
if f.get("outcome") == "ice" and f.get("message"):
|
|
160
|
+
try:
|
|
161
|
+
out.append((set(f.get("toolchains") or ()),
|
|
162
|
+
re.compile(f["message"]), f["file"]))
|
|
163
|
+
except re.error:
|
|
164
|
+
continue
|
|
165
|
+
_ICE_FINDINGS = out
|
|
166
|
+
return _ICE_FINDINGS
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
def same_finding(a: str, b: str, toolchain: str | None = None
|
|
170
|
+
) -> str | None:
|
|
171
|
+
"""The finding whose message pattern matches both ICE keys (of
|
|
172
|
+
`toolchain`, when given), or None. CCE's character-map ICE
|
|
173
|
+
prints one of three messages by build path; its finding's pattern
|
|
174
|
+
names all three."""
|
|
175
|
+
for tcs, rx, f in ice_findings():
|
|
176
|
+
if toolchain and tcs and toolchain not in tcs:
|
|
177
|
+
continue
|
|
178
|
+
if rx.search(a) and rx.search(b):
|
|
179
|
+
return f
|
|
180
|
+
return None
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def same(a: tuple, b: tuple, toolchain: str | None = None) -> bool:
|
|
184
|
+
"""Two observations (class, key) are the same failure: equal, or two
|
|
185
|
+
ICEs whose message is the same (a message cut by a wrapped line is
|
|
186
|
+
compared by its prefix) or of which one names no defect (a generic
|
|
187
|
+
crash report: within one program's reruns only; generic reports never
|
|
188
|
+
key an inherited verdict)."""
|
|
189
|
+
if a == b:
|
|
190
|
+
return True
|
|
191
|
+
if a[0] != b[0] or a[0] != "ice":
|
|
192
|
+
return False
|
|
193
|
+
if generic(a[1]) or generic(b[1]):
|
|
194
|
+
return True
|
|
195
|
+
ma, mb = _ice_msg(a[1]), _ice_msg(b[1])
|
|
196
|
+
if ma and mb:
|
|
197
|
+
(ta, ca), (tb, cb) = ma, mb
|
|
198
|
+
if ta == tb:
|
|
199
|
+
return True
|
|
200
|
+
if ca and len(ta) >= 15 and tb.startswith(ta):
|
|
201
|
+
return True
|
|
202
|
+
if cb and len(tb) >= 15 and ta.startswith(tb):
|
|
203
|
+
return True
|
|
204
|
+
elif a[1].split(" @ ")[0] == b[1].split(" @ ")[0]:
|
|
205
|
+
return True
|
|
206
|
+
# two ICEs whose messages one finding's pattern matches
|
|
207
|
+
return same_finding(a[1], b[1], toolchain) is not None
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
# the kinds whose programs print named values beside their check line
|
|
211
|
+
# (catalog-style programs and the data-environment programs)
|
|
212
|
+
VALUE_KINDS = ("catalog", "widen", "canary", "dataenv", "oop", "nested")
|
|
213
|
+
_PRINTED = re.compile(r"^\s*([A-Za-z_][\w()%.,:]*)\s*=\s*(-?\d[\d.eE+-]*)\s*$",
|
|
214
|
+
re.M)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def printed_values(stdout: str) -> str:
|
|
218
|
+
"""The `name= value` lines a program printed (not its RESULT line), as
|
|
219
|
+
`name=value` pairs in order: '' when it printed none."""
|
|
220
|
+
out = [f"{m.group(1)}={m.group(2)}" for m in _PRINTED.finditer(
|
|
221
|
+
stdout or "") if "RESULT" not in m.group(0)]
|
|
222
|
+
return " ".join(out)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def failure_key(d: dict, cls: str | None = None) -> str:
|
|
226
|
+
"""What must stay the same for a failure to count as reproduced: a
|
|
227
|
+
compile failure's message key, a crash's signal, a run error's kind,
|
|
228
|
+
a wrong answer's value (a checksum that changes from run to run is
|
|
229
|
+
nondeterminism), a host fallback, a timeout."""
|
|
230
|
+
cls = cls or outcome_class(d)
|
|
231
|
+
reason = _head(d.get("reason") or "")
|
|
232
|
+
if cls in ("rejected", "ice", "accepted_ignored", "refused"):
|
|
233
|
+
if cls == "ice":
|
|
234
|
+
# CCE's quoted message ("<message> @ <site>": the site may be
|
|
235
|
+
# cut off when a long build path wraps the line), else the
|
|
236
|
+
# compiler-source site or stack frame, else the message
|
|
237
|
+
from offload.engine.confirm import findings as FI
|
|
238
|
+
site = FI.site_of(reason)
|
|
239
|
+
m = _CCE_ICE_MSG.search(reason)
|
|
240
|
+
if m:
|
|
241
|
+
text = m.group(1).rstrip() + ("" if m.group(2) else "...")
|
|
242
|
+
return f"ICE \"{text}\"" + (f" @ {site}" if site else "")
|
|
243
|
+
if site:
|
|
244
|
+
return site
|
|
245
|
+
return message_key(reason)
|
|
246
|
+
if cls == "crash":
|
|
247
|
+
m = re.search(r"\b(SIG[A-Z]+|signal \d+)", reason)
|
|
248
|
+
return m.group(1) if m else "crash"
|
|
249
|
+
if cls == "run_error":
|
|
250
|
+
first = reason.split(";")[0]
|
|
251
|
+
return re.sub(r"0x[0-9a-fA-F]+", "0x", first)[:80] or "run_error"
|
|
252
|
+
if cls == "wrong_answer":
|
|
253
|
+
value = d.get("value")
|
|
254
|
+
if value is None and d.get("checksum") is not None:
|
|
255
|
+
value = f"checksum={d['checksum']}"
|
|
256
|
+
if value is None:
|
|
257
|
+
from offload.engine.confirm.model import value_of
|
|
258
|
+
value = value_of(d.get("stdout") or "")[0]
|
|
259
|
+
bad = d.get("bad_kernels")
|
|
260
|
+
key = f"{value or 'wrong'}" + (f" kernels={','.join(bad)}"
|
|
261
|
+
if bad else "")
|
|
262
|
+
# (the review): a program of a kind
|
|
263
|
+
# with per-program signatures that prints its values beside the
|
|
264
|
+
# check keeps them in the key, so repeats that print different
|
|
265
|
+
# values are nondeterminism, not one confirmed `check=fail`
|
|
266
|
+
vals = printed_values(d.get("stdout") or "") \
|
|
267
|
+
if d.get("kind") in VALUE_KINDS else ""
|
|
268
|
+
return key + (f" {vals}" if vals else "")
|
|
269
|
+
if cls == "timeout":
|
|
270
|
+
return "compile_timeout" if "compile" in reason else "timeout"
|
|
271
|
+
return cls
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def observe(d: dict) -> tuple[str, str]:
|
|
275
|
+
"""(outcome class, failure key) of a row."""
|
|
276
|
+
cls = outcome_class(d)
|
|
277
|
+
return cls, failure_key(d, cls)
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
def is_failure(cls: str) -> bool:
|
|
281
|
+
return cls not in PASSING and cls not in NOT_EVIDENCE and \
|
|
282
|
+
cls not in CAPACITY_CLASSES
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def _flaky(d: dict) -> bool:
|
|
286
|
+
if d.get("flaky"):
|
|
287
|
+
return True
|
|
288
|
+
runs = d.get("runs")
|
|
289
|
+
if isinstance(runs, list) and len(runs) > 1 and all(
|
|
290
|
+
isinstance(r, dict) for r in runs):
|
|
291
|
+
return len({(r.get("outcome"), r.get("value")) for r in runs}) > 1
|
|
292
|
+
return False
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def reread(toolchain: str, cls: str, reason: str, compile_log: str,
|
|
296
|
+
lang: str = "f90") -> tuple[str, str] | None:
|
|
297
|
+
"""(class, reason) of a stored compile failure read from its compile
|
|
298
|
+
output with the current message tables (offload.engine.harness: every
|
|
299
|
+
message, the worst class), when that differs from the stored class;
|
|
300
|
+
None when it does not, or there is nothing to read. A
|
|
301
|
+
rejection followed by a front end's crash is an ICE."""
|
|
302
|
+
from offload.engine import harness
|
|
303
|
+
if cls not in ("rejected", "ice", "harness_error") or \
|
|
304
|
+
not (compile_log or "").strip():
|
|
305
|
+
return None
|
|
306
|
+
if cls == "harness_error" and not (reason or "").startswith(
|
|
307
|
+
"unclassified_compile_failure"):
|
|
308
|
+
return None
|
|
309
|
+
found = harness.classify_message(toolchain, compile_log,
|
|
310
|
+
harness.CATEGORY_ORDER[:-1], lang)
|
|
311
|
+
if found is None:
|
|
312
|
+
return None
|
|
313
|
+
cat, line = found
|
|
314
|
+
if cat == "environment":
|
|
315
|
+
new = ("harness_error", f"environment: {line}")
|
|
316
|
+
else:
|
|
317
|
+
new = ("ice" if cat == "ice" else "rejected",
|
|
318
|
+
f"{harness.CODES[cat]}: {line}")
|
|
319
|
+
# a changed class, or a changed kind of message within it (a
|
|
320
|
+
# diagnostic the tables now read as not implemented)
|
|
321
|
+
if new[0] != cls or (reason or "").split(":", 1)[0] != \
|
|
322
|
+
new[1].split(":", 1)[0]:
|
|
323
|
+
return new
|
|
324
|
+
return None
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
def compile_section(stderr: str) -> str:
|
|
328
|
+
"""The compile output a harness row keeps in its stderr."""
|
|
329
|
+
m = re.search(r"--- compile \(rc=[^)]*\) ---\n(.*?)(?:\n--- run |\Z)",
|
|
330
|
+
stderr or "", re.S)
|
|
331
|
+
return m.group(1) if m else ""
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
# --- environments ---------------------------------------------------------------------
|
|
335
|
+
|
|
336
|
+
# Campaign kinds: the build-directory prefix of a kind's runs
|
|
337
|
+
# (no "-": tests/engine/test_findings.py) and its signature mode, the
|
|
338
|
+
# "feature" a run-time failure's signature carries: "atom" (a catalog-style
|
|
339
|
+
# program id without its version prefix: the versions of one program),
|
|
340
|
+
# "program" (the program itself: a random or generated program has no
|
|
341
|
+
# feature shared with another), "axis" (a stress axis). An undeclared kind
|
|
342
|
+
# is an error (KeyError).
|
|
343
|
+
KINDS: dict[str, dict] = {
|
|
344
|
+
"catalog": {"prefix": "harness_", "signature": "atom"},
|
|
345
|
+
"widen": {"prefix": "harness_", "signature": "atom"},
|
|
346
|
+
"canary": {"prefix": "harness_", "signature": "atom"},
|
|
347
|
+
"fuzz": {"prefix": "fuzz_", "signature": "program"},
|
|
348
|
+
"stress": {"prefix": "st_", "signature": "program"},
|
|
349
|
+
"evidence": {"prefix": "confirm_", "signature": "program"},
|
|
350
|
+
"file": {"prefix": "confirm_", "signature": "program"},
|
|
351
|
+
"ompvv": {"prefix": "baseline_", "signature": "program"},
|
|
352
|
+
# The data-environment catalog (tools/dataenv/dataenv.py gate)
|
|
353
|
+
"dataenv": {"prefix": "dataenv_", "signature": "program"},
|
|
354
|
+
# fortran-oop: the derived-type and OOP families (tools/campaigns/oop.py gate)
|
|
355
|
+
"oop": {"prefix": "oop_", "signature": "program"},
|
|
356
|
+
# nested-data: pointer-linked structures in C and Fortran (tools/campaigns/nested.py)
|
|
357
|
+
"nested": {"prefix": "nested_", "signature": "program"},
|
|
358
|
+
# kernel-body statements (tools/campaigns/kbody.py): a wrong answer's key is the
|
|
359
|
+
# failing observables, not their values (the failure is not deterministic)
|
|
360
|
+
"kbody": {"prefix": "kbody_", "signature": "program"},
|
|
361
|
+
}
|
|
362
|
+
SIGNATURE_MODES = ("atom", "program", "axis")
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
def register_kind(name: str, prefix: str, signature: str) -> dict:
|
|
366
|
+
"""Declare a campaign kind (its build-directory prefix and signature
|
|
367
|
+
mode); a kind that exists with other values is an error."""
|
|
368
|
+
if "-" in prefix or not prefix.endswith("_"):
|
|
369
|
+
raise ValueError(f"prefix {prefix!r}: no '-', ends with '_'")
|
|
370
|
+
if signature not in SIGNATURE_MODES:
|
|
371
|
+
raise ValueError(f"signature mode {signature!r}: one of "
|
|
372
|
+
f"{SIGNATURE_MODES}")
|
|
373
|
+
want = {"prefix": prefix, "signature": signature}
|
|
374
|
+
if KINDS.get(name, want) != want:
|
|
375
|
+
raise ValueError(f"campaign kind {name} is declared otherwise: "
|
|
376
|
+
f"{KINDS[name]}")
|
|
377
|
+
KINDS[name] = want
|
|
378
|
+
return want
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
def kind_of(row: dict) -> dict:
|
|
382
|
+
k = row.get("kind")
|
|
383
|
+
if k not in KINDS:
|
|
384
|
+
raise KeyError(f"undeclared campaign kind {k!r}: declare it in "
|
|
385
|
+
"offload.engine.gate.KINDS (register_kind)")
|
|
386
|
+
return KINDS[k]
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
PREFIX = {k: v["prefix"] for k, v in KINDS.items()}
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
def gate_tmp() -> str:
|
|
393
|
+
"""The node-local parent of the gate's build directories (GATE_TMP,
|
|
394
|
+
else STRESS_TMP, else the system temporary directory); a network
|
|
395
|
+
file system is refused (CCE fails to build there and the build path
|
|
396
|
+
changes CCE ftn's behaviour)."""
|
|
397
|
+
import subprocess
|
|
398
|
+
import tempfile
|
|
399
|
+
d = os.environ.get("GATE_TMP") or os.environ.get("STRESS_TMP") or \
|
|
400
|
+
tempfile.gettempdir()
|
|
401
|
+
os.makedirs(d, exist_ok=True)
|
|
402
|
+
fs = subprocess.run(["stat", "-f", "-c", "%T", d], capture_output=True,
|
|
403
|
+
text=True).stdout.strip().lower()
|
|
404
|
+
if fs in ("lustre", "nfs", "gpfs", "nfs4", "fuse.sshfs") or \
|
|
405
|
+
d.startswith(("/p/", "/usr/workspace", "/g/g")):
|
|
406
|
+
raise RuntimeError(f"gate build root {d} is on {fs or 'a network '}"
|
|
407
|
+
"file system: use node-local storage")
|
|
408
|
+
return d
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
def cell_id(row: dict) -> str:
|
|
412
|
+
"""A stable identifier of a failing cell (its campaign, program,
|
|
413
|
+
toolchain, mode and variant)."""
|
|
414
|
+
if row.get("cell"):
|
|
415
|
+
return row["cell"]
|
|
416
|
+
parts = [row.get("campaign", ""), row.get("kind", ""),
|
|
417
|
+
str(row.get("ident") or row.get("program_id") or
|
|
418
|
+
row.get("id") or ""), row.get("toolchain", ""),
|
|
419
|
+
str(row.get("mode", row.get("xnack", ""))),
|
|
420
|
+
row.get("variant", "") or row.get("opt", "")]
|
|
421
|
+
return "|".join(parts)
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
def _tag(row: dict) -> str:
|
|
425
|
+
return hashlib.sha256(cell_id(row).encode()).hexdigest()[:8]
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
def _letters(tag: str, n: int = 14) -> str:
|
|
429
|
+
"""`n` upper case letters derived from a hex tag (no digit)."""
|
|
430
|
+
h = hashlib.sha256(tag.encode()).digest()
|
|
431
|
+
return "".join(chr(ord("A") + b % 26) for b in h[:n])
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
def environments(row: dict, root: str | None = None) -> list[dict]:
|
|
435
|
+
"""The four environments of one failure: dicts with ``env`` (a-d),
|
|
436
|
+
``path`` (the build directory), ``node`` ("same": the row's node or a
|
|
437
|
+
node of its machine; "other": another node), ``environment`` (what
|
|
438
|
+
differs from the original: "original", "build_dir", "node") and
|
|
439
|
+
``repeat`` (0, or 1 for the second run in (a))."""
|
|
440
|
+
root = root if root is not None else gate_tmp()
|
|
441
|
+
orig = row.get("build_dir") or ""
|
|
442
|
+
if orig and orig != "-" and os.path.isabs(orig):
|
|
443
|
+
a_path = orig
|
|
444
|
+
else:
|
|
445
|
+
a_path = os.path.join(root, kind_of(row)["prefix"] + _tag(row))
|
|
446
|
+
b_path = os.path.join(root, "GATE" + _letters(_tag(row)))
|
|
447
|
+
return [
|
|
448
|
+
{"env": "a", "path": a_path, "node": "same",
|
|
449
|
+
"environment": "original", "repeat": 0},
|
|
450
|
+
{"env": "b", "path": b_path, "node": "same",
|
|
451
|
+
"environment": "build_dir", "repeat": 0},
|
|
452
|
+
{"env": "c", "path": a_path, "node": "other",
|
|
453
|
+
"environment": "node", "repeat": 0},
|
|
454
|
+
{"env": "d", "path": a_path, "node": "same",
|
|
455
|
+
"environment": "original", "repeat": 1},
|
|
456
|
+
]
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
def _group(env: str) -> str:
|
|
460
|
+
"""(a) and (d) are one environment (two runs)."""
|
|
461
|
+
return "a" if env in ("a", "d") else env
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
# --- the verdict ----------------------------------------------------------------------
|
|
465
|
+
|
|
466
|
+
def killed(d: dict) -> bool:
|
|
467
|
+
"""A run ended by SIGKILL: an external kill or the OOM killer of the
|
|
468
|
+
job's memory cgroup (the gate's parallel reruns can exhaust a node's
|
|
469
|
+
memory), not the program's own behaviour."""
|
|
470
|
+
head = _head(d.get("reason") or "")
|
|
471
|
+
return "SIGKILL" in head or bool(re.search(
|
|
472
|
+
r"(?:TERMINATED by |killed by |receipt of )signal 9\b", head)) or \
|
|
473
|
+
str(d.get("checksum")) == "SIGKILL"
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
# one-host machines: their (c) is another GPU of the host, so a rerun's node
|
|
477
|
+
# keeps its ":gpuN"; on every other machine (c) is another compute node, so
|
|
478
|
+
# a GPU or GCD of (a)'s node is no node change (parity-10-29)
|
|
479
|
+
from offload.engine.confirm.machines import load as _machines # noqa: E402
|
|
480
|
+
ONE_HOST = tuple(m.name for m in _machines().values() if m.one_host)
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
def node_key(node: str | None) -> str:
|
|
484
|
+
"""The part of a rerun's node that (c) must change: the host (Tuolumne,
|
|
485
|
+
Tioga: "tioga39:gpu5" -> "tioga39"), or host and GPU on a one-host
|
|
486
|
+
machine (``ONE_HOST``)."""
|
|
487
|
+
node = node or ""
|
|
488
|
+
host = node.split(":", 1)[0]
|
|
489
|
+
return node if host.split("-", 1)[0].split(".", 1)[0] in ONE_HOST \
|
|
490
|
+
else host
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
def valid_reruns(reruns: list[dict], row: dict | None = None
|
|
494
|
+
) -> list[dict]:
|
|
495
|
+
"""The reruns that are evidence: not a harness error, not killed by
|
|
496
|
+
signal 9 unless the stored row was too, and an environment (c) only
|
|
497
|
+
on another node than (a) and in the path of (a) (a (c) in
|
|
498
|
+
another path confounds node and path; kept only when no (c) in (a)'s
|
|
499
|
+
path exists)."""
|
|
500
|
+
keep_killed = row is not None and killed(row)
|
|
501
|
+
if row is not None:
|
|
502
|
+
# a rerun is read as its row's kind and toolchain (the failure key
|
|
503
|
+
# of a value kind keeps the printed values)
|
|
504
|
+
reruns = [r if r.get("kind") and r.get("toolchain") else
|
|
505
|
+
{**r, "kind": r.get("kind") or row.get("kind"),
|
|
506
|
+
"toolchain": r.get("toolchain") or row.get("toolchain")}
|
|
507
|
+
for r in reruns]
|
|
508
|
+
out = [r for r in reruns if outcome_class(r) not in NOT_EVIDENCE
|
|
509
|
+
and (keep_killed or not killed(r))]
|
|
510
|
+
a_paths = {r.get("path") for r in out if r.get("env") in ("a", "d")
|
|
511
|
+
and r.get("path")}
|
|
512
|
+
# a (c) on the node (wingtip: GPU) of the row's (a) is no node change
|
|
513
|
+
a_nodes = {node_key(r.get("node")) for r in out
|
|
514
|
+
if r.get("env") in ("a", "d") and r.get("node")}
|
|
515
|
+
out = [r for r in out if r.get("env") != "c" or not r.get("node")
|
|
516
|
+
or node_key(r.get("node")) not in a_nodes]
|
|
517
|
+
same_c = [r for r in out if r.get("env") == "c" and
|
|
518
|
+
r.get("path") in a_paths]
|
|
519
|
+
if same_c:
|
|
520
|
+
out = [r for r in out if r.get("env") != "c" or r in same_c]
|
|
521
|
+
return out
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
def _version(tb: str | None) -> str:
|
|
525
|
+
return (tb or "").split(" [modules")[0].strip()
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
def changed_since(row: dict, reruns: list[dict]) -> str | None:
|
|
529
|
+
"""What the stored row's provenance says changed since it ran: the
|
|
530
|
+
toolchain build (version banner) or the run environment (env_hash),
|
|
531
|
+
when both sides recorded it; None when nothing recorded differs (a row
|
|
532
|
+
recorded before these fields existed records neither: it is a run of (a))."""
|
|
533
|
+
then = _version(row.get("toolchain_build"))
|
|
534
|
+
now = {_version(r.get("toolchain_build")) for r in reruns
|
|
535
|
+
if r.get("toolchain_build")}
|
|
536
|
+
if then and now and then not in now:
|
|
537
|
+
return f"toolchain build: {then} then, {'; '.join(sorted(now))} now"
|
|
538
|
+
eh = row.get("env_hash")
|
|
539
|
+
ehs = {r.get("env_hash") for r in reruns if r.get("env_hash")}
|
|
540
|
+
if eh and ehs and eh not in ehs:
|
|
541
|
+
return "run environment (env_hash) differs"
|
|
542
|
+
return None
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
def _distinct(obs: list, toolchain: str | None = None) -> list:
|
|
546
|
+
out = []
|
|
547
|
+
for o in obs:
|
|
548
|
+
if not any(same(o, x, toolchain) for x in out):
|
|
549
|
+
out.append(o)
|
|
550
|
+
return out
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
def verdict(row: dict, reruns: list[dict]) -> str:
|
|
554
|
+
"""The gate's verdict on one failing row (see the module docstring).
|
|
555
|
+
A row whose stored repeats disagree is nondeterministic without a
|
|
556
|
+
rerun; otherwise raises ValueError when no rerun is valid."""
|
|
557
|
+
if _flaky(row):
|
|
558
|
+
return "nondeterministic"
|
|
559
|
+
valid = valid_reruns(reruns, row)
|
|
560
|
+
if not valid:
|
|
561
|
+
raise ValueError("no valid rerun: the row has no verdict")
|
|
562
|
+
obs = [observe(r) for r in valid]
|
|
563
|
+
if not any(is_failure(c) for c, _ in obs):
|
|
564
|
+
return "not_reproduced"
|
|
565
|
+
if any(_flaky(r) for r in valid):
|
|
566
|
+
return "nondeterministic"
|
|
567
|
+
orig = observe(row)
|
|
568
|
+
tc = row.get("toolchain")
|
|
569
|
+
changed = changed_since(row, valid)
|
|
570
|
+
groups: dict[str, list] = defaultdict(list)
|
|
571
|
+
if not changed:
|
|
572
|
+
groups["a"].append(orig) # the stored row ran in (a)
|
|
573
|
+
for r, o in zip(valid, obs):
|
|
574
|
+
groups[_group(r.get("env", "a"))].append(o)
|
|
575
|
+
if any(not same(g[0], o, tc) for g in groups.values() for o in g[1:]):
|
|
576
|
+
return "nondeterministic"
|
|
577
|
+
# values that scatter: three or more distinct failures, or (b) and (c)
|
|
578
|
+
# differing with neither equal to (a)
|
|
579
|
+
if len(_distinct(obs + ([] if changed else [orig]), tc)) >= 3:
|
|
580
|
+
return "nondeterministic"
|
|
581
|
+
ga, gb, gc = groups.get("a"), groups.get("b"), groups.get("c")
|
|
582
|
+
if ga and gb and gc and not same(gb[0], gc[0], tc) and \
|
|
583
|
+
not same(ga[0], gb[0], tc) and not same(ga[0], gc[0], tc):
|
|
584
|
+
return "nondeterministic"
|
|
585
|
+
if all(same(o, orig, tc) for o in obs):
|
|
586
|
+
return "confirmed"
|
|
587
|
+
return "environment"
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
_CLASSES = (("lower", r"[a-z]"), ("upper", r"[A-Z]"), ("digit", r"\d"),
|
|
591
|
+
("underscore", r"_"), ("dash", r"-"), ("dot", r"\."))
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
def _path_traits(path: str) -> set:
|
|
595
|
+
name = path or ""
|
|
596
|
+
out = {f"has {k}" for k, rx in _CLASSES if re.search(rx, name)}
|
|
597
|
+
if re.search(r"-1(?!\d)", name):
|
|
598
|
+
out.add("has '-1' not followed by a digit")
|
|
599
|
+
out.add(f"length {len(name)}")
|
|
600
|
+
return out
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
def condition(row: dict, reruns: list[dict]) -> str:
|
|
604
|
+
"""What separates the failing environments from the others (for an
|
|
605
|
+
``environment`` verdict): the build directory (and the character
|
|
606
|
+
classes only the failing paths have), the node, the toolchain build,
|
|
607
|
+
or the original run alone. A person pins it down (data/reports/
|
|
608
|
+
gate.md)."""
|
|
609
|
+
valid = valid_reruns(reruns, row)
|
|
610
|
+
orig = observe(row)
|
|
611
|
+
ch = changed_since(row, valid)
|
|
612
|
+
tc = row.get("toolchain")
|
|
613
|
+
same_ = [r for r in valid if same(observe(r), orig, tc)]
|
|
614
|
+
other = [r for r in valid if not same(observe(r), orig, tc)]
|
|
615
|
+
parts = []
|
|
616
|
+
if not same_ and ch:
|
|
617
|
+
return ("changed since: " + ch + "; every rerun gives "
|
|
618
|
+
+ ", ".join(sorted({f'{c} ({k[:60]})' for c, k in map(
|
|
619
|
+
observe, valid)})))
|
|
620
|
+
if not same_:
|
|
621
|
+
tb_then = row.get("toolchain_build") or "not recorded"
|
|
622
|
+
tb_now = sorted({r.get("toolchain_build") or "not recorded"
|
|
623
|
+
for r in valid})
|
|
624
|
+
parts.append(
|
|
625
|
+
"original run only: every rerun gives "
|
|
626
|
+
+ ", ".join(sorted({f'{c} ({k[:60]})' for c, k in map(
|
|
627
|
+
observe, valid)}))
|
|
628
|
+
+ f"; toolchain then: {tb_then}; now: {'; '.join(tb_now)}")
|
|
629
|
+
return "; ".join(parts)
|
|
630
|
+
envs_same = sorted({r.get("env", "?") for r in same_})
|
|
631
|
+
envs_other = sorted({r.get("env", "?") for r in other})
|
|
632
|
+
paths_s = sorted({r.get("path") or r.get("build_dir") or "" for r in
|
|
633
|
+
same_})
|
|
634
|
+
paths_o = sorted({r.get("path") or r.get("build_dir") or "" for r in
|
|
635
|
+
other})
|
|
636
|
+
if set(paths_s).isdisjoint(paths_o):
|
|
637
|
+
# the characters of the part of the paths that differs (below
|
|
638
|
+
# their common parent)
|
|
639
|
+
allp = [p for p in paths_s + paths_o if p]
|
|
640
|
+
common = os.path.commonpath(allp) if len(allp) > 1 else ""
|
|
641
|
+
|
|
642
|
+
def part(p: str) -> str:
|
|
643
|
+
return p[len(common):] if common and p.startswith(common) \
|
|
644
|
+
else p
|
|
645
|
+
ts = set.intersection(*[_path_traits(part(p)) for p in paths_s]) \
|
|
646
|
+
if paths_s else set()
|
|
647
|
+
to = set.union(*[_path_traits(part(p)) for p in paths_o]) \
|
|
648
|
+
if paths_o else set()
|
|
649
|
+
only = sorted(t for t in ts - to if not t.startswith("length"))
|
|
650
|
+
parts.append(f"build directory: the failure in {paths_s} "
|
|
651
|
+
f"(env {','.join(envs_same)}), "
|
|
652
|
+
f"{', '.join(sorted({observe(r)[0] for r in other}))}"
|
|
653
|
+
f" in {paths_o} (env {','.join(envs_other)})"
|
|
654
|
+
+ (f"; only the failing paths: {', '.join(only)}"
|
|
655
|
+
if only else ""))
|
|
656
|
+
nodes_s = sorted({r.get("node") or "" for r in same_})
|
|
657
|
+
nodes_o = sorted({r.get("node") or "" for r in other})
|
|
658
|
+
if set(nodes_s).isdisjoint(nodes_o) and any(nodes_s) and any(nodes_o):
|
|
659
|
+
parts.append(f"node: the failure on {nodes_s}, not on {nodes_o}")
|
|
660
|
+
tb_s = {r.get("toolchain_build") for r in same_}
|
|
661
|
+
tb_o = {r.get("toolchain_build") for r in other}
|
|
662
|
+
if tb_s.isdisjoint(tb_o) and any(tb_s) and any(tb_o):
|
|
663
|
+
parts.append(f"toolchain build: {sorted(tb_s)} vs {sorted(tb_o)}")
|
|
664
|
+
return "; ".join(parts) or (
|
|
665
|
+
f"no recorded difference between env {','.join(envs_same)} and "
|
|
666
|
+
f"env {','.join(envs_other)}")
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
def judge(row: dict, reruns: list[dict]) -> dict:
|
|
670
|
+
"""The verdict with its context: ``legality_review``, ``condition``
|
|
671
|
+
(environment verdicts), the environments seen and missing, whether (c)
|
|
672
|
+
really ran on another node, and every rerun's outcome."""
|
|
673
|
+
v = verdict(row, reruns)
|
|
674
|
+
valid = valid_reruns(reruns, row)
|
|
675
|
+
if v == "nondeterministic" and _flaky(row) and not valid:
|
|
676
|
+
# not rerun: its own stored repeats disagree; counted, not queued
|
|
677
|
+
# (the review queue holds rerun rows)
|
|
678
|
+
return {"verdict": v, "legality_review": False, "envs": [],
|
|
679
|
+
"missing": list(ENVS), "node_distinct": False,
|
|
680
|
+
"original": "|".join(observe(row)), "reruns": [],
|
|
681
|
+
"own_repeats": True}
|
|
682
|
+
seen = sorted({r.get("env") for r in valid})
|
|
683
|
+
nodes = {r.get("env"): r.get("node") for r in valid}
|
|
684
|
+
out = {"verdict": v, "legality_review": v in REVIEW,
|
|
685
|
+
"envs": seen, "missing": sorted(set(ENVS) - set(seen)),
|
|
686
|
+
"node_distinct": bool(nodes.get("c")) and
|
|
687
|
+
node_key(nodes.get("c")) not in
|
|
688
|
+
(node_key(nodes.get("a")), node_key(nodes.get("d"))),
|
|
689
|
+
"original": "|".join(observe(row)),
|
|
690
|
+
"reruns": [{"env": r.get("env"),
|
|
691
|
+
"outcome": "|".join(observe(
|
|
692
|
+
{**r, "kind": r.get("kind") or row.get("kind"),
|
|
693
|
+
"toolchain": r.get("toolchain") or
|
|
694
|
+
row.get("toolchain")}))[:200],
|
|
695
|
+
"path": r.get("path", ""), "node": r.get("node", "")}
|
|
696
|
+
for r in reruns]}
|
|
697
|
+
ch = changed_since(row, valid)
|
|
698
|
+
if ch:
|
|
699
|
+
out["changed_since"] = ch
|
|
700
|
+
if _flaky(row):
|
|
701
|
+
out["own_repeats"] = True
|
|
702
|
+
if v == "environment":
|
|
703
|
+
out["condition"] = condition(row, reruns)
|
|
704
|
+
out["needs_condition"] = True
|
|
705
|
+
return out
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
# --- the budget -----------------------------------------------------------------------
|
|
709
|
+
|
|
710
|
+
def inheritable(row: dict) -> bool:
|
|
711
|
+
"""A failure whose verdict another row of its signature may stand for:
|
|
712
|
+
a compile-time failure whose key names its defect (a diagnostic's
|
|
713
|
+
message key, an ICE's message or compiler-source site); never a
|
|
714
|
+
run-time failure or a generic crash report."""
|
|
715
|
+
cls, key = observe(row)
|
|
716
|
+
return cls in COMPILE_CLASSES and not generic(key)
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
def signature(row: dict) -> str:
|
|
720
|
+
"""The signature of a failure: toolchain, outcome class and failure
|
|
721
|
+
key; a compile-time failure whose key names no defect, and every
|
|
722
|
+
run-time failure, also carry the program's feature (the kind's
|
|
723
|
+
signature mode, ``KINDS``: catalog-style atom, the program, or the
|
|
724
|
+
stress axis)."""
|
|
725
|
+
if row.get("signature"):
|
|
726
|
+
return row["signature"]
|
|
727
|
+
cls, key = observe(row)
|
|
728
|
+
tc = row.get("toolchain", "")
|
|
729
|
+
if cls in COMPILE_CLASSES and not generic(key):
|
|
730
|
+
return f"{tc}|{cls}|{key}"
|
|
731
|
+
return f"{tc}|{cls}|{feature(row)}|{key}"
|
|
732
|
+
|
|
733
|
+
|
|
734
|
+
def feature(row: dict) -> str:
|
|
735
|
+
mode = kind_of(row)["signature"]
|
|
736
|
+
ident = str(row.get("ident", ""))
|
|
737
|
+
if mode == "atom":
|
|
738
|
+
return re.sub(r"^(?:omp|acc)\d\d-", "", ident)
|
|
739
|
+
if mode == "axis":
|
|
740
|
+
return str(row.get("axis", "")).split(".")[0] + "|" + ident
|
|
741
|
+
return ident
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
def coarse(row: dict) -> str:
|
|
745
|
+
"""The round-robin group of a run-time failure for sampling: toolchain,
|
|
746
|
+
class and the campaign's run or variant (never a signature)."""
|
|
747
|
+
cls, _ = observe(row)
|
|
748
|
+
loc = row.get("locator") or {}
|
|
749
|
+
grp = loc.get("run") or loc.get("variant") or row.get("axis") or \
|
|
750
|
+
feature(row)
|
|
751
|
+
return f"{row.get('toolchain', '')}|{cls}|{grp}"
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
# estimated wall seconds of one rerun (compile, or compile and run) by
|
|
755
|
+
# compiler family when the row has no recorded time
|
|
756
|
+
# (gcc: GCC 16.2 with offloading; its compiles measured 0.3 s (Tioga) and
|
|
757
|
+
# 0.8 s (wingtip) median over the catalog, results/gcc/<tc>/sweep.*.jsonl;
|
|
758
|
+
# 2 s allows for the gate's concurrent load)
|
|
759
|
+
from offload.engine.toolchains import registry as _registry # noqa: E402
|
|
760
|
+
COMPILE_S = {f.id: f.compile_s for f in _registry().families.values()}
|
|
761
|
+
RUN_S = 10.0
|
|
762
|
+
KILL_AFTER_S = 10
|
|
763
|
+
COMPILE_LIMIT_S = {"catalog": 900, "widen": 900, "canary": 900,
|
|
764
|
+
"fuzz": 600, "stress": 900, "evidence": 900,
|
|
765
|
+
"file": 900, "dataenv": 900, "ompvv": 900, "oop": 900,
|
|
766
|
+
"nested": 900, "kbody": 900}
|
|
767
|
+
|
|
768
|
+
|
|
769
|
+
def cost_s(row: dict) -> float:
|
|
770
|
+
"""Estimated wall seconds of one rerun of a row: its recorded compile
|
|
771
|
+
and run times when it has them; a compile timeout at the compile
|
|
772
|
+
limit, a run timeout at the run limit, each plus the kill-after (review
|
|
773
|
+
cost model)."""
|
|
774
|
+
from offload.engine.confirm.machines import family_of
|
|
775
|
+
try:
|
|
776
|
+
fam = family_of(row.get("toolchain", ""))
|
|
777
|
+
except Exception:
|
|
778
|
+
fam = "cce"
|
|
779
|
+
comp = float(row.get("compile_s") or COMPILE_S.get(fam, 30.0))
|
|
780
|
+
cls = outcome_class(row)
|
|
781
|
+
reason = row.get("reason") or ""
|
|
782
|
+
if cls == "timeout" and "compile" in reason:
|
|
783
|
+
return float(COMPILE_LIMIT_S.get(row.get("kind"), 900)) + \
|
|
784
|
+
KILL_AFTER_S
|
|
785
|
+
if cls in ("rejected", "ice", "accepted_ignored", "compile_oom"):
|
|
786
|
+
return comp
|
|
787
|
+
if cls == "timeout":
|
|
788
|
+
return comp + float(row.get("timeout_s") or 300) + KILL_AFTER_S
|
|
789
|
+
return comp + float(row.get("run_s") or RUN_S)
|
|
790
|
+
|
|
791
|
+
|
|
792
|
+
def plan(rows: list[dict], budget_s: float, per_signature: int = PER_SIGNATURE,
|
|
793
|
+
known: set | frozenset = frozenset(), cost=cost_s,
|
|
794
|
+
envs: int = len(ENVS), overhead_s: float = 0.0) -> dict:
|
|
795
|
+
"""Which rows to rerun under `budget_s` (each row costs
|
|
796
|
+
``envs * cost(row)``; `overhead_s`, the queue and idle-tail allowance
|
|
797
|
+
of the runs, is spent first). Returns ``{"rows": [...], "spent_s",
|
|
798
|
+
"total_s", "over_budget", "budget_s"}``; each row dict gets ``sample``:
|
|
799
|
+
"own" (its stored repeats disagree: nondeterministic, no rerun), "all"
|
|
800
|
+
(within budget, every row), "new" (the first row of a compile-time
|
|
801
|
+
defect signature not in `known`), "runtime" (a run-time or generic
|
|
802
|
+
failure chosen round-robin), "sampled" (up to `per_signature` per
|
|
803
|
+
compile-time signature), "inherited" (not rerun; takes its signature's
|
|
804
|
+
verdict) or "unchecked" (not rerun; no verdict to inherit)."""
|
|
805
|
+
rows = [dict(r) for r in rows]
|
|
806
|
+
for r in rows:
|
|
807
|
+
r["signature"] = signature(r)
|
|
808
|
+
own = [r for r in rows if _flaky(r)]
|
|
809
|
+
for r in own:
|
|
810
|
+
r["sample"] = "own"
|
|
811
|
+
todo = [r for r in rows if not _flaky(r)]
|
|
812
|
+
total = overhead_s + sum(envs * cost(r) for r in todo)
|
|
813
|
+
if total <= budget_s:
|
|
814
|
+
for r in todo:
|
|
815
|
+
r["sample"] = "all"
|
|
816
|
+
return {"rows": rows, "spent_s": total, "total_s": total,
|
|
817
|
+
"over_budget": False, "budget_s": budget_s}
|
|
818
|
+
spent = overhead_s
|
|
819
|
+
chosen: dict[int, str] = {}
|
|
820
|
+
|
|
821
|
+
def take(r, how) -> bool:
|
|
822
|
+
nonlocal spent
|
|
823
|
+
c = envs * cost(r)
|
|
824
|
+
if spent + c > budget_s:
|
|
825
|
+
return False
|
|
826
|
+
chosen[id(r)] = how
|
|
827
|
+
spent += c
|
|
828
|
+
return True
|
|
829
|
+
groups: dict[str, list] = {}
|
|
830
|
+
for r in sorted((r for r in todo if inheritable(r)),
|
|
831
|
+
key=lambda r: (r["signature"], cell_id(r))):
|
|
832
|
+
groups.setdefault(r["signature"], []).append(r)
|
|
833
|
+
order = sorted(groups, key=lambda sg: hashlib.sha256(
|
|
834
|
+
sg.encode()).hexdigest())
|
|
835
|
+
for sig in order: # tier 1: every new defect
|
|
836
|
+
if sig not in known:
|
|
837
|
+
take(groups[sig][0], "new")
|
|
838
|
+
over = any(sig not in known and id(groups[sig][0]) not in chosen
|
|
839
|
+
for sig in order)
|
|
840
|
+
rt: dict[str, list] = {} # tier 2: run-time, round-robin
|
|
841
|
+
for r in sorted((r for r in todo if not inheritable(r)),
|
|
842
|
+
key=lambda r: (coarse(r), hashlib.sha256(
|
|
843
|
+
cell_id(r).encode()).hexdigest())):
|
|
844
|
+
rt.setdefault(coarse(r), []).append(r)
|
|
845
|
+
rorder = sorted(rt, key=lambda g: hashlib.sha256(g.encode()).hexdigest())
|
|
846
|
+
k = 0
|
|
847
|
+
while any(k < len(rt[g]) for g in rorder):
|
|
848
|
+
for g in rorder:
|
|
849
|
+
if k < len(rt[g]):
|
|
850
|
+
take(rt[g][k], "runtime")
|
|
851
|
+
k += 1
|
|
852
|
+
for k in range(per_signature): # tier 3: more per signature
|
|
853
|
+
for sig in order:
|
|
854
|
+
g = groups[sig]
|
|
855
|
+
if k < len(g) and id(g[k]) not in chosen:
|
|
856
|
+
take(g[k], "sampled")
|
|
857
|
+
for r in todo:
|
|
858
|
+
r["sample"] = chosen.get(id(r)) or (
|
|
859
|
+
"inherited" if inheritable(r) else "unchecked")
|
|
860
|
+
return {"rows": rows, "spent_s": spent, "total_s": total,
|
|
861
|
+
"over_budget": over, "budget_s": budget_s}
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
def inherit(planned: list[dict], verdicts: dict) -> dict:
|
|
865
|
+
"""Verdicts for every planned row: a rerun row's own (``verdicts``:
|
|
866
|
+
cell id -> verdict); a row whose stored repeats disagree,
|
|
867
|
+
``nondeterministic`` on its own evidence; an inheritable row that was
|
|
868
|
+
not rerun (or whose rerun gave no verdict), its signature's worst
|
|
869
|
+
verdict among the rerun rows, marked ``inherited``; every other row
|
|
870
|
+
not rerun, ``unchecked``."""
|
|
871
|
+
by_sig: dict[str, list] = defaultdict(list)
|
|
872
|
+
for r in planned:
|
|
873
|
+
v = verdicts.get(cell_id(r))
|
|
874
|
+
# only a rerun verdict passes on (not_a_failure, illegal: the
|
|
875
|
+
# row's own reading)
|
|
876
|
+
if v in WORST_FIRST and r.get("sample") not in ("inherited",
|
|
877
|
+
"unchecked", "own"):
|
|
878
|
+
by_sig[r["signature"]].append(v)
|
|
879
|
+
out = {}
|
|
880
|
+
for r in planned:
|
|
881
|
+
cid = cell_id(r)
|
|
882
|
+
if _flaky(r):
|
|
883
|
+
out[cid] = {"verdict": "nondeterministic", "inherited": False,
|
|
884
|
+
"own_repeats": True}
|
|
885
|
+
continue
|
|
886
|
+
if cid in verdicts and r.get("sample") not in ("inherited",
|
|
887
|
+
"unchecked"):
|
|
888
|
+
out[cid] = {"verdict": verdicts[cid], "inherited": False}
|
|
889
|
+
continue
|
|
890
|
+
vs = by_sig.get(r["signature"]) if inheritable(r) else None
|
|
891
|
+
if vs:
|
|
892
|
+
worst = min(vs, key=WORST_FIRST.index)
|
|
893
|
+
out[cid] = {"verdict": worst, "inherited": True,
|
|
894
|
+
"from": len(vs)}
|
|
895
|
+
else:
|
|
896
|
+
out[cid] = {"verdict": "unchecked", "inherited": False}
|
|
897
|
+
return out
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
# --- reading verdicts -----------------------------------------------------------------
|
|
901
|
+
|
|
902
|
+
VERDICTS_FILE = RESULTS / "verdicts.jsonl"
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
def load_verdicts(path: Path | None = None) -> dict:
|
|
906
|
+
"""cell id -> verdict record of the gate's store (later lines win)."""
|
|
907
|
+
path = Path(path) if path else VERDICTS_FILE
|
|
908
|
+
out = {}
|
|
909
|
+
if not path.is_file():
|
|
910
|
+
return out
|
|
911
|
+
for ln in path.read_text().splitlines():
|
|
912
|
+
if ln.strip():
|
|
913
|
+
d = json.loads(ln)
|
|
914
|
+
out[d["cell"]] = d
|
|
915
|
+
return out
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
_BY_CASE: dict = {}
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
def _case_index(path: Path | None = None) -> dict:
|
|
922
|
+
"""(kind, ident, toolchain, row key) -> verdict record; the catalog
|
|
923
|
+
and the widened catalog are one confirmer kind ("catalog")."""
|
|
924
|
+
key = str(path or VERDICTS_FILE)
|
|
925
|
+
p = Path(key)
|
|
926
|
+
stamp = p.stat().st_mtime if p.is_file() else None
|
|
927
|
+
hit = _BY_CASE.get(key)
|
|
928
|
+
if hit is not None and hit[0] == stamp:
|
|
929
|
+
return hit[1]
|
|
930
|
+
idx = {}
|
|
931
|
+
for d in load_verdicts(p).values():
|
|
932
|
+
kind = "catalog" if d.get("kind") in ("catalog", "widen") else \
|
|
933
|
+
d.get("kind")
|
|
934
|
+
idx[(kind, str(d.get("ident")), d.get("toolchain"),
|
|
935
|
+
int(d.get("xnack") or 0))] = d
|
|
936
|
+
_BY_CASE[key] = (stamp, idx)
|
|
937
|
+
return idx
|
|
938
|
+
|
|
939
|
+
|
|
940
|
+
def verdict_of_case(case, path: Path | None = None) -> dict | None:
|
|
941
|
+
"""The gate's verdict record of a confirmer case's own cell, or None
|
|
942
|
+
(not gated)."""
|
|
943
|
+
from offload.engine.confirm import machines as M
|
|
944
|
+
try:
|
|
945
|
+
x = M.load()[case.machine].row_key(case.mode)
|
|
946
|
+
except Exception:
|
|
947
|
+
return None
|
|
948
|
+
return _case_index(path).get((case.program.kind, case.program.ident,
|
|
949
|
+
case.toolchain, int(x)))
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
# The decisions on the review queue: one per rerun row, keyed by its
|
|
953
|
+
# cell id; a decision applies to the row it names only and never to the
|
|
954
|
+
# rows that inherit from it (they keep the gate's own semantics)
|
|
955
|
+
DECISIONS_FILE = ROOT / "catalog" / "gate_queue.yaml"
|
|
956
|
+
|
|
957
|
+
|
|
958
|
+
def load_decisions(path: Path | None = None) -> dict:
|
|
959
|
+
"""cell id -> {verdict, counts_as, group, finding, k} of the decided
|
|
960
|
+
review queue (catalog/gate_queue.yaml); {} when there is none."""
|
|
961
|
+
import yaml
|
|
962
|
+
path = Path(path) if path else DECISIONS_FILE
|
|
963
|
+
if not path.is_file():
|
|
964
|
+
return {}
|
|
965
|
+
doc = yaml.safe_load(path.read_text()) or {}
|
|
966
|
+
return {e["cell"]: {"decision": e.get("verdict"),
|
|
967
|
+
"counts_as": e.get("counts_as"),
|
|
968
|
+
"group": e.get("group"),
|
|
969
|
+
"finding": e.get("finding") or "",
|
|
970
|
+
"k": e.get("k")}
|
|
971
|
+
for e in doc.get("entries", []) if e.get("cell")}
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
def counts(v: dict | None) -> bool | None:
|
|
975
|
+
"""Whether a verdict record makes its row count as a compiler
|
|
976
|
+
failure: a decision's ``counts_as`` first, else the
|
|
977
|
+
verdict (``confirmed``, or ``unchecked``: the row keeps its previous
|
|
978
|
+
outcome, flagged); None for no record."""
|
|
979
|
+
if v is None:
|
|
980
|
+
return None
|
|
981
|
+
if v.get("counts_as") in ("failure", "none"):
|
|
982
|
+
return v["counts_as"] == "failure"
|
|
983
|
+
return v.get("verdict") in ("confirmed", "unchecked")
|
|
984
|
+
|
|
985
|
+
|
|
986
|
+
def counts_as_failure(row: dict, verdicts: dict | None = None) -> bool:
|
|
987
|
+
"""Whether a failing row counts as a compiler failure: its gate
|
|
988
|
+
verdict is ``confirmed`` (own or inherited); a row the gate has not
|
|
989
|
+
seen keeps its outcome (results recorded before the gate
|
|
990
|
+
count until it has been run over them)."""
|
|
991
|
+
if not is_failure(outcome_class(row)):
|
|
992
|
+
return False
|
|
993
|
+
v = (verdicts if verdicts is not None else load_verdicts()).get(
|
|
994
|
+
cell_id(row))
|
|
995
|
+
if v is None:
|
|
996
|
+
g = row.get("gate") or ""
|
|
997
|
+
return g in ("", "pending", "confirmed", "n/a")
|
|
998
|
+
# a decided row counts as its decision says; an unchecked row keeps
|
|
999
|
+
# its previous outcome (flagged); an illegal program's failure never
|
|
1000
|
+
# counts
|
|
1001
|
+
return bool(counts(v))
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
def hook(queue: Path):
|
|
1005
|
+
"""A harness gate hook (offload.engine.harness.GATE_HOOKS) that appends
|
|
1006
|
+
every failing Result to `queue` as one JSON line."""
|
|
1007
|
+
import dataclasses
|
|
1008
|
+
|
|
1009
|
+
def append(res) -> None:
|
|
1010
|
+
d = dataclasses.asdict(res)
|
|
1011
|
+
with open(queue, "a") as fh:
|
|
1012
|
+
fh.write(json.dumps(d) + "\n")
|
|
1013
|
+
return append
|