)]}'
{
  "commit": "1cd1354b9b3bda2e99754cc9d79fe3430a2eb3e9",
  "tree": "79701764991b1a91bc7c3c179d4806a1295105fd",
  "parents": [
    "a71d9601c6aa92259042cbbc6110e85e4b0f5331"
  ],
  "author": {
    "name": "Tom Stellard",
    "email": "tstellar@redhat.com",
    "time": "Fri Nov 16 04:24:44 2018 +0000"
  },
  "committer": {
    "name": "Tom Stellard",
    "email": "tstellar@redhat.com",
    "time": "Fri Nov 16 04:24:44 2018 +0000"
  },
  "message": "Merging r343212:\n\n------------------------------------------------------------------------\nr343212 | meinersbur | 2018-09-27 06:39:37 -0700 (Thu, 27 Sep 2018) | 37 lines\n\n[IslAst] Fix InParallelFor nesting.\n\nIslAst could mark two nested outer loops as \"OutermostParallel\". It\ncaused that the code generator tried to OpenMP-parallelize both loops,\nwhich it is not prepared loop.\n\nIt was because the recursive AST build algorithm managed a flag\n\"InParallelFor\" to ensure that no nested loop is also marked as\n\"OutermostParallel\". Unfortunatetly the same flag was used by nodes\nmarked as SIMD, and reset to false after the SIMD node. Since loops can\nbe marked as SIMD inside \"OutermostParallel\" loops, the recursive\nalgorithm again tried to mark loops as \"OutermostParellel\" although\nstill nested inside another \"OutermostParallel\" loop.\n\nThe fix exposed another bug: The function \"astScheduleDimIsParallel\" was\nonly called when a loop was potentially \"OutermostParallel\" or\n\"InnermostParallel\", but as a side-effect also determines the minimum\ndependence distance. Hence, changing when we need to know whether a loop\nis \"OutermostParallel\" also changed which loop was annotated with\n\"#pragma minimal dependence distance\".\n\nMoreover, some complex condition linked with \"InParallelFor\" determined\nwhether a loop should be an \"InnermostParallel\" loop. It missed some\nsituations where it would not use mark as such although being inside an\nSIMD mark node, and therefore not be annotated using \"#pragma simd\".\n\nThe changes in particular:\n\n1. Split the \"InParallelFor\" flag into an \"InParallelFor\" and an\n   \"InSIMD\" flag.\n\n2. Unconditionally call \"astScheduleDimIsParallel\" for its side-effects\n   and store the result in \"InParallel\" for later use.\n\n3. Simplify the condition when a loop is \"InnermostParallel\".\n\nFixes llvm.org/PR33153 and llvm.org/PR38073.\n------------------------------------------------------------------------\n\ngit-svn-id: https://llvm.org/svn/llvm-project/polly/branches/release_70@347024 91177308-0d34-0410-b5e6-96231b3b80d8\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "48ae3ffdca0b75a68b4d07e35c704575d6b7e17f",
      "old_mode": 33188,
      "old_path": "include/polly/CodeGen/IslAst.h",
      "new_id": "059205c629ee02532e071cbe0e2cb523fcce2309",
      "new_mode": 33188,
      "new_path": "include/polly/CodeGen/IslAst.h"
    },
    {
      "type": "modify",
      "old_id": "0923726c87bc7a1b925b978790ec814ff3dbb5b4",
      "old_mode": 33188,
      "old_path": "lib/CodeGen/IslAst.cpp",
      "new_id": "1862950ed67d57916568eb62863fc3cf82c6a61f",
      "new_mode": 33188,
      "new_path": "lib/CodeGen/IslAst.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a5d65c81caf8ef17c575163e4a96410e0e986636",
      "new_mode": 33188,
      "new_path": "test/ScheduleOptimizer/SIMDInParallelFor.ll"
    },
    {
      "type": "modify",
      "old_id": "ede09e7c3fb146fcb5cff8235850327f8b6317e6",
      "old_mode": 33188,
      "old_path": "test/ScheduleOptimizer/full_partial_tile_separation.ll",
      "new_id": "4a0c331529221c063c24e0b7940fb0d9f4d968af",
      "new_mode": 33188,
      "new_path": "test/ScheduleOptimizer/full_partial_tile_separation.ll"
    }
  ]
}
