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.
Files changed (886) hide show
  1. offload/__init__.py +10 -0
  2. offload/__main__.py +5 -0
  3. offload/_bundle.py +74 -0
  4. offload/_root/catalog/acc/claims.yaml +197 -0
  5. offload/_root/catalog/acc/clauses.yaml +391 -0
  6. offload/_root/catalog/acc/no_oracle.yaml +89 -0
  7. offload/_root/catalog/acc/out_of_scope.yaml +17 -0
  8. offload/_root/catalog/acc/rules.yaml +433 -0
  9. offload/_root/catalog/acc/semantic_atoms.yaml +27 -0
  10. offload/_root/catalog/acc/skeleton.yaml +1567 -0
  11. offload/_root/catalog/acc/spec_overrides.yaml +72 -0
  12. offload/_root/catalog/later_forms.yaml +76 -0
  13. offload/_root/catalog/machines.yaml +218 -0
  14. offload/_root/catalog/omp/claims.yaml +2047 -0
  15. offload/_root/catalog/omp/clauses.yaml +914 -0
  16. offload/_root/catalog/omp/derivations.yaml +177 -0
  17. offload/_root/catalog/omp/memory_modes.yaml +40 -0
  18. offload/_root/catalog/omp/no_oracle.yaml +373 -0
  19. offload/_root/catalog/omp/omp50_delta.yaml +377 -0
  20. offload/_root/catalog/omp/out_of_scope.yaml +64 -0
  21. offload/_root/catalog/omp/port_equivalence.yaml +352 -0
  22. offload/_root/catalog/omp/rules.yaml +3131 -0
  23. offload/_root/catalog/omp/rules_coverage.yaml +9939 -0
  24. offload/_root/catalog/omp/semantic_atoms.yaml +34 -0
  25. offload/_root/catalog/omp/skeleton.yaml +9181 -0
  26. offload/_root/catalog/omp/spec_overrides.yaml +932 -0
  27. offload/_root/catalog/toolchains.yaml +472 -0
  28. offload/_root/catalog/vendor_claims_generic.yaml +40925 -0
  29. offload/_root/data/canuse/b.json +1 -0
  30. offload/_root/data/canuse/c.json +1 -0
  31. offload/_root/data/canuse/columns.json +1 -0
  32. offload/_root/data/canuse/d.json +1 -0
  33. offload/_root/data/canuse/f.json +1 -0
  34. offload/_root/data/canuse/index.json +1 -0
  35. offload/_root/data/canuse/p.json +1 -0
  36. offload/_root/data/compilers/afar.json +1 -0
  37. offload/_root/data/compilers/cce19.json +1 -0
  38. offload/_root/data/compilers/cce20.json +1 -0
  39. offload/_root/data/compilers/cce21.json +1 -0
  40. offload/_root/data/compilers/cce21_4.json +1 -0
  41. offload/_root/data/compilers/gcc.json +1 -0
  42. offload/_root/data/compilers/gcc_sm80.json +1 -0
  43. offload/_root/data/compilers/nvhpc.json +1 -0
  44. offload/_root/data/compilers/nvhpc269.json +1 -0
  45. offload/_root/data/findings/AUTHORING.md +107 -0
  46. offload/_root/data/findings/README.md +33 -0
  47. offload/_root/data/findings/afar-c-error-directive-in-target-link.c +37 -0
  48. offload/_root/data/findings/afar-c-lastprivate-distribute-parallel-for-small-type.c +56 -0
  49. offload/_root/data/findings/afar-c-teams-distribute-reduction-first-team.c +59 -0
  50. offload/_root/data/findings/afar-c-update-iterator-copy-mode.c +45 -0
  51. offload/_root/data/findings/afar-c-xnack1-target-is-present.c +31 -0
  52. offload/_root/data/findings/afar-cce19-character-defaultmap.f90 +27 -0
  53. offload/_root/data/findings/afar-cce19-task-in-target-ice.f90 +23 -0
  54. offload/_root/data/findings/afar-clang-requires-device-safesync-hang.c +24 -0
  55. offload/_root/data/findings/afar-flang-firstprivate-map-two-targets.f90 +34 -0
  56. offload/_root/data/findings/afar-flang-loop-bind-teams-reduction.f90 +27 -0
  57. offload/_root/data/findings/afar-flang-task-reduction-max.f90 +31 -0
  58. offload/_root/data/findings/afar-flang-thread-limit-target-parallel-do.f90 +22 -0
  59. offload/_root/data/findings/afar-linear-ref-omp50.f90 +29 -0
  60. offload/_root/data/findings/afar-loop-bind-thread-in-teams.f90 +44 -0
  61. offload/_root/data/findings/afar-nontemporal-assumed-shape-ice.f90 +38 -0
  62. offload/_root/data/findings/afar-udr-derived-type-link.f90 +41 -0
  63. offload/_root/data/findings/afar-xnack1-atomic-min-nested-parallel.f90 +53 -0
  64. offload/_root/data/findings/afar-xnack1-present-not-enforced.f90 +36 -0
  65. offload/_root/data/findings/afar-xnack1-target-is-present.f90 +47 -0
  66. offload/_root/data/findings/apps/afar-cce-teams-private-array-nested-parallel-wrong.f90 +100 -0
  67. offload/_root/data/findings/apps/cce20-device-link-infer-address-spaces-crash.f90 +159 -0
  68. offload/_root/data/findings/apps/cce21-device-link-agpr-copy-mfma-assert.f90 +343 -0
  69. offload/_root/data/findings/apps/cce21-private-array-loaded-subscript-wrong.f90 +113 -0
  70. offload/_root/data/findings/apps/controls/bubble-simple-rddot.f90 +284 -0
  71. offload/_root/data/findings/apps/controls/bubble-two-substeps.f90 +287 -0
  72. offload/_root/data/findings/apps/controls/cbc-inline.f90 +97 -0
  73. offload/_root/data/findings/apps/controls/cbc-integers.f90 +91 -0
  74. offload/_root/data/findings/apps/controls/cbc-only-density.f90 +97 -0
  75. offload/_root/data/findings/apps/controls/cbc-only-velocity.f90 +97 -0
  76. offload/_root/data/findings/apps/controls/gcc-acc-c-tile-control.c +26 -0
  77. offload/_root/data/findings/apps/controls/gcc-acc-tile-control.f90 +29 -0
  78. offload/_root/data/findings/apps/controls/private-array-subscript-probes.f90 +45 -0
  79. offload/_root/data/findings/apps/controls/teams-private-array-read-par.f90 +31 -0
  80. offload/_root/data/findings/apps/controls/teams-private-array-seq.f90 +30 -0
  81. offload/_root/data/findings/apps/controls/teams-private-array-shared.f90 +34 -0
  82. offload/_root/data/findings/apps/controls/teams-private-array-split.f90 +36 -0
  83. offload/_root/data/findings/apps/controls/teams-private-array-write-par.f90 +31 -0
  84. offload/_root/data/findings/apps/gcc-acc-c-tile-partial-tiles-wrong.c +60 -0
  85. offload/_root/data/findings/apps/gcc-acc-tile-partial-tiles-wrong.f90 +64 -0
  86. offload/_root/data/findings/catalog/afar-c-complex-reduction-link.c +66 -0
  87. offload/_root/data/findings/catalog/afar-c-critical-hint-link.c +68 -0
  88. offload/_root/data/findings/catalog/afar-c-ordered-doacross-link.c +62 -0
  89. offload/_root/data/findings/catalog/afar-c-reduction-task-link.c +81 -0
  90. offload/_root/data/findings/catalog/afar-flang-absent-optional-target-crash.f90 +76 -0
  91. offload/_root/data/findings/catalog/afar-flang-critical-target-parallel-wrong.f90 +74 -0
  92. offload/_root/data/findings/catalog/afar-flang-dist-schedule-chunk.f90 +80 -0
  93. offload/_root/data/findings/catalog/afar-flang-linear-parallel-ice.f90 +68 -0
  94. offload/_root/data/findings/catalog/afar-flang-named-critical-link.f90 +67 -0
  95. offload/_root/data/findings/catalog/afar-flang-ordered-wrong.f90 +78 -0
  96. offload/_root/data/findings/catalog/afar-flang-reduction-minus-rejected.f90 +77 -0
  97. offload/_root/data/findings/catalog/afar-flang-reduction-task-ice.f90 +68 -0
  98. offload/_root/data/findings/catalog/afar-flang-sections-in-target-ice.f90 +67 -0
  99. offload/_root/data/findings/catalog/afar-flang-workdistribute-ice.f90 +71 -0
  100. offload/_root/data/findings/catalog/c-allocate-const-mem-firstprivate-wrong.c +79 -0
  101. offload/_root/data/findings/catalog/cce-acc-allocate-in-compute-crash.f90 +65 -0
  102. offload/_root/data/findings/catalog/cce-acc-character-dummy-routine-ice.f90 +81 -0
  103. offload/_root/data/findings/catalog/cce-acc-loop-seq-in-routine-wrong.f90 +81 -0
  104. offload/_root/data/findings/catalog/cce-acc-stop-in-compute-crash.f90 +62 -0
  105. offload/_root/data/findings/catalog/cce-allocators-stack-ice.f90 +81 -0
  106. offload/_root/data/findings/catalog/cce-atomic-default-mem-order-acquire-release-rejected.f90 +61 -0
  107. offload/_root/data/findings/catalog/cce-c-allocate-align-link.c +83 -0
  108. offload/_root/data/findings/catalog/cce-c-allocate-allocator-modifier-rejected.c +77 -0
  109. offload/_root/data/findings/catalog/cce-c-device-type-directive-name-ice.c +70 -0
  110. offload/_root/data/findings/catalog/cce-c-dist-schedule-chunk.c +81 -0
  111. offload/_root/data/findings/catalog/cce-c-f-pointer-device-link.f90 +70 -0
  112. offload/_root/data/findings/catalog/cce-c-lastprivate-parallel-in-seq-loop-wrong.c +64 -0
  113. offload/_root/data/findings/catalog/cce-c-long-double-ice.c +61 -0
  114. offload/_root/data/findings/catalog/cce-c-map-iterator-ice.c +92 -0
  115. offload/_root/data/findings/catalog/cce-c-motion-iterator-rejected.c +68 -0
  116. offload/_root/data/findings/catalog/cce-c-ordered-doacross-link.c +64 -0
  117. offload/_root/data/findings/catalog/cce-c-ordered-link.c +77 -0
  118. offload/_root/data/findings/catalog/cce-c-recursive-function-ice.c +62 -0
  119. offload/_root/data/findings/catalog/cce-c-reduction-inscan-ice.c +67 -0
  120. offload/_root/data/findings/catalog/cce-c-reduction-task-link.c +73 -0
  121. offload/_root/data/findings/catalog/cce-c-sections-in-target-wrong.c +70 -0
  122. offload/_root/data/findings/catalog/cce-c-single-masked-task-link.c +66 -0
  123. offload/_root/data/findings/catalog/cce-c-task-in-target-link.c +75 -0
  124. offload/_root/data/findings/catalog/cce-c-uses-allocators-traits-rejected.c +71 -0
  125. offload/_root/data/findings/catalog/cce-flang-allocate-const-mem-ice.f90 +67 -0
  126. offload/_root/data/findings/catalog/cce-flang-allocate-in-target-crash.f90 +68 -0
  127. offload/_root/data/findings/catalog/cce-flang-lastprivate-parallel-in-seq-loop-wrong.f90 +83 -0
  128. offload/_root/data/findings/catalog/cce-flang-stop-in-target-crash.f90 +64 -0
  129. offload/_root/data/findings/catalog/cce-iterator-link.f90 +67 -0
  130. offload/_root/data/findings/catalog/cce-linear-lastprivate-ice.f90 +69 -0
  131. offload/_root/data/findings/catalog/cce-nohost-link.f90 +90 -0
  132. offload/_root/data/findings/catalog/cce-reduction-inscan-ice.f90 +66 -0
  133. offload/_root/data/findings/catalog/cce-reduction-task-link.f90 +76 -0
  134. offload/_root/data/findings/catalog/cce19-reduction-task-addrspacecast-ice.f90 +77 -0
  135. offload/_root/data/findings/catalog/cce20-c-defaultmap-private-storage-rejected.c +85 -0
  136. offload/_root/data/findings/catalog/cce20-map-self-rejected.f90 +64 -0
  137. offload/_root/data/findings/catalog/cce21-c-declare-target-local-rejected.c +73 -0
  138. offload/_root/data/findings/catalog/cce21-c-target-loop-ice.c +77 -0
  139. offload/_root/data/findings/catalog/defaultmap-present-private-array-abort.f90 +73 -0
  140. offload/_root/data/findings/catalog/nvhpc-acc-associate-illegal-address.f90 +66 -0
  141. offload/_root/data/findings/catalog/nvhpc-c-function-pointer-kernel-missing.c +68 -0
  142. offload/_root/data/findings/catalog/nvhpc-c-long-double-kernel-missing.c +64 -0
  143. offload/_root/data/findings/catalog/nvhpc-c-static-local-kernel-missing.c +73 -0
  144. offload/_root/data/findings/catalog/nvhpc-c-vla-kernel-missing.c +63 -0
  145. offload/_root/data/findings/catalog/nvhpc-flang-type-bound-kernel-missing.f90 +86 -0
  146. offload/_root/data/findings/cce-acc-init-set-runtime-assert.f90 +35 -0
  147. offload/_root/data/findings/cce-acc-reduction-200-int8-scalars-wrong.f90 +1278 -0
  148. offload/_root/data/findings/cce-acc-routine-bind-module-ice.f90 +35 -0
  149. offload/_root/data/findings/cce-acc-self-condition-ignored.f90 +17 -0
  150. offload/_root/data/findings/cce-c-dist-schedule-segv.c +34 -0
  151. offload/_root/data/findings/cce-c-map-delete-refcount.c +47 -0
  152. offload/_root/data/findings/cce-c-map-present-assert.c +45 -0
  153. offload/_root/data/findings/cce-c-openmp45-device-link.c +34 -0
  154. offload/_root/data/findings/cce-c-parallel-for-in-target.c +73 -0
  155. offload/_root/data/findings/cce-defaultmap-tofrom-explicit-map.f90 +92 -0
  156. offload/_root/data/findings/cce-mapper-next-map-copy-back.f90 +48 -0
  157. offload/_root/data/findings/cce-trim-merge-output-one-character.f90 +40 -0
  158. offload/_root/data/findings/cce-uses-allocators-traits-omp50.f90 +28 -0
  159. offload/_root/data/findings/cce19-acc-if-false-link.f90 +17 -0
  160. offload/_root/data/findings/cce19-c-reduction-63-scalars-one-wrong.c +235 -0
  161. offload/_root/data/findings/cce19-target-parallel-guarded-loop.f90 +35 -0
  162. offload/_root/data/findings/cce19-target-parallel-single-ice.f90 +38 -0
  163. offload/_root/data/findings/cce21-alloc-2e32-sum-wrong.f90 +68 -0
  164. offload/_root/data/findings/cce21-defaultmap-aggregate-flag.f90 +52 -0
  165. offload/_root/data/findings/cce21-in-reduction-assumed-shape-write-lost.f90 +61 -0
  166. offload/_root/data/findings/cce21-in-reduction-taskwait-link.f90 +59 -0
  167. offload/_root/data/findings/cce21-linear-modifier-default-none.f90 +59 -0
  168. offload/_root/data/findings/clang-c-declare-target-to-omp52.c +50 -0
  169. offload/_root/data/findings/clang-c-linear-directive-name-hang.c +30 -0
  170. offload/_root/data/findings/clang-c-map-iterator-omp51.c +51 -0
  171. offload/_root/data/findings/clang-c-shared-declare-target-combined.c +58 -0
  172. offload/_root/data/findings/dataenv/cce-value-dummy-target-write-visible.f90 +74 -0
  173. offload/_root/data/findings/defaultmap-none-loop-variable.f90 +69 -0
  174. offload/_root/data/findings/fortran-loop-bind-thread-in-parallel.f90 +53 -0
  175. offload/_root/data/findings/fortran-schedule-static-in-target.f90 +55 -0
  176. offload/_root/data/findings/fresh/cce-common-block-name-in-map-rejected.f90 +47 -0
  177. offload/_root/data/findings/fresh/cce-if-stop-in-target-ice-one-condition.f90 +38 -0
  178. offload/_root/data/findings/fresh/cce-if-stop-in-target-ice.f90 +43 -0
  179. offload/_root/data/findings/fresh/cce-list-directed-print-in-target-copy-crash.f90 +40 -0
  180. offload/_root/data/findings/fresh/cce19-acc-automatic-array-copyout-copy-crash.f90 +56 -0
  181. offload/_root/data/findings/fresh/cce21-combined-if-runtime-expr-loop-skipped.f90 +57 -0
  182. offload/_root/data/findings/fresh/nvhpc-acc-gang-worker-collapse-nested-vector-reduction-lost.f90 +67 -0
  183. offload/_root/data/findings/fresh/nvhpc-teams-loop-module-allocatable-assign-fort2-crash.f90 +73 -0
  184. offload/_root/data/findings/fuzz/1131-afar.f90 +48 -0
  185. offload/_root/data/findings/fuzz/1391-cce20.f90 +40 -0
  186. offload/_root/data/findings/fuzz/14-cce20.f90 +36 -0
  187. offload/_root/data/findings/fuzz/1505-cce20.f90 +88 -0
  188. offload/_root/data/findings/fuzz/1540-afar.f90 +44 -0
  189. offload/_root/data/findings/fuzz/158-afar.f90 +63 -0
  190. offload/_root/data/findings/fuzz/16-cce20.f90 +39 -0
  191. offload/_root/data/findings/fuzz/1644-cce21.f90 +31 -0
  192. offload/_root/data/findings/fuzz/165-cce19.f90 +52 -0
  193. offload/_root/data/findings/fuzz/1749-cce20.f90 +34 -0
  194. offload/_root/data/findings/fuzz/1936-afar.f90 +61 -0
  195. offload/_root/data/findings/fuzz/1978-cce19.f90 +41 -0
  196. offload/_root/data/findings/fuzz/2014-cce19.f90 +46 -0
  197. offload/_root/data/findings/fuzz/2224-cce19.f90 +30 -0
  198. offload/_root/data/findings/fuzz/2334-cce19.f90 +57 -0
  199. offload/_root/data/findings/fuzz/536-cce19.f90 +38 -0
  200. offload/_root/data/findings/fuzz/591-cce19.f90 +54 -0
  201. offload/_root/data/findings/fuzz/650-afar.f90 +58 -0
  202. offload/_root/data/findings/fuzz/698-afar.f90 +68 -0
  203. offload/_root/data/findings/fuzz/700-afar.f90 +46 -0
  204. offload/_root/data/findings/fuzz/775-cce21.f90 +33 -0
  205. offload/_root/data/findings/fuzz/87-afar.f90 +47 -0
  206. offload/_root/data/findings/fuzz/916-afar.f90 +67 -0
  207. offload/_root/data/findings/fuzz/958-cce20.f90 +44 -0
  208. offload/_root/data/findings/fuzz/98-cce19.f90 +40 -0
  209. offload/_root/data/findings/fuzz/README.md +236 -0
  210. offload/_root/data/findings/fuzz/b1-121-afar.f90 +47 -0
  211. offload/_root/data/findings/fuzz/b1-183-afar.f90 +55 -0
  212. offload/_root/data/findings/fuzz/b1-22-cce20.f90 +38 -0
  213. offload/_root/data/findings/fuzz/b1-231-afar.f90 +56 -0
  214. offload/_root/data/findings/fuzz/b1-268-afar.f90 +46 -0
  215. offload/_root/data/findings/fuzz/b2-183-afar.f90 +57 -0
  216. offload/_root/data/findings/fuzz/b2-209-cce19.f90 +51 -0
  217. offload/_root/data/findings/fuzz/b2-213-afar.f90 +63 -0
  218. offload/_root/data/findings/fuzz/b2-52-afar.f90 +56 -0
  219. offload/_root/data/findings/fuzz/b2-68-afar.f90 +54 -0
  220. offload/_root/data/findings/fuzz/b2-85-cce20.f90 +55 -0
  221. offload/_root/data/findings/fuzz/b3-188-cce19.f90 +90 -0
  222. offload/_root/data/findings/fuzz/b3-190-cce21.f90 +88 -0
  223. offload/_root/data/findings/fuzz/b3-197-cce19.f90 +77 -0
  224. offload/_root/data/findings/fuzz/b3-250-cce20.f90 +89 -0
  225. offload/_root/data/findings/fuzz/b3-278-cce19.f90 +70 -0
  226. offload/_root/data/findings/fuzz/b3-45-cce21.f90 +83 -0
  227. offload/_root/data/findings/fuzz/b3-54-afar.f90 +67 -0
  228. offload/_root/data/findings/fuzz/b3-61-cce20.f90 +100 -0
  229. offload/_root/data/findings/fuzz/b3-9-afar.f90 +100 -0
  230. offload/_root/data/findings/fuzz/b3-9-cce21.f90 +103 -0
  231. offload/_root/data/findings/fuzz/b3-94-afar.f90 +80 -0
  232. offload/_root/data/findings/fuzz/b4-39-afar.f90 +141 -0
  233. offload/_root/data/findings/fuzz/b4-86-cce19.f90 +71 -0
  234. offload/_root/data/findings/fuzz/controls/gcc-complex-pointer-store-control.f90 +28 -0
  235. offload/_root/data/findings/fuzz/controls/gcc-declare-reduction-module-control.f90 +29 -0
  236. offload/_root/data/findings/fuzz/controls/gcc-target-simd-map-nontemporal-control.f90 +21 -0
  237. offload/_root/data/findings/fuzz/controls/nvhpc-allocatable-component-mapped-control.f90 +22 -0
  238. offload/_root/data/findings/fuzz/controls/nvhpc-allocatable-component-unreferenced-control.f90 +22 -0
  239. offload/_root/data/findings/fuzz/controls/nvhpc-default-none-removed-control.f90 +18 -0
  240. offload/_root/data/findings/fuzz/controls/nvhpc-default-shared-control.f90 +18 -0
  241. offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-firstprivate-removed-control.f90 +15 -0
  242. offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-to-scalar-reduction-mapped-control.f90 +17 -0
  243. offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-to-scalar-removed-control.f90 +17 -0
  244. offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-tofrom-lastprivate-control.f90 +15 -0
  245. offload/_root/data/findings/fuzz/controls/nvhpc-depend-explicit-map-control.f90 +22 -0
  246. offload/_root/data/findings/fuzz/controls/nvhpc-depend-removed-control.f90 +22 -0
  247. offload/_root/data/findings/fuzz/controls/nvhpc-distribute-end-distribute-control.f90 +16 -0
  248. offload/_root/data/findings/fuzz/controls/nvhpc-distribute-parallel-num-threads-removed-control.f90 +26 -0
  249. offload/_root/data/findings/fuzz/controls/nvhpc-distribute-parallel-removed-control.f90 +22 -0
  250. offload/_root/data/findings/fuzz/controls/nvhpc-distribute-simd-no-end-directive-control.f90 +15 -0
  251. offload/_root/data/findings/fuzz/controls/nvhpc-explicit-length-character-dummy-control.f90 +18 -0
  252. offload/_root/data/findings/fuzz/controls/nvhpc-loop-character-array-value-control.f90 +23 -0
  253. offload/_root/data/findings/fuzz/controls/nvhpc-loop-character-distribute-control.f90 +20 -0
  254. offload/_root/data/findings/fuzz/controls/nvhpc-map-always-first-control.f90 +15 -0
  255. offload/_root/data/findings/fuzz/controls/nvhpc-map-always-removed-control.f90 +15 -0
  256. offload/_root/data/findings/fuzz/controls/nvhpc-num-threads-removed-control.f90 +12 -0
  257. offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-firstprivate-dropped-control.f90 +15 -0
  258. offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-single-nowait-control.f90 +13 -0
  259. offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-split-control.f90 +15 -0
  260. offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-collapse-split-control.f90 +21 -0
  261. offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-end-directive-control.f90 +14 -0
  262. offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-no-collapse-control.f90 +19 -0
  263. offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-split-no-end-directive-control.f90 +15 -0
  264. offload/_root/data/findings/fuzz/gcc-declare-reduction-module-not-found.f90 +66 -0
  265. offload/_root/data/findings/fuzz/gcc-strided-target-update-rejected.f90 +58 -0
  266. offload/_root/data/findings/fuzz/gcc-target-simd-map-nontemporal-rejected.f90 +54 -0
  267. offload/_root/data/findings/fuzz/nvhpc-allocatable-component-implicit-map-illegal-address.f90 +84 -0
  268. offload/_root/data/findings/fuzz/nvhpc-assumed-length-character-dummy-map-ice.f90 +69 -0
  269. offload/_root/data/findings/fuzz/nvhpc-default-none-reduction-lastprivate-fort1-crash.f90 +70 -0
  270. offload/_root/data/findings/fuzz/nvhpc-defaultmap-firstprivate-lastprivate-ice.f90 +71 -0
  271. offload/_root/data/findings/fuzz/nvhpc-defaultmap-to-scalar-reduction-lost.f90 +82 -0
  272. offload/_root/data/findings/fuzz/nvhpc-depend-implicit-map-illegal-address.f90 +81 -0
  273. offload/_root/data/findings/fuzz/nvhpc-distribute-parallel-num-threads-writes-lost.f90 +79 -0
  274. offload/_root/data/findings/fuzz/nvhpc-end-distribute-simd-rejected.f90 +70 -0
  275. offload/_root/data/findings/fuzz/nvhpc-loop-character-achar-unsupported.f90 +75 -0
  276. offload/_root/data/findings/fuzz/nvhpc-map-always-after-map-to-not-copied-back.f90 +70 -0
  277. offload/_root/data/findings/fuzz/nvhpc-num-threads-reduction-identity-lost.f90 +54 -0
  278. offload/_root/data/findings/fuzz/nvhpc-target-parallel-firstprivate-translate-failure.f90 +66 -0
  279. offload/_root/data/findings/fuzz/nvhpc-target-parallel-single-hang.f90 +68 -0
  280. offload/_root/data/findings/fuzz/nvhpc-target-simd-collapse-translate-failure.f90 +73 -0
  281. offload/_root/data/findings/fuzz/nvhpc-target-simd-no-end-directive-rejected.f90 +68 -0
  282. offload/_root/data/findings/fuzz/par-s1-2082-gcc_g90.f90 +71 -0
  283. offload/_root/data/findings/fuzz/s1-2370-cce21.f90 +67 -0
  284. offload/_root/data/findings/fuzz/s1-2592-cce21.f90 +56 -0
  285. offload/_root/data/findings/fuzz/s1-3463-cce21.f90 +92 -0
  286. offload/_root/data/findings/fuzz/s1-4339-afar.f90 +79 -0
  287. offload/_root/data/findings/fuzz/s1-6085-cce21.f90 +96 -0
  288. offload/_root/data/findings/fuzz/s1-6760-cce20.f90 +65 -0
  289. offload/_root/data/findings/fuzz/s1-6888-cce21.f90 +76 -0
  290. offload/_root/data/findings/fuzz/s1-7882-cce20.f90 +63 -0
  291. offload/_root/data/findings/fuzz/s1-8634-cce21.f90 +45 -0
  292. offload/_root/data/findings/fuzz/s1-91-cce21.f90 +92 -0
  293. offload/_root/data/findings/fuzz/s1-9443-afar.f90 +59 -0
  294. offload/_root/data/findings/fuzz/s1-9914-cce19.f90 +78 -0
  295. offload/_root/data/findings/gcc/controls/gcc-acc-c-detach-control.c +34 -0
  296. offload/_root/data/findings/gcc/controls/gcc-acc-detach-control.f90 +26 -0
  297. offload/_root/data/findings/gcc/controls/gcc-defaultmap-to-pointer-control.f90 +31 -0
  298. offload/_root/data/findings/gcc/controls/gcc-target-in-task-control.c +26 -0
  299. offload/_root/data/findings/gcc/controls/gcc-target-in-task-control.f90 +21 -0
  300. offload/_root/data/findings/gcc/gcc-acc-bind-device-type-rejected.f90 +71 -0
  301. offload/_root/data/findings/gcc/gcc-acc-c-bind-device-type-rejected.c +76 -0
  302. offload/_root/data/findings/gcc/gcc-acc-c-detach-delete-attach-underflow.c +74 -0
  303. offload/_root/data/findings/gcc/gcc-acc-c-gang-dim-rejected.c +79 -0
  304. offload/_root/data/findings/gcc/gcc-acc-c-link-in-routine-rejected.c +82 -0
  305. offload/_root/data/findings/gcc/gcc-acc-detach-delete-attach-underflow.f90 +66 -0
  306. offload/_root/data/findings/gcc/gcc-acc-gang-dim-collapse-force-rejected.f90 +69 -0
  307. offload/_root/data/findings/gcc/gcc-acc-init-set-shutdown-rejected.f90 +70 -0
  308. offload/_root/data/findings/gcc/gcc-acc-link-in-routine-rejected.f90 +82 -0
  309. offload/_root/data/findings/gcc/gcc-acc-use-device-allocatable-rejected.f90 +88 -0
  310. offload/_root/data/findings/gcc/gcc-c-motion-mapper-rejected.c +110 -0
  311. offload/_root/data/findings/gcc/gcc-c-omp60-undocumented-rejected.c +76 -0
  312. offload/_root/data/findings/gcc/gcc-c-omp60-unimplemented-rejected.c +119 -0
  313. offload/_root/data/findings/gcc/gcc-c-target-in-task-mandatory-device-not-found.c +87 -0
  314. offload/_root/data/findings/gcc/gcc-c-uses-allocators-traits-unimplemented.c +85 -0
  315. offload/_root/data/findings/gcc/gcc-declare-mapper-rejected.f90 +85 -0
  316. offload/_root/data/findings/gcc/gcc-defaultmap-to-pointer-copy-back.f90 +66 -0
  317. offload/_root/data/findings/gcc/gcc-loop-bind-default-none-rejected.f90 +93 -0
  318. offload/_root/data/findings/gcc/gcc-omp60-undocumented-rejected.f90 +72 -0
  319. offload/_root/data/findings/gcc/gcc-omp60-unimplemented-rejected.f90 +112 -0
  320. offload/_root/data/findings/gcc/gcc-target-in-task-mandatory-device-not-found.f90 +83 -0
  321. offload/_root/data/findings/gcc/gcc-uses-allocators-traits-unimplemented.f90 +78 -0
  322. offload/_root/data/findings/harvest/afar-flang-strided-target-update.f90 +96 -0
  323. offload/_root/data/findings/harvest/cce-acc-declare-create-module-allocatable-xnack1-fault.f90 +58 -0
  324. offload/_root/data/findings/harvest/cce-c-implicit-struct-map-partly-present.c +100 -0
  325. offload/_root/data/findings/harvest/cce-c-strided-target-update.c +74 -0
  326. offload/_root/data/findings/harvest/cce-ftn-target-parallel-thread-query-ice.f90 +67 -0
  327. offload/_root/data/findings/harvest/cce-named-constant-array-declare-target-routine-rejected.f90 +69 -0
  328. offload/_root/data/findings/harvest/cce-use-device-ptr-c-ptr-not-converted.f90 +64 -0
  329. offload/_root/data/findings/harvest/cce21-declare-target-link-module-variable-write-lost.f90 +63 -0
  330. offload/_root/data/findings/harvest/cce21-internal-procedure-calls-internal-in-target-fault.f90 +71 -0
  331. offload/_root/data/findings/harvest/controls/cce-c-implicit-struct-map-partly-present-target-only-control.c +22 -0
  332. offload/_root/data/findings/harvest/controls/cce-c-implicit-struct-map-partly-present-whole-control.c +23 -0
  333. offload/_root/data/findings/harvest/controls/gcc-acc-declare-create-allocatable-control.f90 +34 -0
  334. offload/_root/data/findings/harvest/controls/gcc-c-same-item-two-maps-control.c +17 -0
  335. offload/_root/data/findings/harvest/controls/gcc-c-target-data-struct-pointer-section-control.c +27 -0
  336. offload/_root/data/findings/harvest/controls/gcc-c-target-data-two-maps-control.c +20 -0
  337. offload/_root/data/findings/harvest/controls/gcc-same-item-two-maps-control.f90 +16 -0
  338. offload/_root/data/findings/harvest/controls/gcc-teams-simd-matmul-allocatable-control.f90 +27 -0
  339. offload/_root/data/findings/harvest/gcc-acc-declare-create-allocatable-not-mapped.f90 +66 -0
  340. offload/_root/data/findings/harvest/gcc-c-same-item-two-maps-rejected.c +45 -0
  341. offload/_root/data/findings/harvest/gcc-c-strided-section-rejected.c +70 -0
  342. offload/_root/data/findings/harvest/gcc-c-target-data-struct-pointer-section-ice.c +78 -0
  343. offload/_root/data/findings/harvest/gcc-c-target-data-two-maps-ice.c +49 -0
  344. offload/_root/data/findings/harvest/gcc-same-item-two-maps-rejected.f90 +46 -0
  345. offload/_root/data/findings/harvest/gcc-teams-simd-matmul-allocatable-ice.f90 +53 -0
  346. offload/_root/data/findings/harvest/nvhpc-c-target-data-if-false-use-device-ptr-garbage.c +49 -0
  347. offload/_root/data/findings/harvest/nvhpc-named-constant-array-declare-target-routine-rejected.f90 +65 -0
  348. offload/_root/data/findings/harvest/nvhpc-use-device-ptr-c-ptr-not-found.f90 +60 -0
  349. offload/_root/data/findings/harvest/nvhpc2511-target-nowait-in-parallel-for-ice.c +59 -0
  350. offload/_root/data/findings/hecbench/controls/f16-ctl-float-array.c +28 -0
  351. offload/_root/data/findings/hecbench/controls/pc-ctl-builtin-popcount.c +37 -0
  352. offload/_root/data/findings/hecbench/controls/pc-ctl-shift-sum.c +43 -0
  353. offload/_root/data/findings/hecbench/gcc-c-float16-array-in-target-lto-ice.c +65 -0
  354. offload/_root/data/findings/hecbench/gcc-c-swar-popcount-assembler-error.c +80 -0
  355. offload/_root/data/findings/index.yaml +2453 -0
  356. offload/_root/data/findings/malloc/afar-device-malloc-in-kernel-corrupts-records.c +371 -0
  357. offload/_root/data/findings/malloc/controls/afar-first-use-malloc-direct.c +52 -0
  358. offload/_root/data/findings/malloc/controls/afar-first-use-malloc-fence.c +57 -0
  359. offload/_root/data/findings/malloc/controls/afar-first-use-malloc-flush.c +57 -0
  360. offload/_root/data/findings/malloc/controls/afar-first-use-malloc-stack.c +52 -0
  361. offload/_root/data/findings/multithread-allocatable-section-maps.f90 +91 -0
  362. offload/_root/data/findings/nested/afar-cce-c-call-result-member-in-target-rejected.c +69 -0
  363. offload/_root/data/findings/nested/afar-cce-c-update-struct-and-member-rejected.c +92 -0
  364. offload/_root/data/findings/nested/afar-flang-pointer-root-allocatable-component-enter-data-fault.f90 +121 -0
  365. offload/_root/data/findings/nested/cce-c-struct-and-nested-pointee-sections-ice.c +79 -0
  366. offload/_root/data/findings/nested/cce-fortran-nested-allocatable-component-copy-fault.f90 +64 -0
  367. offload/_root/data/findings/nested/cce-fortran-pointer-to-type-with-allocatable-scalar-component-typed-transfer.f90 +93 -0
  368. offload/_root/data/findings/nested/cce-fortran-update-to-pointer-root-allocatable-scalar-component-no-accelerator-object.f90 +80 -0
  369. offload/_root/data/findings/nested/controls/c3-ctl-nested-data.c +27 -0
  370. offload/_root/data/findings/nested/controls/c5-acc-serial-struct-and-array.c +26 -0
  371. offload/_root/data/findings/nested/controls/e2-ctl-two-directives.c +42 -0
  372. offload/_root/data/findings/nested/controls/e3-ctl-attach-clause.c +42 -0
  373. offload/_root/data/findings/nested/controls/f3-pointer-array-only.c +33 -0
  374. offload/_root/data/findings/nested/controls/f5-ctl-copyout-exit.c +33 -0
  375. offload/_root/data/findings/nested/controls/f6-ctl-pointer-to-struct-array.c +28 -0
  376. offload/_root/data/findings/nested/controls/g2-ctl-allocatable.f90 +34 -0
  377. offload/_root/data/findings/nested/controls/g2-ctl-entered-to.f90 +34 -0
  378. offload/_root/data/findings/nested/controls/g3-ctl-from-struct-no-element.c +27 -0
  379. offload/_root/data/findings/nested/controls/g3-ptrs-two-elements-to.c +27 -0
  380. offload/_root/data/findings/nested/controls/g3-ptrs-two-elements-tofrom.c +27 -0
  381. offload/_root/data/findings/nested/controls/g5-ctl-element-pointers-only.f90 +36 -0
  382. offload/_root/data/findings/nested/controls/g5-ctl-root-pointer-only.f90 +36 -0
  383. offload/_root/data/findings/nested/controls/gp2-ctl-no-mapper-explicit-maps.c +24 -0
  384. offload/_root/data/findings/nested/controls/gt2-ctl-no-always.c +26 -0
  385. offload/_root/data/findings/nested/controls/gt3-ctl-always-on-structure-only.c +26 -0
  386. offload/_root/data/findings/nested/controls/j1-embedded-struct-pointer-to-struct.c +24 -0
  387. offload/_root/data/findings/nested/controls/j2-ctl-pointer-instead-of-embedded.c +24 -0
  388. offload/_root/data/findings/nested/controls/j6-ctl-struct-and-one-pointee-level.c +23 -0
  389. offload/_root/data/findings/nested/controls/j7-ctl-struct-and-embedded-pointee.c +24 -0
  390. offload/_root/data/findings/nested/controls/m2-ctl-variable-root.f90 +32 -0
  391. offload/_root/data/findings/nested/controls/m3-ctl-fixed-array-component.f90 +32 -0
  392. offload/_root/data/findings/nested/controls/m5-ctl-no-enter-data.f90 +33 -0
  393. offload/_root/data/findings/nested/controls/n8-ctl-fixed-array-in-component.f90 +33 -0
  394. offload/_root/data/findings/nested/controls/n9-ctl-allocatable-in-the-variable.f90 +33 -0
  395. offload/_root/data/findings/nested/controls/ns4-ctl-two-directives-struct-then-pointee.c +27 -0
  396. offload/_root/data/findings/nested/controls/ns8-ctl-enter-together-exit-split.c +26 -0
  397. offload/_root/data/findings/nested/controls/nu3-ctl-update-pointee-only.c +28 -0
  398. offload/_root/data/findings/nested/controls/p2-ctl-pointer-variable.c +27 -0
  399. offload/_root/data/findings/nested/controls/p3-ctl-direct-member.c +26 -0
  400. offload/_root/data/findings/nested/controls/q2-ctl-fixed-array.f90 +37 -0
  401. offload/_root/data/findings/nested/controls/q3-ctl-allocatable-component-of-the-variable.f90 +38 -0
  402. offload/_root/data/findings/nested/controls/ta2-ctl-no-allocatable-component.f90 +42 -0
  403. offload/_root/data/findings/nested/controls/ta3-ctl-allocatable-scalar-in-the-variable.f90 +38 -0
  404. offload/_root/data/findings/nested/controls/ta4-ctl-pointer-component-only.f90 +42 -0
  405. offload/_root/data/findings/nested/controls/u3-ctl-update-member-only.c +24 -0
  406. offload/_root/data/findings/nested/controls/u4-ctl-two-updates.c +25 -0
  407. offload/_root/data/findings/nested/controls/u5-ctl-same-list-in-map.c +25 -0
  408. offload/_root/data/findings/nested/controls/ua2-ctl-variable-root.f90 +37 -0
  409. offload/_root/data/findings/nested/controls/ua4-ctl-to-in-place-of-alloc-and-update.f90 +37 -0
  410. offload/_root/data/findings/nested/controls/v2-ctl-parent-first.c +25 -0
  411. offload/_root/data/findings/nested/controls/v4-ctl-embedded-member.c +24 -0
  412. offload/_root/data/findings/nested/gcc-acc-c-exit-data-of-a-pointer-array-element-target-hangs.c +83 -0
  413. offload/_root/data/findings/nested/gcc-acc-c-parent-and-shared-pointee-one-directive.c +88 -0
  414. offload/_root/data/findings/nested/gcc-acc-c-struct-and-member-array-one-directive.c +84 -0
  415. offload/_root/data/findings/nested/gcc-c-always-on-pointer-member-section-ice.c +75 -0
  416. offload/_root/data/findings/nested/gcc-c-declare-mapper-pointer-member-section-gpu-fault.c +93 -0
  417. offload/_root/data/findings/nested/gcc-c-from-struct-and-pointee-section-rejected.c +83 -0
  418. offload/_root/data/findings/nested/gcc-fortran-pointer-component-alloc-bounds-lost.f90 +62 -0
  419. offload/_root/data/findings/nested/gcc-fortran-root-and-element-pointer-components-ice.f90 +77 -0
  420. offload/_root/data/findings/nested/nvhpc-c-pointee-before-parent-in-one-map-list-copy-fault.c +55 -0
  421. offload/_root/data/findings/nested/nvhpc-c-update-from-structure-overwrites-attached-pointer-segv.c +86 -0
  422. offload/_root/data/findings/nvhpc-acc-atomic-update-sum-fort2-crash.f90 +53 -0
  423. offload/_root/data/findings/nvhpc-c-acc-atomic-update-sum-ice.c +43 -0
  424. offload/_root/data/findings/nvhpc-c-dist-schedule-chunk-compile-hang.c +41 -0
  425. offload/_root/data/findings/nvhpc-c-map-present-ignored.c +42 -0
  426. offload/_root/data/findings/nvhpc-c-ordered-in-target-nvcpfe-crash.c +92 -0
  427. offload/_root/data/findings/nvhpc-c-parallel-for-firstprivate-in-target.c +62 -0
  428. offload/_root/data/findings/nvhpc-c-parallel-if-in-target-nvvm-ice.c +56 -0
  429. offload/_root/data/findings/nvhpc-defaultmap-firstprivate-explicit-map.f90 +45 -0
  430. offload/_root/data/findings/nvhpc-defaultmap-from-allocatable-indexing.f90 +60 -0
  431. offload/_root/data/findings/nvhpc-depend-inoutset-ignored.f90 +64 -0
  432. offload/_root/data/findings/nvhpc-dist-schedule-chunk-illegal-address.f90 +52 -0
  433. offload/_root/data/findings/nvhpc-managed-acc-shutdown-host-access.f90 +42 -0
  434. offload/_root/data/findings/nvhpc-parallel-if-in-target-nvvm-ice.f90 +60 -0
  435. offload/_root/data/findings/oop/afar-final-dealloc-device-link.f90 +85 -0
  436. offload/_root/data/findings/oop/afar-pdt-length-parameter-not-implemented.f90 +65 -0
  437. offload/_root/data/findings/oop/cce-class-is-device-link.f90 +86 -0
  438. offload/_root/data/findings/oop/cce-copy-alloc-component-section-fault.f90 +73 -0
  439. offload/_root/data/findings/oop/cce-copy-parent-to-component-tofrom-lost.f90 +65 -0
  440. offload/_root/data/findings/oop/cce-copy-second-member-section-lost.f90 +65 -0
  441. offload/_root/data/findings/oop/cce-element-component-map-lost.f90 +64 -0
  442. offload/_root/data/findings/oop/cce-final-dealloc-device-abort.f90 +85 -0
  443. offload/_root/data/findings/oop/cce-pdt-default-mapper-rejected.f90 +71 -0
  444. offload/_root/data/findings/oop/cce-polymorphic-dispatch-device-link.f90 +100 -0
  445. offload/_root/data/findings/oop/cce-section-of-element-component-overlap.f90 +76 -0
  446. offload/_root/data/findings/oop/cce-select-type-guard-not-taken.f90 +91 -0
  447. offload/_root/data/findings/oop/cce-udr-derived-type-unsupported.f90 +69 -0
  448. offload/_root/data/findings/oop/cce21-element-component-map-lost.f90 +62 -0
  449. offload/_root/data/findings/oop/controls/alloccomp-comp-only.f90 +44 -0
  450. offload/_root/data/findings/oop/controls/alloccomp-whole-explicit-component.f90 +50 -0
  451. offload/_root/data/findings/oop/controls/alloccomp-whole.f90 +49 -0
  452. offload/_root/data/findings/oop/controls/elemsec-element.f90 +47 -0
  453. offload/_root/data/findings/oop/controls/final-local.f90 +64 -0
  454. offload/_root/data/findings/oop/controls/host-class-star-select-type.f90 +58 -0
  455. offload/_root/data/findings/oop/controls/host-firstprivate-defined-assignment.f90 +54 -0
  456. offload/_root/data/findings/oop/controls/host-lastprivate-defined-assignment.f90 +58 -0
  457. offload/_root/data/findings/oop/controls/host-private-finalization.f90 +51 -0
  458. offload/_root/data/findings/oop/controls/host-select-type.f90 +65 -0
  459. offload/_root/data/findings/oop/controls/parent-and-comp-component-only.f90 +45 -0
  460. offload/_root/data/findings/oop/controls/pdt-kind.f90 +46 -0
  461. offload/_root/data/findings/oop/controls/pdt-len-host.f90 +43 -0
  462. offload/_root/data/findings/oop/controls/pdt-len-unparameterized.f90 +46 -0
  463. offload/_root/data/findings/oop/controls/poly-dispatch-static.f90 +75 -0
  464. offload/_root/data/findings/oop/controls/section-alloc-whole-component.f90 +49 -0
  465. offload/_root/data/findings/oop/controls/section-element-whole-array.f90 +50 -0
  466. offload/_root/data/findings/oop/controls/section-element-whole-component.f90 +50 -0
  467. offload/_root/data/findings/oop/controls/section-fixed.f90 +43 -0
  468. offload/_root/data/findings/oop/controls/tbp-override.f90 +64 -0
  469. offload/_root/data/findings/oop/gcc-acc-parent-and-member-data-rejected.f90 +63 -0
  470. offload/_root/data/findings/oop/gcc-pdt-length-parameter-abort.f90 +68 -0
  471. offload/_root/data/findings/oop/gcc-polymorphic-dispatch-abort.f90 +97 -0
  472. offload/_root/data/findings/oop/gcc-vtab-not-marked-for-offload.f90 +94 -0
  473. offload/_root/data/findings/oop/nvhpc-copy-alloc-component-illegal-address.f90 +76 -0
  474. offload/_root/data/findings/oop/nvhpc-copy-pdt-length-parameter-illegal-address.f90 +69 -0
  475. offload/_root/data/findings/oop/nvhpc-named-mapper-rejected.f90 +65 -0
  476. offload/_root/data/findings/oop/nvhpc-polymorphic-dispatch-translate-failure.f90 +90 -0
  477. offload/_root/data/findings/oop/nvhpc-polymorphism-runtime-unsupported.f90 +94 -0
  478. offload/_root/data/findings/oop/nvhpc-type-bound-call-rejected.f90 +89 -0
  479. offload/_root/data/findings/oop/nvhpc-udr-derived-type-rejected.f90 +67 -0
  480. offload/_root/data/findings/reviews/afar-c-error-directive-in-target-link.json +217 -0
  481. offload/_root/data/findings/reviews/afar-c-lastprivate-distribute-parallel-for-small-type.json +113 -0
  482. offload/_root/data/findings/reviews/afar-c-teams-distribute-reduction-first-team.json +130 -0
  483. offload/_root/data/findings/reviews/afar-c-update-iterator-copy-mode.json +113 -0
  484. offload/_root/data/findings/reviews/afar-cce19-character-defaultmap.json +292 -0
  485. offload/_root/data/findings/reviews/afar-clang-requires-device-safesync-hang.json +191 -0
  486. offload/_root/data/findings/reviews/afar-flang-firstprivate-map-two-targets.json +130 -0
  487. offload/_root/data/findings/reviews/afar-flang-loop-bind-teams-reduction.json +126 -0
  488. offload/_root/data/findings/reviews/afar-flang-task-reduction-max.json +113 -0
  489. offload/_root/data/findings/reviews/afar-flang-thread-limit-target-parallel-do.json +113 -0
  490. offload/_root/data/findings/reviews/afar-loop-bind-thread-in-teams.json +191 -0
  491. offload/_root/data/findings/reviews/afar-nontemporal-assumed-shape-ice.json +113 -0
  492. offload/_root/data/findings/reviews/afar-udr-derived-type-link.json +113 -0
  493. offload/_root/data/findings/reviews/afar-xnack1-atomic-min-nested-parallel.json +113 -0
  494. offload/_root/data/findings/reviews/afar-xnack1-target-is-present.json +113 -0
  495. offload/_root/data/findings/reviews/apps--afar-cce-teams-private-array-nested-parallel-wrong.json +113 -0
  496. offload/_root/data/findings/reviews/apps--cce20-device-link-infer-address-spaces-crash.json +113 -0
  497. offload/_root/data/findings/reviews/apps--cce21-device-link-agpr-copy-mfma-assert.json +113 -0
  498. offload/_root/data/findings/reviews/apps--cce21-private-array-loaded-subscript-wrong.json +113 -0
  499. offload/_root/data/findings/reviews/apps--gcc-acc-c-tile-partial-tiles-wrong.json +113 -0
  500. offload/_root/data/findings/reviews/catalog--afar-c-ordered-doacross-link.json +113 -0
  501. offload/_root/data/findings/reviews/catalog--afar-c-reduction-task-link.json +113 -0
  502. offload/_root/data/findings/reviews/catalog--afar-flang-absent-optional-target-crash.json +113 -0
  503. offload/_root/data/findings/reviews/catalog--afar-flang-critical-target-parallel-wrong.json +113 -0
  504. offload/_root/data/findings/reviews/catalog--afar-flang-dist-schedule-chunk.json +113 -0
  505. offload/_root/data/findings/reviews/catalog--afar-flang-linear-parallel-ice.json +113 -0
  506. offload/_root/data/findings/reviews/catalog--afar-flang-named-critical-link.json +126 -0
  507. offload/_root/data/findings/reviews/catalog--afar-flang-ordered-wrong.json +113 -0
  508. offload/_root/data/findings/reviews/catalog--afar-flang-reduction-minus-rejected.json +113 -0
  509. offload/_root/data/findings/reviews/catalog--afar-flang-sections-in-target-ice.json +113 -0
  510. offload/_root/data/findings/reviews/catalog--afar-flang-workdistribute-ice.json +113 -0
  511. offload/_root/data/findings/reviews/catalog--c-allocate-const-mem-firstprivate-wrong.json +113 -0
  512. offload/_root/data/findings/reviews/catalog--cce-acc-character-dummy-routine-ice.json +113 -0
  513. offload/_root/data/findings/reviews/catalog--cce-acc-loop-seq-in-routine-wrong.json +113 -0
  514. offload/_root/data/findings/reviews/catalog--cce-allocators-stack-ice.json +113 -0
  515. offload/_root/data/findings/reviews/catalog--cce-c-allocate-align-link.json +113 -0
  516. offload/_root/data/findings/reviews/catalog--cce-c-allocate-allocator-modifier-rejected.json +113 -0
  517. offload/_root/data/findings/reviews/catalog--cce-c-dist-schedule-chunk.json +113 -0
  518. offload/_root/data/findings/reviews/catalog--cce-c-f-pointer-device-link.json +130 -0
  519. offload/_root/data/findings/reviews/catalog--cce-c-long-double-ice.json +217 -0
  520. offload/_root/data/findings/reviews/catalog--cce-c-map-iterator-ice.json +217 -0
  521. offload/_root/data/findings/reviews/catalog--cce-c-recursive-function-ice.json +113 -0
  522. offload/_root/data/findings/reviews/catalog--cce-c-sections-in-target-wrong.json +113 -0
  523. offload/_root/data/findings/reviews/catalog--cce-flang-allocate-in-target-crash.json +113 -0
  524. offload/_root/data/findings/reviews/catalog--cce-flang-lastprivate-parallel-in-seq-loop-wrong.json +113 -0
  525. offload/_root/data/findings/reviews/catalog--cce-flang-stop-in-target-crash.json +113 -0
  526. offload/_root/data/findings/reviews/catalog--cce-iterator-link.json +113 -0
  527. offload/_root/data/findings/reviews/catalog--cce-linear-lastprivate-ice.json +113 -0
  528. offload/_root/data/findings/reviews/catalog--cce-reduction-inscan-ice.json +113 -0
  529. offload/_root/data/findings/reviews/catalog--cce-reduction-task-link.json +113 -0
  530. offload/_root/data/findings/reviews/catalog--cce19-reduction-task-addrspacecast-ice.json +113 -0
  531. offload/_root/data/findings/reviews/catalog--cce20-c-defaultmap-private-storage-rejected.json +217 -0
  532. offload/_root/data/findings/reviews/catalog--cce20-map-self-rejected.json +204 -0
  533. offload/_root/data/findings/reviews/catalog--cce21-c-target-loop-ice.json +126 -0
  534. offload/_root/data/findings/reviews/catalog--defaultmap-present-private-array-abort.json +236 -0
  535. offload/_root/data/findings/reviews/catalog--nvhpc-acc-associate-illegal-address.json +113 -0
  536. offload/_root/data/findings/reviews/catalog--nvhpc-c-function-pointer-kernel-missing.json +268 -0
  537. offload/_root/data/findings/reviews/cce-acc-init-set-runtime-assert.json +113 -0
  538. offload/_root/data/findings/reviews/cce-acc-reduction-200-int8-scalars-wrong.json +113 -0
  539. offload/_root/data/findings/reviews/cce-acc-routine-bind-module-ice.json +113 -0
  540. offload/_root/data/findings/reviews/cce-c-dist-schedule-segv.json +113 -0
  541. offload/_root/data/findings/reviews/cce-c-map-delete-refcount.json +149 -0
  542. offload/_root/data/findings/reviews/cce-c-map-present-assert.json +126 -0
  543. offload/_root/data/findings/reviews/cce-c-openmp45-device-link.json +113 -0
  544. offload/_root/data/findings/reviews/cce-c-parallel-for-in-target.json +141 -0
  545. offload/_root/data/findings/reviews/cce-mapper-next-map-copy-back.json +208 -0
  546. offload/_root/data/findings/reviews/cce-uses-allocators-traits-omp50.json +191 -0
  547. offload/_root/data/findings/reviews/cce19-c-reduction-63-scalars-one-wrong.json +113 -0
  548. offload/_root/data/findings/reviews/cce19-target-parallel-guarded-loop.json +113 -0
  549. offload/_root/data/findings/reviews/cce19-target-parallel-single-ice.json +113 -0
  550. offload/_root/data/findings/reviews/cce21-alloc-2e32-sum-wrong.json +113 -0
  551. offload/_root/data/findings/reviews/cce21-defaultmap-aggregate-flag.json +210 -0
  552. offload/_root/data/findings/reviews/cce21-in-reduction-assumed-shape-write-lost.json +113 -0
  553. offload/_root/data/findings/reviews/cce21-in-reduction-taskwait-link.json +113 -0
  554. offload/_root/data/findings/reviews/clang-c-declare-target-to-omp52.json +113 -0
  555. offload/_root/data/findings/reviews/clang-c-linear-directive-name-hang.json +113 -0
  556. offload/_root/data/findings/reviews/clang-c-shared-declare-target-combined.json +132 -0
  557. offload/_root/data/findings/reviews/dataenv--cce-value-dummy-target-write-visible.json +113 -0
  558. offload/_root/data/findings/reviews/defaultmap-none-loop-variable.json +113 -0
  559. offload/_root/data/findings/reviews/fortran-schedule-static-in-target.json +113 -0
  560. offload/_root/data/findings/reviews/fresh--cce-common-block-name-in-map-rejected.json +113 -0
  561. offload/_root/data/findings/reviews/fresh--cce-list-directed-print-in-target-copy-crash.json +217 -0
  562. offload/_root/data/findings/reviews/fresh--cce19-acc-automatic-array-copyout-copy-crash.json +113 -0
  563. offload/_root/data/findings/reviews/fresh--cce21-combined-if-runtime-expr-loop-skipped.json +113 -0
  564. offload/_root/data/findings/reviews/fresh--nvhpc-acc-gang-worker-collapse-nested-vector-reduction-lost.json +113 -0
  565. offload/_root/data/findings/reviews/fresh--nvhpc-teams-loop-module-allocatable-assign-fort2-crash.json +113 -0
  566. offload/_root/data/findings/reviews/fuzz--1505-cce20.json +113 -0
  567. offload/_root/data/findings/reviews/fuzz--1540-afar.json +113 -0
  568. offload/_root/data/findings/reviews/fuzz--1978-cce19.json +130 -0
  569. offload/_root/data/findings/reviews/fuzz--2334-cce19.json +113 -0
  570. offload/_root/data/findings/reviews/fuzz--591-cce19.json +147 -0
  571. offload/_root/data/findings/reviews/fuzz--650-afar.json +113 -0
  572. offload/_root/data/findings/reviews/fuzz--916-afar.json +130 -0
  573. offload/_root/data/findings/reviews/fuzz--98-cce19.json +113 -0
  574. offload/_root/data/findings/reviews/fuzz--b1-121-afar.json +160 -0
  575. offload/_root/data/findings/reviews/fuzz--b2-209-cce19.json +141 -0
  576. offload/_root/data/findings/reviews/fuzz--b2-68-afar.json +113 -0
  577. offload/_root/data/findings/reviews/fuzz--b2-85-cce20.json +217 -0
  578. offload/_root/data/findings/reviews/fuzz--b3-188-cce19.json +113 -0
  579. offload/_root/data/findings/reviews/fuzz--b3-278-cce19.json +212 -0
  580. offload/_root/data/findings/reviews/fuzz--b3-54-afar.json +113 -0
  581. offload/_root/data/findings/reviews/fuzz--b3-61-cce20.json +191 -0
  582. offload/_root/data/findings/reviews/fuzz--b4-86-cce19.json +113 -0
  583. offload/_root/data/findings/reviews/fuzz--gcc-declare-reduction-module-not-found.json +113 -0
  584. offload/_root/data/findings/reviews/fuzz--gcc-target-simd-map-nontemporal-rejected.json +113 -0
  585. offload/_root/data/findings/reviews/fuzz--nvhpc-allocatable-component-implicit-map-illegal-address.json +141 -0
  586. offload/_root/data/findings/reviews/fuzz--nvhpc-assumed-length-character-dummy-map-ice.json +113 -0
  587. offload/_root/data/findings/reviews/fuzz--nvhpc-default-none-reduction-lastprivate-fort1-crash.json +113 -0
  588. offload/_root/data/findings/reviews/fuzz--nvhpc-defaultmap-firstprivate-lastprivate-ice.json +113 -0
  589. offload/_root/data/findings/reviews/fuzz--nvhpc-defaultmap-to-scalar-reduction-lost.json +113 -0
  590. offload/_root/data/findings/reviews/fuzz--nvhpc-depend-implicit-map-illegal-address.json +113 -0
  591. offload/_root/data/findings/reviews/fuzz--nvhpc-distribute-parallel-num-threads-writes-lost.json +113 -0
  592. offload/_root/data/findings/reviews/fuzz--nvhpc-end-distribute-simd-rejected.json +113 -0
  593. offload/_root/data/findings/reviews/fuzz--nvhpc-loop-character-achar-unsupported.json +113 -0
  594. offload/_root/data/findings/reviews/fuzz--nvhpc-map-always-after-map-to-not-copied-back.json +113 -0
  595. offload/_root/data/findings/reviews/fuzz--nvhpc-num-threads-reduction-identity-lost.json +113 -0
  596. offload/_root/data/findings/reviews/fuzz--nvhpc-target-parallel-firstprivate-translate-failure.json +191 -0
  597. offload/_root/data/findings/reviews/fuzz--nvhpc-target-parallel-single-hang.json +113 -0
  598. offload/_root/data/findings/reviews/fuzz--nvhpc-target-simd-collapse-translate-failure.json +113 -0
  599. offload/_root/data/findings/reviews/fuzz--nvhpc-target-simd-no-end-directive-rejected.json +113 -0
  600. offload/_root/data/findings/reviews/fuzz--par-s1-2082-gcc_g90.json +126 -0
  601. offload/_root/data/findings/reviews/fuzz--s1-2370-cce21.json +113 -0
  602. offload/_root/data/findings/reviews/fuzz--s1-2592-cce21.json +113 -0
  603. offload/_root/data/findings/reviews/fuzz--s1-3463-cce21.json +113 -0
  604. offload/_root/data/findings/reviews/fuzz--s1-6760-cce20.json +130 -0
  605. offload/_root/data/findings/reviews/fuzz--s1-6888-cce21.json +113 -0
  606. offload/_root/data/findings/reviews/fuzz--s1-7882-cce20.json +113 -0
  607. offload/_root/data/findings/reviews/fuzz--s1-8634-cce21.json +113 -0
  608. offload/_root/data/findings/reviews/fuzz--s1-91-cce21.json +113 -0
  609. offload/_root/data/findings/reviews/fuzz--s1-9443-afar.json +113 -0
  610. offload/_root/data/findings/reviews/fuzz--s1-9914-cce19.json +141 -0
  611. offload/_root/data/findings/reviews/gcc--gcc-acc-bind-device-type-rejected.json +113 -0
  612. offload/_root/data/findings/reviews/gcc--gcc-acc-detach-delete-attach-underflow.json +314 -0
  613. offload/_root/data/findings/reviews/gcc--gcc-acc-gang-dim-collapse-force-rejected.json +113 -0
  614. offload/_root/data/findings/reviews/gcc--gcc-acc-init-set-shutdown-rejected.json +113 -0
  615. offload/_root/data/findings/reviews/gcc--gcc-acc-link-in-routine-rejected.json +113 -0
  616. offload/_root/data/findings/reviews/gcc--gcc-acc-use-device-allocatable-rejected.json +113 -0
  617. offload/_root/data/findings/reviews/gcc--gcc-c-motion-mapper-rejected.json +113 -0
  618. offload/_root/data/findings/reviews/gcc--gcc-c-omp60-undocumented-rejected.json +217 -0
  619. offload/_root/data/findings/reviews/gcc--gcc-c-omp60-unimplemented-rejected.json +236 -0
  620. offload/_root/data/findings/reviews/gcc--gcc-c-target-in-task-mandatory-device-not-found.json +236 -0
  621. offload/_root/data/findings/reviews/gcc--gcc-c-uses-allocators-traits-unimplemented.json +113 -0
  622. offload/_root/data/findings/reviews/gcc--gcc-declare-mapper-rejected.json +113 -0
  623. offload/_root/data/findings/reviews/gcc--gcc-defaultmap-to-pointer-copy-back.json +217 -0
  624. offload/_root/data/findings/reviews/gcc--gcc-loop-bind-default-none-rejected.json +113 -0
  625. offload/_root/data/findings/reviews/harvest--afar-flang-strided-target-update.json +141 -0
  626. offload/_root/data/findings/reviews/harvest--cce-acc-declare-create-module-allocatable-xnack1-fault.json +113 -0
  627. offload/_root/data/findings/reviews/harvest--cce-c-implicit-struct-map-partly-present.json +217 -0
  628. offload/_root/data/findings/reviews/harvest--cce-c-strided-target-update.json +141 -0
  629. offload/_root/data/findings/reviews/harvest--cce-ftn-target-parallel-thread-query-ice.json +130 -0
  630. offload/_root/data/findings/reviews/harvest--cce-named-constant-array-declare-target-routine-rejected.json +113 -0
  631. offload/_root/data/findings/reviews/harvest--cce-use-device-ptr-c-ptr-not-converted.json +113 -0
  632. offload/_root/data/findings/reviews/harvest--cce21-declare-target-link-module-variable-write-lost.json +113 -0
  633. offload/_root/data/findings/reviews/harvest--cce21-internal-procedure-calls-internal-in-target-fault.json +158 -0
  634. offload/_root/data/findings/reviews/harvest--gcc-acc-declare-create-allocatable-not-mapped.json +204 -0
  635. offload/_root/data/findings/reviews/harvest--gcc-c-same-item-two-maps-rejected.json +143 -0
  636. offload/_root/data/findings/reviews/harvest--gcc-c-strided-section-rejected.json +164 -0
  637. offload/_root/data/findings/reviews/harvest--gcc-c-target-data-struct-pointer-section-ice.json +113 -0
  638. offload/_root/data/findings/reviews/harvest--gcc-c-target-data-two-maps-ice.json +113 -0
  639. offload/_root/data/findings/reviews/harvest--gcc-teams-simd-matmul-allocatable-ice.json +113 -0
  640. offload/_root/data/findings/reviews/harvest--nvhpc-c-target-data-if-false-use-device-ptr-garbage.json +113 -0
  641. offload/_root/data/findings/reviews/harvest--nvhpc-named-constant-array-declare-target-routine-rejected.json +126 -0
  642. offload/_root/data/findings/reviews/harvest--nvhpc-use-device-ptr-c-ptr-not-found.json +113 -0
  643. offload/_root/data/findings/reviews/harvest--nvhpc2511-target-nowait-in-parallel-for-ice.json +130 -0
  644. offload/_root/data/findings/reviews/hecbench--gcc-c-float16-array-in-target-lto-ice.json +217 -0
  645. offload/_root/data/findings/reviews/hecbench--gcc-c-swar-popcount-assembler-error.json +126 -0
  646. offload/_root/data/findings/reviews/malloc--afar-device-malloc-in-kernel-corrupts-records.json +270 -0
  647. offload/_root/data/findings/reviews/multithread-allocatable-section-maps.json +191 -0
  648. offload/_root/data/findings/reviews/nested--afar-cce-c-call-result-member-in-target-rejected.json +113 -0
  649. offload/_root/data/findings/reviews/nested--afar-cce-c-update-struct-and-member-rejected.json +126 -0
  650. offload/_root/data/findings/reviews/nested--afar-flang-pointer-root-allocatable-component-enter-data-fault.json +191 -0
  651. offload/_root/data/findings/reviews/nested--cce-c-struct-and-nested-pointee-sections-ice.json +113 -0
  652. offload/_root/data/findings/reviews/nested--cce-fortran-nested-allocatable-component-copy-fault.json +214 -0
  653. offload/_root/data/findings/reviews/nested--cce-fortran-pointer-to-type-with-allocatable-scalar-component-typed-transfer.json +191 -0
  654. offload/_root/data/findings/reviews/nested--cce-fortran-update-to-pointer-root-allocatable-scalar-component-no-accelerator-object.json +297 -0
  655. offload/_root/data/findings/reviews/nested--gcc-acc-c-exit-data-of-a-pointer-array-element-target-hangs.json +204 -0
  656. offload/_root/data/findings/reviews/nested--gcc-acc-c-parent-and-shared-pointee-one-directive.json +130 -0
  657. offload/_root/data/findings/reviews/nested--gcc-acc-c-struct-and-member-array-one-directive.json +141 -0
  658. offload/_root/data/findings/reviews/nested--gcc-c-always-on-pointer-member-section-ice.json +113 -0
  659. offload/_root/data/findings/reviews/nested--gcc-c-declare-mapper-pointer-member-section-gpu-fault.json +113 -0
  660. offload/_root/data/findings/reviews/nested--gcc-c-from-struct-and-pointee-section-rejected.json +113 -0
  661. offload/_root/data/findings/reviews/nested--gcc-fortran-pointer-component-alloc-bounds-lost.json +217 -0
  662. offload/_root/data/findings/reviews/nested--gcc-fortran-root-and-element-pointer-components-ice.json +217 -0
  663. offload/_root/data/findings/reviews/nested--nvhpc-c-pointee-before-parent-in-one-map-list-copy-fault.json +204 -0
  664. offload/_root/data/findings/reviews/nested--nvhpc-c-update-from-structure-overwrites-attached-pointer-segv.json +191 -0
  665. offload/_root/data/findings/reviews/nvhpc-c-acc-atomic-update-sum-ice.json +277 -0
  666. offload/_root/data/findings/reviews/nvhpc-c-dist-schedule-chunk-compile-hang.json +113 -0
  667. offload/_root/data/findings/reviews/nvhpc-c-map-present-ignored.json +113 -0
  668. offload/_root/data/findings/reviews/nvhpc-c-ordered-in-target-nvcpfe-crash.json +113 -0
  669. offload/_root/data/findings/reviews/nvhpc-c-parallel-for-firstprivate-in-target.json +113 -0
  670. offload/_root/data/findings/reviews/nvhpc-defaultmap-firstprivate-explicit-map.json +113 -0
  671. offload/_root/data/findings/reviews/nvhpc-defaultmap-from-allocatable-indexing.json +132 -0
  672. offload/_root/data/findings/reviews/nvhpc-depend-inoutset-ignored.json +113 -0
  673. offload/_root/data/findings/reviews/nvhpc-dist-schedule-chunk-illegal-address.json +113 -0
  674. offload/_root/data/findings/reviews/nvhpc-managed-acc-shutdown-host-access.json +113 -0
  675. offload/_root/data/findings/reviews/nvhpc-parallel-if-in-target-nvvm-ice.json +113 -0
  676. offload/_root/data/findings/reviews/oop--afar-final-dealloc-device-link.json +132 -0
  677. offload/_root/data/findings/reviews/oop--afar-pdt-length-parameter-not-implemented.json +113 -0
  678. offload/_root/data/findings/reviews/oop--cce-class-is-device-link.json +130 -0
  679. offload/_root/data/findings/reviews/oop--cce-copy-alloc-component-section-fault.json +217 -0
  680. offload/_root/data/findings/reviews/oop--cce-copy-parent-to-component-tofrom-lost.json +217 -0
  681. offload/_root/data/findings/reviews/oop--cce-copy-second-member-section-lost.json +113 -0
  682. offload/_root/data/findings/reviews/oop--cce-element-component-map-lost.json +113 -0
  683. offload/_root/data/findings/reviews/oop--cce-final-dealloc-device-abort.json +208 -0
  684. offload/_root/data/findings/reviews/oop--cce-pdt-default-mapper-rejected.json +191 -0
  685. offload/_root/data/findings/reviews/oop--cce-polymorphic-dispatch-device-link.json +247 -0
  686. offload/_root/data/findings/reviews/oop--cce-section-of-element-component-overlap.json +113 -0
  687. offload/_root/data/findings/reviews/oop--cce-select-type-guard-not-taken.json +191 -0
  688. offload/_root/data/findings/reviews/oop--cce-udr-derived-type-unsupported.json +132 -0
  689. offload/_root/data/findings/reviews/oop--gcc-acc-parent-and-member-data-rejected.json +141 -0
  690. offload/_root/data/findings/reviews/oop--gcc-pdt-length-parameter-abort.json +141 -0
  691. offload/_root/data/findings/reviews/oop--gcc-polymorphic-dispatch-abort.json +217 -0
  692. offload/_root/data/findings/reviews/oop--gcc-vtab-not-marked-for-offload.json +113 -0
  693. offload/_root/data/findings/reviews/oop--nvhpc-copy-alloc-component-illegal-address.json +113 -0
  694. offload/_root/data/findings/reviews/oop--nvhpc-copy-pdt-length-parameter-illegal-address.json +236 -0
  695. offload/_root/data/findings/reviews/oop--nvhpc-named-mapper-rejected.json +113 -0
  696. offload/_root/data/findings/reviews/oop--nvhpc-polymorphic-dispatch-translate-failure.json +223 -0
  697. offload/_root/data/findings/reviews/oop--nvhpc-polymorphism-runtime-unsupported.json +126 -0
  698. offload/_root/data/findings/reviews/oop--nvhpc-type-bound-call-rejected.json +113 -0
  699. offload/_root/data/findings/reviews/oop--nvhpc-udr-derived-type-rejected.json +113 -0
  700. offload/_root/data/findings/reviews/stress--afar-c-lastprivate-combined-target-not-mapped.json +113 -0
  701. offload/_root/data/findings/reviews/stress--afar-target-scalar-implicit-firstprivate.json +175 -0
  702. offload/_root/data/findings/reviews/stress--cce-acc-declare-create-scalar-serial-firstprivate.json +113 -0
  703. offload/_root/data/findings/reviews/stress--cce-c-distribute-lastprivate-lost.json +113 -0
  704. offload/_root/data/findings/reviews/stress--cce-c-flto-offload-dropped.json +204 -0
  705. offload/_root/data/findings/reviews/stress--cce-ftn-cif-record-split-abort.json +113 -0
  706. offload/_root/data/findings/reviews/stress--cce-lastprivate-num-threads-collapse-simd.json +113 -0
  707. offload/_root/data/findings/reviews/stress--cce-teams-reduction-many-teams-wrap.json +113 -0
  708. offload/_root/data/findings/reviews/stress--cce21-declare-target-scalar-map-write-lost.json +113 -0
  709. offload/_root/data/findings/reviews/stress--gcc-declare-target-allocatable-component-ice.json +191 -0
  710. offload/_root/data/findings/reviews/stress--nvhpc-acc-derived-type-component-not-copied.json +126 -0
  711. offload/_root/data/findings/reviews/stress--nvhpc-c-lastprivate-teams-distribute-parallel-for-lost.json +113 -0
  712. offload/_root/data/findings/reviews/stress--nvhpc-declare-target-scalar-write-lost.json +113 -0
  713. offload/_root/data/findings/reviews/stress--nvhpc-lastprivate-combined-target-not-mapped.json +113 -0
  714. offload/_root/data/findings/reviews/stress--nvhpc-target-scalar-implicit-firstprivate.json +130 -0
  715. offload/_root/data/findings/reviews/target-update-sections-in-parallel.json +113 -0
  716. offload/_root/data/findings/stress/afar-c-lastprivate-combined-target-not-mapped.c +72 -0
  717. offload/_root/data/findings/stress/afar-target-scalar-implicit-firstprivate.f90 +47 -0
  718. offload/_root/data/findings/stress/cce-acc-declare-create-scalar-serial-firstprivate.f90 +43 -0
  719. offload/_root/data/findings/stress/cce-c-distribute-lastprivate-lost.c +52 -0
  720. offload/_root/data/findings/stress/cce-c-flto-offload-dropped.c +73 -0
  721. offload/_root/data/findings/stress/cce-ftn-cif-record-split-abort.f90 +109 -0
  722. offload/_root/data/findings/stress/cce-lastprivate-num-threads-collapse-simd.f90 +66 -0
  723. offload/_root/data/findings/stress/cce-teams-reduction-many-teams-wrap.f90 +55 -0
  724. offload/_root/data/findings/stress/cce21-declare-target-scalar-map-write-lost.f90 +58 -0
  725. offload/_root/data/findings/stress/controls/gcc-declare-target-allocatable-component-control.f90 +29 -0
  726. offload/_root/data/findings/stress/gcc-declare-target-allocatable-component-ice.f90 +61 -0
  727. offload/_root/data/findings/stress/nvhpc-acc-derived-type-component-not-copied.f90 +33 -0
  728. offload/_root/data/findings/stress/nvhpc-c-lastprivate-teams-distribute-parallel-for-lost.c +62 -0
  729. offload/_root/data/findings/stress/nvhpc-declare-target-scalar-write-lost.f90 +43 -0
  730. offload/_root/data/findings/stress/nvhpc-lastprivate-combined-target-not-mapped.f90 +60 -0
  731. offload/_root/data/findings/stress/nvhpc-target-scalar-implicit-firstprivate.f90 +41 -0
  732. offload/_root/data/findings/target-update-sections-in-parallel.f90 +53 -0
  733. offload/_root/data/issues.json +1 -0
  734. offload/_root/data/search.json +1 -0
  735. offload/_root/data/vendor/checks/build.py +288 -0
  736. offload/_version.py +24 -0
  737. offload/canuse.py +88 -0
  738. offload/cli.py +52 -0
  739. offload/data.py +85 -0
  740. offload/engine/__init__.py +0 -0
  741. offload/engine/acc_c_gen.py +415 -0
  742. offload/engine/acc_gen.py +1104 -0
  743. offload/engine/acc_rules.py +656 -0
  744. offload/engine/apps.py +804 -0
  745. offload/engine/baseline.py +324 -0
  746. offload/engine/c_gen.py +883 -0
  747. offload/engine/c_program.py +913 -0
  748. offload/engine/c_rules.py +503 -0
  749. offload/engine/campaign.py +1180 -0
  750. offload/engine/campaigns/__init__.py +2 -0
  751. offload/engine/campaigns/hecbench.py +153 -0
  752. offload/engine/campaigns/nested.py +76 -0
  753. offload/engine/campaigns/oop.py +61 -0
  754. offload/engine/canary.py +275 -0
  755. offload/engine/catalog.py +860 -0
  756. offload/engine/citations.py +532 -0
  757. offload/engine/clang_oracle.py +208 -0
  758. offload/engine/combos.py +234 -0
  759. offload/engine/confirm/__init__.py +2 -0
  760. offload/engine/confirm/backlog.py +159 -0
  761. offload/engine/confirm/claims.py +423 -0
  762. offload/engine/confirm/collectors.py +665 -0
  763. offload/engine/confirm/decisions.py +202 -0
  764. offload/engine/confirm/draft.py +195 -0
  765. offload/engine/confirm/engine.py +157 -0
  766. offload/engine/confirm/execute.py +382 -0
  767. offload/engine/confirm/facts.py +467 -0
  768. offload/engine/confirm/findings.py +617 -0
  769. offload/engine/confirm/forms.py +145 -0
  770. offload/engine/confirm/ingest.py +372 -0
  771. offload/engine/confirm/jobs.py +215 -0
  772. offload/engine/confirm/legality.py +323 -0
  773. offload/engine/confirm/machines.py +254 -0
  774. offload/engine/confirm/minimize.py +268 -0
  775. offload/engine/confirm/model.py +249 -0
  776. offload/engine/confirm/ports.py +107 -0
  777. offload/engine/confirm/programs.py +222 -0
  778. offload/engine/confirm/registry.py +151 -0
  779. offload/engine/confirm/regress.py +278 -0
  780. offload/engine/confirm/rules.py +565 -0
  781. offload/engine/confirm/store.py +63 -0
  782. offload/engine/confirm/triage.py +838 -0
  783. offload/engine/confirm/validate.py +607 -0
  784. offload/engine/confirm/witness.py +355 -0
  785. offload/engine/corpus_check.py +388 -0
  786. offload/engine/coverage.py +318 -0
  787. offload/engine/dataenv_gen.py +1318 -0
  788. offload/engine/dataenv_rules.py +278 -0
  789. offload/engine/devtemps.py +146 -0
  790. offload/engine/expected.py +2559 -0
  791. offload/engine/f2c.py +1783 -0
  792. offload/engine/finding_claims.py +330 -0
  793. offload/engine/finding_header.py +229 -0
  794. offload/engine/finding_rows.py +382 -0
  795. offload/engine/flang_oracle.py +299 -0
  796. offload/engine/fsource.py +620 -0
  797. offload/engine/fuzz.py +2455 -0
  798. offload/engine/fuzz_base.py +2016 -0
  799. offload/engine/fuzz_campaign.py +592 -0
  800. offload/engine/fuzz_exec.py +798 -0
  801. offload/engine/fuzz_min.py +1049 -0
  802. offload/engine/fuzz_profile.py +340 -0
  803. offload/engine/fuzz_report.py +1270 -0
  804. offload/engine/fuzz_steer.py +181 -0
  805. offload/engine/gate.py +1013 -0
  806. offload/engine/gate_report.py +711 -0
  807. offload/engine/gate_run.py +118 -0
  808. offload/engine/gate_stored.py +466 -0
  809. offload/engine/gen.py +1114 -0
  810. offload/engine/gen_templates.py +2583 -0
  811. offload/engine/grammar.py +695 -0
  812. offload/engine/harness.py +1472 -0
  813. offload/engine/harvest/__init__.py +3 -0
  814. offload/engine/harvest/c_runtime.py +465 -0
  815. offload/engine/harvest/checks.py +534 -0
  816. offload/engine/harvest/convert.py +784 -0
  817. offload/engine/harvest/f_runtime.py +668 -0
  818. offload/engine/harvest/filters.py +338 -0
  819. offload/engine/harvest/history.py +122 -0
  820. offload/engine/harvest/inventory.py +399 -0
  821. offload/engine/harvest2/__init__.py +5 -0
  822. offload/engine/harvest2/aomp.py +119 -0
  823. offload/engine/harvest2/examples.py +116 -0
  824. offload/engine/harvest2/gomp.py +679 -0
  825. offload/engine/harvest2/hand.py +150 -0
  826. offload/engine/harvest2/split.py +78 -0
  827. offload/engine/harvest_known/__init__.py +2 -0
  828. offload/engine/harvest_known/apps.py +65 -0
  829. offload/engine/harvest_known/cases.py +128 -0
  830. offload/engine/harvest_known/centres.py +184 -0
  831. offload/engine/harvest_known/forum.py +180 -0
  832. offload/engine/harvest_known/relnotes.py +42 -0
  833. offload/engine/harvest_known/textscan.py +107 -0
  834. offload/engine/hdrwrap.py +42 -0
  835. offload/engine/hecbench.py +568 -0
  836. offload/engine/hecbench_report.py +265 -0
  837. offload/engine/hecbench_run.py +483 -0
  838. offload/engine/idioms.py +1427 -0
  839. offload/engine/kbody_cites.py +81 -0
  840. offload/engine/kbody_emit.py +949 -0
  841. offload/engine/kbody_gen.py +795 -0
  842. offload/engine/legality_review.py +236 -0
  843. offload/engine/localcfg.py +58 -0
  844. offload/engine/malloc_dd.py +267 -0
  845. offload/engine/mutate.py +1933 -0
  846. offload/engine/nested_cites.py +196 -0
  847. offload/engine/nested_emit.py +789 -0
  848. offload/engine/nested_gen.py +1721 -0
  849. offload/engine/offload_scope.py +197 -0
  850. offload/engine/ompvv.py +624 -0
  851. offload/engine/oop_gen.py +2249 -0
  852. offload/engine/prerun.py +1435 -0
  853. offload/engine/program_source.py +739 -0
  854. offload/engine/provenance.py +103 -0
  855. offload/engine/reduce.py +2098 -0
  856. offload/engine/report.py +3374 -0
  857. offload/engine/root.py +33 -0
  858. offload/engine/rules.py +4256 -0
  859. offload/engine/run_matrix.py +325 -0
  860. offload/engine/site/__init__.py +1 -0
  861. offload/engine/site/columns.py +53 -0
  862. offload/engine/site/data.py +648 -0
  863. offload/engine/site/header.py +228 -0
  864. offload/engine/site/inputs.py +115 -0
  865. offload/engine/site/matrix.py +434 -0
  866. offload/engine/site/scrub.py +294 -0
  867. offload/engine/skeleton.py +121 -0
  868. offload/engine/spec_text.py +242 -0
  869. offload/engine/stress.py +4122 -0
  870. offload/engine/stress_c.py +1000 -0
  871. offload/engine/stress_exec.py +805 -0
  872. offload/engine/stress_min.py +248 -0
  873. offload/engine/stress_report.py +552 -0
  874. offload/engine/textclean.py +97 -0
  875. offload/engine/toolchains.py +1070 -0
  876. offload/engine/transforms.py +511 -0
  877. offload/engine/usage.py +1252 -0
  878. offload/engine/widen.py +673 -0
  879. offload/engine/widen_progs.py +2396 -0
  880. offload/issues.py +146 -0
  881. offtarget-0.1.0.dist-info/METADATA +86 -0
  882. offtarget-0.1.0.dist-info/RECORD +886 -0
  883. offtarget-0.1.0.dist-info/WHEEL +4 -0
  884. offtarget-0.1.0.dist-info/entry_points.txt +2 -0
  885. offtarget-0.1.0.dist-info/licenses/LICENSE +21 -0
  886. offtarget-0.1.0.dist-info/licenses/THIRD_PARTY_NOTICES.md +20 -0
