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/c_gen.py
ADDED
|
@@ -0,0 +1,883 @@
|
|
|
1
|
+
"""The C programs of the slice: OpenMP 5.0, 5.2 and 6.0 in C11.
|
|
2
|
+
|
|
3
|
+
Each C program is the port of the Fortran program of the same atom
|
|
4
|
+
(``offload.engine.gen``), made by ``offload.engine.f2c.translate``. It keeps the
|
|
5
|
+
data, oracle, output line (``RESULT ran_on_host=<0|1> check=<pass|fail>``)
|
|
6
|
+
and evidence header lines. Ids are ``omp52-c-...`` and ``omp60-c-...``.
|
|
7
|
+
|
|
8
|
+
Atoms come from ``catalog.slice_atoms(version, lang="c")``. A program must
|
|
9
|
+
parse (offload.engine.c_program), carry its atom, violate no rule that holds in C,
|
|
10
|
+
and have header lines that match its evidence. ``C_EDITS`` fixes unfaithful
|
|
11
|
+
ports, ``C_LABELS`` relabels evidence that does not carry over, and
|
|
12
|
+
``C_UNGENERATABLE`` lists atoms with no C program. Illegal variants are the
|
|
13
|
+
translated Fortran variants (exceptions in ``C_NO_VARIANT``) plus ``C_ILLEGAL``.
|
|
14
|
+
The base check is ``gcc -std=c11 -pedantic-errors -fsyntax-only`` without
|
|
15
|
+
``-fopenmp``, against ``OMP_H_STUB``, a declaration-only ``omp.h``.
|
|
16
|
+
"""
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import dataclasses
|
|
20
|
+
import re
|
|
21
|
+
import subprocess
|
|
22
|
+
import tempfile
|
|
23
|
+
from functools import lru_cache
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
from typing import Callable, Iterable, Iterator
|
|
26
|
+
|
|
27
|
+
from offload.engine import f2c
|
|
28
|
+
from offload.engine import gen as G
|
|
29
|
+
from offload.engine.catalog import atom_langs, slice_atoms
|
|
30
|
+
from offload.engine.grammar import GrammarError
|
|
31
|
+
from offload.engine.rules import (ProgramError, default_rules, parse_program,
|
|
32
|
+
violations)
|
|
33
|
+
|
|
34
|
+
C_VERSIONS = (50, 52, 60)
|
|
35
|
+
CSTD = "c11"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class CGenError(G.GenError):
|
|
39
|
+
"""A C program that fails its own checks (never a silent skip)."""
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# --- the omp.h stub for the base-language check ----------------------------------
|
|
43
|
+
|
|
44
|
+
OMP_H_STUB = """\
|
|
45
|
+
/* Declaration-only stub of omp.h, for the base-language check only
|
|
46
|
+
(gcc -std=c11 -pedantic-errors -fsyntax-only, without -fopenmp): it
|
|
47
|
+
declares the OpenMP names the generated C programs use, with the types of
|
|
48
|
+
the OpenMP 5.2/6.0 C API, so that the programs compile as C11 without any
|
|
49
|
+
compiler's OpenMP header. Never linked, never run. */
|
|
50
|
+
#ifndef OMP_H_STUB
|
|
51
|
+
#define OMP_H_STUB
|
|
52
|
+
#include <stdint.h>
|
|
53
|
+
typedef uintptr_t omp_uintptr_t;
|
|
54
|
+
typedef enum omp_allocator_handle_t {
|
|
55
|
+
omp_null_allocator = 0, omp_default_mem_alloc = 1,
|
|
56
|
+
omp_large_cap_mem_alloc = 2, omp_const_mem_alloc = 3,
|
|
57
|
+
omp_high_bw_mem_alloc = 4, omp_low_lat_mem_alloc = 5,
|
|
58
|
+
omp_cgroup_mem_alloc = 6, omp_pteam_mem_alloc = 7,
|
|
59
|
+
omp_thread_mem_alloc = 8, omp_allocator_handle_t_max = UINTPTR_MAX
|
|
60
|
+
} omp_allocator_handle_t;
|
|
61
|
+
typedef enum omp_memspace_handle_t {
|
|
62
|
+
omp_default_mem_space = 0, omp_large_cap_mem_space = 1,
|
|
63
|
+
omp_const_mem_space = 2, omp_high_bw_mem_space = 3,
|
|
64
|
+
omp_low_lat_mem_space = 4, omp_memspace_handle_t_max = UINTPTR_MAX
|
|
65
|
+
} omp_memspace_handle_t;
|
|
66
|
+
typedef enum omp_alloctrait_key_t {
|
|
67
|
+
omp_atk_sync_hint = 1, omp_atk_alignment = 2, omp_atk_access = 3,
|
|
68
|
+
omp_atk_pool_size = 4, omp_atk_fallback = 5, omp_atk_fb_data = 6,
|
|
69
|
+
omp_atk_pinned = 7, omp_atk_partition = 8
|
|
70
|
+
} omp_alloctrait_key_t;
|
|
71
|
+
typedef struct omp_alloctrait_t {
|
|
72
|
+
omp_alloctrait_key_t key;
|
|
73
|
+
omp_uintptr_t value;
|
|
74
|
+
} omp_alloctrait_t;
|
|
75
|
+
typedef struct omp_depend_t { char opaque[16]; } omp_depend_t;
|
|
76
|
+
typedef enum omp_impex_t {
|
|
77
|
+
omp_not_impex = 0, omp_import = 1, omp_export = 2, omp_impex = 3
|
|
78
|
+
} omp_impex_t;
|
|
79
|
+
int omp_is_initial_device(void);
|
|
80
|
+
int omp_get_team_num(void);
|
|
81
|
+
int omp_get_thread_num(void);
|
|
82
|
+
int omp_get_default_device(void);
|
|
83
|
+
double omp_get_wtime(void);
|
|
84
|
+
int omp_get_num_threads(void);
|
|
85
|
+
int omp_get_num_teams(void);
|
|
86
|
+
int omp_get_num_devices(void);
|
|
87
|
+
int omp_get_device_num(void);
|
|
88
|
+
int omp_target_is_present(const void *ptr, int device_num);
|
|
89
|
+
#endif
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
OMP_H_STUB_NAMES = frozenset({
|
|
93
|
+
"omp_allocator_handle_t", "omp_memspace_handle_t", "omp_alloctrait_t",
|
|
94
|
+
"omp_alloctrait_key_t", "omp_depend_t", "omp_impex_t",
|
|
95
|
+
"omp_default_mem_alloc", "omp_default_mem_space", "omp_atk_alignment",
|
|
96
|
+
"omp_not_impex", "omp_import", "omp_export", "omp_impex",
|
|
97
|
+
"omp_is_initial_device", "omp_get_team_num", "omp_get_thread_num",
|
|
98
|
+
"omp_get_default_device", "omp_get_wtime", "omp_get_num_threads",
|
|
99
|
+
"omp_get_num_teams", "omp_get_num_devices", "omp_get_device_num",
|
|
100
|
+
"omp_target_is_present", "omp_null_allocator", "omp_large_cap_mem_alloc",
|
|
101
|
+
"omp_const_mem_alloc", "omp_high_bw_mem_alloc", "omp_low_lat_mem_alloc",
|
|
102
|
+
"omp_cgroup_mem_alloc", "omp_pteam_mem_alloc", "omp_thread_mem_alloc",
|
|
103
|
+
"omp_large_cap_mem_space", "omp_const_mem_space",
|
|
104
|
+
"omp_high_bw_mem_space", "omp_low_lat_mem_space"})
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def gcc_check(source: str, std: str = CSTD) -> tuple[bool, str]:
|
|
108
|
+
"""(ok, output) of ``gcc -std=<std> -pedantic-errors -fsyntax-only``
|
|
109
|
+
(no -fopenmp) on `source` with OMP_H_STUB as omp.h."""
|
|
110
|
+
with tempfile.TemporaryDirectory(prefix="cgen_") as d:
|
|
111
|
+
Path(d, "omp.h").write_text(OMP_H_STUB)
|
|
112
|
+
src = Path(d, "prog.c")
|
|
113
|
+
src.write_text(source)
|
|
114
|
+
res = subprocess.run(
|
|
115
|
+
["gcc", f"-std={std}", "-pedantic-errors", "-fsyntax-only",
|
|
116
|
+
"-Wno-unknown-pragmas", "-I", d, str(src)],
|
|
117
|
+
capture_output=True, text=True)
|
|
118
|
+
return res.returncode == 0, (res.stdout + res.stderr).replace(
|
|
119
|
+
d, "<tmp>")
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
# --- atoms --------------------------------------------------------------------------
|
|
123
|
+
|
|
124
|
+
def fortran_atom(atom: str) -> str:
|
|
125
|
+
"""The Fortran atom whose program a C atom's program is ported from:
|
|
126
|
+
a ``for`` compound from the ``do`` compound, others itself."""
|
|
127
|
+
if atom.startswith("omp.directive."):
|
|
128
|
+
words = atom[len("omp.directive."):].split("_")
|
|
129
|
+
return "omp.directive." + "_".join("do" if w == "for" else w
|
|
130
|
+
for w in words)
|
|
131
|
+
return atom
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def c_pid(atom: str, version: int) -> str:
|
|
135
|
+
return f"omp{version}-c-" + atom.removeprefix("omp.").replace(".", "-")
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def c_atoms(version: int) -> list[str]:
|
|
139
|
+
return slice_atoms(version, lang="c")
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
# --- header ------------------------------------------------------------------------
|
|
143
|
+
|
|
144
|
+
def _set_header(src: str, key: str, value: str) -> str:
|
|
145
|
+
new, n = re.subn(rf"^// {re.escape(key)}: .*$", f"// {key}: {value}",
|
|
146
|
+
src, count=1, flags=re.M)
|
|
147
|
+
if n != 1:
|
|
148
|
+
raise CGenError(f"no header line {key!r}")
|
|
149
|
+
return new
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _header_lines(src: str) -> list[str]:
|
|
153
|
+
out = []
|
|
154
|
+
for line in src.splitlines():
|
|
155
|
+
if not line.startswith("// "):
|
|
156
|
+
break
|
|
157
|
+
out.append(line)
|
|
158
|
+
return out
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def _add_header(src: str, line: str) -> str:
|
|
162
|
+
"""Append a header line (after the existing ones)."""
|
|
163
|
+
lines = src.split("\n")
|
|
164
|
+
k = 0
|
|
165
|
+
while k < len(lines) and lines[k].startswith("// "):
|
|
166
|
+
k += 1
|
|
167
|
+
lines.insert(k, f"// {line}")
|
|
168
|
+
return "\n".join(lines)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
def relabel(src: str, evidence: str, kind: str, reason: str,
|
|
172
|
+
basis: str | None, version: int, checked: bool = False) -> str:
|
|
173
|
+
"""Give a ported program the evidence level `evidence` (``unverified``
|
|
174
|
+
or a no-oracle category) with its header lines, as
|
|
175
|
+
gen_templates.Src.unverified / no_oracle do for Fortran: the old
|
|
176
|
+
unverified/no-oracle/basis lines are replaced; unless `checked`, the
|
|
177
|
+
program becomes observable=no."""
|
|
178
|
+
lines = [ln for ln in src.split("\n")
|
|
179
|
+
if not re.match(r"^// (unverified \(|no oracle \(|basis: |"
|
|
180
|
+
r"legality oracle: )", ln)]
|
|
181
|
+
src = "\n".join(lines)
|
|
182
|
+
src = _set_header(src, "evidence", evidence)
|
|
183
|
+
if not checked:
|
|
184
|
+
note = ("unverified: the check covers the device kernel, not the "
|
|
185
|
+
"atom" if evidence == "unverified" else
|
|
186
|
+
f"{evidence}: the check covers the device kernel, not the "
|
|
187
|
+
"atom")
|
|
188
|
+
src = _set_header(src, "observable", f"no ({note})")
|
|
189
|
+
if evidence == "unverified":
|
|
190
|
+
src = _add_header(src, f"unverified ({kind}): {reason}")
|
|
191
|
+
else:
|
|
192
|
+
src = _add_header(src, f"no oracle ({evidence}): {reason}")
|
|
193
|
+
src = _add_header(src, f"basis: {G.basis_text(basis, version)}")
|
|
194
|
+
return src
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
# --- C-specific edits and labels -------------------------------------------------------
|
|
198
|
+
|
|
199
|
+
def _sub(old: str, new: str, count: int = 1):
|
|
200
|
+
def fn(src: str) -> str:
|
|
201
|
+
n = src.count(old)
|
|
202
|
+
if n != count:
|
|
203
|
+
raise CGenError(f"edit: {old!r} occurs {n} times, expected "
|
|
204
|
+
f"{count}")
|
|
205
|
+
return src.replace(old, new)
|
|
206
|
+
return fn
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def _chain(*fns):
|
|
210
|
+
def fn(src: str) -> str:
|
|
211
|
+
for f in fns:
|
|
212
|
+
src = f(src)
|
|
213
|
+
return src
|
|
214
|
+
return fn
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def _note(text: str):
|
|
218
|
+
return lambda src: _add_header(src, text)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
# atom -> (reason, transform of the translated source), applied to the C
|
|
222
|
+
# program at every version where the atom has one (filled below)
|
|
223
|
+
C_EDITS: dict[str, tuple[str, Callable[[str], str]]] = {}
|
|
224
|
+
# atom -> (evidence, kind, reason, basis id) relabelling of a port whose
|
|
225
|
+
# Fortran oracle does not carry over to C
|
|
226
|
+
C_LABELS: dict[str, tuple[str, str, str, str | None]] = {}
|
|
227
|
+
# version -> atom -> reason: no C program
|
|
228
|
+
C_UNGENERATABLE: dict[int, dict[str, str]] = {50: {
|
|
229
|
+
# The 5.0 Fortran program of linear(val(x)) puts the clause on
|
|
230
|
+
# a declare simd directive (the 5.0 worksharing-loop and simd constructs
|
|
231
|
+
# forbid a linear modifier: 5.0 §2.9.2, p.107; §2.9.3.1, p.113), whose
|
|
232
|
+
# procedure offload.engine.f2c does not port; declare simd is outside the
|
|
233
|
+
# device-offload slice
|
|
234
|
+
"omp.clause.linear.val": "the 5.0 program needs linear(val(x)) on a "
|
|
235
|
+
"declare simd directive (5.0 forbids the modifier on the loop "
|
|
236
|
+
"constructs), and compliance.f2c does not port a declare simd "
|
|
237
|
+
"procedure; declare simd is outside the slice",
|
|
238
|
+
}, 52: {}, 60: {}}
|
|
239
|
+
# The C rules (lang c) without a 5.0 sentence, with the reason
|
|
240
|
+
C_RULES_NOT_50 = {
|
|
241
|
+
"intervening-loop-001": "5.0 states no restriction on the statements "
|
|
242
|
+
"of intervening code (5.0 §2.9.2, p.103 says only how often it runs)",
|
|
243
|
+
"finalbody-loop-001": "5.0 has no final-loop-body restriction (the "
|
|
244
|
+
"canonical loop form of 5.0 §2.9.1 has no such term)",
|
|
245
|
+
"default-dsa-002": "the 5.0 C default clause has no firstprivate or "
|
|
246
|
+
"private argument (5.0 §2.19.4.1: default(shared | none))",
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def _edit(atoms, reason, fn):
|
|
251
|
+
for a in ([atoms] if isinstance(atoms, str) else atoms):
|
|
252
|
+
C_EDITS[a] = (reason, fn)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
# begin declare target (C only): the declare target program's module
|
|
256
|
+
# variable in a delimited region instead of the extended-list form; the
|
|
257
|
+
# same oracle (the device copy of dv is written by one target region and
|
|
258
|
+
# read by the next)
|
|
259
|
+
_edit("omp.directive.begin_declare_target",
|
|
260
|
+
"the delimited form (5.2 §7.8.2, 6.0 §9.9.2) of the declare target "
|
|
261
|
+
"program: dv is declared between begin declare target and end "
|
|
262
|
+
"declare target instead of being named by declare target(dv)",
|
|
263
|
+
_chain(_sub("int dv = 1;\nint dw = 1;\n#pragma omp declare target(dv)",
|
|
264
|
+
"#pragma omp begin declare target\nint dv = 1;\n"
|
|
265
|
+
"#pragma omp end declare target\nint dw = 1;"),
|
|
266
|
+
_note("C: dv is declared in a begin declare target ... end "
|
|
267
|
+
"declare target region (its implicit extended list)")))
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
# The Fortran device_type programs name f in the
|
|
271
|
+
# deprecated `to` at 5.2 (CCE 19 ftn rejects `enter`); every clang C front
|
|
272
|
+
# end rejects `to` at -fopenmp-version=52 (finding
|
|
273
|
+
# clang-c-declare-target-to-omp52.c), so the C ports would measure that
|
|
274
|
+
# rejection, not device_type. The C 5.2 ports use `enter` (5.2 §5.8.4
|
|
275
|
+
# p.157: to is a deprecated synonym of enter); at 6.0 they already do.
|
|
276
|
+
def _dt_enter(src: str) -> str:
|
|
277
|
+
old = "#pragma omp declare target to(f)"
|
|
278
|
+
if old not in src or "// id: omp50-" in src:
|
|
279
|
+
# 5.0 has no enter clause (5.2 §B.2, p.627: enter was
|
|
280
|
+
# added as a synonym of to), so the 5.0 C port keeps to(f)
|
|
281
|
+
return src
|
|
282
|
+
return _add_header(src.replace(old, "#pragma omp declare target enter(f)"),
|
|
283
|
+
"C: f is named in an enter clause (the deprecated "
|
|
284
|
+
"synonym to, which the Fortran program keeps for CCE "
|
|
285
|
+
"19, is rejected by the clang C front ends at 5.2)")
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
_edit(("omp.clause.device_type", "omp.clause.device_type.any",
|
|
289
|
+
"omp.clause.device_type.nohost"),
|
|
290
|
+
"declare target enter(f) instead of the deprecated to(f)",
|
|
291
|
+
_dt_enter)
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
# defaultmap(...: pointer): in C the pointer category is the pointer
|
|
295
|
+
# variable itself (5.2 §5.8.7, 6.0 §7.9.9), not a Fortran POINTER's target,
|
|
296
|
+
# and the port's device writes through wp would dereference a host address
|
|
297
|
+
# in copy mode. The C oracle: wp's pointee is mapped by target enter data;
|
|
298
|
+
# without the clause a referenced pointer is treated as the base pointer of
|
|
299
|
+
# a zero-length array section (5.2 §5.8.1, p.148; 6.0 §7.9.3, p.277), so
|
|
300
|
+
# the device sees the address of the device copy; with defaultmap(to:
|
|
301
|
+
# pointer) the pointer is mapped as a variable and keeps the host address.
|
|
302
|
+
# The device's value of wp comes back in pw; in copy mode it must equal the
|
|
303
|
+
# host address (under unified memory the two coincide: copy_mode_only).
|
|
304
|
+
def _defaultmap_pointer(src: str) -> str:
|
|
305
|
+
start = src.index(" #pragma omp target map(to: a) map(from: b) "
|
|
306
|
+
"map(tofrom: host_flag) defaultmap(to: pointer)")
|
|
307
|
+
end = src.index(" free(wp);")
|
|
308
|
+
# Pw starts at NULL (never the host address the check wants),
|
|
309
|
+
# so a lost copy-back fails deterministically
|
|
310
|
+
new = """\
|
|
311
|
+
pw = NULL;
|
|
312
|
+
#pragma omp target enter data map(to: wp[0:n])
|
|
313
|
+
#pragma omp target map(to: a) map(from: b) map(from: pw) map(tofrom: host_flag) \\
|
|
314
|
+
defaultmap(to: pointer)
|
|
315
|
+
{
|
|
316
|
+
host_flag = (omp_is_initial_device() ? 1 : 0);
|
|
317
|
+
pw = wp;
|
|
318
|
+
for (int i = 1; i <= n; i++) {
|
|
319
|
+
b[i - 1] = 2 * a[i - 1] + 1;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
#pragma omp target exit data map(delete: wp[0:n])
|
|
323
|
+
if (!shared_mem) pres = pres && (pw == wp);
|
|
324
|
+
"""
|
|
325
|
+
src = src[:start] + new + src[end:]
|
|
326
|
+
src = src.replace(" int *wp;\n", " int *wp;\n int *pw;\n", 1)
|
|
327
|
+
return _add_header(src, "C: the pointer category is the pointer variable "
|
|
328
|
+
"itself; the check compares the device's value of wp "
|
|
329
|
+
"(mapped to by defaultmap) with the host address, "
|
|
330
|
+
"while the pointee is present (without the clause the "
|
|
331
|
+
"pointer is attached to the device copy)")
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
_edit("omp.clause.defaultmap.pointer",
|
|
335
|
+
"C pointer category: the pointer's own value is mapped (see "
|
|
336
|
+
"_defaultmap_pointer)", _defaultmap_pointer)
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
# The C audit is the first audit that could run these programs:
|
|
340
|
+
# no Fortran toolchain passes their originals (Fortran disposition
|
|
341
|
+
# unaudited_no_passing_original), so the weakness of their checks showed
|
|
342
|
+
# only in C (the mutant survived). The C programs get a check that
|
|
343
|
+
# separates where one exists (C_EDITS below), or the label the spec gives
|
|
344
|
+
# (C_LABELS); the Fortran programs are unchanged (their check is the same
|
|
345
|
+
# and stays unaudited there).
|
|
346
|
+
def _w_unchanged(src: str, copy_only: bool = False) -> str:
|
|
347
|
+
"""Check that the region's writes to w do not reach the host's w (the
|
|
348
|
+
category's behaviour keeps w private or unmapped); `copy_only`: only
|
|
349
|
+
in copy mode (storage map-type: under unified memory the storage is
|
|
350
|
+
the host's)."""
|
|
351
|
+
check = (" bool wz = true;\n for (int k_ = 0; k_ < n; k_++)\n"
|
|
352
|
+
" wz = wz && (w[k_] == 0);\n")
|
|
353
|
+
if copy_only:
|
|
354
|
+
src = src.replace(" bool ok;\n", " bool ok;\n bool pres;\n"
|
|
355
|
+
" bool shared_mem;\n int zc[1];\n", 1)
|
|
356
|
+
detector = (" pres = true;\n zc[0] = 0;\n #pragma omp target "
|
|
357
|
+
"map(to: zc)\n {\n zc[0] = 1;\n }\n shared_mem "
|
|
358
|
+
"= zc[0] == 1;\n")
|
|
359
|
+
src = src.replace(" c = 0;\n", detector + " c = 0;\n", 1)
|
|
360
|
+
check += " if (!shared_mem) pres = pres && wz;\n"
|
|
361
|
+
src = src.replace(" ok = t2_;", " ok = t2_ && pres;", 1)
|
|
362
|
+
src = _set_header(src, "evidence", "copy_mode_only")
|
|
363
|
+
else:
|
|
364
|
+
src = src.replace(" ok = t2_;", " ok = t2_ && wz;", 1)
|
|
365
|
+
marker = " bool t2_ = true;\n"
|
|
366
|
+
if src.count(marker) != 1 or "ok = t2_ &&" not in src:
|
|
367
|
+
raise CGenError("w check: the program shape changed")
|
|
368
|
+
src = src.replace(marker, check + marker, 1)
|
|
369
|
+
return _add_header(src, "C: the check also reads w after the region: "
|
|
370
|
+
"the defaultmap category keeps the region's writes "
|
|
371
|
+
"to the aggregate w " + ("unmapped (copy mode)" if
|
|
372
|
+
copy_only else "private")
|
|
373
|
+
+ "; without the clause w is mapped tofrom and they "
|
|
374
|
+
"come back (the Fortran program checks b only)")
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
_edit(["omp.clause.defaultmap.firstprivate", "omp.clause.defaultmap.private"],
|
|
378
|
+
"the check also reads w (the port of the Fortran check, b only, "
|
|
379
|
+
"survived the C mutant)", _w_unchanged)
|
|
380
|
+
_edit("omp.clause.defaultmap.storage",
|
|
381
|
+
"the check also reads w in copy mode (storage: allocated, not "
|
|
382
|
+
"transferred)", lambda s: _w_unchanged(s, copy_only=True))
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
def _legality(rid_stem: str):
|
|
386
|
+
def fn(src: str) -> str:
|
|
387
|
+
v = re.search(r"^// id: omp(\d\d)-", src, re.M).group(1)
|
|
388
|
+
lines = [ln for ln in src.split("\n")
|
|
389
|
+
if not re.match(r"^// (unverified \(|no oracle \(|basis: )",
|
|
390
|
+
ln)]
|
|
391
|
+
src = "\n".join(lines)
|
|
392
|
+
src = _set_header(src, "evidence", "legality")
|
|
393
|
+
src = _set_header(src, "observable", "no (legality: the check covers "
|
|
394
|
+
"the device kernel, not the atom)")
|
|
395
|
+
return _add_header(src, f"legality oracle: OMP{v}-{rid_stem}")
|
|
396
|
+
return fn
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
# C 5.0 has default(shared | none) only (private and firstprivate
|
|
400
|
+
# came in 5.1, 5.1 §B.2 p.669), so the 5.0 ports of the programs that use
|
|
401
|
+
# default(private) use default(none) with every variable listed; the
|
|
402
|
+
# clause's effect is then the compile-time restriction of default(none),
|
|
403
|
+
# whose oracle is the illegal variant of default-dsa-001 (as default(none)
|
|
404
|
+
# at 5.2); the 5.2 and 6.0 ports are unchanged
|
|
405
|
+
def _default_none_50(listed: str):
|
|
406
|
+
def fn(src: str) -> str:
|
|
407
|
+
if "// id: omp50-" not in src:
|
|
408
|
+
return src
|
|
409
|
+
old = "default(private) shared(a, b)"
|
|
410
|
+
if src.count(old) != 1:
|
|
411
|
+
raise CGenError("default(private): the program shape changed")
|
|
412
|
+
src = src.replace(old, f"default(none) {listed}")
|
|
413
|
+
src = _add_header(src, "C 5.0: default(none) with every referenced "
|
|
414
|
+
"variable listed (default(private) is not C 5.0)")
|
|
415
|
+
return _legality("default-dsa-001")(src)
|
|
416
|
+
return fn
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
_edit("omp.clause.default", "C 5.0: default(none) (no default(private) "
|
|
420
|
+
"in C 5.0)", _default_none_50("shared(a, b) private(c)"))
|
|
421
|
+
_edit("omp.clause.shared", "C 5.0: default(none) (no default(private) "
|
|
422
|
+
"in C 5.0)", _default_none_50("shared(a, b)"))
|
|
423
|
+
|
|
424
|
+
_edit("omp.clause.defaultmap.none",
|
|
425
|
+
"defaultmap(none) only requires every referenced variable to have an "
|
|
426
|
+
"explicit data-sharing or mapping attribute: a compile-time "
|
|
427
|
+
"restriction (5.2 §5.8.7 p.162, 6.0 §7.9.9), so its oracle is the "
|
|
428
|
+
"illegal variant of defaultmap-map-003 (as default(none) and "
|
|
429
|
+
"default-dsa-001); the C mutant survived", _legality(
|
|
430
|
+
"defaultmap-map-003"))
|
|
431
|
+
|
|
432
|
+
C_LABELS.update({
|
|
433
|
+
# (evidence, kind, reason, basis id)
|
|
434
|
+
"omp.clause.default.aggregate": (
|
|
435
|
+
"equivalent_default", "", "default(shared: aggregate) on the "
|
|
436
|
+
"parallel construct shares the aggregates it does not list, which "
|
|
437
|
+
"is what a parallel construct does without a default clause (C "
|
|
438
|
+
"mutant survived)", "default_parallel_shared"),
|
|
439
|
+
"omp.clause.default.pointer": (
|
|
440
|
+
"equivalent_default", "", "default(shared: pointer) on the "
|
|
441
|
+
"parallel construct shares the pointers it does not list, which is "
|
|
442
|
+
"what a parallel construct does without a default clause (C mutant "
|
|
443
|
+
"survived)", "default_parallel_shared"),
|
|
444
|
+
"omp.clause.default.scalar": (
|
|
445
|
+
"equivalent_default", "", "default(shared: scalar) on the parallel "
|
|
446
|
+
"construct shares the scalars it does not list, which is what a "
|
|
447
|
+
"parallel construct does without a default clause (C mutant "
|
|
448
|
+
"survived)", "default_parallel_shared"),
|
|
449
|
+
"omp.clause.reduction.original": (
|
|
450
|
+
"equivalent_default", "", "original(shared) on an item that is "
|
|
451
|
+
"shared in the enclosing context (s, mapped tofrom on the target "
|
|
452
|
+
"leaf) assumes what the default sharing argument assumes there (C "
|
|
453
|
+
"mutant survived)", "reduction_original_default"),
|
|
454
|
+
"omp.clause.num_threads.strict": (
|
|
455
|
+
"unverified", "oracle_not_written", "the program asks for 4 "
|
|
456
|
+
"threads, which both toolchains give with or without strict (C "
|
|
457
|
+
"mutant survived); the oracle is a negative probe: a strict "
|
|
458
|
+
"request the implementation cannot meet must end in runtime error "
|
|
459
|
+
"termination (6.0 §12.1.2), without strict the region runs with "
|
|
460
|
+
"fewer threads", None),
|
|
461
|
+
"omp.clause.replayable": (
|
|
462
|
+
"unverified", "oracle_not_written", "outside a taskgraph region a "
|
|
463
|
+
"replayable construct runs as any other (C mutant survived); the "
|
|
464
|
+
"oracle needs a taskgraph region (6.0 §14.3) recorded and "
|
|
465
|
+
"replayed, where only a replayable construct is executed again", None),
|
|
466
|
+
"omp.clause.allocate": (
|
|
467
|
+
"unverified", "needs_other_infrastructure", "the program cannot "
|
|
468
|
+
"observe which allocator provides the private copy of t: no OpenMP "
|
|
469
|
+
"routine reports a variable's allocator and the default allocator "
|
|
470
|
+
"returns ordinary memory (C mutant survived on AFAR)", None),
|
|
471
|
+
"omp.clause.allocate.allocator": (
|
|
472
|
+
"unverified", "needs_other_infrastructure", "the program cannot "
|
|
473
|
+
"observe which allocator provides the private copy of t (no OpenMP "
|
|
474
|
+
"routine reports a variable's allocator; omp_default_mem_alloc and "
|
|
475
|
+
"the default allocator both return ordinary memory; C mutant "
|
|
476
|
+
"survived on AFAR)", None),
|
|
477
|
+
"omp.clause.allocate.allocator_simple_modifier": (
|
|
478
|
+
"unverified", "needs_other_infrastructure", "the program cannot "
|
|
479
|
+
"observe which allocator provides the private copy of t (no OpenMP "
|
|
480
|
+
"routine reports a variable's allocator; C mutant survived on "
|
|
481
|
+
"AFAR)", None),
|
|
482
|
+
"omp.clause.allocate.align": (
|
|
483
|
+
"unverified", "oracle_not_written", "the program does not check the "
|
|
484
|
+
"private copy's address: a check of its address modulo an "
|
|
485
|
+
"alignment larger than any default (e.g. align(4096)) would fail "
|
|
486
|
+
"without the modifier (C mutant survived on AFAR)", None),
|
|
487
|
+
"omp.clause.uses_allocators": (
|
|
488
|
+
"unverified", "needs_other_infrastructure", "uses_allocators("
|
|
489
|
+
"omp_default_mem_alloc) makes a predefined allocator available in "
|
|
490
|
+
"the region (5.2 §6.8, 6.0 §8.8); which allocator provides the "
|
|
491
|
+
"private copy is not observable by the program (C mutant survived "
|
|
492
|
+
"on both toolchains)", None),
|
|
493
|
+
})
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
# --- building -----------------------------------------------------------------------
|
|
497
|
+
|
|
498
|
+
def _c_rules_violations(source: str, version: int) -> list[str]:
|
|
499
|
+
return violations(parse_program(source, version, lang="c"), version)
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
def _parsed_atoms(source: str, version: int) -> frozenset:
|
|
503
|
+
tree = parse_program(source, version, lang="c")
|
|
504
|
+
return frozenset().union(*(d.atoms for d in tree.directives),
|
|
505
|
+
*(d.atoms for d in tree.ends.values()))
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
def _port(f_source: str, version: int, pid: str, atom: str,
|
|
509
|
+
f_pid: str) -> str:
|
|
510
|
+
try:
|
|
511
|
+
src = f2c.translate(f_source, version)
|
|
512
|
+
except (f2c.TranslateError, GrammarError) as err:
|
|
513
|
+
raise CGenError(f"{pid}: not ported: {err}") from err
|
|
514
|
+
lines = src.split("\n")
|
|
515
|
+
lines[0] = (f"// Generated by compliance.c_gen (OpenMP {version // 10}."
|
|
516
|
+
f"{version % 10}, C11): the C port (compliance.f2c) of "
|
|
517
|
+
f"{f_pid}. Do not edit.")
|
|
518
|
+
src = "\n".join(lines)
|
|
519
|
+
src = _set_header(src, "id", pid)
|
|
520
|
+
src = _set_header(src, "primary atom", atom)
|
|
521
|
+
src = _set_header(src, "std", CSTD)
|
|
522
|
+
# Fortran needs a device-callable c_f_pointer; the C port assigns the
|
|
523
|
+
# pointer instead (no such need)
|
|
524
|
+
m = re.search(r"^// needs: (.*)$", src, re.M)
|
|
525
|
+
if m and "device_c_f_pointer" in m.group(1):
|
|
526
|
+
needs = [x.strip() for x in m.group(1).split(",")
|
|
527
|
+
if x.strip() != "device_c_f_pointer"]
|
|
528
|
+
src = _set_header(src, "needs", ", ".join(needs) or "none")
|
|
529
|
+
return src
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
def _meta(src: str) -> dict:
|
|
533
|
+
head = {}
|
|
534
|
+
for line in _header_lines(src):
|
|
535
|
+
m = re.match(r"^// ([a-z_ ]+): (.*)$", line)
|
|
536
|
+
if m:
|
|
537
|
+
head.setdefault(m.group(1), m.group(2))
|
|
538
|
+
return head
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
def _finish(pid: str, atom: str, version: int, src: str,
|
|
542
|
+
legal: bool = True, violates: str | None = None,
|
|
543
|
+
fprog: G.Program | None = None) -> G.Program:
|
|
544
|
+
try:
|
|
545
|
+
atoms = _parsed_atoms(src, version)
|
|
546
|
+
found = _c_rules_violations(src, version)
|
|
547
|
+
except (GrammarError, ProgramError) as err:
|
|
548
|
+
raise CGenError(f"{pid}: {err}\n{src}") from err
|
|
549
|
+
if legal and atom not in atoms:
|
|
550
|
+
raise CGenError(f"{pid}: the program does not exercise {atom}\n"
|
|
551
|
+
f"{src}")
|
|
552
|
+
if legal and found:
|
|
553
|
+
raise CGenError(f"{pid}: legal program violates {found}\n{src}")
|
|
554
|
+
head = _meta(src)
|
|
555
|
+
evidence = head["evidence"]
|
|
556
|
+
unv = G._UNVERIFIED_LINE.findall(src)
|
|
557
|
+
noo = G._NO_ORACLE_LINE.findall(src)
|
|
558
|
+
if (evidence == "unverified") != bool(unv) or (
|
|
559
|
+
evidence in G.NO_ORACLE) != bool(noo) or (
|
|
560
|
+
evidence == "legality") != bool(G.legality_of(src)):
|
|
561
|
+
raise CGenError(f"{pid}: evidence {evidence!r} and its header "
|
|
562
|
+
"lines disagree")
|
|
563
|
+
needs = () if head["needs"] == "none" else tuple(
|
|
564
|
+
x.strip() for x in head["needs"].split(","))
|
|
565
|
+
expect = head.get("expect", "result").split()[0]
|
|
566
|
+
prog = G.Program(pid, "c", src, atoms, atom, legal, violates,
|
|
567
|
+
not head["observable"].startswith("no"), CSTD, needs,
|
|
568
|
+
evidence, expect, head.get("token", ""), "omp",
|
|
569
|
+
G.scope_of(src)[0])
|
|
570
|
+
G._check_scope(prog)
|
|
571
|
+
return prog
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
@lru_cache(maxsize=None)
|
|
575
|
+
def c_legal(atom: str, version: int) -> G.Program:
|
|
576
|
+
"""The C program of `atom` at `version`."""
|
|
577
|
+
if version not in C_VERSIONS:
|
|
578
|
+
raise CGenError(f"no C programs at {version}")
|
|
579
|
+
if atom in C_UNGENERATABLE.get(version, {}):
|
|
580
|
+
raise CGenError(f"{atom}: {C_UNGENERATABLE[version][atom]}")
|
|
581
|
+
pid = c_pid(atom, version)
|
|
582
|
+
fa = fortran_atom(atom)
|
|
583
|
+
if fa == "omp.directive.begin_declare_target":
|
|
584
|
+
fa = "omp.directive.declare_target"
|
|
585
|
+
fprog = G._legal(fa, version)
|
|
586
|
+
src = _port(fprog.source, version, pid, atom, fprog.id)
|
|
587
|
+
if atom in C_EDITS:
|
|
588
|
+
src = C_EDITS[atom][1](src)
|
|
589
|
+
if atom in C_LABELS and fprog.evidence in G.AUDITED:
|
|
590
|
+
ev, kind, reason, basis = C_LABELS[atom]
|
|
591
|
+
src = relabel(src, ev, kind, reason, basis, version)
|
|
592
|
+
return _finish(pid, atom, version, src, fprog=fprog)
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
@lru_cache(maxsize=None)
|
|
596
|
+
def c_hostdev(atom: str, version: int) -> G.Program:
|
|
597
|
+
"""The C port of the host+device pattern program of `atom` (offload.engine.gen.HOST_DEVICE)."""
|
|
598
|
+
fprog = G._hostdev(fortran_atom(atom), version)
|
|
599
|
+
pid = c_pid(atom, version) + "-hostdev"
|
|
600
|
+
src = _port(fprog.source, version, pid, atom, fprog.id)
|
|
601
|
+
return _finish(pid, atom, version, src, fprog=fprog)
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
# --- illegal variants ---------------------------------------------------------------
|
|
605
|
+
|
|
606
|
+
# rule id -> reason: a generated Fortran variant with no C variant
|
|
607
|
+
C_NO_VARIANT: dict[str, str] = {}
|
|
608
|
+
# (C_ILLEGAL entries for a rule with a Fortran variant replace its port)
|
|
609
|
+
# C-only variants: rule id -> (base C atom, transform of its C source)
|
|
610
|
+
C_ILLEGAL: dict[str, tuple[str, Callable[[str], str]]] = {}
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
def _ins_after(pattern: str, lines: list[str]):
|
|
614
|
+
"""Insert `lines` after the one line matching `pattern` (re.search),
|
|
615
|
+
at its indentation."""
|
|
616
|
+
def fn(src: str) -> str:
|
|
617
|
+
out = src.split("\n")
|
|
618
|
+
hits = [k for k, ln in enumerate(out) if re.search(pattern, ln)]
|
|
619
|
+
if len(hits) != 1:
|
|
620
|
+
raise CGenError(f"edit: {pattern!r} matches {len(hits)} lines")
|
|
621
|
+
k = hits[0]
|
|
622
|
+
ind = out[k][:len(out[k]) - len(out[k].lstrip())]
|
|
623
|
+
out[k + 1:k + 1] = [ind + x for x in lines]
|
|
624
|
+
return "\n".join(out)
|
|
625
|
+
return fn
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
def _move_to_main(line: str):
|
|
629
|
+
"""Move a file-scope line into main (its first statement)."""
|
|
630
|
+
return _chain(_sub(line + "\n", ""),
|
|
631
|
+
_sub("int main(void) {\n", f"int main(void) {{\n {line}\n"))
|
|
632
|
+
|
|
633
|
+
|
|
634
|
+
def _wrap_loop_in_block(pragma_re: str):
|
|
635
|
+
"""The loop after the matching pragma made the statement of a compound
|
|
636
|
+
statement: the directive is then followed by a block, not a loop."""
|
|
637
|
+
def fn(src: str) -> str:
|
|
638
|
+
out = src.split("\n")
|
|
639
|
+
hits = [k for k, ln in enumerate(out) if re.search(pragma_re, ln)]
|
|
640
|
+
if len(hits) != 1:
|
|
641
|
+
raise CGenError(f"edit: {pragma_re!r} matches {len(hits)} lines")
|
|
642
|
+
k = hits[0]
|
|
643
|
+
while out[k].rstrip().endswith("\\"):
|
|
644
|
+
k += 1
|
|
645
|
+
ind = out[k + 1][:len(out[k + 1]) - len(out[k + 1].lstrip())]
|
|
646
|
+
depth, j = 0, k + 1
|
|
647
|
+
while True:
|
|
648
|
+
depth += out[j].count("{") - out[j].count("}")
|
|
649
|
+
if depth == 0 and j > k + 1 or (depth == 0 and "{" not in
|
|
650
|
+
out[j] and j == k + 1):
|
|
651
|
+
break
|
|
652
|
+
j += 1
|
|
653
|
+
out[k + 1:j + 1] = [ind + "{"] + [" " + x for x in out[k + 1:j + 1]] \
|
|
654
|
+
+ [ind + "}"]
|
|
655
|
+
return "\n".join(out)
|
|
656
|
+
return fn
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
_FOR_I = "for (int i = 1; i <= n; i++) {"
|
|
660
|
+
_PFOR_LOOP = r"#pragma omp parallel for default\(none\) shared\(a, b, nref, nthr\)$"
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
def _c_illegal(stem, versions, base, fn):
|
|
664
|
+
for v in versions:
|
|
665
|
+
C_ILLEGAL[f"OMP{v}-{stem}"] = (base, fn)
|
|
666
|
+
|
|
667
|
+
|
|
668
|
+
BOTH = (52, 60)
|
|
669
|
+
# The C-only variants also at 5.0 where the rule has its 5.0 sentence
|
|
670
|
+
ALL = (50, 52, 60)
|
|
671
|
+
# the Fortran assoc-loop-001 variant replaces the DO loop by an array
|
|
672
|
+
# assignment, whose C port is a canonical for loop again; the C variant
|
|
673
|
+
# puts the loop in a compound statement, which is not a loop nest
|
|
674
|
+
_c_illegal("assoc-loop-001", ALL, "omp.directive.parallel_for",
|
|
675
|
+
_wrap_loop_in_block(r"#pragma omp parallel for"))
|
|
676
|
+
# the Fortran declaretarget-clause-002 variant (device_type alone in the
|
|
677
|
+
# procedure) ports to the legal delimited form; in C the directive with
|
|
678
|
+
# clauses and no enter or link is a file-scope declare target
|
|
679
|
+
_c_illegal("declaretarget-clause-002", (52,), "omp.clause.device_type.any",
|
|
680
|
+
_chain(_sub("#pragma omp declare target enter(f) device_type(any)",
|
|
681
|
+
"#pragma omp declare target device_type(any)"),
|
|
682
|
+
# the legal port's note does not apply
|
|
683
|
+
_sub("// C: f is named in an enter clause (the deprecated "
|
|
684
|
+
"synonym to, which the Fortran program keeps for CCE "
|
|
685
|
+
"19, is rejected by the clang C front ends at 5.2)\n",
|
|
686
|
+
"")))
|
|
687
|
+
# requires after a device construct: in C at file scope after main (the
|
|
688
|
+
# Fortran variant's requires in the program body is also not at file scope)
|
|
689
|
+
_c_illegal("requires-placement-002", (50, 52), "omp.directive.target",
|
|
690
|
+
lambda src: src.rstrip("\n") +
|
|
691
|
+
"\n#pragma omp requires unified_shared_memory\n")
|
|
692
|
+
# --- C-only rules --------------------------------------------------------------
|
|
693
|
+
_c_illegal("requires-placement-005", ALL, "omp.directive.requires",
|
|
694
|
+
_move_to_main("#pragma omp requires "
|
|
695
|
+
"atomic_default_mem_order(seq_cst)"))
|
|
696
|
+
_c_illegal("directive-placement-001", ALL, "omp.directive.target_update",
|
|
697
|
+
_sub(" #pragma omp target update to(a)\n",
|
|
698
|
+
" if (host_flag == 1)\n #pragma omp target update to(a)\n"
|
|
699
|
+
" ;\n"))
|
|
700
|
+
_c_illegal("canonical-loop-001", ALL, "omp.directive.parallel_for",
|
|
701
|
+
_sub(" for (int i = 1; i <= n; i++) {\n b[i - 1] = 2 * a",
|
|
702
|
+
" for (int i = n + 1; i <= n; i--) {\n b[i - 1] = 2 * a"))
|
|
703
|
+
_c_illegal("canonical-loop-002", ALL, "omp.directive.parallel_for",
|
|
704
|
+
_sub(" for (int i = 1; i <= n; i++) {\n b[i - 1] = 2 * a",
|
|
705
|
+
" for (int i = n + 1; n >= i; i--) {\n b[i - 1] = 2 * a"))
|
|
706
|
+
_c_illegal("canonical-loop-003", ALL, "omp.directive.parallel_for",
|
|
707
|
+
_sub(" for (int i = 1; i <= n; i++) {\n b[i - 1] = 2 * a",
|
|
708
|
+
" for (int i = 1; i != n + 1; i += 2) {\n"
|
|
709
|
+
" b[i - 1] = 2 * a"))
|
|
710
|
+
_c_illegal("loopvar-loop-004", ALL, "omp.directive.parallel_for",
|
|
711
|
+
_sub(" for (int i = 1; i <= n; i++) {\n b[i - 1] = 2 * a",
|
|
712
|
+
" for (float f = 1; f <= n; f++) {\n int i = f;\n"
|
|
713
|
+
" b[i - 1] = 2 * a"))
|
|
714
|
+
_c_illegal("intervening-loop-001", BOTH, "omp.clause.collapse",
|
|
715
|
+
_ins_after(r"for \(int j = 1; j <= 2; j\+\+\) \{$",
|
|
716
|
+
[" while (0) { }"]))
|
|
717
|
+
_c_illegal("finalbody-loop-001", BOTH, "omp.directive.parallel_for",
|
|
718
|
+
_ins_after(r"b\[i - 1\] = 2 \* a\[i - 1\] \+ 1;$",
|
|
719
|
+
["if (i > n) break;"]))
|
|
720
|
+
_c_illegal("linear-clause-005", ALL, "omp.clause.linear",
|
|
721
|
+
_sub(" int x;\n", " double x;\n"))
|
|
722
|
+
_c_illegal("aligned-clause-003", ALL, "omp.clause.aligned",
|
|
723
|
+
_chain(_sub(" bool ok;\n", " bool ok;\n int al;\n"),
|
|
724
|
+
_sub("aligned(a: 8)", "aligned(a: 8) aligned(al)")))
|
|
725
|
+
_c_illegal("isdeviceptr-clause-001", (52,), "omp.clause.is_device_ptr",
|
|
726
|
+
_chain(_sub(" bool ok;\n", " bool ok;\n int dq = 0;\n"),
|
|
727
|
+
_sub("is_device_ptr(pa, pb)", "is_device_ptr(pa, pb, dq)")))
|
|
728
|
+
# The 5.0 program's target region is in dev_kernel
|
|
729
|
+
_c_illegal("isdeviceptr-clause-001", (50,), "omp.clause.is_device_ptr",
|
|
730
|
+
_chain(_sub(" int *qq;\n", " int *qq;\n int dq = 0;\n"),
|
|
731
|
+
_sub("is_device_ptr(pa, pb)", "is_device_ptr(pa, pb, dq)")))
|
|
732
|
+
_c_illegal("reduction-clause-007", ALL, "omp.clause.reduction.max",
|
|
733
|
+
_chain(_sub(" int sref;\n", " int sref;\n int *mp = 0;\n"),
|
|
734
|
+
_sub("reduction(max: s)", "reduction(max: s, mp)")))
|
|
735
|
+
_c_illegal("reduction-clause-008", ALL, "omp.clause.reduction.max",
|
|
736
|
+
_chain(_sub(" int sref;\n", " int sref;\n const int cs = 0;\n"),
|
|
737
|
+
_sub("reduction(max: s)", "reduction(max: s, cs)")))
|
|
738
|
+
_c_illegal("privatization-dsa-001", ALL, "omp.clause.private",
|
|
739
|
+
_chain(_sub(" bool ok;\n", " bool ok;\n const int ct = 1;\n"),
|
|
740
|
+
_sub("private(t)", "private(t, ct)")))
|
|
741
|
+
_BITS = _sub("enum { n = 64 };\n", "enum { n = 64 };\nstruct bf {\n int f : 4;"
|
|
742
|
+
"\n int g;\n};\nunion uv {\n int i;\n float x;\n};\n")
|
|
743
|
+
_c_illegal("map-clause-003", ALL, "omp.directive.target", _chain(
|
|
744
|
+
_BITS, _sub(" bool ok;\n", " bool ok;\n struct bf bv;\n"),
|
|
745
|
+
_sub("#pragma omp target map(to: a) map(from: b) map(tofrom: host_flag)",
|
|
746
|
+
"#pragma omp target map(to: a) map(from: b) map(tofrom: host_flag) "
|
|
747
|
+
"map(tofrom: bv.f)")))
|
|
748
|
+
_c_illegal("map-clause-004", ALL, "omp.directive.target", _chain(
|
|
749
|
+
_BITS, _sub(" bool ok;\n", " bool ok;\n union uv uw;\n"),
|
|
750
|
+
_sub("#pragma omp target map(to: a) map(from: b) map(tofrom: host_flag)",
|
|
751
|
+
"#pragma omp target map(to: a) map(from: b) map(tofrom: host_flag) "
|
|
752
|
+
"map(tofrom: uw.i)")))
|
|
753
|
+
_c_illegal("depend-clause-005", ALL, "omp.clause.depend.out", _chain(
|
|
754
|
+
_BITS, _sub(" bool ok;\n", " bool ok;\n struct bf bv;\n"),
|
|
755
|
+
_sub("depend(inout: tk)", "depend(inout: tk) depend(out: bv.f)")))
|
|
756
|
+
for _v, _sp in ((50, "declare mapper"), (52, "declare mapper"),
|
|
757
|
+
(60, "declare_mapper")):
|
|
758
|
+
_c_illegal("declaremapper-clause-006", (_v,), "omp.clause.map.mapper",
|
|
759
|
+
_ins_after(r"^#pragma omp declare.mapper\(mm",
|
|
760
|
+
[f"#pragma omp {_sp}(im: int v) map(v)"]))
|
|
761
|
+
_c_illegal("arraysection-clause-003", ALL, "omp.directive.target_update",
|
|
762
|
+
_chain(_sub(" bool ok;\n", " bool ok;\n int sx = 0;\n"),
|
|
763
|
+
_sub("#pragma omp target update to(a)",
|
|
764
|
+
"#pragma omp target update to(a) to(sx[0:1])")))
|
|
765
|
+
_c_illegal("arraysection-clause-004", ALL, "omp.directive.target_update",
|
|
766
|
+
_sub("#pragma omp target update to(a)",
|
|
767
|
+
"#pragma omp target update to(a[0:n:0])"))
|
|
768
|
+
_c_illegal("arraysection-clause-005", ALL, "omp.directive.target_update",
|
|
769
|
+
_sub("#pragma omp target update to(a)",
|
|
770
|
+
"#pragma omp target update to(a) to(b[0:-1])"))
|
|
771
|
+
_c_illegal("default-dsa-002", BOTH, "omp.clause.default.firstprivate", _chain(
|
|
772
|
+
_sub("enum { n = 64 };\n", "enum { n = 64 };\nint gz = 0;\n"),
|
|
773
|
+
_sub(" c = 2 * a[i - 1];\n", " c = 2 * a[i - 1] + gz;\n")))
|
|
774
|
+
# the oracle of the defaultmap(none) programs (relabelled legality above)
|
|
775
|
+
_c_illegal("defaultmap-map-003", BOTH, "omp.clause.defaultmap.none",
|
|
776
|
+
_sub("defaultmap(none) private(i)", "defaultmap(none)"))
|
|
777
|
+
_c_illegal("declaretarget-placement-004", (60,), "omp.directive.declare_target",
|
|
778
|
+
_move_to_main("#pragma omp declare target(dv)"))
|
|
779
|
+
for _v, _sp in ((50, "declare reduction"), (52, "declare reduction"),
|
|
780
|
+
(60, "declare_reduction")):
|
|
781
|
+
_c_illegal("declarereduction-clause-001", (_v,), "omp.clause.reduction.max",
|
|
782
|
+
_sub("enum { n = 64 };\n", f"enum {{ n = 64 }};\n#pragma omp "
|
|
783
|
+
f"{_sp}(cr: const int: omp_out += omp_in)\n"))
|
|
784
|
+
|
|
785
|
+
|
|
786
|
+
@lru_cache(maxsize=1)
|
|
787
|
+
def _rule_langs() -> dict[str, str]:
|
|
788
|
+
return {r.id: r.lang for r in default_rules()}
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
def c_violation_ids(version: int) -> list[str]:
|
|
792
|
+
"""Rule ids with a C illegal variant at `version`: the ported Fortran
|
|
793
|
+
variants of rules that hold in C, and the C-only variants."""
|
|
794
|
+
langs = _rule_langs()
|
|
795
|
+
out = [rid for rid in G.VIOLATION_BASE
|
|
796
|
+
if rid.startswith(f"OMP{version}-")
|
|
797
|
+
and langs.get(rid) in ("both", "c") and rid not in C_NO_VARIANT
|
|
798
|
+
and rid not in C_ILLEGAL]
|
|
799
|
+
out += [rid for rid in C_ILLEGAL if rid.startswith(f"OMP{version}-")]
|
|
800
|
+
return sorted(set(out))
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
def c_base_atom(rid: str) -> str:
|
|
804
|
+
"""The C atom whose program an illegal variant is built on."""
|
|
805
|
+
if rid in C_ILLEGAL:
|
|
806
|
+
return C_ILLEGAL[rid][0]
|
|
807
|
+
fa = G.VIOLATION_BASE[rid][0]
|
|
808
|
+
if fa.startswith("omp.directive."):
|
|
809
|
+
words = fa[len("omp.directive."):].split("_")
|
|
810
|
+
return "omp.directive." + "_".join("for" if w == "do" else w
|
|
811
|
+
for w in words)
|
|
812
|
+
return fa
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
@lru_cache(maxsize=None)
|
|
816
|
+
def c_illegal(rid: str) -> G.Program:
|
|
817
|
+
version = int(rid[3:5])
|
|
818
|
+
stem = rid.split("-", 1)[1]
|
|
819
|
+
pid = f"omp{version}-c-illegal-{stem}"
|
|
820
|
+
if rid in C_ILLEGAL:
|
|
821
|
+
base_atom, fn = C_ILLEGAL[rid]
|
|
822
|
+
base = c_legal(base_atom, version)
|
|
823
|
+
src = fn(base.source)
|
|
824
|
+
else:
|
|
825
|
+
fprog = G._illegal(rid)
|
|
826
|
+
src = _port(fprog.source, version, pid,
|
|
827
|
+
_meta_f(fprog.source, "primary atom"), fprog.id)
|
|
828
|
+
base_atom = c_base_atom(rid)
|
|
829
|
+
if stem in G.VARIANT_PRIMARY: # The Fortran override
|
|
830
|
+
base_atom = G.VARIANT_PRIMARY[stem]
|
|
831
|
+
src = _set_header(src, "primary atom", base_atom)
|
|
832
|
+
src = _set_header(src, "id", pid)
|
|
833
|
+
src = _set_header(src, "legal", f"no (violates {rid})")
|
|
834
|
+
try:
|
|
835
|
+
found = _c_rules_violations(src, version)
|
|
836
|
+
except (GrammarError, ProgramError) as err:
|
|
837
|
+
raise CGenError(f"{pid}: {err}\n{src}") from err
|
|
838
|
+
if found != [rid]:
|
|
839
|
+
raise CGenError(f"{pid}: violates {found}, expected [{rid}]\n{src}")
|
|
840
|
+
prog = _finish(pid, base_atom, version, src, legal=False, violates=rid)
|
|
841
|
+
if G.needs_zero_copy(src) and "zero_copy" not in prog.needs:
|
|
842
|
+
needs = tuple(prog.needs) + ("zero_copy",)
|
|
843
|
+
src = _set_header(src, "needs", ", ".join(needs))
|
|
844
|
+
prog = dataclasses.replace(prog, source=src, needs=needs)
|
|
845
|
+
return prog
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
def _meta_f(source: str, key: str) -> str:
|
|
849
|
+
m = re.search(rf"^! {re.escape(key)}: (.*)$", source, re.M)
|
|
850
|
+
return m.group(1) if m else ""
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
# --- the entry point ---------------------------------------------------------------
|
|
854
|
+
|
|
855
|
+
def generate_c(atoms: Iterable[str], version: int) -> Iterator[G.Program]:
|
|
856
|
+
"""One legal C program per atom (sorted; atoms in C_UNGENERATABLE are
|
|
857
|
+
skipped), then the illegal variants whose base atom is among `atoms`
|
|
858
|
+
(sorted by rule id)."""
|
|
859
|
+
wanted = sorted(set(atoms))
|
|
860
|
+
skip = C_UNGENERATABLE.get(version, {})
|
|
861
|
+
for atom in wanted:
|
|
862
|
+
if atom not in skip:
|
|
863
|
+
yield c_legal(atom, version)
|
|
864
|
+
if fortran_atom(atom) in G.HOST_DEVICE:
|
|
865
|
+
yield c_hostdev(atom, version)
|
|
866
|
+
chosen = set(wanted) - set(skip)
|
|
867
|
+
for rid in c_violation_ids(version):
|
|
868
|
+
if c_base_atom(rid) in chosen:
|
|
869
|
+
yield c_illegal(rid)
|
|
870
|
+
|
|
871
|
+
|
|
872
|
+
def all_c_programs(version: int) -> list[G.Program]:
|
|
873
|
+
return list(generate_c(c_atoms(version), version))
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
def fortran_only_atoms(version: int) -> list[str]:
|
|
877
|
+
return sorted(a for a, ls in atom_langs(version).items()
|
|
878
|
+
if ls == frozenset({"f90"}))
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
def c_only_atoms(version: int) -> list[str]:
|
|
882
|
+
return sorted(a for a, ls in atom_langs(version).items()
|
|
883
|
+
if ls == frozenset({"c"}))
|