@@ -0,0 +1,1104 @@
1
+ """OpenACC 3.4 programs for the slice: frame, recipes, illegal variants.
2
+
3
+ ``offload.engine.gen`` builds, checks and names the programs (``acc34-...``).
4
+ This module gives the source per atom (``recipe``) and, per rule stem, the
5
+ base atom and source transform of the illegal variant (``ILLEGAL``).
6
+
7
+ ``AccSrc.render`` writes free-form Fortran (``program gen_prog``) with
8
+ ``a(i) = i``, ``b(i) = 0`` and a host reference ``ref(i)``. The region of
9
+ interest computes ``b`` on the device and sets ``host_flag`` from
10
+ ``acc_on_device(acc_device_host)``. The program prints
11
+ ``RESULT ran_on_host=<0|1> check=<pass|fail>``, uses integers and logicals
12
+ only, and has n = 64. Checks that need a separate device copy are guarded by
13
+ ``shared_mem`` and carry ``evidence="copy_mode_only"``. ``OPENACC_STUB`` is a
14
+ declaration-only ``openacc`` module for the gfortran -std=f2008 base check.
15
+ """
16
+ from __future__ import annotations
17
+
18
+ import re
19
+ from dataclasses import dataclass, field
20
+
21
+ from offload.engine import gen_templates as T
22
+
23
+ FLAG = "host_flag = merge(1, 0, acc_on_device(acc_device_host))"
24
+ LOOP_FLAG = "if (i == 1) " + FLAG
25
+ BODY = ("b(i) = 2*a(i) + 1",)
26
+ STD = "copyin(a) copyout(b) copy(host_flag)"
27
+ MAX_LINE = 96
28
+
29
+ NO_VARIANT_WHY = ("Rule: no single-change illegal variant of a "
30
+ "generated program is written; the rule's legal and "
31
+ "illegal programs are the unit cases in tests/engine/test_acc.py "
32
+ "(ACC_CASES)")
33
+
34
+
35
+ def acc(*parts: str) -> str:
36
+ return " ".join(["!$acc", *[p for p in parts if p]])
37
+
38
+
39
+ def loop(directive: str | None, body=BODY, flag=True, var="i",
40
+ upto="n") -> list[str]:
41
+ """A DO loop over 1..n (with its directive, if any): the device report
42
+ in iteration 1, then the body."""
43
+ out = [directive] if directive else []
44
+ out.append(f"do {var} = 1, {upto}")
45
+ if flag:
46
+ out.append(LOOP_FLAG)
47
+ out += list(body)
48
+ out.append("end do")
49
+ return out
50
+
51
+
52
+ # --- the frame ---------------------------------------------------------------
53
+
54
+ _BLOCK = re.compile(r"!\$acc (parallel|kernels|serial|data|host_data)\b"
55
+ r"(?! loop)", re.I)
56
+
57
+
58
+ def _indent(lines: list[str], n: int) -> list[str]:
59
+ out, depth = [], 0
60
+ for line in lines:
61
+ low = line.strip().lower()
62
+ if re.match(r"end\s*(do|if|function|subroutine|type)\b", low) \
63
+ or (low.startswith("!$acc end") and not low.endswith("loop")):
64
+ depth -= 1
65
+ out.append(" " * (n + 2 * max(depth, 0)) + line.strip()
66
+ if line else "")
67
+ if re.match(r"do(\s|$)", low) or re.match(r"if\s*\(.*\)\s*then$",
68
+ low) \
69
+ or low.startswith("contains") or re.match(
70
+ r"(integer|logical)\s+function\b|subroutine\b", low) \
71
+ or re.match(r"type\s*::", low) or _BLOCK.match(low):
72
+ depth += 1
73
+ if low.startswith("!$acc atomic capture"):
74
+ depth += 1
75
+ return out
76
+
77
+
78
+ def _wrap(line: str) -> str:
79
+ """Split a long directive at clause boundaries (``&`` and ``!$acc&``)."""
80
+ if len(line) <= MAX_LINE or not line.lstrip().lower().startswith("!$acc"):
81
+ return line
82
+ ind = line[:len(line) - len(line.lstrip())]
83
+ parts, depth, cur = [], 0, ""
84
+ for ch in line.strip():
85
+ depth += ch == "("
86
+ depth -= ch == ")"
87
+ if ch == " " and depth == 0:
88
+ parts.append(cur)
89
+ cur = ""
90
+ continue
91
+ cur += ch
92
+ parts.append(cur)
93
+ lines, cur = [], ""
94
+ for p in parts:
95
+ if cur and len(ind) + len(cur) + len(p) + 3 > MAX_LINE:
96
+ lines.append(cur)
97
+ cur = "!$acc& " + p
98
+ else:
99
+ cur = f"{cur} {p}" if cur else p
100
+ lines.append(cur)
101
+ return " &\n".join(ind + x for x in lines)
102
+
103
+
104
+ @dataclass
105
+ class AccSrc(T.Src):
106
+ """One OpenACC program before rendering (fields as ``T.Src``, plus
107
+ ``procs``: external procedures placed before the main program)."""
108
+ procs: list = field(default_factory=list)
109
+
110
+ def shared_setup(self):
111
+ """``pres`` (checked at the end) and ``shared_mem`` (host and
112
+ device share storage: a serial region's write of a copyin array is
113
+ seen by the host), once per program; evidence copy_mode_only."""
114
+ if "logical :: pres, shared_mem" not in self.decls:
115
+ self.decls += ["logical :: pres, shared_mem", "integer :: zc(1)"]
116
+ self.init += ["pres = .true.", "zc = 0", acc("serial copyin(zc)"),
117
+ "zc(1) = 1", acc("end serial"),
118
+ "shared_mem = zc(1) == 1"]
119
+ self.checks.append("pres")
120
+ self.evidence = "copy_mode_only"
121
+
122
+ def copy_check(self, cond: str) -> list[str]:
123
+ """Assert `cond` (into ``pres``) in copy mode only."""
124
+ self.shared_setup()
125
+ return [f"if (.not. shared_mem) pres = pres .and. ({cond})"]
126
+
127
+ def omp_names(self) -> list[str]:
128
+ """The openacc names the program uses (the ONLY list)."""
129
+ names = {"acc_on_device", "acc_device_host"}
130
+ for line in self.module + self.spec + self.decls + self.init \
131
+ + self.region + self.post:
132
+ low = line.lower()
133
+ if low.lstrip().startswith("!$acc") or \
134
+ not low.lstrip().startswith("!"):
135
+ names.update(re.findall(r"\b(acc_\w+)", low))
136
+ return sorted(names)
137
+
138
+ def render(self, header: list[str]) -> str:
139
+ out = [f"! {h}" for h in header]
140
+ for proc in self.procs:
141
+ out += _indent(proc, 0) + [""]
142
+ if self.module:
143
+ out += ["module gen_mod", " use openacc", " implicit none"]
144
+ out += _indent(self.module, 2)
145
+ out += ["end module gen_mod", ""]
146
+ out.append("program gen_prog")
147
+ out.append(" use openacc, only: " + ", ".join(self.omp_names()))
148
+ if self.module:
149
+ out.append(" use gen_mod")
150
+ out += _indent(self.uses, 2)
151
+ out.append(" implicit none")
152
+ body = list(self.spec) + [
153
+ "integer, parameter :: n = 64",
154
+ "integer, allocatable, target :: a(:), b(:)",
155
+ "integer :: ref(n)",
156
+ "integer :: i, host_flag",
157
+ "logical :: ok"] + list(self.decls) + [
158
+ "allocate(a(n), b(n))",
159
+ "do i = 1, n",
160
+ " a(i) = i",
161
+ " b(i) = 0",
162
+ f" ref(i) = {self.ref}",
163
+ "end do",
164
+ "host_flag = 1"] + list(self.init) + list(self.region) + list(
165
+ self.post)
166
+ ok = " .and. ".join(["all(b == ref)"] + list(self.checks))
167
+ body += [f"ok = {ok}",
168
+ "print '(a,i0,a,a)', 'RESULT ran_on_host=', host_flag, "
169
+ "' check=', merge('pass', 'fail', ok)",
170
+ "deallocate(a, b)"]
171
+ out += _indent(body, 2)
172
+ out.append("end program gen_prog")
173
+ return "\n".join(_wrap(line) for line in out) + "\n"
174
+
175
+
176
+ def src(**kw) -> AccSrc:
177
+ return AccSrc(**kw)
178
+
179
+
180
+ def std_kernel(directive="parallel loop", clauses=STD) -> list[str]:
181
+ """The standard kernel: a combined construct computing b."""
182
+ return loop(acc(directive, clauses))
183
+
184
+
185
+ # --- directive recipes -------------------------------------------------------
186
+
187
+ def parallel_prog() -> AccSrc:
188
+ """parallel with one gang (a sequential loop in gang-redundant mode):
189
+ a host execution of the region (the construct removed) reports
190
+ ran_on_host=1. (No loop construct: CCE rejects an orphaned loop
191
+ construct in the main program, which the mutant would leave.)"""
192
+ return src(region=[acc("parallel", STD + " num_gangs(1)")]
193
+ + loop(None) + [acc("end parallel")])
194
+
195
+
196
+ def kernels_prog() -> AccSrc:
197
+ return src(region=[acc("kernels", STD)] + loop(None)
198
+ + [acc("end kernels")])
199
+
200
+
201
+ def serial_prog() -> AccSrc:
202
+ return src(region=[acc("serial", STD), FLAG] + loop(None, flag=False)
203
+ + [acc("end serial")])
204
+
205
+
206
+ def loop_redundancy_prog(directive="loop", what="the loop construct") -> AccSrc:
207
+ """Gang-redundant mode (3.4 §1.2, §2.5.1): in a parallel region with
208
+ several gangs, a loop without gang partitioning is executed by every
209
+ gang. Each iteration adds its value to b(i) atomically, so b == ref only
210
+ if each iteration runs once."""
211
+ s = src(header_notes=[
212
+ f"oracle: without {what} every gang of the parallel region "
213
+ "executes every iteration (gang-redundant mode), and the atomic "
214
+ "update adds the value once per gang"])
215
+ s.region = [acc("parallel", "num_gangs(4) copyin(a) copy(b) "
216
+ "copy(host_flag)"),
217
+ acc(directive), "do i = 1, n", LOOP_FLAG, acc("atomic update"),
218
+ "b(i) = b(i) + 2*a(i) + 1", "end do", acc("end parallel")]
219
+ return s
220
+
221
+
222
+ def scribble_prog(enter: str, exit_: str) -> AccSrc:
223
+ """enter data / exit data (3.4 §2.6.6): the arrays stay on the device
224
+ between the directives, so the kernel (implicit present_or_copy) does
225
+ not copy b back; a host-only write of b(1) after it is overwritten by
226
+ the exit data copyout (copy mode). Without either directive the kernel
227
+ copies b back and the host write remains."""
228
+ s = src()
229
+ s.shared_setup()
230
+ s.region = [acc("enter data", enter)] + std_kernel(
231
+ "parallel loop", "copy(host_flag)") + [
232
+ "if (.not. shared_mem) b(1) = -9", acc("exit data", exit_)]
233
+ return s
234
+
235
+
236
+ def data_prog(clauses="copyin(a) copyout(b)") -> AccSrc:
237
+ """data (3.4 §2.6.5): b stays on the device for the region; a host-only
238
+ write of b(1) inside the region is overwritten by copyout at its end
239
+ (copy mode). Without the construct the kernel copies b back first."""
240
+ s = src()
241
+ s.shared_setup()
242
+ s.region = [acc("data", clauses)] + std_kernel(
243
+ "parallel loop", "copy(host_flag)") + [
244
+ "if (.not. shared_mem) b(1) = -9", acc("end data")]
245
+ return s
246
+
247
+
248
+ def update_prog(clause="self(b)") -> AccSrc:
249
+ """update (3.4 §2.14.4): b is created on the device by a data region
250
+ and computed there; the update copies it to the host (copy mode)."""
251
+ s = src()
252
+ s.shared_setup()
253
+ s.region = [acc("data", "copyin(a) create(b)")] + std_kernel(
254
+ "parallel loop", "copy(host_flag)") + [acc("update", clause),
255
+ acc("end data")]
256
+ return s
257
+
258
+
259
+ def update_device_prog() -> AccSrc:
260
+ """update device (3.4 §2.14.4): a changes on the host after it entered
261
+ the device; the update sends the new values before the kernel."""
262
+ s = src(ref="2*(i + 1) + 1")
263
+ s.shared_setup()
264
+ s.region = [acc("data", "copyin(a) copyout(b)"),
265
+ "do i = 1, n", "a(i) = i + 1", "end do",
266
+ acc("update", "device(a)")] + std_kernel(
267
+ "parallel loop", "copy(host_flag)") + [acc("end data")]
268
+ return s
269
+
270
+
271
+ def host_data_prog() -> AccSrc:
272
+ """host_data use_device (3.4 §2.8): the subroutine receives device
273
+ addresses and declares them deviceptr; with host addresses (the
274
+ construct removed) the device would access host memory, which copy
275
+ mode does not allow."""
276
+ s = src()
277
+ s.shared_setup()
278
+ s.module = ["contains", "subroutine dev_twice(x, y, m, hf)",
279
+ "integer, intent(in) :: m",
280
+ "integer :: x(m), y(m), hf",
281
+ "integer :: k",
282
+ acc("parallel loop", "deviceptr(x, y) copy(hf)"),
283
+ "do k = 1, m",
284
+ "if (k == 1) hf = merge(1, 0, acc_on_device(acc_device_host))",
285
+ "y(k) = 2*x(k) + 1", "end do",
286
+ "end subroutine dev_twice"]
287
+ s.region = [acc("data", "copyin(a) copyout(b)"),
288
+ acc("host_data", "use_device(a, b)"),
289
+ "call dev_twice(a, b, n, host_flag)",
290
+ acc("end host_data"), acc("end data")]
291
+ return s
292
+
293
+
294
+ def declare_prog(clause="create(t)") -> AccSrc:
295
+ """declare create (3.4 §2.13): t has a device copy for the program's
296
+ implicit data region, so the kernel (implicit present_or_copy) does not
297
+ copy it back: the host t is unchanged (copy mode). Without the
298
+ directive the kernel copies t back."""
299
+ s = src(decls=["integer :: t(n)"], init=["t = -7"])
300
+ s.spec = [acc("declare", clause)]
301
+ s.region = std_kernel("parallel loop", "copyin(a) copyout(b) "
302
+ "copy(host_flag)")[:-1] + ["t(i) = i", "end do"]
303
+ s.post = s.copy_check("all(t == -7)")
304
+ return s
305
+
306
+
307
+ def atomic_prog(clause="") -> AccSrc:
308
+ """atomic update (3.4 §2.12): n*100 concurrent increments of one
309
+ counter; without the construct updates are lost."""
310
+ s = src(decls=["integer :: cnt, k"], init=["cnt = 0"],
311
+ checks=["(cnt == 100*n)"])
312
+ s.header_notes.append("oracle: without atomicity concurrent "
313
+ "increments of cnt are lost")
314
+ s.region = [acc("parallel loop", STD + " copy(cnt)"), "do i = 1, n",
315
+ LOOP_FLAG, *BODY, "do k = 1, 100", acc("atomic", clause),
316
+ "cnt = cnt + 1", "end do", "end do"]
317
+ return s
318
+
319
+
320
+ def capture_prog() -> AccSrc:
321
+ """atomic capture (3.4 §2.12): each iteration takes a ticket from a
322
+ shared counter; the tickets are 0..n-1, each once."""
323
+ s = src(decls=["integer :: cnt, tk(n)"], init=["cnt = 0", "tk = -1"],
324
+ checks=["(cnt == n)", "(sum(tk) == n*(n - 1)/2)",
325
+ "all(tk >= 0)"])
326
+ s.header_notes.append("oracle: without the atomic capture two "
327
+ "iterations can take the same ticket")
328
+ s.region = [acc("parallel loop", STD + " copy(cnt) copyout(tk)"),
329
+ "do i = 1, n", LOOP_FLAG, *BODY, acc("atomic capture"),
330
+ "tk(i) = cnt", "cnt = cnt + 1", acc("end atomic"), "end do"]
331
+ return s
332
+
333
+
334
+ def atomic_rw_prog(kind: str) -> AccSrc:
335
+ """atomic read / write in a race-free program."""
336
+ s = src(decls=["integer :: x, v(n)"], init=["x = 5", "v = 0"],
337
+ checks=["all(v == 5)" if kind == "read" else "(x == 7)"])
338
+ stmt = "v(i) = x" if kind == "read" else "x = 7"
339
+ s.region = [acc("parallel loop", STD + " copy(x) copyout(v)"),
340
+ "do i = 1, n", LOOP_FLAG, *BODY, acc("atomic", kind), stmt,
341
+ "end do"]
342
+ return s.unverified(
343
+ "needs_other_infrastructure",
344
+ f"atomic {kind} differs from a plain {kind} only when another "
345
+ "access races with it, which no deterministic single run exercises",
346
+ checked=True)
347
+
348
+
349
+ def routine_prog(level="seq", **kw) -> AccSrc:
350
+ """A module function compiled for the device with routine and called
351
+ in a parallel loop."""
352
+ s = src()
353
+ s.module = ["contains", "integer function twice_plus(x)",
354
+ acc("routine", level), "integer, intent(in) :: x",
355
+ "twice_plus = 2*x + 1", "end function twice_plus"]
356
+ s.region = loop(acc("parallel loop", STD), ["b(i) = twice_plus(a(i))"])
357
+ return s
358
+
359
+
360
+ def bind_prog() -> AccSrc:
361
+ """routine bind (3.4 §2.15.1): on the device, calls of host_val use the
362
+ bound name dev_val, which returns 2*x + 1; the host version returns
363
+ -x. External procedures (CCE 19 stops with an internal error when the
364
+ two are module procedures: data/findings/cce19-acc-routine-bind-module-
365
+ ice.f90)."""
366
+ s = src(decls=["integer, external :: host_val"],
367
+ spec=[acc("routine(host_val) seq bind(dev_val)")])
368
+ s.procs = [["integer function dev_val(x)", acc("routine seq"),
369
+ "integer, intent(in) :: x", "dev_val = 2*x + 1",
370
+ "end function dev_val"],
371
+ ["integer function host_val(x)",
372
+ acc("routine seq bind(dev_val)"),
373
+ "integer, intent(in) :: x", "host_val = -x",
374
+ "end function host_val"]]
375
+ s.region = loop(acc("parallel loop", STD), ["b(i) = host_val(a(i))"])
376
+ s.header_notes.append("oracle: without bind the device calls host_val "
377
+ "itself, which returns -x")
378
+ return s
379
+
380
+
381
+ def cache_prog() -> AccSrc:
382
+ s = src()
383
+ # the cache directive at the top of the loop body (3.4 §2.10: "When the
384
+ # cache directive appears at the top of (inside of) a loop").
385
+ # It follows the host_flag statement.
386
+ s.region = [acc("parallel loop", STD), "do i = 1, n",
387
+ acc("cache(a(i:i))"), LOOP_FLAG, *BODY, "end do"]
388
+ return s.no_oracle("hint_only", "cache suggests that the elements be "
389
+ "fetched into the fastest cache level; values are "
390
+ "the same without it", "cache_hint", checked=True)
391
+
392
+
393
+ def wait_dir_prog() -> AccSrc:
394
+ """wait directive (3.4 §2.16.3): the kernel is asynchronous (async(1))
395
+ and slow; the host reads b only after the wait."""
396
+ s = src(decls=["integer :: k, w"])
397
+ s.header_notes.append("oracle: without the wait the host may read b "
398
+ "before the asynchronous kernel completes")
399
+ s.region = [acc("parallel loop", STD + " async(1) private(w)"),
400
+ "do i = 1, n", LOOP_FLAG, "w = 0", "do k = 1, 200000",
401
+ "w = w + mod(k, 2)", "end do", "b(i) = 2*a(i) + 1 + w - 100000",
402
+ "end do", acc("wait(1)")]
403
+ return s
404
+
405
+
406
+ def wait_clause_prog(arg="(1)") -> AccSrc:
407
+ """wait clause (3.4 §2.16.2): the second kernel (queue 2) reads what
408
+ the slow first kernel (queue 1) writes; wait(1) orders them."""
409
+ s = src(decls=["integer :: k, w", "integer :: c(n)"])
410
+ s.header_notes.append("oracle: without the wait clause the second "
411
+ "kernel may run before the first one completes")
412
+ s.region = [acc("data", "copyin(a) create(c) copyout(b)"),
413
+ acc("parallel loop", "async(1) private(w) copy(host_flag)"),
414
+ "do i = 1, n", LOOP_FLAG, "w = 0", "do k = 1, 200000",
415
+ "w = w + mod(k, 2)", "end do", "c(i) = 2*a(i) + w - 100000",
416
+ "end do",
417
+ acc("parallel loop", f"async(2) wait{arg}"),
418
+ "do i = 1, n", "b(i) = c(i) + 1", "end do",
419
+ acc("wait"), acc("end data")]
420
+ return s
421
+
422
+
423
+ def set_prog() -> AccSrc:
424
+ """set default_async (3.4 §2.14.3): async without an argument uses
425
+ queue 2 afterwards, which wait(2) waits for."""
426
+ s = src(decls=["integer :: k, w"])
427
+ s.header_notes.append("oracle: without the set the kernel goes to the "
428
+ "default queue, which wait(2) does not wait for")
429
+ s.region = [acc("set", "default_async(2)"),
430
+ acc("parallel loop", STD + " async private(w)"),
431
+ "do i = 1, n", LOOP_FLAG, "w = 0", "do k = 1, 200000",
432
+ "w = w + mod(k, 2)", "end do", "b(i) = 2*a(i) + 1 + w - 100000",
433
+ "end do", acc("wait(2)")]
434
+ s.post = [acc("wait")] # no kernel left running at the end
435
+ return s
436
+
437
+
438
+ def init_prog(clause="") -> AccSrc:
439
+ s = src(region=[acc("init", clause)] + std_kernel())
440
+ return s.unverified("needs_other_infrastructure", "initialisation is "
441
+ "observable only as timing or through the profiling "
442
+ "interface (3.4 chapter 5); the runtime initialises "
443
+ "on first use anyway")
444
+
445
+
446
+ def shutdown_prog() -> AccSrc:
447
+ """shutdown (3.4 §2.14.2) ends every data lifetime: an array entered
448
+ with enter data is no longer present (copy mode: in shared memory
449
+ presence is not tracked)."""
450
+ s = src(decls=["integer :: t(n)"], init=["t = 0"])
451
+ s.region = std_kernel() + [acc("enter data", "copyin(t)"),
452
+ acc("shutdown")]
453
+ s.post = s.copy_check(".not. acc_is_present(t)")
454
+ return s
455
+
456
+
457
+ def present_probe(clause="present(t)") -> AccSrc:
458
+ """Negative probe (3.4 §2.7.3, p.52): t is not present, so a compute
459
+ construct naming it present must end in runtime error termination
460
+ (acc_error_not_present); a run that goes on prints check=fail."""
461
+ s = src(decls=["integer :: t(n)", "logical :: continued"],
462
+ init=["t = 0", "continued = .false."],
463
+ checks=["(.not. continued)"], evidence="probe",
464
+ expect="error_termination")
465
+ s.header_notes.append(
466
+ f"negative probe: {clause} with t not present requires an "
467
+ "acc_error_not_present error (OpenACC 3.4 §2.7.3, p.52); reaching "
468
+ "the end of the program prints check=fail")
469
+ s.region = std_kernel() + [acc("parallel loop", clause)] + [
470
+ "do i = 1, n", "t(i) = i", "end do", "continued = .true."]
471
+ return s
472
+
473
+
474
+ def if_prog() -> AccSrc:
475
+ """The if clause judged on a data directive (3.4 §2.14.4:
476
+ with the condition false the update moves no data). b is computed on
477
+ the device in a data region (copyout at its end); the host then writes
478
+ b(1) = -9 (copy mode only) and ``update device(b) if(use_dev)`` with
479
+ use_dev false must not send it, so the copyout brings the device b
480
+ back. Without the clause the update sends -9 (copy mode). (The if
481
+ clause on a compute construct with a false condition runs the region
482
+ on the local thread, which is not device offload; the clause is the
483
+ same atom.)"""
484
+ s = src(decls=["logical :: use_dev"], init=["use_dev = .false."])
485
+ s.shared_setup()
486
+ s.region = [acc("data", "copyin(a) copyout(b)")] + std_kernel(
487
+ "parallel loop", "copy(host_flag)") + [
488
+ "if (.not. shared_mem) b(1) = -9",
489
+ acc("update", "device(b) if(use_dev)"), acc("end data")]
490
+ return s
491
+
492
+
493
+ def self_prog() -> AccSrc:
494
+ """The self clause in its update form (3.4 §2.14.4,
495
+ ``self(list)``: copy from device to local memory), the program of
496
+ update_prog: b is created on the device and computed there, and the
497
+ update copies it to the host (copy mode). The compute-construct form
498
+ (self with a condition, acc.clause.self.condition) sends the region to
499
+ the host and is out of scope (catalog/acc/out_of_scope.yaml)."""
500
+ s = update_prog("self(b)")
501
+ s.focus = "self(b)"
502
+ return s
503
+
504
+
505
+ def private_prog(directive="parallel loop") -> AccSrc:
506
+ """private(t) (3.4 §2.5.13, §2.9.10): each thread's t is its own and
507
+ the host t is not written; without the clause t is implicitly copy
508
+ (shared storage, or copied back), so the host t changes."""
509
+ s = src(decls=["integer :: t(2)"], init=["t = -7"],
510
+ checks=["all(t == -7)"])
511
+ s.region = [acc(directive, STD + " private(t)"), "do i = 1, n",
512
+ LOOP_FLAG, "t(1) = a(i)", "t(2) = 1", "b(i) = 2*t(1) + t(2)",
513
+ "end do"]
514
+ return s
515
+
516
+
517
+ def loop_private_prog() -> AccSrc:
518
+ s = private_prog()
519
+ s.region = [acc("parallel", STD), acc("loop", "private(t)"),
520
+ "do i = 1, n", LOOP_FLAG, "t(1) = a(i)", "t(2) = 1",
521
+ "b(i) = 2*t(1) + t(2)", "end do", acc("end parallel")]
522
+ return s
523
+
524
+
525
+ def firstprivate_prog() -> AccSrc:
526
+ """firstprivate(t) (3.4 §2.5.14): the serial region's copy starts with
527
+ the host value and the host t is not written."""
528
+ s = src(decls=["integer :: t(2)"], init=["t = 5"],
529
+ checks=["all(t == 5)"], ref="2*i + 6")
530
+ s.region = [acc("serial", STD + " firstprivate(t)"), FLAG,
531
+ "t(1) = t(1) + 1"] + loop(None, ["b(i) = 2*a(i) + t(1)"],
532
+ flag=False) + [acc("end serial")]
533
+ return s
534
+
535
+
536
+ REDUCTIONS = {
537
+ # feature -> (operator, type, initial, value of iteration i, expected)
538
+ "plus": ("+", "integer", "10", "a(i)", "10 + n*(n + 1)/2"),
539
+ "times": ("*", "integer", "3", "merge(2, 1, i <= 10)", "3*1024"),
540
+ "max": ("max", "integer", "-5", "mod(7*a(i), 61)", "60"),
541
+ "min": ("min", "integer", "100", "mod(7*a(i), 61) + 3", "3"),
542
+ "iand": ("iand", "integer", "255", "merge(254, 255, i == 9)", "254"),
543
+ "ior": ("ior", "integer", "0", "merge(4, 0, i == 9)", "4"),
544
+ "ieor": ("ieor", "integer", "1", "merge(6, 0, i == 9)", "7"),
545
+ "and": (".and.", "logical", ".true.", "i /= 9", ".false."),
546
+ "or": (".or.", "logical", ".false.", "i == 9", ".true."),
547
+ "eqv": (".eqv.", "logical", ".true.", "i /= 9", ".false."),
548
+ "neqv": (".neqv.", "logical", ".false.", "i == 9", ".true."),
549
+ }
550
+
551
+
552
+ def reduction_prog(feat="plus", combined=True) -> AccSrc:
553
+ """reduction(<op>: s) (3.4 §2.5.15, §2.9.11): the result reaches the
554
+ host (a reduction var is implicitly copy, §2.6.2); without the clause s
555
+ is firstprivate and keeps its initial value on the host."""
556
+ op, typ, init, val, want = REDUCTIONS[feat]
557
+ s = src(decls=[f"{typ} :: s"], init=[f"s = {init}"])
558
+ s.checks.append(f"(s .eqv. {want})" if typ == "logical"
559
+ else f"(s == {want})")
560
+ if op in ("+", "*", ".and.", ".or.", ".eqv.", ".neqv."):
561
+ upd = f"s = s {op} ({val})"
562
+ else:
563
+ upd = f"s = {op}(s, {val})"
564
+ if combined:
565
+ s.region = loop(acc("parallel loop", f"{STD} reduction({op}: s)"),
566
+ list(BODY) + [upd])
567
+ else:
568
+ s.region = [acc("parallel", f"{STD} copy(s)"),
569
+ *loop(acc("loop", f"reduction({op}: s)"),
570
+ list(BODY) + [upd]), acc("end parallel")]
571
+ return s
572
+
573
+
574
+ def data_clause_prog(clause: str) -> AccSrc:
575
+ """A data clause on a compute construct (3.4 §2.7): copy and copyout
576
+ bring b back, copyin sends a; create(t) gives the kernel a device-only
577
+ t, so the host t is unchanged (copy mode)."""
578
+ s = src()
579
+ s.shared_setup()
580
+ if clause == "create":
581
+ s.decls.append("integer :: t(n)")
582
+ s.init.append("t = -7")
583
+ s.region = loop(acc("parallel loop", "copyin(a) copyout(b) create(t) "
584
+ "copy(host_flag)"), ["t(i) = a(i)",
585
+ "b(i) = 2*t(i) + 1"])
586
+ s.post = s.copy_check("all(t == -7)")
587
+ return s
588
+ clauses = {"copy": "copyin(a) copy(b) copy(host_flag)",
589
+ "copyin": "copyin(a) copyout(b) copy(host_flag)",
590
+ "copyout": "copyin(a) copyout(b) copy(host_flag)"}[clause]
591
+ s.region = loop(acc("parallel loop", clauses))
592
+ return s
593
+
594
+
595
+ def delete_prog(finalize=False) -> AccSrc:
596
+ """exit data delete (3.4 §2.7.12) ends t's dynamic lifetime; with
597
+ finalize (§2.6.6) also after two enter data copyin (reference count
598
+ 2). Presence is checked in copy mode."""
599
+ s = src(decls=["integer :: t(n)"], init=["t = 0"])
600
+ s.region = std_kernel() + [acc("enter data", "copyin(t)")]
601
+ if finalize:
602
+ s.region += [acc("enter data", "copyin(t)"),
603
+ acc("exit data", "delete(t) finalize")]
604
+ else:
605
+ s.region += [acc("exit data", "delete(t)")]
606
+ s.post = s.copy_check(".not. acc_is_present(t)")
607
+ return s
608
+
609
+
610
+ def if_present_prog() -> AccSrc:
611
+ """update self(t) if_present with t not present (3.4 §2.14.4): no action
612
+ and no error; without if_present the update requires t to be present
613
+ (acc_error_not_present, copy mode)."""
614
+ s = src(decls=["integer :: t(n)"], init=["t = 3"])
615
+ s.shared_setup()
616
+ s.region = std_kernel() + [acc("update", "self(t) if_present")]
617
+ s.checks.append("all(t == 3)")
618
+ return s
619
+
620
+
621
+ def link_prog() -> AccSrc:
622
+ """declare link (3.4 §2.13.3): a module array used in a routine; its
623
+ device copy exists while a data clause allocates it."""
624
+ s = src()
625
+ s.module = ["integer :: lv(64)", acc("declare", "link(lv)"), "contains",
626
+ "integer function get_lv(k)", acc("routine seq"),
627
+ "integer, intent(in) :: k", "get_lv = lv(k)",
628
+ "end function get_lv"]
629
+ s.init = ["do i = 1, n", "lv(i) = 2*i + 1", "end do"]
630
+ s.region = loop(acc("parallel loop", STD + " copyin(lv)"),
631
+ ["b(i) = get_lv(a(i))"])
632
+ return s
633
+
634
+
635
+ def device_resident_prog() -> AccSrc:
636
+ s = src()
637
+ s.module = ["integer :: dr(64)", acc("declare", "device_resident(dr)")]
638
+ s.region = loop(acc("parallel loop", STD), ["dr(i) = 2*a(i)",
639
+ "b(i) = dr(i) + 1"])
640
+ return s.unverified(
641
+ "needs_other_infrastructure", "device_resident places dr in device "
642
+ "memory only; the host may not access it (3.4 §2.13.1), so the only "
643
+ "difference is where the storage lives, which a conforming program "
644
+ "cannot read")
645
+
646
+
647
+ def attach_prog(clause: str) -> AccSrc:
648
+ """attach / detach of an allocatable component (3.4 §2.7.13-14)."""
649
+ s = src(decls=["type :: holder", "integer, allocatable :: v(:)",
650
+ "end type holder", "type(holder) :: h"],
651
+ init=["allocate(h%v(n))", "h%v = 1"])
652
+ s.region = [acc("enter data", "copyin(h)"), acc("enter data",
653
+ "copyin(h%v)")]
654
+ if clause == "attach":
655
+ s.region += [acc("enter data", "attach(h%v)")]
656
+ s.region += loop(acc("parallel loop", STD + " present(h)"),
657
+ ["b(i) = 2*a(i) + h%v(i)"])
658
+ s.ref = "2*i + 1"
659
+ if clause == "detach":
660
+ s.region += [acc("exit data", "detach(h%v)")]
661
+ s.region += [acc("exit data", "delete(h%v)"), acc("exit data",
662
+ "delete(h)")]
663
+ return s.unverified(
664
+ "oracle_not_written", f"{clause} of h%v: copyin(h%v) already "
665
+ "attaches the device pointer (3.4 §2.7.8), so the program cannot "
666
+ f"separate an explicit {clause}; a check needs a pointer whose "
667
+ "target enters the device before its parent without an attach "
668
+ "action (create of the target, then attach)")
669
+
670
+
671
+ def no_create_prog() -> AccSrc:
672
+ s = src()
673
+ s.region = [acc("data", "copyin(a) copyout(b)")] + loop(
674
+ acc("parallel loop", "no_create(a, b) copy(host_flag)")) + [
675
+ acc("end data")]
676
+ return s.unverified(
677
+ "oracle_not_written", "no_create on present data behaves as "
678
+ "present; the separating case is an absent var, whose device code "
679
+ "then uses the host address (3.4 §2.7.11), which copy mode faults "
680
+ "on and zero-copy shares, so a check needs a var the kernel does "
681
+ "not dereference")
682
+
683
+
684
+ def deviceptr_prog() -> AccSrc:
685
+ return host_data_prog().unverified(
686
+ "needs_other_infrastructure", "deviceptr tells the compiler the "
687
+ "dummies hold device addresses; without it they are implicitly "
688
+ "copy, and on the MI300A the host can read and write device memory, "
689
+ "so the copies of the device addresses work too (the audit's mutant "
690
+ "survived): a check needs a device whose memory the host cannot "
691
+ "address", checked=True)
692
+
693
+
694
+ def schedule_only(clause_line: str, what: str, directive="parallel loop",
695
+ nest=1, header=None) -> AccSrc:
696
+ """A loop-scheduling clause in a correct program: the result is the
697
+ same under any schedule."""
698
+ s = src(decls=["integer :: j, k"] if nest == 2 else [])
699
+ if nest == 2: # a rectangular 8 x 8 nest over the 64 elements
700
+ s.region = [acc(directive, f"{STD} {clause_line}"),
701
+ "do j = 1, 8", "do k = 1, 8",
702
+ "if (j == 1 .and. k == 1) " + FLAG,
703
+ "b((j - 1)*8 + k) = 2*a((j - 1)*8 + k) + 1",
704
+ "end do", "end do"]
705
+ else:
706
+ s.region = loop(acc(directive, f"{STD} {clause_line}"))
707
+ return s.unverified(
708
+ "needs_other_infrastructure", f"{what} decides which gang, worker "
709
+ "or vector lane runs an iteration; no OpenACC routine reports it "
710
+ "(the result of a correct loop is the same under every schedule)",
711
+ checked=True)
712
+
713
+
714
+ def seq_prog() -> AccSrc:
715
+ """loop seq (3.4 §2.9.5): a running sum in a sequential inner loop of a
716
+ gang loop; executed in parallel the recurrence breaks."""
717
+ s = src(decls=["integer :: c(0:8, 8), j, k"], init=["c = 0"],
718
+ checks=["all(c(8, :) == 36)", "all(c(1:8, 3) == "
719
+ "[(k*(k + 1)/2, k = 1, 8)])"])
720
+ s.header_notes.append("oracle: without seq the inner loop is "
721
+ "independent in a parallel construct (3.4 §2.9.6) "
722
+ "and may run concurrently, breaking the recurrence")
723
+ s.region = loop(acc("parallel loop", f"{STD} copy(c)")) + [
724
+ acc("parallel loop", "gang copy(c)"), "do j = 1, 8",
725
+ acc("loop", "seq"), "do k = 1, 8", "c(k, j) = c(k - 1, j) + k",
726
+ "end do", "end do"]
727
+ return s
728
+
729
+
730
+ def kernels_loop_prog(clause="") -> AccSrc:
731
+ return src(region=[acc("kernels", STD)] + loop(acc("loop", clause))
732
+ + [acc("end kernels")])
733
+
734
+
735
+ def default_none_prog() -> AccSrc:
736
+ s = src(region=loop(acc("parallel loop", "default(none) copyin(a) "
737
+ "copyout(b) copy(host_flag)")),
738
+ evidence="legality", legality_rule="default-dsa-001",
739
+ observable=False,
740
+ note="legality: the check covers the device kernel, not the atom")
741
+ s.header_notes.append("default(none) only requires every variable to "
742
+ "appear in a data or data-sharing clause: a "
743
+ "compile-time restriction")
744
+ return s
745
+
746
+
747
+ def implicit_firstprivate_prog() -> AccSrc:
748
+ """Semantic atom acc.clause.firstprivate.implicit_scalar: a scalar in
749
+ no data clause is firstprivate on a parallel or serial construct (3.4
750
+ §2.6.2), so the region's write does not reach the host (both memory
751
+ modes: a private copy)."""
752
+ s = src(decls=["integer :: x"], init=["x = 5"], checks=["(x == 5)"],
753
+ ref="2*i + 10")
754
+ s.region = [acc("serial", STD), FLAG, "x = x + 4"] + loop(
755
+ None, ["b(i) = 2*a(i) + x + 1"], flag=False) + [acc("end serial")]
756
+ return s
757
+
758
+
759
+ def implicit_kernels_copy_prog() -> AccSrc:
760
+ """Semantic atom acc.clause.copy.implicit_kernels_scalar: a scalar in
761
+ no data clause is copy on a kernels construct (3.4 §2.6.2): the
762
+ device's write reaches the host (copy mode: copied back)."""
763
+ s = src(decls=["integer :: x"], init=["x = 5"], checks=["(x == 9)"])
764
+ s.shared_setup()
765
+ s.region = [acc("kernels", STD), "x = 9"] + loop(None) + [
766
+ acc("end kernels")]
767
+ return s
768
+
769
+
770
+ def device_type_prog() -> AccSrc:
771
+ s = src(region=loop(acc("parallel loop",
772
+ f"{STD} device_type(*) vector_length(32)")))
773
+ return s.no_oracle("implementation_defined", "the device types and "
774
+ "their names are implementation-defined; the clauses "
775
+ "after device_type(*) are hints here (vector_length)",
776
+ "device_types", checked=True)
777
+
778
+
779
+ # --- atom -> recipe ----------------------------------------------------------
780
+
781
+ def _no_oracle(s: AccSrc, kind, reason, basis) -> AccSrc:
782
+ return s.no_oracle(kind, reason, basis, checked=True)
783
+
784
+
785
+ def directive_recipe(name: str) -> AccSrc:
786
+ combined = {"parallel_loop": "parallel loop", "kernels_loop":
787
+ "kernels loop", "serial_loop": "serial loop"}
788
+ if name in combined:
789
+ return src(region=std_kernel(combined[name]))
790
+ return {
791
+ "parallel": parallel_prog, "kernels": kernels_prog,
792
+ "serial": serial_prog, "loop": loop_redundancy_prog,
793
+ "data": data_prog, "enter_data": lambda: scribble_prog(
794
+ "copyin(a) create(b)", "copyout(b) delete(a)"),
795
+ "exit_data": lambda: scribble_prog("copyin(a) create(b)",
796
+ "copyout(b) delete(a)"),
797
+ "update": update_prog, "host_data": host_data_prog,
798
+ "declare": declare_prog, "atomic": atomic_prog,
799
+ "routine": lambda: _no_oracle(
800
+ routine_prog(), "equivalent_default", "a procedure called in a "
801
+ "compute region without a routine directive gets an implicit "
802
+ "routine seq (3.4 §2.15.1), the directive this program writes",
803
+ "routine_implicit"),
804
+ "cache": cache_prog, "wait": wait_dir_prog,
805
+ "init": init_prog, "shutdown": shutdown_prog, "set": set_prog,
806
+ }[name]()
807
+
808
+
809
+ def clause_recipe(clause: str, feat: str | None) -> AccSrc | None:
810
+ key = clause if feat is None else f"{clause}.{feat}"
811
+ if clause == "reduction":
812
+ return reduction_prog(feat or "plus", combined=feat is not None)
813
+ table = {
814
+ "async": lambda: _no_oracle(
815
+ src(region=std_kernel("parallel loop", STD + " async")
816
+ + [acc("wait")]), "implementation_defined",
817
+ "async lets the operations run asynchronously; they may also "
818
+ "complete before the host goes on, so no run separates it",
819
+ "async_may"),
820
+ "async.async_argument": lambda: _no_oracle(
821
+ src(region=std_kernel("parallel loop", STD + " async(3)")
822
+ + [acc("wait(3)")]), "implementation_defined",
823
+ "the queue number selects an activity queue whose operations "
824
+ "may run asynchronously or not", "async_may"),
825
+ "attach": lambda: attach_prog("attach"),
826
+ "detach": lambda: attach_prog("detach"),
827
+ "auto": lambda: _no_oracle(
828
+ kernels_loop_prog("auto"), "equivalent_default",
829
+ "in a kernels construct a loop without independent or seq is "
830
+ "treated as auto", "auto_kernels"),
831
+ "bind": bind_prog,
832
+ "capture": capture_prog,
833
+ "collapse": lambda: schedule_only("collapse(2)", "collapse",
834
+ nest=2),
835
+ "collapse.force": lambda: schedule_only("collapse(force: 2)",
836
+ "collapse(force: 2)", nest=2),
837
+ "copy": lambda: data_clause_prog("copy"),
838
+ "copyin": lambda: data_clause_prog("copyin"),
839
+ "copyout": lambda: data_clause_prog("copyout"),
840
+ "create": lambda: data_clause_prog("create"),
841
+ "default": lambda: present_probe("default(present)"),
842
+ "default.present": lambda: present_probe("default(present)"),
843
+ "default.none": default_none_prog,
844
+ "default_async": set_prog,
845
+ "delete": delete_prog,
846
+ "device": update_device_prog,
847
+ "device_num": lambda: init_prog("device_num(0)").unverified(
848
+ "needs_other_infrastructure", "selecting a device by number is "
849
+ "separable only with a second device of the type, which this "
850
+ "slice does not use (brief: nothing needing multiple devices)"),
851
+ "device_resident": device_resident_prog,
852
+ "device_type": device_type_prog,
853
+ "deviceptr": deviceptr_prog,
854
+ "finalize": lambda: delete_prog(finalize=True),
855
+ "firstprivate": firstprivate_prog,
856
+ "gang": lambda: _no_oracle(
857
+ loop_redundancy_prog("loop gang"), "equivalent_default",
858
+ "a data-independent loop in a parallel construct without a gang "
859
+ "clause has an implied gang(dim:1) clause", "gang_implied"),
860
+ "gang.dim": lambda: _no_oracle(
861
+ loop_redundancy_prog("loop gang(dim: 1)"), "equivalent_default",
862
+ "dimension one is the gang clause's dimension without dim",
863
+ "gang_dim_default"),
864
+ "gang.num": lambda: kernels_loop_prog("gang(num: 4)").unverified(
865
+ "needs_other_infrastructure", "the number of gangs a kernels "
866
+ "loop uses is not reported by any OpenACC routine and the result "
867
+ "is the same for every number", checked=True),
868
+ "gang.static": lambda: schedule_only("gang(static: 4)",
869
+ "gang(static: 4)"),
870
+ "host": lambda: update_prog("host(b)"),
871
+ "if": if_prog,
872
+ "if_present": if_present_prog,
873
+ "independent": lambda: _no_oracle(
874
+ kernels_loop_prog("independent"), "hint_only",
875
+ "independent asserts that the iterations are data-independent; "
876
+ "the implementation may parallelise the loop with or without it",
877
+ "independent_assertion"),
878
+ "link": link_prog,
879
+ "no_create": no_create_prog,
880
+ "nohost": lambda: routine_prog("seq nohost").unverified(
881
+ "needs_other_infrastructure", "nohost only stops the host "
882
+ "version from being compiled; a conforming program never calls "
883
+ "it on the host, so its absence shows only as a link failure of "
884
+ "a non-conforming one"),
885
+ "num_gangs": lambda: _no_oracle(
886
+ src(region=std_kernel("parallel loop", STD + " num_gangs(4)")),
887
+ "hint_only", "the implementation may use fewer gangs",
888
+ "num_gangs_lower"),
889
+ "num_workers": lambda: _no_oracle(
890
+ src(region=std_kernel("parallel loop", STD + " num_workers(2)")),
891
+ "hint_only", "the implementation may use another number of "
892
+ "workers", "num_workers_value"),
893
+ "present": lambda: present_probe("present(t)"),
894
+ "private": loop_private_prog,
895
+ "read": lambda: atomic_rw_prog("read"),
896
+ "self": lambda: self_prog(),
897
+ "seq": seq_prog,
898
+ "tile": lambda: schedule_only("tile(8, 8)", "tile", nest=2),
899
+ "update": lambda: _no_oracle(
900
+ atomic_prog("update"), "equivalent_default",
901
+ "atomic without a clause has the semantics of atomic update",
902
+ "atomic_update_default"),
903
+ "use_device": host_data_prog,
904
+ "vector": lambda: schedule_only("gang vector", "vector"),
905
+ # an argument of vector has a defined role only under a kernels
906
+ # construct without vector_length (3.4 §2.9.4, p.68); under a
907
+ # parallel construct the vector length is the construct's
908
+ "vector.length": lambda: kernels_loop_prog(
909
+ "gang vector(length: 32)").unverified(
910
+ "needs_other_infrastructure", "vector(length: 32) decides which "
911
+ "gang, worker or vector lane runs an iteration; no OpenACC "
912
+ "routine reports it (the result of a correct loop is the same "
913
+ "under every schedule)", checked=True),
914
+ "vector_length": lambda: _no_oracle(
915
+ src(region=std_kernel("parallel loop", STD + " vector_length(32)")),
916
+ "hint_only", "the implementation may use another vector length",
917
+ "vector_length_value"),
918
+ "wait": lambda: _no_oracle(
919
+ wait_clause_prog(), "implementation_defined",
920
+ "operations on different queues may run in either order or "
921
+ "concurrently, and also in order (CCE runs the second kernel "
922
+ "after the first without the clause: the audit's mutant "
923
+ "survived), so no run separates the clause", "async_queues"),
924
+ "wait.devnum": lambda: _no_oracle(
925
+ wait_clause_prog("(devnum: dn: 1)"), "equivalent_default",
926
+ "devnum names the current device, the associated device "
927
+ "without it", "wait_devnum_current"),
928
+ "wait.queues": lambda: _no_oracle(
929
+ wait_clause_prog("(queues: 1)"), "equivalent_default",
930
+ "the queues modifier is optional, for clarity",
931
+ "wait_queues_optional"),
932
+ "worker": lambda: schedule_only("gang worker", "worker"),
933
+ "worker.num": lambda: kernels_loop_prog("gang worker(num: 2)")
934
+ .unverified("needs_other_infrastructure", "the number of workers a "
935
+ "kernels loop uses is not reported by any OpenACC "
936
+ "routine and the result is the same for every number",
937
+ checked=True),
938
+ "write": lambda: atomic_rw_prog("write"),
939
+ "firstprivate.implicit_scalar": implicit_firstprivate_prog,
940
+ "copy.implicit_kernels_scalar": implicit_kernels_copy_prog,
941
+ }
942
+ fn = table.get(key)
943
+ return fn() if fn else None
944
+
945
+
946
+ def recipe(atom: str, version: int) -> T.Src:
947
+ """The program source of an OpenACC atom (acc.directive.<name>,
948
+ acc.clause.<name>[.<feature>])."""
949
+ from offload.engine.gen import GenError
950
+ parts = atom.split(".")
951
+ if len(parts) < 3 or parts[0] != "acc":
952
+ raise GenError(f"not an OpenACC atom id: {atom!r}")
953
+ if parts[1] == "directive":
954
+ try:
955
+ s = directive_recipe(parts[2])
956
+ except KeyError:
957
+ raise GenError(f"no recipe for {atom!r}") from None
958
+ else:
959
+ s = clause_recipe(parts[2], parts[3] if len(parts) > 3 else None)
960
+ if s is None:
961
+ raise GenError(f"no recipe for {atom!r} at {version}")
962
+ if "wait.devnum" in atom:
963
+ s.decls.append("integer :: dn")
964
+ s.init.append("dn = acc_get_device_num(acc_get_device_type())")
965
+ return s
966
+
967
+
968
+ # --- illegal variants --------------------------------------------------------
969
+
970
+ def _sub(old: str, new: str, count: int = 1):
971
+ def fn(source: str) -> str:
972
+ from offload.engine.gen import GenError
973
+ n = source.count(old)
974
+ if n != count:
975
+ raise GenError(f"transform: {old!r} occurs {n} times, "
976
+ f"expected {count}")
977
+ return source.replace(old, new)
978
+ return fn
979
+
980
+
981
+ def _insert_after(pattern: str, line: str):
982
+ def fn(source: str) -> str:
983
+ from offload.engine.gen import GenError
984
+ src_ = source.split("\n")
985
+ hits = [k for k, ln in enumerate(src_)
986
+ if re.fullmatch(pattern, ln.strip())]
987
+ if len(hits) != 1:
988
+ raise GenError(f"transform: {pattern!r} matches {len(hits)} "
989
+ "lines, expected 1")
990
+ k = hits[0]
991
+ ind = src_[k + 1][:len(src_[k + 1]) - len(src_[k + 1].lstrip())]
992
+ src_.insert(k + 1, ind + line)
993
+ return "\n".join(src_)
994
+ return fn
995
+
996
+
997
+ _STD_LINE = f"!$acc parallel loop {STD}"
998
+ # rule stem -> (base atom, transform): one change each, so that the variant
999
+ # violates exactly that rule (checked by offload.engine.gen._illegal)
1000
+ ILLEGAL: dict[str, tuple] = {
1001
+ "compute-clause-001": ("acc.directive.parallel_loop", _sub(
1002
+ _STD_LINE, _STD_LINE + " device_type(*) default(present)")),
1003
+ "data-clause-001": ("acc.directive.data", _sub(
1004
+ "!$acc data copyin(a) copyout(b)",
1005
+ "!$acc data copyin(a) copyout(b) device_type(*) if(.true.)")),
1006
+ "loop-clause-001": ("acc.directive.loop", _sub(
1007
+ "!$acc loop\n", "!$acc loop device_type(*) private(host_flag)\n")),
1008
+ "update-clause-001": ("acc.directive.update", _sub(
1009
+ "!$acc update self(b)", "!$acc update self(b) device_type(*) "
1010
+ "if_present")),
1011
+ "routine-clause-001": ("acc.clause.bind", _sub(
1012
+ "!$acc routine seq bind(dev_val)",
1013
+ "!$acc routine seq bind(dev_val) device_type(*) nohost")),
1014
+ "compute-clause-002": ("acc.clause.reduction.plus", _sub(
1015
+ "reduction(+: s)", "reduction(+: s) num_gangs(2, 2)")),
1016
+ "numgangs-clause-001": ("acc.directive.kernels", _sub(
1017
+ f"!$acc kernels {STD}", f"!$acc kernels {STD} num_gangs(2, 2)")),
1018
+ "numgangs-clause-002": ("acc.directive.parallel", _sub(
1019
+ "num_gangs(1)", "num_gangs(2, 2, 2, 2)")),
1020
+ "hostonly-placement-001": ("acc.directive.parallel", _insert_after(
1021
+ re.escape(f"!$acc parallel {STD} num_gangs(1)"), "!$acc init")),
1022
+ "loop-clause-002": ("acc.clause.seq", _sub(
1023
+ "!$acc loop seq", "!$acc loop seq vector")),
1024
+ "loop-clause-003": ("acc.clause.gang", _sub(
1025
+ "!$acc loop gang", "!$acc loop gang gang(dim: 1)")),
1026
+ "gang-clause-001": ("acc.clause.gang", _sub(
1027
+ "!$acc loop gang", "!$acc loop gang(num: 4)")),
1028
+ "gang-clause-002": ("acc.clause.gang.num", _sub(
1029
+ "gang(num: 4)", "gang(dim: 1)")),
1030
+ "gang-clause-003": ("acc.clause.gang.dim", _sub(
1031
+ "gang(dim: 1)", "gang(dim: 4)")),
1032
+ "collapse-clause-001": ("acc.clause.collapse", _sub(
1033
+ "collapse(2)", "collapse(0)")),
1034
+ "collapse-loop-001": ("acc.clause.collapse", _sub(
1035
+ "collapse(2)", "collapse(3)")),
1036
+ "tile-loop-001": ("acc.clause.tile", _sub("tile(8, 8)",
1037
+ "tile(8, 8, 8)")),
1038
+ "tile-clause-001": ("acc.clause.tile", _sub("tile(8, 8)", "tile(0, 8)")),
1039
+ "hostdata-clause-001": ("acc.directive.host_data", _sub(
1040
+ "use_device(a, b)", "use_device(a, b(1))")),
1041
+ "declare-clause-002": ("acc.directive.declare", _sub(
1042
+ "!$acc declare create(t)",
1043
+ "!$acc declare create(t)\n !$acc declare copyin(t)")),
1044
+ "declare-placement-001": ("acc.directive.declare", _sub(
1045
+ "!$acc declare create(t)", "!$acc declare link(t)")),
1046
+ "routine-clause-002": ("acc.clause.bind", _sub(
1047
+ "!$acc routine seq bind(dev_val)",
1048
+ "!$acc routine seq gang bind(dev_val)")),
1049
+ "atomic-clause-001": ("acc.clause.read", _sub(
1050
+ "!$acc atomic read", "!$acc atomic read write")),
1051
+ "cache-clause-001": ("acc.directive.cache", _sub(
1052
+ "!$acc cache(a(i:i))", "!$acc cache(a)")),
1053
+ "default-dsa-001": ("acc.clause.default.none", _sub(
1054
+ "default(none) copyin(a) copyout(b)", "default(none) copyin(a)")),
1055
+ "reduction-dsa-001": ("acc.clause.reduction", _sub(
1056
+ f"!$acc parallel {STD} copy(s)", f"!$acc parallel {STD}")),
1057
+ "reduction-clause-001": ("acc.clause.reduction", _sub(
1058
+ f"!$acc parallel {STD} copy(s)",
1059
+ f"!$acc parallel {STD} copy(s) reduction(*: s)")),
1060
+ }
1061
+
1062
+
1063
+ # --- the openacc stub for the base-language check ----------------------------
1064
+
1065
+ OPENACC_STUB = """\
1066
+ ! Declaration-only stub of the openacc module, for the base-language check
1067
+ ! only (gfortran -std=<level> -fsyntax-only, without -fopenacc): it declares
1068
+ ! the OpenACC 3.4 names the generated programs use (3.4 chapter 3), so that
1069
+ ! `use openacc, only:` resolves without any compiler's OpenACC module. Never
1070
+ ! linked, never run.
1071
+ module openacc
1072
+ implicit none
1073
+ integer, parameter :: acc_device_kind = 4
1074
+ integer, parameter :: acc_handle_kind = 4
1075
+ integer(acc_device_kind), parameter :: acc_device_none = 0
1076
+ integer(acc_device_kind), parameter :: acc_device_default = 1
1077
+ integer(acc_device_kind), parameter :: acc_device_host = 2
1078
+ integer(acc_device_kind), parameter :: acc_device_not_host = 3
1079
+ integer(acc_handle_kind), parameter :: acc_async_noval = -1
1080
+ integer(acc_handle_kind), parameter :: acc_async_sync = -2
1081
+ interface
1082
+ logical function acc_on_device(dev_type)
1083
+ import :: acc_device_kind
1084
+ integer(acc_device_kind), value :: dev_type
1085
+ end function acc_on_device
1086
+ integer function acc_get_device_num(dev_type)
1087
+ import :: acc_device_kind
1088
+ integer(acc_device_kind) :: dev_type
1089
+ end function acc_get_device_num
1090
+ integer(acc_device_kind) function acc_get_device_type()
1091
+ import :: acc_device_kind
1092
+ end function acc_get_device_type
1093
+ logical function acc_is_present(a)
1094
+ integer, dimension(:) :: a
1095
+ end function acc_is_present
1096
+ end interface
1097
+ end module openacc
1098
+ """
1099
+
1100
+ OPENACC_STUB_NAMES = frozenset({
1101
+ "acc_device_kind", "acc_handle_kind", "acc_device_none",
1102
+ "acc_device_default", "acc_device_host", "acc_device_not_host",
1103
+ "acc_async_noval", "acc_async_sync", "acc_on_device",
1104
+ "acc_get_device_num", "acc_get_device_type", "acc_is_present"})