Creating branches/google/stable and tags/google/stable/2019-05-14 from r360103
git-svn-id: https://llvm.org/svn/llvm-project/polly/branches/google@360714 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/stable/LICENSE.txt b/stable/LICENSE.txt
index 3b204a8..51f1de3 100644
--- a/stable/LICENSE.txt
+++ b/stable/LICENSE.txt
@@ -1,5 +1,240 @@
==============================================================================
-Polly Release License
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+ `LICENSE` file at the top containing the specific license and restrictions
+ which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+ file.
+
+==============================================================================
+Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
==============================================================================
University of Illinois/NCSA
Open Source License
@@ -36,26 +271,3 @@
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
SOFTWARE.
-
-==============================================================================
-Copyrights and Licenses for Third Party Software Distributed with LLVM:
-==============================================================================
-The Polly software contains code written by third parties. Such software will
-have its own individual LICENSE.TXT file in the directory in which it appears.
-This file will describe the copyrights, license, and restrictions which apply
-to that code.
-
-The disclaimer of warranty in the University of Illinois Open Source License
-applies to all code in the Polly Distribution, and nothing in any of the other
-licenses gives permission to use the names of the Polly Team or promote products
-derived from this Software.
-
-The following pieces of software have additional or alternate copyrights,
-licenses, and/or restrictions:
-
-Program Directory
-------- ---------
-jsoncpp lib/External/JSON
-
-
-
diff --git a/stable/docs/ReleaseNotes.rst b/stable/docs/ReleaseNotes.rst
index abae9ff..a9e8c98 100644
--- a/stable/docs/ReleaseNotes.rst
+++ b/stable/docs/ReleaseNotes.rst
@@ -1,8 +1,8 @@
============================
-Release Notes 8.0 (upcoming)
+Release Notes 9.0 (upcoming)
============================
-In Polly 8 the following important changes have been incorporated.
+In Polly 9 the following important changes have been incorporated.
.. warning::
diff --git a/stable/docs/TipsAndTricks.rst b/stable/docs/TipsAndTricks.rst
index d399da8..146da04 100644
--- a/stable/docs/TipsAndTricks.rst
+++ b/stable/docs/TipsAndTricks.rst
@@ -47,7 +47,7 @@
the regression.
LLVM has a single repository that contains all projects. It can be cloned at:
-`<https://github.com/llvm-project/llvm-project-20170507>`_. How to bisect on a
+`<https://github.com/llvm/llvm-project>`_. How to bisect on a
git repository is explained here
`<https://www.metaltoad.com/blog/beginners-guide-git-bisect-process-elimination>`_.
The bisect process can also be automated as explained here:
diff --git a/stable/docs/UsingPollyWithClang.rst b/stable/docs/UsingPollyWithClang.rst
index 3198a41..b6f3705 100644
--- a/stable/docs/UsingPollyWithClang.rst
+++ b/stable/docs/UsingPollyWithClang.rst
@@ -37,6 +37,38 @@
clang -O3 -mllvm -polly -mllvm -polly-parallel -lgomp file.c
+Switching the OpenMP backend
+----------------------------
+
+The following CL switch allows to choose Polly's OpenMP-backend:
+
+ -polly-omp-backend[=BACKEND]
+ choose the OpenMP backend; BACKEND can be 'GNU' (the default) or 'LLVM';
+
+The OpenMP backends can be further influenced using the following CL switches:
+
+
+ -polly-num-threads[=NUM]
+ set the number of threads to use; NUM may be any positive integer (default: 0, which equals automatic/OMP runtime);
+
+ -polly-scheduling[=SCHED]
+ set the OpenMP scheduling type; SCHED can be 'static', 'dynamic', 'guided' or 'runtime' (the default);
+
+ -polly-scheduling-chunksize[=CHUNK]
+ set the chunksize (for the selected scheduling type); CHUNK may be any strictly positive integer (otherwise it will default to 1);
+
+Note that at the time of writing, the GNU backend may only use the
+`polly-num-threads` and `polly-scheduling` switches, where the latter also has
+to be set to "runtime".
+
+Example: Use alternative backend with dynamic scheduling, four threads and
+chunksize of one (additional switches).
+
+.. code-block:: console
+
+ -mllvm -polly-omp-backend=LLVM -mllvm -polly-num-threads=4
+ -mllvm -polly-scheduling=dynamic -mllvm -polly-scheduling-chunksize=1
+
Automatic Vector code generation
================================
diff --git a/stable/docs/conf.py b/stable/docs/conf.py
index 45629da..a881b91 100644
--- a/stable/docs/conf.py
+++ b/stable/docs/conf.py
@@ -49,9 +49,9 @@
# built documents.
#
# The short X.Y version.
-version = '8.0-devel'
+version = '9.0-devel'
# The full version, including alpha/beta/rc tags.
-release = '8.0-devel'
+release = '9.0-devel'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/stable/include/polly/Canonicalization.h b/stable/include/polly/Canonicalization.h
index 1d0fc96..763f2df 100644
--- a/stable/include/polly/Canonicalization.h
+++ b/stable/include/polly/Canonicalization.h
@@ -1,16 +1,19 @@
//===--- Canonicalization.h - Set of canonicalization passes ----*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef POLLY_CANONICALIZATION_H
#define POLLY_CANONICALIZATION_H
-#include "llvm/IR/LegacyPassManager.h"
+namespace llvm {
+namespace legacy {
+class PassManagerBase;
+}
+} // namespace llvm
namespace polly {
diff --git a/stable/include/polly/CodeGen/BlockGenerators.h b/stable/include/polly/CodeGen/BlockGenerators.h
index fca0edc..f2c52c8 100644
--- a/stable/include/polly/CodeGen/BlockGenerators.h
+++ b/stable/include/polly/CodeGen/BlockGenerators.h
@@ -1,9 +1,8 @@
//===-BlockGenerators.h - Helper to generate code for statements-*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -17,24 +16,12 @@
#define POLLY_BLOCK_GENERATORS_H
#include "polly/CodeGen/IRBuilder.h"
-#include "polly/Support/GICHelper.h"
#include "polly/Support/ScopHelper.h"
-#include "llvm/ADT/MapVector.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
-#include "isl/map.h"
-
-struct isl_ast_build;
-struct isl_id_to_ast_expr;
-
-namespace llvm {
-class Pass;
-class Region;
-class ScalarEvolution;
-} // namespace llvm
+#include "isl/isl-noexceptions.h"
namespace polly {
using namespace llvm;
-class ScopStmt;
class MemoryAccess;
class ScopArrayInfo;
class IslExprBuilder;
diff --git a/stable/include/polly/CodeGen/CodeGeneration.h b/stable/include/polly/CodeGen/CodeGeneration.h
index bd1b826..b32f312 100644
--- a/stable/include/polly/CodeGen/CodeGeneration.h
+++ b/stable/include/polly/CodeGen/CodeGeneration.h
@@ -1,29 +1,20 @@
//===- polly/CodeGeneration.h - The Polly code generator --------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef POLLY_CODEGENERATION_H
#define POLLY_CODEGENERATION_H
-#include "IRBuilder.h"
-#include "polly/Config/config.h"
+#include "polly/CodeGen/IRBuilder.h"
#include "polly/ScopPass.h"
#include "llvm/IR/PassManager.h"
-namespace llvm {
-
-class BasicBlock;
-} // namespace llvm
-
namespace polly {
-class Scop;
-
enum VectorizerChoice {
VECTORIZER_NONE,
VECTORIZER_STRIPMINE,
diff --git a/stable/include/polly/CodeGen/IRBuilder.h b/stable/include/polly/CodeGen/IRBuilder.h
index dcfc348..8033ffa 100644
--- a/stable/include/polly/CodeGen/IRBuilder.h
+++ b/stable/include/polly/CodeGen/IRBuilder.h
@@ -1,9 +1,8 @@
//===- Codegen/IRBuilder.h - The IR builder used by Polly -*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -16,12 +15,11 @@
#define POLLY_CODEGEN_IRBUILDER_H
#include "llvm/ADT/MapVector.h"
-#include "llvm/Analysis/LoopInfo.h"
-#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/IR/IRBuilder.h"
-#include "llvm/IR/ValueMap.h"
namespace llvm {
+class Loop;
+class SCEV;
class ScalarEvolution;
} // namespace llvm
diff --git a/stable/include/polly/CodeGen/IslAst.h b/stable/include/polly/CodeGen/IslAst.h
index 059205c..1a842b8 100644
--- a/stable/include/polly/CodeGen/IslAst.h
+++ b/stable/include/polly/CodeGen/IslAst.h
@@ -1,9 +1,8 @@
//===- IslAst.h - Interface to the isl code generator -----------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -22,34 +21,14 @@
#ifndef POLLY_ISLAST_H
#define POLLY_ISLAST_H
-#include "polly/Config/config.h"
#include "polly/ScopPass.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/IR/PassManager.h"
-#include "isl/ast.h"
#include "isl/ctx.h"
-#include <memory>
-
-namespace llvm {
-
-class PassRegistry;
-class raw_ostream;
-
-void initializeIslAstInfoWrapperPassPass(PassRegistry &);
-} // namespace llvm
-
-struct isl_ast_build;
-struct isl_ast_expr;
-struct isl_ast_node;
-struct isl_pw_aff;
-struct isl_pw_multi_aff;
-struct isl_union_map;
namespace polly {
struct Dependences;
-class MemoryAccess;
-class Scop;
class IslAst {
public:
diff --git a/stable/include/polly/CodeGen/IslExprBuilder.h b/stable/include/polly/CodeGen/IslExprBuilder.h
index c036463..fe727cd 100644
--- a/stable/include/polly/CodeGen/IslExprBuilder.h
+++ b/stable/include/polly/CodeGen/IslExprBuilder.h
@@ -1,9 +1,8 @@
//===-IslExprBuilder.h - Helper to generate code for isl AST expressions --===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -14,19 +13,9 @@
#include "polly/CodeGen/IRBuilder.h"
#include "polly/Support/ScopHelper.h"
-
-#include "llvm/ADT/MapVector.h"
-#include "isl/ast.h"
#include "isl/isl-noexceptions.h"
namespace llvm {
-class DataLayout;
-class ScalarEvolution;
-} // namespace llvm
-
-struct isl_id;
-
-namespace llvm {
// Provide PointerLikeTypeTraits for isl_id.
template <> struct PointerLikeTypeTraits<isl_id *> {
diff --git a/stable/include/polly/CodeGen/IslNodeBuilder.h b/stable/include/polly/CodeGen/IslNodeBuilder.h
index 0d3d3af..47bec72 100644
--- a/stable/include/polly/CodeGen/IslNodeBuilder.h
+++ b/stable/include/polly/CodeGen/IslNodeBuilder.h
@@ -1,9 +1,8 @@
//=- IslNodeBuilder.cpp - Translate an isl AST into a LLVM-IR AST -*- C++ -*-=//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -18,48 +17,20 @@
#include "polly/CodeGen/BlockGenerators.h"
#include "polly/CodeGen/IslExprBuilder.h"
#include "polly/ScopDetectionDiagnostic.h"
-#include "polly/Support/ScopHelper.h"
#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallSet.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/IR/InstrTypes.h"
#include "isl/ctx.h"
#include "isl/isl-noexceptions.h"
-#include <utility>
-#include <vector>
using namespace llvm;
using namespace polly;
-namespace llvm {
-
-class BasicBlock;
-class DataLayout;
-class DominatorTree;
-class Function;
-class Instruction;
-class Loop;
-class LoopInfo;
-class ScalarEvolution;
-class SCEV;
-class Type;
-class Value;
-} // namespace llvm
-
namespace polly {
struct InvariantEquivClassTy;
-class MemoryAccess;
-class Scop;
-class ScopStmt;
} // namespace polly
-struct isl_ast_node;
-struct isl_ast_build;
-struct isl_union_map;
-
struct SubtreeReferences {
LoopInfo &LI;
ScalarEvolution &SE;
diff --git a/stable/include/polly/CodeGen/LoopGenerators.h b/stable/include/polly/CodeGen/LoopGenerators.h
index fe13299..152f816 100644
--- a/stable/include/polly/CodeGen/LoopGenerators.h
+++ b/stable/include/polly/CodeGen/LoopGenerators.h
@@ -1,9 +1,8 @@
//===- LoopGenerators.h - IR helper to create loops -------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -16,19 +15,26 @@
#include "polly/CodeGen/IRBuilder.h"
#include "polly/Support/ScopHelper.h"
-
#include "llvm/ADT/SetVector.h"
-#include "llvm/IR/ValueMap.h"
-
-namespace llvm {
-class Value;
-class Pass;
-class BasicBlock;
-} // namespace llvm
namespace polly {
using namespace llvm;
+/// General scheduling types of parallel OpenMP for loops.
+/// Initialization values taken from OpenMP's enum in kmp.h: sched_type.
+/// Currently, only 'static' scheduling may change from chunked to non-chunked.
+enum class OMPGeneralSchedulingType {
+ StaticChunked = 33,
+ StaticNonChunked = 34,
+ Dynamic = 35,
+ Guided = 36,
+ Runtime = 37
+};
+
+extern int PollyNumThreads;
+extern OMPGeneralSchedulingType PollyScheduling;
+extern int PollyChunkSize;
+
/// Create a scalar do/for-style loop.
///
/// @param LowerBound The starting value of the induction variable.
@@ -133,7 +139,7 @@
SetVector<Value *> &Values, ValueMapT &VMap,
BasicBlock::iterator *LoopBody);
-private:
+protected:
/// The IR builder we use to create instructions.
PollyIRBuilder &Builder;
@@ -150,38 +156,6 @@
Module *M;
public:
- /// The functions below can be used if one does not want to generate a
- /// specific OpenMP parallel loop, but generate individual parts of it
- /// (e.g., the subfunction definition).
-
- /// Create a runtime library call to spawn the worker threads.
- ///
- /// @param SubFn The subfunction which holds the loop body.
- /// @param SubFnParam The parameter for the subfunction (basically the struct
- /// filled with the outside values).
- /// @param LB The lower bound for the loop we parallelize.
- /// @param UB The upper bound for the loop we parallelize.
- /// @param Stride The stride of the loop we parallelize.
- void createCallSpawnThreads(Value *SubFn, Value *SubFnParam, Value *LB,
- Value *UB, Value *Stride);
-
- /// Create a runtime library call to join the worker threads.
- void createCallJoinThreads();
-
- /// Create a runtime library call to get the next work item.
- ///
- /// @param LBPtr A pointer value to store the work item begin in.
- /// @param UBPtr A pointer value to store the work item end in.
- ///
- /// @returns A true value if the work item is not empty.
- Value *createCallGetWorkItem(Value *LBPtr, Value *UBPtr);
-
- /// Create a runtime library call to allow cleanup of the thread.
- ///
- /// @note This function is called right before the thread will exit the
- /// subfunction and only if the runtime system depends on it.
- void createCallCleanupThread();
-
/// Create a struct for all @p Values and store them in there.
///
/// @param Values The values which should be stored in the struct.
@@ -199,8 +173,30 @@
Value *Struct, ValueMapT &VMap);
/// Create the definition of the parallel subfunction.
+ ///
+ /// @return A pointer to the subfunction.
Function *createSubFnDefinition();
+ /// Create the runtime library calls for spawn and join of the worker threads.
+ /// Additionally, places a call to the specified subfunction.
+ ///
+ /// @param SubFn The subfunction which holds the loop body.
+ /// @param SubFnParam The parameter for the subfunction (basically the struct
+ /// filled with the outside values).
+ /// @param LB The lower bound for the loop we parallelize.
+ /// @param UB The upper bound for the loop we parallelize.
+ /// @param Stride The stride of the loop we parallelize.
+ virtual void deployParallelExecution(Value *SubFn, Value *SubFnParam,
+ Value *LB, Value *UB, Value *Stride) = 0;
+
+ /// Prepare the definition of the parallel subfunction.
+ /// Creates the argument list and names them (as well as the subfunction).
+ ///
+ /// @param F A pointer to the (parallel) subfunction's parent function.
+ ///
+ /// @return The pointer to the (parallel) subfunction.
+ virtual Function *prepareSubFnDefinition(Function *F) const = 0;
+
/// Create the parallel subfunction.
///
/// @param Stride The induction variable increment.
@@ -212,9 +208,9 @@
/// @param SubFn The newly created subfunction is returned here.
///
/// @return The newly created induction variable.
- Value *createSubFn(Value *Stride, AllocaInst *Struct,
- SetVector<Value *> UsedValues, ValueMapT &VMap,
- Function **SubFn);
+ virtual std::tuple<Value *, Function *>
+ createSubFn(Value *Stride, AllocaInst *Struct, SetVector<Value *> UsedValues,
+ ValueMapT &VMap) = 0;
};
} // end namespace polly
#endif
diff --git a/stable/include/polly/CodeGen/LoopGeneratorsGOMP.h b/stable/include/polly/CodeGen/LoopGeneratorsGOMP.h
new file mode 100644
index 0000000..083be75
--- /dev/null
+++ b/stable/include/polly/CodeGen/LoopGeneratorsGOMP.h
@@ -0,0 +1,75 @@
+//===- LoopGeneratorsGOMP.h - IR helper to create loops ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains functions to create scalar and OpenMP parallel loops
+// as LLVM-IR.
+//
+//===----------------------------------------------------------------------===//
+#ifndef POLLY_LOOP_GENERATORS_GOMP_H
+#define POLLY_LOOP_GENERATORS_GOMP_H
+
+#include "polly/CodeGen/IRBuilder.h"
+#include "polly/CodeGen/LoopGenerators.h"
+#include "polly/Support/ScopHelper.h"
+#include "llvm/ADT/SetVector.h"
+
+namespace polly {
+using namespace llvm;
+
+/// This ParallelLoopGenerator subclass handles the generation of parallelized
+/// code, utilizing the GNU OpenMP library.
+class ParallelLoopGeneratorGOMP : public ParallelLoopGenerator {
+public:
+ /// Create a parallel loop generator for the current function.
+ ParallelLoopGeneratorGOMP(PollyIRBuilder &Builder, LoopInfo &LI,
+ DominatorTree &DT, const DataLayout &DL)
+ : ParallelLoopGenerator(Builder, LI, DT, DL) {}
+
+ // The functions below may be used if one does not want to generate a
+ // specific OpenMP parallel loop, but generate individual parts of it
+ // (e.g. the subfunction definition).
+
+ /// Create a runtime library call to spawn the worker threads.
+ ///
+ /// @param SubFn The subfunction which holds the loop body.
+ /// @param SubFnParam The parameter for the subfunction (basically the struct
+ /// filled with the outside values).
+ /// @param LB The lower bound for the loop we parallelize.
+ /// @param UB The upper bound for the loop we parallelize.
+ /// @param Stride The stride of the loop we parallelize.
+ void createCallSpawnThreads(Value *SubFn, Value *SubFnParam, Value *LB,
+ Value *UB, Value *Stride);
+
+ void deployParallelExecution(Value *SubFn, Value *SubFnParam, Value *LB,
+ Value *UB, Value *Stride) override;
+
+ virtual Function *prepareSubFnDefinition(Function *F) const override;
+
+ std::tuple<Value *, Function *> createSubFn(Value *Stride, AllocaInst *Struct,
+ SetVector<Value *> UsedValues,
+ ValueMapT &VMap) override;
+
+ /// Create a runtime library call to join the worker threads.
+ void createCallJoinThreads();
+
+ /// Create a runtime library call to get the next work item.
+ ///
+ /// @param LBPtr A pointer value to store the work item begin in.
+ /// @param UBPtr A pointer value to store the work item end in.
+ ///
+ /// @returns A true value if the work item is not empty.
+ Value *createCallGetWorkItem(Value *LBPtr, Value *UBPtr);
+
+ /// Create a runtime library call to allow cleanup of the thread.
+ ///
+ /// @note This function is called right before the thread will exit the
+ /// subfunction and only if the runtime system depends on it.
+ void createCallCleanupThread();
+};
+} // end namespace polly
+#endif
diff --git a/stable/include/polly/CodeGen/LoopGeneratorsKMP.h b/stable/include/polly/CodeGen/LoopGeneratorsKMP.h
new file mode 100644
index 0000000..d9a6916
--- /dev/null
+++ b/stable/include/polly/CodeGen/LoopGeneratorsKMP.h
@@ -0,0 +1,144 @@
+//===- LoopGeneratorsKMP.h - IR helper to create loops ----------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains functions to create scalar and OpenMP parallel loops
+// as LLVM-IR.
+//
+//===----------------------------------------------------------------------===//
+#ifndef POLLY_LOOP_GENERATORS_KMP_H
+#define POLLY_LOOP_GENERATORS_KMP_H
+
+#include "polly/CodeGen/IRBuilder.h"
+#include "polly/CodeGen/LoopGenerators.h"
+#include "polly/Support/ScopHelper.h"
+#include "llvm/ADT/SetVector.h"
+
+namespace polly {
+using namespace llvm;
+
+/// This ParallelLoopGenerator subclass handles the generation of parallelized
+/// code, utilizing the LLVM OpenMP library.
+class ParallelLoopGeneratorKMP : public ParallelLoopGenerator {
+public:
+ /// Create a parallel loop generator for the current function.
+ ParallelLoopGeneratorKMP(PollyIRBuilder &Builder, LoopInfo &LI,
+ DominatorTree &DT, const DataLayout &DL)
+ : ParallelLoopGenerator(Builder, LI, DT, DL) {
+ SourceLocationInfo = createSourceLocation();
+ }
+
+protected:
+ /// The source location struct of this loop.
+ /// ident_t = type { i32, i32, i32, i32, i8* }
+ GlobalValue *SourceLocationInfo;
+
+ /// Convert the combination of given chunk size and scheduling type (which
+ /// might have been set via the command line) into the corresponding
+ /// scheduling type. This may result (e.g.) in a 'change' from
+ /// "static chunked" scheduling to "static non-chunked" (regarding the
+ /// provided and returned scheduling types).
+ ///
+ /// @param ChunkSize The chunk size, set via command line or its default.
+ /// @param Scheduling The scheduling, set via command line or its default.
+ ///
+ /// @return The corresponding OMPGeneralSchedulingType.
+ OMPGeneralSchedulingType
+ getSchedType(int ChunkSize, OMPGeneralSchedulingType Scheduling) const;
+
+ /// Returns True if 'LongType' is 64bit wide, otherwise: False.
+ bool is64BitArch();
+
+public:
+ // The functions below may be used if one does not want to generate a
+ // specific OpenMP parallel loop, but generate individual parts of it
+ // (e.g. the subfunction definition).
+
+ /// Create a runtime library call to spawn the worker threads.
+ ///
+ /// @param SubFn The subfunction which holds the loop body.
+ /// @param SubFnParam The parameter for the subfunction (basically the struct
+ /// filled with the outside values).
+ /// @param LB The lower bound for the loop we parallelize.
+ /// @param UB The upper bound for the loop we parallelize.
+ /// @param Stride The stride of the loop we parallelize.
+ void createCallSpawnThreads(Value *SubFn, Value *SubFnParam, Value *LB,
+ Value *UB, Value *Stride);
+
+ void deployParallelExecution(Value *SubFn, Value *SubFnParam, Value *LB,
+ Value *UB, Value *Stride) override;
+
+ virtual Function *prepareSubFnDefinition(Function *F) const override;
+
+ std::tuple<Value *, Function *> createSubFn(Value *Stride, AllocaInst *Struct,
+ SetVector<Value *> UsedValues,
+ ValueMapT &VMap) override;
+
+ /// Create a runtime library call to get the current global thread number.
+ ///
+ /// @return A Value ref which holds the current global thread number.
+ Value *createCallGlobalThreadNum();
+
+ /// Create a runtime library call to request a number of threads.
+ /// Which will be used in the next OpenMP section (by the next fork).
+ ///
+ /// @param GlobalThreadID The global thread ID.
+ /// @param NumThreads The number of threads to use.
+ void createCallPushNumThreads(Value *GlobalThreadID, Value *NumThreads);
+
+ /// Create a runtime library call to prepare the OpenMP runtime.
+ /// For dynamically scheduled loops, saving the loop arguments.
+ ///
+ /// @param GlobalThreadID The global thread ID.
+ /// @param LB The loop's lower bound.
+ /// @param UB The loop's upper bound.
+ /// @param Inc The loop increment.
+ /// @param ChunkSize The chunk size of the parallel loop.
+ void createCallDispatchInit(Value *GlobalThreadID, Value *LB, Value *UB,
+ Value *Inc, Value *ChunkSize);
+
+ /// Create a runtime library call to retrieve the next (dynamically)
+ /// allocated chunk of work for this thread.
+ ///
+ /// @param GlobalThreadID The global thread ID.
+ /// @param IsLastPtr Pointer to a flag, which is set to 1 if this is
+ /// the last chunk of work, or 0 otherwise.
+ /// @param LBPtr Pointer to the lower bound for the next chunk.
+ /// @param UBPtr Pointer to the upper bound for the next chunk.
+ /// @param StridePtr Pointer to the stride for the next chunk.
+ ///
+ /// @return A Value which holds 1 if there is work to be done, 0 otherwise.
+ Value *createCallDispatchNext(Value *GlobalThreadID, Value *IsLastPtr,
+ Value *LBPtr, Value *UBPtr, Value *StridePtr);
+
+ /// Create a runtime library call to prepare the OpenMP runtime.
+ /// For statically scheduled loops, saving the loop arguments.
+ ///
+ /// @param GlobalThreadID The global thread ID.
+ /// @param IsLastPtr Pointer to a flag, which is set to 1 if this is
+ /// the last chunk of work, or 0 otherwise.
+ /// @param LBPtr Pointer to the lower bound for the next chunk.
+ /// @param UBPtr Pointer to the upper bound for the next chunk.
+ /// @param StridePtr Pointer to the stride for the next chunk.
+ /// @param ChunkSize The chunk size of the parallel loop.
+ void createCallStaticInit(Value *GlobalThreadID, Value *IsLastPtr,
+ Value *LBPtr, Value *UBPtr, Value *StridePtr,
+ Value *ChunkSize);
+
+ /// Create a runtime library call to mark the end of
+ /// a statically scheduled loop.
+ ///
+ /// @param GlobalThreadID The global thread ID.
+ void createCallStaticFini(Value *GlobalThreadID);
+
+ /// Create the current source location.
+ ///
+ /// TODO: Generates only(!) dummy values.
+ GlobalVariable *createSourceLocation();
+};
+} // end namespace polly
+#endif
diff --git a/stable/include/polly/CodeGen/PPCGCodeGeneration.h b/stable/include/polly/CodeGen/PPCGCodeGeneration.h
index 9a9a143..d003fb2 100644
--- a/stable/include/polly/CodeGen/PPCGCodeGeneration.h
+++ b/stable/include/polly/CodeGen/PPCGCodeGeneration.h
@@ -1,9 +1,8 @@
//===--- polly/PPCGCodeGeneration.h - Polly Accelerator Code Generation. --===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/CodeGen/PerfMonitor.h b/stable/include/polly/CodeGen/PerfMonitor.h
index 77b59b4..81aa4c7 100644
--- a/stable/include/polly/CodeGen/PerfMonitor.h
+++ b/stable/include/polly/CodeGen/PerfMonitor.h
@@ -1,9 +1,8 @@
//===--- PerfMonitor.h --- Monitor time spent in scops --------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
@@ -12,13 +11,6 @@
#include "polly/CodeGen/IRBuilder.h"
-namespace llvm {
-class Function;
-class Module;
-class Value;
-class Instruction;
-} // namespace llvm
-
namespace polly {
class PerfMonitor {
diff --git a/stable/include/polly/CodeGen/RuntimeDebugBuilder.h b/stable/include/polly/CodeGen/RuntimeDebugBuilder.h
index a0820f9..c40b53c 100644
--- a/stable/include/polly/CodeGen/RuntimeDebugBuilder.h
+++ b/stable/include/polly/CodeGen/RuntimeDebugBuilder.h
@@ -1,9 +1,8 @@
//===--- RuntimeDebugBuilder.h --- Helper to insert prints into LLVM-IR ---===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/CodeGen/Utils.h b/stable/include/polly/CodeGen/Utils.h
index 0452c44..0678e34 100644
--- a/stable/include/polly/CodeGen/Utils.h
+++ b/stable/include/polly/CodeGen/Utils.h
@@ -1,9 +1,8 @@
//===- Utils.h - Utility functions for code generation ----------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/CodePreparation.h b/stable/include/polly/CodePreparation.h
index 326465f..fb1942b 100644
--- a/stable/include/polly/CodePreparation.h
+++ b/stable/include/polly/CodePreparation.h
@@ -1,9 +1,8 @@
//===- polly/ScopPreparation.h - Code preparation pass ----------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/Config/config.h.cmake b/stable/include/polly/Config/config.h.cmake
index 728eedd..aaa101f 100644
--- a/stable/include/polly/Config/config.h.cmake
+++ b/stable/include/polly/Config/config.h.cmake
@@ -1,9 +1,8 @@
//===- polly/Config.h ------------ Configuration of Polly -------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/DeLICM.h b/stable/include/polly/DeLICM.h
index 8aeefb6..7ef382f 100644
--- a/stable/include/polly/DeLICM.h
+++ b/stable/include/polly/DeLICM.h
@@ -1,9 +1,8 @@
//===------ DeLICM.h --------------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -18,11 +17,12 @@
#ifndef POLLY_DELICM_H
#define POLLY_DELICM_H
-#include "polly/Support/GICHelper.h"
+#include "isl/isl-noexceptions.h"
namespace llvm {
class PassRegistry;
class Pass;
+class raw_ostream;
} // namespace llvm
namespace polly {
diff --git a/stable/include/polly/DependenceInfo.h b/stable/include/polly/DependenceInfo.h
index 59ae2aa..d66be81 100644
--- a/stable/include/polly/DependenceInfo.h
+++ b/stable/include/polly/DependenceInfo.h
@@ -1,9 +1,8 @@
//===--- polly/DependenceInfo.h - Polyhedral dependency analysis *- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -27,21 +26,10 @@
#include "isl/ctx.h"
#include "isl/isl-noexceptions.h"
-struct isl_pw_aff;
-struct isl_union_map;
-struct isl_union_set;
-struct isl_map;
-struct isl_set;
-struct clast_for;
-
using namespace llvm;
namespace polly {
-class Scop;
-class ScopStmt;
-class MemoryAccess;
-
/// The accumulated dependence information for a SCoP.
///
/// The Dependences struct holds all dependence information we collect and
@@ -314,7 +302,6 @@
} // namespace polly
namespace llvm {
-class PassRegistry;
void initializeDependenceInfoPass(llvm::PassRegistry &);
void initializeDependenceInfoWrapperPassPass(llvm::PassRegistry &);
} // namespace llvm
diff --git a/stable/include/polly/FlattenAlgo.h b/stable/include/polly/FlattenAlgo.h
index f5bc757..6fdca8f 100644
--- a/stable/include/polly/FlattenAlgo.h
+++ b/stable/include/polly/FlattenAlgo.h
@@ -1,9 +1,8 @@
//===------ FlattenAlgo.h --------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -15,7 +14,7 @@
#ifndef POLLY_FLATTENALGO_H
#define POLLY_FLATTENALGO_H
-#include "polly/Support/GICHelper.h"
+#include "isl/isl-noexceptions.h"
namespace polly {
/// Recursively flatten a schedule.
diff --git a/stable/include/polly/FlattenSchedule.h b/stable/include/polly/FlattenSchedule.h
index 0e30473..2b9fa4f 100644
--- a/stable/include/polly/FlattenSchedule.h
+++ b/stable/include/polly/FlattenSchedule.h
@@ -1,9 +1,8 @@
//===------ FlattenSchedule.h ----------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/ForwardOpTree.h b/stable/include/polly/ForwardOpTree.h
index 3e23be8..d4f879c 100644
--- a/stable/include/polly/ForwardOpTree.h
+++ b/stable/include/polly/ForwardOpTree.h
@@ -1,9 +1,8 @@
//===- ForwardOpTree.h ------------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/JSONExporter.h b/stable/include/polly/JSONExporter.h
index 8252dd4..92aaacc 100644
--- a/stable/include/polly/JSONExporter.h
+++ b/stable/include/polly/JSONExporter.h
@@ -1,9 +1,8 @@
//===- polly/JSONExporter.h - Import/Export to/from jscop files.-*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
diff --git a/stable/include/polly/LinkAllPasses.h b/stable/include/polly/LinkAllPasses.h
index 56a7330..ed05f83 100644
--- a/stable/include/polly/LinkAllPasses.h
+++ b/stable/include/polly/LinkAllPasses.h
@@ -1,9 +1,8 @@
//===- polly/LinkAllPasses.h ----------- Reference All Passes ---*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -25,9 +24,7 @@
namespace llvm {
class Pass;
-class PassInfo;
class PassRegistry;
-class RegionPass;
} // namespace llvm
namespace polly {
diff --git a/stable/include/polly/Options.h b/stable/include/polly/Options.h
index 62e0960..91a3a84 100644
--- a/stable/include/polly/Options.h
+++ b/stable/include/polly/Options.h
@@ -1,9 +1,8 @@
//===--------------- polly/Options.h - The Polly option category *- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/PolyhedralInfo.h b/stable/include/polly/PolyhedralInfo.h
index 40c6ea6..cec288d 100644
--- a/stable/include/polly/PolyhedralInfo.h
+++ b/stable/include/polly/PolyhedralInfo.h
@@ -1,9 +1,8 @@
//===- polly/PolyhedralInfo.h - PolyhedralInfo class definition -*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
@@ -18,8 +17,9 @@
#define POLLY_POLYHEDRAL_INFO_H
#include "llvm/Pass.h"
+#include "isl/aff_type.h"
#include "isl/ctx.h"
-#include "isl/union_map.h"
+#include "isl/union_map_type.h"
namespace llvm {
class Loop;
diff --git a/stable/include/polly/PruneUnprofitable.h b/stable/include/polly/PruneUnprofitable.h
index 6101b7e..3327e14 100644
--- a/stable/include/polly/PruneUnprofitable.h
+++ b/stable/include/polly/PruneUnprofitable.h
@@ -1,9 +1,8 @@
//===- PruneUnprofitable.h --------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/RegisterPasses.h b/stable/include/polly/RegisterPasses.h
index dc2aa25..2126db9 100644
--- a/stable/include/polly/RegisterPasses.h
+++ b/stable/include/polly/RegisterPasses.h
@@ -1,9 +1,8 @@
//===------ polly/RegisterPasses.h - Register the Polly passes *- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -14,9 +13,8 @@
#ifndef POLLY_REGISTER_PASSES_H
#define POLLY_REGISTER_PASSES_H
-#include "llvm/IR/LegacyPassManager.h"
-
namespace llvm {
+class PassRegistry;
namespace legacy {
class PassManagerBase;
} // namespace legacy
diff --git a/stable/include/polly/ScheduleOptimizer.h b/stable/include/polly/ScheduleOptimizer.h
index ef44f34..c32ddfa 100644
--- a/stable/include/polly/ScheduleOptimizer.h
+++ b/stable/include/polly/ScheduleOptimizer.h
@@ -1,9 +1,8 @@
//===- polly/ScheduleOptimizer.h - The Schedule Optimizer -------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
diff --git a/stable/include/polly/ScopBuilder.h b/stable/include/polly/ScopBuilder.h
index 247e238..54d48be 100644
--- a/stable/include/polly/ScopBuilder.h
+++ b/stable/include/polly/ScopBuilder.h
@@ -1,9 +1,8 @@
//===- polly/ScopBuilder.h --------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -21,30 +20,6 @@
#include "polly/Support/ScopHelper.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/SetVector.h"
-#include "llvm/ADT/SmallVector.h"
-#include <algorithm>
-#include <memory>
-#include <utility>
-
-namespace llvm {
-
-class AssumptionCache;
-class BasicBlock;
-class DataLayout;
-class DominatorTree;
-class Instruction;
-class LoopInfo;
-class PassRegistry;
-class PHINode;
-class Region;
-class ScalarEvolution;
-class SCEV;
-class Type;
-class Value;
-
-void initializeScopInfoRegionPassPass(PassRegistry &);
-void initializeScopInfoWrapperPassPass(PassRegistry &);
-} // end namespace llvm
namespace polly {
diff --git a/stable/include/polly/ScopDetection.h b/stable/include/polly/ScopDetection.h
index 31d54d8..a174b4b 100644
--- a/stable/include/polly/ScopDetection.h
+++ b/stable/include/polly/ScopDetection.h
@@ -1,9 +1,8 @@
//===- ScopDetection.h - Detect Scops ---------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -49,46 +48,16 @@
#include "polly/ScopDetectionDiagnostic.h"
#include "polly/Support/ScopHelper.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/SetVector.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/AliasSetTracker.h"
#include "llvm/Analysis/RegionInfo.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/Pass.h"
-#include <algorithm>
-#include <map>
-#include <memory>
#include <set>
-#include <string>
-#include <utility>
-#include <vector>
using namespace llvm;
namespace llvm {
-
-class BasicBlock;
-class BranchInst;
-class CallInst;
-class DebugLoc;
-class DominatorTree;
-class Function;
-class Instruction;
-class IntrinsicInst;
-class Loop;
-class LoopInfo;
-class OptimizationRemarkEmitter;
-class PassRegistry;
-class raw_ostream;
-class ScalarEvolution;
-class SCEV;
-class SCEVUnknown;
-class SwitchInst;
-class Value;
-
void initializeScopDetectionWrapperPassPass(PassRegistry &);
} // namespace llvm
diff --git a/stable/include/polly/ScopDetectionDiagnostic.h b/stable/include/polly/ScopDetectionDiagnostic.h
index 200c77f..6824615 100644
--- a/stable/include/polly/ScopDetectionDiagnostic.h
+++ b/stable/include/polly/ScopDetectionDiagnostic.h
@@ -1,9 +1,8 @@
//===- ScopDetectionDiagnostic.h - Diagnostic for ScopDetection -*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -21,15 +20,10 @@
#ifndef POLLY_SCOPDETECTIONDIAGNOSTIC_H
#define POLLY_SCOPDETECTIONDIAGNOSTIC_H
-#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Instruction.h"
#include <cstddef>
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
using namespace llvm;
@@ -38,10 +32,8 @@
class AliasSet;
class BasicBlock;
class OptimizationRemarkEmitter;
-class raw_ostream;
class Region;
class SCEV;
-class Value;
} // namespace llvm
namespace polly {
diff --git a/stable/include/polly/ScopInfo.h b/stable/include/polly/ScopInfo.h
index c6bf0e5..5f48f64 100644
--- a/stable/include/polly/ScopInfo.h
+++ b/stable/include/polly/ScopInfo.h
@@ -1,9 +1,8 @@
//===- polly/ScopInfo.h -----------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -20,75 +19,31 @@
#include "polly/ScopDetection.h"
#include "polly/Support/SCEVAffinator.h"
-#include "polly/Support/ScopHelper.h"
#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/MapVector.h"
-#include "llvm/ADT/Optional.h"
#include "llvm/ADT/SetVector.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/ADT/iterator_range.h"
#include "llvm/Analysis/RegionPass.h"
-#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
-#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/ValueHandle.h"
#include "llvm/Pass.h"
-#include "llvm/Support/Casting.h"
#include "isl/isl-noexceptions.h"
-#include <algorithm>
#include <cassert>
#include <cstddef>
#include <forward_list>
-#include <functional>
-#include <list>
-#include <map>
-#include <memory>
-#include <string>
-#include <tuple>
-#include <utility>
-#include <vector>
using namespace llvm;
namespace llvm {
-
-class AssumptionCache;
-class BasicBlock;
-class DataLayout;
-class DominatorTree;
-class Function;
-class Loop;
-class LoopInfo;
-class OptimizationRemarkEmitter;
-class PassRegistry;
-class raw_ostream;
-class ScalarEvolution;
-class SCEV;
-class Type;
-class Value;
-
void initializeScopInfoRegionPassPass(PassRegistry &);
void initializeScopInfoWrapperPassPass(PassRegistry &);
} // end namespace llvm
-struct isl_map;
-struct isl_pw_multi_aff;
-struct isl_schedule;
-struct isl_set;
-struct isl_union_map;
-
namespace polly {
class MemoryAccess;
-class Scop;
-class ScopStmt;
//===---------------------------------------------------------------------===//
diff --git a/stable/include/polly/ScopPass.h b/stable/include/polly/ScopPass.h
index 5507e3e..edaadf2 100644
--- a/stable/include/polly/ScopPass.h
+++ b/stable/include/polly/ScopPass.h
@@ -1,9 +1,8 @@
//===--------- ScopPass.h - Pass for Static Control Parts --------*-C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/Simplify.h b/stable/include/polly/Simplify.h
index 20c0517..fb6a015 100644
--- a/stable/include/polly/Simplify.h
+++ b/stable/include/polly/Simplify.h
@@ -1,9 +1,8 @@
//===------ Simplify.h ------------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/Support/DumpModulePass.h b/stable/include/polly/Support/DumpModulePass.h
index 9b16051..8299cfd 100644
--- a/stable/include/polly/Support/DumpModulePass.h
+++ b/stable/include/polly/Support/DumpModulePass.h
@@ -1,9 +1,8 @@
//===------ DumpModulePass.h ------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/Support/GICHelper.h b/stable/include/polly/Support/GICHelper.h
index 335501a..ca8abe4 100644
--- a/stable/include/polly/Support/GICHelper.h
+++ b/stable/include/polly/Support/GICHelper.h
@@ -1,9 +1,8 @@
//===- Support/GICHelper.h -- Helper functions for ISL --------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -17,23 +16,9 @@
#include "llvm/ADT/APInt.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/Support/raw_ostream.h"
-#include "isl/aff.h"
#include "isl/ctx.h"
#include "isl/isl-noexceptions.h"
-#include "isl/map.h"
#include "isl/options.h"
-#include "isl/set.h"
-#include "isl/union_map.h"
-#include "isl/union_set.h"
-#include <functional>
-#include <string>
-
-struct isl_schedule;
-struct isl_multi_aff;
-
-namespace llvm {
-class Value;
-} // namespace llvm
namespace polly {
diff --git a/stable/include/polly/Support/ISLOStream.h b/stable/include/polly/Support/ISLOStream.h
index fd9c941..08853a2 100644
--- a/stable/include/polly/Support/ISLOStream.h
+++ b/stable/include/polly/Support/ISLOStream.h
@@ -1,9 +1,8 @@
//===------ IslOstream.h ----------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/Support/ISLOperators.h b/stable/include/polly/Support/ISLOperators.h
index 640777d..28fee01 100644
--- a/stable/include/polly/Support/ISLOperators.h
+++ b/stable/include/polly/Support/ISLOperators.h
@@ -1,9 +1,8 @@
//===------ ISLOperators.h --------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/Support/ISLTools.h b/stable/include/polly/Support/ISLTools.h
index afb68fc..fab0dae 100644
--- a/stable/include/polly/Support/ISLTools.h
+++ b/stable/include/polly/Support/ISLTools.h
@@ -1,9 +1,8 @@
//===------ ISLTools.h ------------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -15,8 +14,8 @@
#ifndef POLLY_ISLTOOLS_H
#define POLLY_ISLTOOLS_H
-#include "polly/Support/GICHelper.h"
-#include "llvm/ADT/iterator_range.h"
+#include "llvm/ADT/iterator.h"
+#include "isl/isl-noexceptions.h"
namespace isl {
inline namespace noexceptions {
diff --git a/stable/include/polly/Support/LinkGPURuntime.h b/stable/include/polly/Support/LinkGPURuntime.h
index 85a6189..c632d45 100644
--- a/stable/include/polly/Support/LinkGPURuntime.h
+++ b/stable/include/polly/Support/LinkGPURuntime.h
@@ -1,9 +1,8 @@
//===- Support/LinkGPURuntime.h -- Headerfile to help force-link GPURuntime =//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/Support/SCEVAffinator.h b/stable/include/polly/Support/SCEVAffinator.h
index 586d299..4aad9a6 100644
--- a/stable/include/polly/Support/SCEVAffinator.h
+++ b/stable/include/polly/Support/SCEVAffinator.h
@@ -1,9 +1,8 @@
//===------ polly/SCEVAffinator.h - Create isl expressions from SCEVs -----===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -14,21 +13,11 @@
#ifndef POLLY_SCEV_AFFINATOR_H
#define POLLY_SCEV_AFFINATOR_H
-#include "llvm/ADT/DenseMap.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
-
#include "isl/isl-noexceptions.h"
-namespace llvm {
-class Region;
-class BasicBlock;
-class DataLayout;
-class ScalarEvolution;
-} // namespace llvm
-
namespace polly {
class Scop;
-class ScopStmt;
/// The result type of the SCEVAffinator.
///
diff --git a/stable/include/polly/Support/SCEVValidator.h b/stable/include/polly/Support/SCEVValidator.h
index c8a6293..a341dc0 100644
--- a/stable/include/polly/Support/SCEVValidator.h
+++ b/stable/include/polly/Support/SCEVValidator.h
@@ -1,9 +1,8 @@
//===--- SCEVValidator.h - Detect Scops -------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// Checks if a SCEV expression represents a valid affine expression.
@@ -13,17 +12,9 @@
#define POLLY_SCEV_VALIDATOR_H
#include "polly/Support/ScopHelper.h"
-#include "llvm/ADT/SetVector.h"
namespace llvm {
-class Region;
-class SCEV;
class SCEVConstant;
-class ScalarEvolution;
-class Value;
-class Loop;
-class LoadInst;
-class CallInst;
} // namespace llvm
namespace polly {
diff --git a/stable/include/polly/Support/ScopHelper.h b/stable/include/polly/Support/ScopHelper.h
index 4fec771..02c669a 100644
--- a/stable/include/polly/Support/ScopHelper.h
+++ b/stable/include/polly/Support/ScopHelper.h
@@ -1,9 +1,8 @@
//===------ Support/ScopHelper.h -- Some Helper Functions for Scop. -------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -14,13 +13,10 @@
#ifndef POLLY_SUPPORT_IRHELPER_H
#define POLLY_SUPPORT_IRHELPER_H
-#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/ValueHandle.h"
-#include <tuple>
-#include <vector>
namespace llvm {
class LoopInfo;
@@ -31,7 +27,6 @@
class Pass;
class DominatorTree;
class RegionInfo;
-class GetElementPtrInst;
} // namespace llvm
namespace polly {
diff --git a/stable/include/polly/Support/ScopLocation.h b/stable/include/polly/Support/ScopLocation.h
index 50d0011..a6d5779 100644
--- a/stable/include/polly/Support/ScopLocation.h
+++ b/stable/include/polly/Support/ScopLocation.h
@@ -1,9 +1,8 @@
//=== ScopLocation.h -- Debug location helper for ScopDetection -*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/Support/VirtualInstruction.h b/stable/include/polly/Support/VirtualInstruction.h
index 9794d35..90bf04f 100644
--- a/stable/include/polly/Support/VirtualInstruction.h
+++ b/stable/include/polly/Support/VirtualInstruction.h
@@ -1,9 +1,8 @@
//===------ VirtualInstruction.cpp ------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/include/polly/ZoneAlgo.h b/stable/include/polly/ZoneAlgo.h
index c4f5deb..a93868d 100644
--- a/stable/include/polly/ZoneAlgo.h
+++ b/stable/include/polly/ZoneAlgo.h
@@ -1,9 +1,8 @@
//===------ ZoneAlgo.h ------------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/lib/Analysis/DependenceInfo.cpp b/stable/lib/Analysis/DependenceInfo.cpp
index cec3fe2..173c292 100644
--- a/stable/lib/Analysis/DependenceInfo.cpp
+++ b/stable/lib/Analysis/DependenceInfo.cpp
@@ -1,9 +1,8 @@
//===- DependenceInfo.cpp - Calculate dependency information for a Scop. --===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -27,15 +26,14 @@
#include "polly/Support/GICHelper.h"
#include "polly/Support/ISLTools.h"
#include "llvm/Support/Debug.h"
-#include <isl/aff.h>
-#include <isl/ctx.h>
-#include <isl/flow.h>
-#include <isl/map.h>
-#include <isl/options.h>
-#include <isl/schedule.h>
-#include <isl/set.h>
-#include <isl/union_map.h>
-#include <isl/union_set.h>
+#include "isl/aff.h"
+#include "isl/ctx.h"
+#include "isl/flow.h"
+#include "isl/map.h"
+#include "isl/schedule.h"
+#include "isl/set.h"
+#include "isl/union_map.h"
+#include "isl/union_set.h"
using namespace polly;
using namespace llvm;
diff --git a/stable/lib/Analysis/PolyhedralInfo.cpp b/stable/lib/Analysis/PolyhedralInfo.cpp
index e9179c7..2b5ed6f 100644
--- a/stable/lib/Analysis/PolyhedralInfo.cpp
+++ b/stable/lib/Analysis/PolyhedralInfo.cpp
@@ -1,21 +1,21 @@
//===--------- PolyhedralInfo.cpp - Create Scops from LLVM IR-------------===//
-///
-/// The LLVM Compiler Infrastructure
-///
-/// This file is distributed under the University of Illinois Open Source
-/// License. See LICENSE.TXT for details.
-///
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
//===----------------------------------------------------------------------===//
-///
-/// An interface to the Polyhedral analysis engine(Polly) of LLVM.
-///
-/// This pass provides an interface to the polyhedral analysis performed by
-/// Polly.
-///
-/// This interface provides basic interface like isParallel, isVectorizable
-/// that can be used in LLVM transformation passes.
-///
-/// Work in progress, this file is subject to change.
+//
+// An interface to the Polyhedral analysis engine(Polly) of LLVM.
+//
+// This pass provides an interface to the polyhedral analysis performed by
+// Polly.
+//
+// This interface provides basic interface like isParallel, isVectorizable
+// that can be used in LLVM transformation passes.
+//
+// Work in progress, this file is subject to change.
+//
//===----------------------------------------------------------------------===//
#include "polly/PolyhedralInfo.h"
@@ -26,8 +26,7 @@
#include "polly/Support/GICHelper.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Support/Debug.h"
-#include <isl/map.h>
-#include <isl/union_map.h>
+#include "isl/union_map.h"
using namespace llvm;
using namespace polly;
diff --git a/stable/lib/Analysis/PruneUnprofitable.cpp b/stable/lib/Analysis/PruneUnprofitable.cpp
index da1ef52..f2780a3 100644
--- a/stable/lib/Analysis/PruneUnprofitable.cpp
+++ b/stable/lib/Analysis/PruneUnprofitable.cpp
@@ -1,9 +1,8 @@
//===- PruneUnprofitable.cpp ----------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -17,7 +16,6 @@
#include "polly/ScopPass.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/IR/DebugLoc.h"
-#include "llvm/Pass.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
diff --git a/stable/lib/Analysis/ScopBuilder.cpp b/stable/lib/Analysis/ScopBuilder.cpp
index 7d1e781..3c44429 100644
--- a/stable/lib/Analysis/ScopBuilder.cpp
+++ b/stable/lib/Analysis/ScopBuilder.cpp
@@ -1,9 +1,8 @@
//===- ScopBuilder.cpp ----------------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -17,17 +16,13 @@
#include "polly/ScopBuilder.h"
#include "polly/Options.h"
#include "polly/ScopDetection.h"
-#include "polly/ScopDetectionDiagnostic.h"
#include "polly/ScopInfo.h"
#include "polly/Support/GICHelper.h"
#include "polly/Support/SCEVValidator.h"
#include "polly/Support/ScopHelper.h"
#include "polly/Support/VirtualInstruction.h"
-#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/EquivalenceClasses.h"
-#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/LoopInfo.h"
@@ -37,31 +32,23 @@
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DerivedTypes.h"
-#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
-#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/Operator.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/Value.h"
-#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <cassert>
-#include <string>
-#include <tuple>
-#include <vector>
using namespace llvm;
using namespace polly;
diff --git a/stable/lib/Analysis/ScopDetection.cpp b/stable/lib/Analysis/ScopDetection.cpp
index 23b714d..25732b7 100644
--- a/stable/lib/Analysis/ScopDetection.cpp
+++ b/stable/lib/Analysis/ScopDetection.cpp
@@ -1,9 +1,8 @@
//===- ScopDetection.cpp - Detect Scops -----------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -51,22 +50,16 @@
#include "polly/Support/SCEVValidator.h"
#include "polly/Support/ScopHelper.h"
#include "polly/Support/ScopLocation.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
-#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/Loads.h"
#include "llvm/Analysis/LoopInfo.h"
-#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/RegionInfo.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/Constants.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/DiagnosticInfo.h"
@@ -77,27 +70,14 @@
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/Intrinsics.h"
-#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
-#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/Pass.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/Regex.h"
#include "llvm/Support/raw_ostream.h"
-#include <algorithm>
#include <cassert>
-#include <memory>
-#include <stack>
-#include <string>
-#include <utility>
-#include <vector>
using namespace llvm;
using namespace polly;
diff --git a/stable/lib/Analysis/ScopDetectionDiagnostic.cpp b/stable/lib/Analysis/ScopDetectionDiagnostic.cpp
index a0c3712..e58b47d 100644
--- a/stable/lib/Analysis/ScopDetectionDiagnostic.cpp
+++ b/stable/lib/Analysis/ScopDetectionDiagnostic.cpp
@@ -1,9 +1,8 @@
//===- ScopDetectionDiagnostic.cpp - Error diagnostics --------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/lib/Analysis/ScopGraphPrinter.cpp b/stable/lib/Analysis/ScopGraphPrinter.cpp
index 3908694..8f5d6d2 100644
--- a/stable/lib/Analysis/ScopGraphPrinter.cpp
+++ b/stable/lib/Analysis/ScopGraphPrinter.cpp
@@ -1,9 +1,8 @@
//===- GraphPrinter.cpp - Create a DOT output describing the Scop. --------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/lib/Analysis/ScopInfo.cpp b/stable/lib/Analysis/ScopInfo.cpp
index 896a1b6..f7e7898 100644
--- a/stable/lib/Analysis/ScopInfo.cpp
+++ b/stable/lib/Analysis/ScopInfo.cpp
@@ -1,9 +1,8 @@
//===- ScopInfo.cpp -------------------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -30,19 +29,11 @@
#include "polly/Support/ScopHelper.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/DenseMap.h"
-#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/PostOrderIterator.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallSet.h"
-#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
-#include "llvm/ADT/StringExtras.h"
-#include "llvm/ADT/StringMap.h"
#include "llvm/Analysis/AliasAnalysis.h"
-#include "llvm/Analysis/AliasSetTracker.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/Loads.h"
#include "llvm/Analysis/LoopInfo.h"
@@ -51,58 +42,29 @@
#include "llvm/Analysis/RegionIterator.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
-#include "llvm/IR/Argument.h"
#include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/CFG.h"
#include "llvm/IR/ConstantRange.h"
-#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugLoc.h"
-#include "llvm/IR/DerivedTypes.h"
-#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
-#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Type.h"
-#include "llvm/IR/Use.h"
-#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "isl/aff.h"
-#include "isl/constraint.h"
#include "isl/local_space.h"
#include "isl/map.h"
#include "isl/options.h"
-#include "isl/printer.h"
-#include "isl/schedule.h"
-#include "isl/schedule_node.h"
#include "isl/set.h"
-#include "isl/union_map.h"
-#include "isl/union_set.h"
-#include "isl/val.h"
-#include <algorithm>
#include <cassert>
-#include <cstdlib>
-#include <cstring>
-#include <deque>
-#include <iterator>
-#include <memory>
-#include <string>
-#include <tuple>
-#include <utility>
-#include <vector>
using namespace llvm;
using namespace polly;
@@ -844,7 +806,7 @@
if (Range.isFullSet())
return;
- if (Range.isWrappedSet() || Range.isSignWrappedSet())
+ if (Range.isUpperWrapped() || Range.isSignWrappedSet())
return;
bool isWrapping = Range.isSignWrappedSet();
diff --git a/stable/lib/Analysis/ScopPass.cpp b/stable/lib/Analysis/ScopPass.cpp
index b91d66a..6e29998 100644
--- a/stable/lib/Analysis/ScopPass.cpp
+++ b/stable/lib/Analysis/ScopPass.cpp
@@ -1,9 +1,8 @@
//===- ScopPass.cpp - The base class of Passes that operate on Polly IR ---===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -13,8 +12,6 @@
#include "polly/ScopPass.h"
#include "polly/ScopInfo.h"
-
-#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/BasicAliasAnalysis.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
diff --git a/stable/lib/CMakeLists.txt b/stable/lib/CMakeLists.txt
index 9546541..41f1908 100644
--- a/stable/lib/CMakeLists.txt
+++ b/stable/lib/CMakeLists.txt
@@ -36,6 +36,8 @@
CodeGen/BlockGenerators.cpp
${ISL_CODEGEN_FILES}
CodeGen/LoopGenerators.cpp
+ CodeGen/LoopGeneratorsGOMP.cpp
+ CodeGen/LoopGeneratorsKMP.cpp
CodeGen/IRBuilder.cpp
CodeGen/Utils.cpp
CodeGen/RuntimeDebugBuilder.cpp
@@ -158,4 +160,3 @@
# Check if we are building as part of an LLVM build
add_dependencies(PollyCore intrinsics_gen)
endif()
-
diff --git a/stable/lib/CodeGen/BlockGenerators.cpp b/stable/lib/CodeGen/BlockGenerators.cpp
index 2248f15..389c8ac 100644
--- a/stable/lib/CodeGen/BlockGenerators.cpp
+++ b/stable/lib/CodeGen/BlockGenerators.cpp
@@ -1,9 +1,8 @@
//===--- BlockGenerators.cpp - Generate code for statements -----*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -14,26 +13,18 @@
//===----------------------------------------------------------------------===//
#include "polly/CodeGen/BlockGenerators.h"
-#include "polly/CodeGen/CodeGeneration.h"
#include "polly/CodeGen/IslExprBuilder.h"
#include "polly/CodeGen/RuntimeDebugBuilder.h"
#include "polly/Options.h"
#include "polly/ScopInfo.h"
-#include "polly/Support/GICHelper.h"
-#include "polly/Support/SCEVValidator.h"
#include "polly/Support/ScopHelper.h"
#include "polly/Support/VirtualInstruction.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/RegionInfo.h"
#include "llvm/Analysis/ScalarEvolution.h"
-#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/Module.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Local.h"
-#include "isl/aff.h"
#include "isl/ast.h"
-#include "isl/ast_build.h"
-#include "isl/set.h"
#include <deque>
using namespace llvm;
diff --git a/stable/lib/CodeGen/CodeGeneration.cpp b/stable/lib/CodeGen/CodeGeneration.cpp
index 1169d76..784b7d8 100644
--- a/stable/lib/CodeGen/CodeGeneration.cpp
+++ b/stable/lib/CodeGen/CodeGeneration.cpp
@@ -1,9 +1,8 @@
//===- CodeGeneration.cpp - Code generate the Scops using ISL. ---------======//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -28,34 +27,21 @@
#include "polly/DependenceInfo.h"
#include "polly/LinkAllPasses.h"
#include "polly/Options.h"
-#include "polly/ScopDetectionDiagnostic.h"
#include "polly/ScopInfo.h"
#include "polly/Support/ScopHelper.h"
#include "llvm/ADT/Statistic.h"
-#include "llvm/Analysis/AliasAnalysis.h"
-#include "llvm/Analysis/BasicAliasAnalysis.h"
-#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/RegionInfo.h"
-#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
-#include "llvm/IR/Instruction.h"
-#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/IR/Intrinsics.h"
-#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/Verifier.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include "isl/ast.h"
#include <cassert>
-#include <utility>
using namespace llvm;
using namespace polly;
diff --git a/stable/lib/CodeGen/CodegenCleanup.cpp b/stable/lib/CodeGen/CodegenCleanup.cpp
index 2e54dfd..b1cf935 100644
--- a/stable/lib/CodeGen/CodegenCleanup.cpp
+++ b/stable/lib/CodeGen/CodegenCleanup.cpp
@@ -1,9 +1,8 @@
//===- CodegenCleanup.cpp -------------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
@@ -13,8 +12,6 @@
#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/LegacyPassManager.h"
-#include "llvm/PassInfo.h"
-#include "llvm/PassRegistry.h"
#include "llvm/PassSupport.h"
#include "llvm/Support/Debug.h"
#include "llvm/Transforms/InstCombine/InstCombine.h"
diff --git a/stable/lib/CodeGen/IRBuilder.cpp b/stable/lib/CodeGen/IRBuilder.cpp
index 4c94b9b..435be74 100644
--- a/stable/lib/CodeGen/IRBuilder.cpp
+++ b/stable/lib/CodeGen/IRBuilder.cpp
@@ -1,9 +1,8 @@
//===------ PollyIRBuilder.cpp --------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -17,7 +16,6 @@
#include "polly/Support/ScopHelper.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/IR/Metadata.h"
-#include "llvm/Support/Debug.h"
using namespace llvm;
using namespace polly;
diff --git a/stable/lib/CodeGen/IslAst.cpp b/stable/lib/CodeGen/IslAst.cpp
index 1862950..8ccbeda 100644
--- a/stable/lib/CodeGen/IslAst.cpp
+++ b/stable/lib/CodeGen/IslAst.cpp
@@ -1,9 +1,8 @@
//===- IslAst.cpp - isl code generator interface --------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -38,8 +37,6 @@
#include "polly/Support/GICHelper.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/IR/Function.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "isl/aff.h"
@@ -47,7 +44,6 @@
#include "isl/ast_build.h"
#include "isl/id.h"
#include "isl/isl-noexceptions.h"
-#include "isl/map.h"
#include "isl/printer.h"
#include "isl/schedule.h"
#include "isl/set.h"
@@ -55,10 +51,6 @@
#include "isl/val.h"
#include <cassert>
#include <cstdlib>
-#include <cstring>
-#include <map>
-#include <string>
-#include <utility>
#define DEBUG_TYPE "polly-ast"
diff --git a/stable/lib/CodeGen/IslExprBuilder.cpp b/stable/lib/CodeGen/IslExprBuilder.cpp
index 0a4dd91..c8e2984 100644
--- a/stable/lib/CodeGen/IslExprBuilder.cpp
+++ b/stable/lib/CodeGen/IslExprBuilder.cpp
@@ -1,9 +1,8 @@
//===------ IslExprBuilder.cpp ----- Code generate isl AST expressions ----===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -14,8 +13,6 @@
#include "polly/Options.h"
#include "polly/ScopInfo.h"
#include "polly/Support/GICHelper.h"
-#include "polly/Support/ScopHelper.h"
-#include "llvm/Support/Debug.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
using namespace llvm;
diff --git a/stable/lib/CodeGen/IslNodeBuilder.cpp b/stable/lib/CodeGen/IslNodeBuilder.cpp
index 0e2ed1c..492944c 100644
--- a/stable/lib/CodeGen/IslNodeBuilder.cpp
+++ b/stable/lib/CodeGen/IslNodeBuilder.cpp
@@ -1,9 +1,8 @@
//===- IslNodeBuilder.cpp - Translate an isl AST into a LLVM-IR AST -------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -17,12 +16,11 @@
#include "polly/CodeGen/CodeGeneration.h"
#include "polly/CodeGen/IslAst.h"
#include "polly/CodeGen/IslExprBuilder.h"
-#include "polly/CodeGen/LoopGenerators.h"
+#include "polly/CodeGen/LoopGeneratorsGOMP.h"
+#include "polly/CodeGen/LoopGeneratorsKMP.h"
#include "polly/CodeGen/RuntimeDebugBuilder.h"
-#include "polly/Config/config.h"
#include "polly/Options.h"
#include "polly/ScopInfo.h"
-#include "polly/Support/GICHelper.h"
#include "polly/Support/ISLTools.h"
#include "polly/Support/SCEVValidator.h"
#include "polly/Support/ScopHelper.h"
@@ -81,6 +79,9 @@
STATISTIC(VectorLoops, "Number of generated vector for-loops");
STATISTIC(IfConditions, "Number of generated if-conditions");
+/// OpenMP backend options
+enum class OpenMPBackend { GNU, LLVM };
+
static cl::opt<bool> PollyGenerateRTCPrint(
"polly-codegen-emit-rtc-print",
cl::desc("Emit code that prints the runtime check result dynamically."),
@@ -100,6 +101,12 @@
cl::desc("The size of the first level cache line size specified in bytes."),
cl::Hidden, cl::init(64), cl::ZeroOrMore, cl::cat(PollyCategory));
+static cl::opt<OpenMPBackend> PollyOmpBackend(
+ "polly-omp-backend", cl::desc("Choose the OpenMP library to use:"),
+ cl::values(clEnumValN(OpenMPBackend::GNU, "GNU", "GNU OpenMP"),
+ clEnumValN(OpenMPBackend::LLVM, "LLVM", "LLVM OpenMP")),
+ cl::Hidden, cl::init(OpenMPBackend::GNU), cl::cat(PollyCategory));
+
isl::ast_expr IslNodeBuilder::getUpperBound(isl::ast_node For,
ICmpInst::Predicate &Predicate) {
isl::ast_expr Cond = For.for_get_cond();
@@ -669,10 +676,21 @@
}
ValueMapT NewValues;
- ParallelLoopGenerator ParallelLoopGen(Builder, LI, DT, DL);
- IV = ParallelLoopGen.createParallelLoop(ValueLB, ValueUB, ValueInc,
- SubtreeValues, NewValues, &LoopBody);
+ std::unique_ptr<ParallelLoopGenerator> ParallelLoopGenPtr;
+
+ switch (PollyOmpBackend) {
+ case OpenMPBackend::GNU:
+ ParallelLoopGenPtr.reset(
+ new ParallelLoopGeneratorGOMP(Builder, LI, DT, DL));
+ break;
+ case OpenMPBackend::LLVM:
+ ParallelLoopGenPtr.reset(new ParallelLoopGeneratorKMP(Builder, LI, DT, DL));
+ break;
+ }
+
+ IV = ParallelLoopGenPtr->createParallelLoop(
+ ValueLB, ValueUB, ValueInc, SubtreeValues, NewValues, &LoopBody);
BasicBlock::iterator AfterLoop = Builder.GetInsertPoint();
Builder.SetInsertPoint(&*LoopBody);
diff --git a/stable/lib/CodeGen/LoopGenerators.cpp b/stable/lib/CodeGen/LoopGenerators.cpp
index 368a645..4df1cef 100644
--- a/stable/lib/CodeGen/LoopGenerators.cpp
+++ b/stable/lib/CodeGen/LoopGenerators.cpp
@@ -1,17 +1,18 @@
//===------ LoopGenerators.cpp - IR helper to create loops ---------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
-// This file contains functions to create scalar and parallel loops as LLVM-IR.
+// This file contains functions to create scalar loops and orchestrate the
+// creation of parallel loops as LLVM-IR.
//
//===----------------------------------------------------------------------===//
#include "polly/CodeGen/LoopGenerators.h"
+#include "polly/Options.h"
#include "polly/ScopDetection.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/IR/DataLayout.h"
@@ -23,10 +24,36 @@
using namespace llvm;
using namespace polly;
-static cl::opt<int>
- PollyNumThreads("polly-num-threads",
- cl::desc("Number of threads to use (0 = auto)"), cl::Hidden,
- cl::init(0));
+int polly::PollyNumThreads;
+OMPGeneralSchedulingType polly::PollyScheduling;
+int polly::PollyChunkSize;
+
+static cl::opt<int, true>
+ XPollyNumThreads("polly-num-threads",
+ cl::desc("Number of threads to use (0 = auto)"),
+ cl::Hidden, cl::location(polly::PollyNumThreads),
+ cl::init(0), cl::cat(PollyCategory));
+
+static cl::opt<OMPGeneralSchedulingType, true> XPollyScheduling(
+ "polly-scheduling",
+ cl::desc("Scheduling type of parallel OpenMP for loops"),
+ cl::values(clEnumValN(OMPGeneralSchedulingType::StaticChunked, "static",
+ "Static scheduling"),
+ clEnumValN(OMPGeneralSchedulingType::Dynamic, "dynamic",
+ "Dynamic scheduling"),
+ clEnumValN(OMPGeneralSchedulingType::Guided, "guided",
+ "Guided scheduling"),
+ clEnumValN(OMPGeneralSchedulingType::Runtime, "runtime",
+ "Runtime determined (OMP_SCHEDULE)")),
+ cl::Hidden, cl::location(polly::PollyScheduling),
+ cl::init(OMPGeneralSchedulingType::Runtime), cl::Optional,
+ cl::cat(PollyCategory));
+
+static cl::opt<int, true>
+ XPollyChunkSize("polly-scheduling-chunksize",
+ cl::desc("Chunksize to use by the OpenMP runtime calls"),
+ cl::Hidden, cl::location(polly::PollyChunkSize),
+ cl::init(0), cl::Optional, cl::cat(PollyCategory));
// We generate a loop of either of the following structures:
//
@@ -148,11 +175,13 @@
Value *ParallelLoopGenerator::createParallelLoop(
Value *LB, Value *UB, Value *Stride, SetVector<Value *> &UsedValues,
ValueMapT &Map, BasicBlock::iterator *LoopBody) {
- Function *SubFn;
AllocaInst *Struct = storeValuesIntoStruct(UsedValues);
BasicBlock::iterator BeforeLoop = Builder.GetInsertPoint();
- Value *IV = createSubFn(Stride, Struct, UsedValues, Map, &SubFn);
+
+ Value *IV;
+ Function *SubFn;
+ std::tie(IV, SubFn) = createSubFn(Stride, Struct, UsedValues, Map);
*LoopBody = Builder.GetInsertPoint();
Builder.SetInsertPoint(&*BeforeLoop);
@@ -163,102 +192,15 @@
// whereas the codegenForSequential function creates a <= comparison.
UB = Builder.CreateAdd(UB, ConstantInt::get(LongType, 1));
- // Tell the runtime we start a parallel loop
- createCallSpawnThreads(SubFn, SubFnParam, LB, UB, Stride);
- Builder.CreateCall(SubFn, SubFnParam);
- createCallJoinThreads();
+ // Execute the prepared subfunction in parallel.
+ deployParallelExecution(SubFn, SubFnParam, LB, UB, Stride);
return IV;
}
-void ParallelLoopGenerator::createCallSpawnThreads(Value *SubFn,
- Value *SubFnParam, Value *LB,
- Value *UB, Value *Stride) {
- const std::string Name = "GOMP_parallel_loop_runtime_start";
-
- Function *F = M->getFunction(Name);
-
- // If F is not available, declare it.
- if (!F) {
- GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
-
- Type *Params[] = {PointerType::getUnqual(FunctionType::get(
- Builder.getVoidTy(), Builder.getInt8PtrTy(), false)),
- Builder.getInt8PtrTy(),
- Builder.getInt32Ty(),
- LongType,
- LongType,
- LongType};
-
- FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), Params, false);
- F = Function::Create(Ty, Linkage, Name, M);
- }
-
- Value *NumberOfThreads = Builder.getInt32(PollyNumThreads);
- Value *Args[] = {SubFn, SubFnParam, NumberOfThreads, LB, UB, Stride};
-
- Builder.CreateCall(F, Args);
-}
-
-Value *ParallelLoopGenerator::createCallGetWorkItem(Value *LBPtr,
- Value *UBPtr) {
- const std::string Name = "GOMP_loop_runtime_next";
-
- Function *F = M->getFunction(Name);
-
- // If F is not available, declare it.
- if (!F) {
- GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
- Type *Params[] = {LongType->getPointerTo(), LongType->getPointerTo()};
- FunctionType *Ty = FunctionType::get(Builder.getInt8Ty(), Params, false);
- F = Function::Create(Ty, Linkage, Name, M);
- }
-
- Value *Args[] = {LBPtr, UBPtr};
- Value *Return = Builder.CreateCall(F, Args);
- Return = Builder.CreateICmpNE(
- Return, Builder.CreateZExt(Builder.getFalse(), Return->getType()));
- return Return;
-}
-
-void ParallelLoopGenerator::createCallJoinThreads() {
- const std::string Name = "GOMP_parallel_end";
-
- Function *F = M->getFunction(Name);
-
- // If F is not available, declare it.
- if (!F) {
- GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
-
- FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), false);
- F = Function::Create(Ty, Linkage, Name, M);
- }
-
- Builder.CreateCall(F, {});
-}
-
-void ParallelLoopGenerator::createCallCleanupThread() {
- const std::string Name = "GOMP_loop_end_nowait";
-
- Function *F = M->getFunction(Name);
-
- // If F is not available, declare it.
- if (!F) {
- GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
-
- FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), false);
- F = Function::Create(Ty, Linkage, Name, M);
- }
-
- Builder.CreateCall(F, {});
-}
-
Function *ParallelLoopGenerator::createSubFnDefinition() {
Function *F = Builder.GetInsertBlock()->getParent();
- std::vector<Type *> Arguments(1, Builder.getInt8PtrTy());
- FunctionType *FT = FunctionType::get(Builder.getVoidTy(), Arguments, false);
- Function *SubFn = Function::Create(FT, Function::InternalLinkage,
- F->getName() + "_polly_subfn", M);
+ Function *SubFn = prepareSubFnDefinition(F);
// Certain backends (e.g., NVPTX) do not support '.'s in function names.
// Hence, we ensure that all '.'s are replaced by '_'s.
@@ -269,9 +211,6 @@
// Do not run any polly pass on the new function.
SubFn->addFnAttr(PollySkipFnAttr);
- Function::arg_iterator AI = SubFn->arg_begin();
- AI->setName("polly.par.userContext");
-
return SubFn;
}
@@ -311,71 +250,3 @@
Map[OldValues[i]] = NewValue;
}
}
-
-Value *ParallelLoopGenerator::createSubFn(Value *Stride, AllocaInst *StructData,
- SetVector<Value *> Data,
- ValueMapT &Map, Function **SubFnPtr) {
- BasicBlock *PrevBB, *HeaderBB, *ExitBB, *CheckNextBB, *PreHeaderBB, *AfterBB;
- Value *LBPtr, *UBPtr, *UserContext, *Ret1, *HasNextSchedule, *LB, *UB, *IV;
- Function *SubFn = createSubFnDefinition();
- LLVMContext &Context = SubFn->getContext();
-
- // Store the previous basic block.
- PrevBB = Builder.GetInsertBlock();
-
- // Create basic blocks.
- HeaderBB = BasicBlock::Create(Context, "polly.par.setup", SubFn);
- ExitBB = BasicBlock::Create(Context, "polly.par.exit", SubFn);
- CheckNextBB = BasicBlock::Create(Context, "polly.par.checkNext", SubFn);
- PreHeaderBB = BasicBlock::Create(Context, "polly.par.loadIVBounds", SubFn);
-
- DT.addNewBlock(HeaderBB, PrevBB);
- DT.addNewBlock(ExitBB, HeaderBB);
- DT.addNewBlock(CheckNextBB, HeaderBB);
- DT.addNewBlock(PreHeaderBB, HeaderBB);
-
- // Fill up basic block HeaderBB.
- Builder.SetInsertPoint(HeaderBB);
- LBPtr = Builder.CreateAlloca(LongType, nullptr, "polly.par.LBPtr");
- UBPtr = Builder.CreateAlloca(LongType, nullptr, "polly.par.UBPtr");
- UserContext = Builder.CreateBitCast(
- &*SubFn->arg_begin(), StructData->getType(), "polly.par.userContext");
-
- extractValuesFromStruct(Data, StructData->getAllocatedType(), UserContext,
- Map);
- Builder.CreateBr(CheckNextBB);
-
- // Add code to check if another set of iterations will be executed.
- Builder.SetInsertPoint(CheckNextBB);
- Ret1 = createCallGetWorkItem(LBPtr, UBPtr);
- HasNextSchedule = Builder.CreateTrunc(Ret1, Builder.getInt1Ty(),
- "polly.par.hasNextScheduleBlock");
- Builder.CreateCondBr(HasNextSchedule, PreHeaderBB, ExitBB);
-
- // Add code to load the iv bounds for this set of iterations.
- Builder.SetInsertPoint(PreHeaderBB);
- LB = Builder.CreateLoad(LBPtr, "polly.par.LB");
- UB = Builder.CreateLoad(UBPtr, "polly.par.UB");
-
- // Subtract one as the upper bound provided by OpenMP is a < comparison
- // whereas the codegenForSequential function creates a <= comparison.
- UB = Builder.CreateSub(UB, ConstantInt::get(LongType, 1),
- "polly.par.UBAdjusted");
-
- Builder.CreateBr(CheckNextBB);
- Builder.SetInsertPoint(&*--Builder.GetInsertPoint());
- IV = createLoop(LB, UB, Stride, Builder, LI, DT, AfterBB, ICmpInst::ICMP_SLE,
- nullptr, true, /* UseGuard */ false);
-
- BasicBlock::iterator LoopBody = Builder.GetInsertPoint();
-
- // Add code to terminate this subfunction.
- Builder.SetInsertPoint(ExitBB);
- createCallCleanupThread();
- Builder.CreateRetVoid();
-
- Builder.SetInsertPoint(&*LoopBody);
- *SubFnPtr = SubFn;
-
- return IV;
-}
diff --git a/stable/lib/CodeGen/LoopGeneratorsGOMP.cpp b/stable/lib/CodeGen/LoopGeneratorsGOMP.cpp
new file mode 100644
index 0000000..9c93af9
--- /dev/null
+++ b/stable/lib/CodeGen/LoopGeneratorsGOMP.cpp
@@ -0,0 +1,223 @@
+//===------ LoopGeneratorsGOMP.cpp - IR helper to create loops ------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains functions to create parallel loops as LLVM-IR.
+//
+//===----------------------------------------------------------------------===//
+
+#include "polly/CodeGen/LoopGeneratorsGOMP.h"
+#include "llvm/IR/Dominators.h"
+#include "llvm/IR/Module.h"
+
+using namespace llvm;
+using namespace polly;
+
+void ParallelLoopGeneratorGOMP::createCallSpawnThreads(Value *SubFn,
+ Value *SubFnParam,
+ Value *LB, Value *UB,
+ Value *Stride) {
+ const std::string Name = "GOMP_parallel_loop_runtime_start";
+
+ Function *F = M->getFunction(Name);
+
+ // If F is not available, declare it.
+ if (!F) {
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+
+ Type *Params[] = {PointerType::getUnqual(FunctionType::get(
+ Builder.getVoidTy(), Builder.getInt8PtrTy(), false)),
+ Builder.getInt8PtrTy(),
+ Builder.getInt32Ty(),
+ LongType,
+ LongType,
+ LongType};
+
+ FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), Params, false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ Value *Args[] = {SubFn, SubFnParam, Builder.getInt32(PollyNumThreads),
+ LB, UB, Stride};
+
+ Builder.CreateCall(F, Args);
+}
+
+void ParallelLoopGeneratorGOMP::deployParallelExecution(Value *SubFn,
+ Value *SubFnParam,
+ Value *LB, Value *UB,
+ Value *Stride) {
+ // Tell the runtime we start a parallel loop
+ createCallSpawnThreads(SubFn, SubFnParam, LB, UB, Stride);
+ Builder.CreateCall(SubFn, SubFnParam);
+ createCallJoinThreads();
+}
+
+Function *ParallelLoopGeneratorGOMP::prepareSubFnDefinition(Function *F) const {
+ FunctionType *FT =
+ FunctionType::get(Builder.getVoidTy(), {Builder.getInt8PtrTy()}, false);
+ Function *SubFn = Function::Create(FT, Function::InternalLinkage,
+ F->getName() + "_polly_subfn", M);
+ // Name the function's arguments
+ SubFn->arg_begin()->setName("polly.par.userContext");
+ return SubFn;
+}
+
+// Create a subfunction of the following (preliminary) structure:
+//
+// PrevBB
+// |
+// v
+// HeaderBB
+// | _____
+// v v |
+// CheckNextBB PreHeaderBB
+// |\ |
+// | \______/
+// |
+// v
+// ExitBB
+//
+// HeaderBB will hold allocations and loading of variables.
+// CheckNextBB will check for more work.
+// If there is more work to do: go to PreHeaderBB, otherwise go to ExitBB.
+// PreHeaderBB loads the new boundaries (& will lead to the loop body later on).
+// ExitBB marks the end of the parallel execution.
+std::tuple<Value *, Function *>
+ParallelLoopGeneratorGOMP::createSubFn(Value *Stride, AllocaInst *StructData,
+ SetVector<Value *> Data,
+ ValueMapT &Map) {
+ if (PollyScheduling != OMPGeneralSchedulingType::Runtime) {
+ // User tried to influence the scheduling type (currently not supported)
+ errs() << "warning: Polly's GNU OpenMP backend solely "
+ "supports the scheduling type 'runtime'.\n";
+ }
+
+ if (PollyChunkSize != 0) {
+ // User tried to influence the chunk size (currently not supported)
+ errs() << "warning: Polly's GNU OpenMP backend solely "
+ "supports the default chunk size.\n";
+ }
+
+ Function *SubFn = createSubFnDefinition();
+ LLVMContext &Context = SubFn->getContext();
+
+ // Store the previous basic block.
+ BasicBlock *PrevBB = Builder.GetInsertBlock();
+
+ // Create basic blocks.
+ BasicBlock *HeaderBB = BasicBlock::Create(Context, "polly.par.setup", SubFn);
+ BasicBlock *ExitBB = BasicBlock::Create(Context, "polly.par.exit", SubFn);
+ BasicBlock *CheckNextBB =
+ BasicBlock::Create(Context, "polly.par.checkNext", SubFn);
+ BasicBlock *PreHeaderBB =
+ BasicBlock::Create(Context, "polly.par.loadIVBounds", SubFn);
+
+ DT.addNewBlock(HeaderBB, PrevBB);
+ DT.addNewBlock(ExitBB, HeaderBB);
+ DT.addNewBlock(CheckNextBB, HeaderBB);
+ DT.addNewBlock(PreHeaderBB, HeaderBB);
+
+ // Fill up basic block HeaderBB.
+ Builder.SetInsertPoint(HeaderBB);
+ Value *LBPtr = Builder.CreateAlloca(LongType, nullptr, "polly.par.LBPtr");
+ Value *UBPtr = Builder.CreateAlloca(LongType, nullptr, "polly.par.UBPtr");
+ Value *UserContext = Builder.CreateBitCast(
+ &*SubFn->arg_begin(), StructData->getType(), "polly.par.userContext");
+
+ extractValuesFromStruct(Data, StructData->getAllocatedType(), UserContext,
+ Map);
+ Builder.CreateBr(CheckNextBB);
+
+ // Add code to check if another set of iterations will be executed.
+ Builder.SetInsertPoint(CheckNextBB);
+ Value *Next = createCallGetWorkItem(LBPtr, UBPtr);
+ Value *HasNextSchedule = Builder.CreateTrunc(
+ Next, Builder.getInt1Ty(), "polly.par.hasNextScheduleBlock");
+ Builder.CreateCondBr(HasNextSchedule, PreHeaderBB, ExitBB);
+
+ // Add code to load the iv bounds for this set of iterations.
+ Builder.SetInsertPoint(PreHeaderBB);
+ Value *LB = Builder.CreateLoad(LBPtr, "polly.par.LB");
+ Value *UB = Builder.CreateLoad(UBPtr, "polly.par.UB");
+
+ // Subtract one as the upper bound provided by OpenMP is a < comparison
+ // whereas the codegenForSequential function creates a <= comparison.
+ UB = Builder.CreateSub(UB, ConstantInt::get(LongType, 1),
+ "polly.par.UBAdjusted");
+
+ Builder.CreateBr(CheckNextBB);
+ Builder.SetInsertPoint(&*--Builder.GetInsertPoint());
+ BasicBlock *AfterBB;
+ Value *IV =
+ createLoop(LB, UB, Stride, Builder, LI, DT, AfterBB, ICmpInst::ICMP_SLE,
+ nullptr, true, /* UseGuard */ false);
+
+ BasicBlock::iterator LoopBody = Builder.GetInsertPoint();
+
+ // Add code to terminate this subfunction.
+ Builder.SetInsertPoint(ExitBB);
+ createCallCleanupThread();
+ Builder.CreateRetVoid();
+
+ Builder.SetInsertPoint(&*LoopBody);
+
+ return std::make_tuple(IV, SubFn);
+}
+
+Value *ParallelLoopGeneratorGOMP::createCallGetWorkItem(Value *LBPtr,
+ Value *UBPtr) {
+ const std::string Name = "GOMP_loop_runtime_next";
+
+ Function *F = M->getFunction(Name);
+
+ // If F is not available, declare it.
+ if (!F) {
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+ Type *Params[] = {LongType->getPointerTo(), LongType->getPointerTo()};
+ FunctionType *Ty = FunctionType::get(Builder.getInt8Ty(), Params, false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ Value *Args[] = {LBPtr, UBPtr};
+ Value *Return = Builder.CreateCall(F, Args);
+ Return = Builder.CreateICmpNE(
+ Return, Builder.CreateZExt(Builder.getFalse(), Return->getType()));
+ return Return;
+}
+
+void ParallelLoopGeneratorGOMP::createCallJoinThreads() {
+ const std::string Name = "GOMP_parallel_end";
+
+ Function *F = M->getFunction(Name);
+
+ // If F is not available, declare it.
+ if (!F) {
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+
+ FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ Builder.CreateCall(F, {});
+}
+
+void ParallelLoopGeneratorGOMP::createCallCleanupThread() {
+ const std::string Name = "GOMP_loop_end_nowait";
+
+ Function *F = M->getFunction(Name);
+
+ // If F is not available, declare it.
+ if (!F) {
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+
+ FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ Builder.CreateCall(F, {});
+}
diff --git a/stable/lib/CodeGen/LoopGeneratorsKMP.cpp b/stable/lib/CodeGen/LoopGeneratorsKMP.cpp
new file mode 100644
index 0000000..d2ebdbc
--- /dev/null
+++ b/stable/lib/CodeGen/LoopGeneratorsKMP.cpp
@@ -0,0 +1,506 @@
+//===------ LoopGeneratorsKMP.cpp - IR helper to create loops -------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains functions to create parallel loops as LLVM-IR.
+//
+//===----------------------------------------------------------------------===//
+
+#include "polly/CodeGen/LoopGeneratorsKMP.h"
+#include "llvm/IR/Dominators.h"
+#include "llvm/IR/Module.h"
+
+using namespace llvm;
+using namespace polly;
+
+void ParallelLoopGeneratorKMP::createCallSpawnThreads(Value *SubFn,
+ Value *SubFnParam,
+ Value *LB, Value *UB,
+ Value *Stride) {
+ const std::string Name = "__kmpc_fork_call";
+ Function *F = M->getFunction(Name);
+ Type *KMPCMicroTy = M->getTypeByName("kmpc_micro");
+
+ if (!KMPCMicroTy) {
+ // void (*kmpc_micro)(kmp_int32 *global_tid, kmp_int32 *bound_tid, ...)
+ Type *MicroParams[] = {Builder.getInt32Ty()->getPointerTo(),
+ Builder.getInt32Ty()->getPointerTo()};
+
+ KMPCMicroTy = FunctionType::get(Builder.getVoidTy(), MicroParams, true);
+ }
+
+ // If F is not available, declare it.
+ if (!F) {
+ StructType *IdentTy = M->getTypeByName("struct.ident_t");
+
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+ Type *Params[] = {IdentTy->getPointerTo(), Builder.getInt32Ty(),
+ KMPCMicroTy->getPointerTo()};
+
+ FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), Params, true);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ Value *Task = Builder.CreatePointerBitCastOrAddrSpaceCast(
+ SubFn, KMPCMicroTy->getPointerTo());
+
+ Value *Args[] = {SourceLocationInfo,
+ Builder.getInt32(4) /* Number of arguments (w/o Task) */,
+ Task,
+ LB,
+ UB,
+ Stride,
+ SubFnParam};
+
+ Builder.CreateCall(F, Args);
+}
+
+void ParallelLoopGeneratorKMP::deployParallelExecution(Value *SubFn,
+ Value *SubFnParam,
+ Value *LB, Value *UB,
+ Value *Stride) {
+ // Inform OpenMP runtime about the number of threads if greater than zero
+ if (PollyNumThreads > 0) {
+ Value *GlobalThreadID = createCallGlobalThreadNum();
+ createCallPushNumThreads(GlobalThreadID, Builder.getInt32(PollyNumThreads));
+ }
+
+ // Tell the runtime we start a parallel loop
+ createCallSpawnThreads(SubFn, SubFnParam, LB, UB, Stride);
+}
+
+Function *ParallelLoopGeneratorKMP::prepareSubFnDefinition(Function *F) const {
+ std::vector<Type *> Arguments = {Builder.getInt32Ty()->getPointerTo(),
+ Builder.getInt32Ty()->getPointerTo(),
+ LongType,
+ LongType,
+ LongType,
+ Builder.getInt8PtrTy()};
+
+ FunctionType *FT = FunctionType::get(Builder.getVoidTy(), Arguments, false);
+ Function *SubFn = Function::Create(FT, Function::InternalLinkage,
+ F->getName() + "_polly_subfn", M);
+ // Name the function's arguments
+ Function::arg_iterator AI = SubFn->arg_begin();
+ AI->setName("polly.kmpc.global_tid");
+ std::advance(AI, 1);
+ AI->setName("polly.kmpc.bound_tid");
+ std::advance(AI, 1);
+ AI->setName("polly.kmpc.lb");
+ std::advance(AI, 1);
+ AI->setName("polly.kmpc.ub");
+ std::advance(AI, 1);
+ AI->setName("polly.kmpc.inc");
+ std::advance(AI, 1);
+ AI->setName("polly.kmpc.shared");
+
+ return SubFn;
+}
+
+// Create a subfunction of the following (preliminary) structure:
+//
+// PrevBB
+// |
+// v
+// HeaderBB
+// | _____
+// v v |
+// CheckNextBB PreHeaderBB
+// |\ |
+// | \______/
+// |
+// v
+// ExitBB
+//
+// HeaderBB will hold allocations, loading of variables and kmp-init calls.
+// CheckNextBB will check for more work (dynamic) or will be "empty" (static).
+// If there is more work to do: go to PreHeaderBB, otherwise go to ExitBB.
+// PreHeaderBB loads the new boundaries (& will lead to the loop body later on).
+// Just like CheckNextBB: PreHeaderBB is empty in the static scheduling case.
+// ExitBB marks the end of the parallel execution.
+// The possibly empty BasicBlocks will automatically be removed.
+std::tuple<Value *, Function *>
+ParallelLoopGeneratorKMP::createSubFn(Value *StrideNotUsed,
+ AllocaInst *StructData,
+ SetVector<Value *> Data, ValueMapT &Map) {
+ Function *SubFn = createSubFnDefinition();
+ LLVMContext &Context = SubFn->getContext();
+
+ // Store the previous basic block.
+ BasicBlock *PrevBB = Builder.GetInsertBlock();
+
+ // Create basic blocks.
+ BasicBlock *HeaderBB = BasicBlock::Create(Context, "polly.par.setup", SubFn);
+ BasicBlock *ExitBB = BasicBlock::Create(Context, "polly.par.exit", SubFn);
+ BasicBlock *CheckNextBB =
+ BasicBlock::Create(Context, "polly.par.checkNext", SubFn);
+ BasicBlock *PreHeaderBB =
+ BasicBlock::Create(Context, "polly.par.loadIVBounds", SubFn);
+
+ DT.addNewBlock(HeaderBB, PrevBB);
+ DT.addNewBlock(ExitBB, HeaderBB);
+ DT.addNewBlock(CheckNextBB, HeaderBB);
+ DT.addNewBlock(PreHeaderBB, HeaderBB);
+
+ // Fill up basic block HeaderBB.
+ Builder.SetInsertPoint(HeaderBB);
+ Value *LBPtr = Builder.CreateAlloca(LongType, nullptr, "polly.par.LBPtr");
+ Value *UBPtr = Builder.CreateAlloca(LongType, nullptr, "polly.par.UBPtr");
+ Value *IsLastPtr = Builder.CreateAlloca(Builder.getInt32Ty(), nullptr,
+ "polly.par.lastIterPtr");
+ Value *StridePtr =
+ Builder.CreateAlloca(LongType, nullptr, "polly.par.StridePtr");
+
+ // Get iterator for retrieving the previously defined parameters.
+ Function::arg_iterator AI = SubFn->arg_begin();
+ // First argument holds "global thread ID".
+ Value *IDPtr = &*AI;
+ // Skip "bound thread ID" since it is not used (but had to be defined).
+ std::advance(AI, 2);
+ // Move iterator to: LB, UB, Stride, Shared variable struct.
+ Value *LB = &*AI;
+ std::advance(AI, 1);
+ Value *UB = &*AI;
+ std::advance(AI, 1);
+ Value *Stride = &*AI;
+ std::advance(AI, 1);
+ Value *Shared = &*AI;
+
+ Value *UserContext = Builder.CreateBitCast(Shared, StructData->getType(),
+ "polly.par.userContext");
+
+ extractValuesFromStruct(Data, StructData->getAllocatedType(), UserContext,
+ Map);
+
+ const int Alignment = (is64BitArch()) ? 8 : 4;
+ Value *ID =
+ Builder.CreateAlignedLoad(IDPtr, Alignment, "polly.par.global_tid");
+
+ Builder.CreateAlignedStore(LB, LBPtr, Alignment);
+ Builder.CreateAlignedStore(UB, UBPtr, Alignment);
+ Builder.CreateAlignedStore(Builder.getInt32(0), IsLastPtr, Alignment);
+ Builder.CreateAlignedStore(Stride, StridePtr, Alignment);
+
+ // Subtract one as the upper bound provided by openmp is a < comparison
+ // whereas the codegenForSequential function creates a <= comparison.
+ Value *AdjustedUB = Builder.CreateAdd(UB, ConstantInt::get(LongType, -1),
+ "polly.indvar.UBAdjusted");
+
+ Value *ChunkSize =
+ ConstantInt::get(LongType, std::max<int>(PollyChunkSize, 1));
+
+ switch (PollyScheduling) {
+ case OMPGeneralSchedulingType::Dynamic:
+ case OMPGeneralSchedulingType::Guided:
+ case OMPGeneralSchedulingType::Runtime:
+ // "DYNAMIC" scheduling types are handled below (including 'runtime')
+ {
+ UB = AdjustedUB;
+ createCallDispatchInit(ID, LB, UB, Stride, ChunkSize);
+ Value *HasWork =
+ createCallDispatchNext(ID, IsLastPtr, LBPtr, UBPtr, StridePtr);
+ Value *HasIteration =
+ Builder.CreateICmp(llvm::CmpInst::Predicate::ICMP_EQ, HasWork,
+ Builder.getInt32(1), "polly.hasIteration");
+ Builder.CreateCondBr(HasIteration, PreHeaderBB, ExitBB);
+
+ Builder.SetInsertPoint(CheckNextBB);
+ HasWork = createCallDispatchNext(ID, IsLastPtr, LBPtr, UBPtr, StridePtr);
+ HasIteration =
+ Builder.CreateICmp(llvm::CmpInst::Predicate::ICMP_EQ, HasWork,
+ Builder.getInt32(1), "polly.hasWork");
+ Builder.CreateCondBr(HasIteration, PreHeaderBB, ExitBB);
+
+ Builder.SetInsertPoint(PreHeaderBB);
+ LB = Builder.CreateAlignedLoad(LBPtr, Alignment, "polly.indvar.LB");
+ UB = Builder.CreateAlignedLoad(UBPtr, Alignment, "polly.indvar.UB");
+ }
+ break;
+ case OMPGeneralSchedulingType::StaticChunked:
+ case OMPGeneralSchedulingType::StaticNonChunked:
+ // "STATIC" scheduling types are handled below
+ {
+ createCallStaticInit(ID, IsLastPtr, LBPtr, UBPtr, StridePtr, ChunkSize);
+
+ LB = Builder.CreateAlignedLoad(LBPtr, Alignment, "polly.indvar.LB");
+ UB = Builder.CreateAlignedLoad(UBPtr, Alignment, "polly.indvar.UB");
+
+ Value *AdjUBOutOfBounds =
+ Builder.CreateICmp(llvm::CmpInst::Predicate::ICMP_SLT, UB, AdjustedUB,
+ "polly.adjustedUBOutOfBounds");
+
+ UB = Builder.CreateSelect(AdjUBOutOfBounds, UB, AdjustedUB);
+ Builder.CreateAlignedStore(UB, UBPtr, Alignment);
+
+ Value *HasIteration = Builder.CreateICmp(
+ llvm::CmpInst::Predicate::ICMP_SLE, LB, UB, "polly.hasIteration");
+ Builder.CreateCondBr(HasIteration, PreHeaderBB, ExitBB);
+
+ Builder.SetInsertPoint(CheckNextBB);
+ Builder.CreateBr(ExitBB);
+
+ Builder.SetInsertPoint(PreHeaderBB);
+ }
+ break;
+ }
+
+ Builder.CreateBr(CheckNextBB);
+ Builder.SetInsertPoint(&*--Builder.GetInsertPoint());
+ BasicBlock *AfterBB;
+ Value *IV = createLoop(LB, UB, Stride, Builder, LI, DT, AfterBB,
+ ICmpInst::ICMP_SLE, nullptr, true,
+ /* UseGuard */ false);
+
+ BasicBlock::iterator LoopBody = Builder.GetInsertPoint();
+
+ // Add code to terminate this subfunction.
+ Builder.SetInsertPoint(ExitBB);
+ // Static (i.e. non-dynamic) scheduling types, are terminated with a fini-call
+ if (PollyScheduling == OMPGeneralSchedulingType::StaticChunked) {
+ createCallStaticFini(ID);
+ }
+ Builder.CreateRetVoid();
+ Builder.SetInsertPoint(&*LoopBody);
+
+ return std::make_tuple(IV, SubFn);
+}
+
+Value *ParallelLoopGeneratorKMP::createCallGlobalThreadNum() {
+ const std::string Name = "__kmpc_global_thread_num";
+ Function *F = M->getFunction(Name);
+
+ // If F is not available, declare it.
+ if (!F) {
+ StructType *IdentTy = M->getTypeByName("struct.ident_t");
+
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+ Type *Params[] = {IdentTy->getPointerTo()};
+
+ FunctionType *Ty = FunctionType::get(Builder.getInt32Ty(), Params, false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ return Builder.CreateCall(F, {SourceLocationInfo});
+}
+
+void ParallelLoopGeneratorKMP::createCallPushNumThreads(Value *GlobalThreadID,
+ Value *NumThreads) {
+ const std::string Name = "__kmpc_push_num_threads";
+ Function *F = M->getFunction(Name);
+
+ // If F is not available, declare it.
+ if (!F) {
+ StructType *IdentTy = M->getTypeByName("struct.ident_t");
+
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+ Type *Params[] = {IdentTy->getPointerTo(), Builder.getInt32Ty(),
+ Builder.getInt32Ty()};
+
+ FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), Params, false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ Value *Args[] = {SourceLocationInfo, GlobalThreadID, NumThreads};
+
+ Builder.CreateCall(F, Args);
+}
+
+void ParallelLoopGeneratorKMP::createCallStaticInit(Value *GlobalThreadID,
+ Value *IsLastPtr,
+ Value *LBPtr, Value *UBPtr,
+ Value *StridePtr,
+ Value *ChunkSize) {
+ const std::string Name =
+ is64BitArch() ? "__kmpc_for_static_init_8" : "__kmpc_for_static_init_4";
+ Function *F = M->getFunction(Name);
+ StructType *IdentTy = M->getTypeByName("struct.ident_t");
+
+ // If F is not available, declare it.
+ if (!F) {
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+
+ Type *Params[] = {IdentTy->getPointerTo(),
+ Builder.getInt32Ty(),
+ Builder.getInt32Ty(),
+ Builder.getInt32Ty()->getPointerTo(),
+ LongType->getPointerTo(),
+ LongType->getPointerTo(),
+ LongType->getPointerTo(),
+ LongType,
+ LongType};
+
+ FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), Params, false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ // The parameter 'ChunkSize' will hold strictly positive integer values,
+ // regardless of PollyChunkSize's value
+ Value *Args[] = {
+ SourceLocationInfo,
+ GlobalThreadID,
+ Builder.getInt32(int(getSchedType(PollyChunkSize, PollyScheduling))),
+ IsLastPtr,
+ LBPtr,
+ UBPtr,
+ StridePtr,
+ ConstantInt::get(LongType, 1),
+ ChunkSize};
+
+ Builder.CreateCall(F, Args);
+}
+
+void ParallelLoopGeneratorKMP::createCallStaticFini(Value *GlobalThreadID) {
+ const std::string Name = "__kmpc_for_static_fini";
+ Function *F = M->getFunction(Name);
+ StructType *IdentTy = M->getTypeByName("struct.ident_t");
+
+ // If F is not available, declare it.
+ if (!F) {
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+ Type *Params[] = {IdentTy->getPointerTo(), Builder.getInt32Ty()};
+ FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), Params, false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ Value *Args[] = {SourceLocationInfo, GlobalThreadID};
+
+ Builder.CreateCall(F, Args);
+}
+
+void ParallelLoopGeneratorKMP::createCallDispatchInit(Value *GlobalThreadID,
+ Value *LB, Value *UB,
+ Value *Inc,
+ Value *ChunkSize) {
+ const std::string Name =
+ is64BitArch() ? "__kmpc_dispatch_init_8" : "__kmpc_dispatch_init_4";
+ Function *F = M->getFunction(Name);
+ StructType *IdentTy = M->getTypeByName("struct.ident_t");
+
+ // If F is not available, declare it.
+ if (!F) {
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+
+ Type *Params[] = {IdentTy->getPointerTo(),
+ Builder.getInt32Ty(),
+ Builder.getInt32Ty(),
+ LongType,
+ LongType,
+ LongType,
+ LongType};
+
+ FunctionType *Ty = FunctionType::get(Builder.getVoidTy(), Params, false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ // The parameter 'ChunkSize' will hold strictly positive integer values,
+ // regardless of PollyChunkSize's value
+ Value *Args[] = {
+ SourceLocationInfo,
+ GlobalThreadID,
+ Builder.getInt32(int(getSchedType(PollyChunkSize, PollyScheduling))),
+ LB,
+ UB,
+ Inc,
+ ChunkSize};
+
+ Builder.CreateCall(F, Args);
+}
+
+Value *ParallelLoopGeneratorKMP::createCallDispatchNext(Value *GlobalThreadID,
+ Value *IsLastPtr,
+ Value *LBPtr,
+ Value *UBPtr,
+ Value *StridePtr) {
+ const std::string Name =
+ is64BitArch() ? "__kmpc_dispatch_next_8" : "__kmpc_dispatch_next_4";
+ Function *F = M->getFunction(Name);
+ StructType *IdentTy = M->getTypeByName("struct.ident_t");
+
+ // If F is not available, declare it.
+ if (!F) {
+ GlobalValue::LinkageTypes Linkage = Function::ExternalLinkage;
+
+ Type *Params[] = {IdentTy->getPointerTo(),
+ Builder.getInt32Ty(),
+ Builder.getInt32Ty()->getPointerTo(),
+ LongType->getPointerTo(),
+ LongType->getPointerTo(),
+ LongType->getPointerTo()};
+
+ FunctionType *Ty = FunctionType::get(Builder.getInt32Ty(), Params, false);
+ F = Function::Create(Ty, Linkage, Name, M);
+ }
+
+ Value *Args[] = {SourceLocationInfo, GlobalThreadID, IsLastPtr, LBPtr, UBPtr,
+ StridePtr};
+
+ return Builder.CreateCall(F, Args);
+}
+
+// TODO: This function currently creates a source location dummy. It might be
+// necessary to (actually) provide information, in the future.
+GlobalVariable *ParallelLoopGeneratorKMP::createSourceLocation() {
+ const std::string LocName = ".loc.dummy";
+ GlobalVariable *SourceLocDummy = M->getGlobalVariable(LocName);
+
+ if (SourceLocDummy == nullptr) {
+ const std::string StructName = "struct.ident_t";
+ StructType *IdentTy = M->getTypeByName(StructName);
+
+ // If the ident_t StructType is not available, declare it.
+ // in LLVM-IR: ident_t = type { i32, i32, i32, i32, i8* }
+ if (!IdentTy) {
+ Type *LocMembers[] = {Builder.getInt32Ty(), Builder.getInt32Ty(),
+ Builder.getInt32Ty(), Builder.getInt32Ty(),
+ Builder.getInt8PtrTy()};
+
+ IdentTy =
+ StructType::create(M->getContext(), LocMembers, StructName, false);
+ }
+
+ const auto ArrayType =
+ llvm::ArrayType::get(Builder.getInt8Ty(), /* Length */ 23);
+
+ // Global Variable Definitions
+ GlobalVariable *StrVar = new GlobalVariable(
+ *M, ArrayType, true, GlobalValue::PrivateLinkage, 0, ".str.ident");
+ StrVar->setAlignment(1);
+
+ SourceLocDummy = new GlobalVariable(
+ *M, IdentTy, true, GlobalValue::PrivateLinkage, nullptr, LocName);
+ SourceLocDummy->setAlignment(8);
+
+ // Constant Definitions
+ Constant *InitStr = ConstantDataArray::getString(
+ M->getContext(), "Source location dummy.", true);
+
+ Constant *StrPtr = static_cast<Constant *>(Builder.CreateInBoundsGEP(
+ ArrayType, StrVar, {Builder.getInt32(0), Builder.getInt32(0)}));
+
+ Constant *LocInitStruct = ConstantStruct::get(
+ IdentTy, {Builder.getInt32(0), Builder.getInt32(0), Builder.getInt32(0),
+ Builder.getInt32(0), StrPtr});
+
+ // Initialize variables
+ StrVar->setInitializer(InitStr);
+ SourceLocDummy->setInitializer(LocInitStruct);
+ }
+
+ return SourceLocDummy;
+}
+
+bool ParallelLoopGeneratorKMP::is64BitArch() {
+ return (LongType->getIntegerBitWidth() == 64);
+}
+
+OMPGeneralSchedulingType ParallelLoopGeneratorKMP::getSchedType(
+ int ChunkSize, OMPGeneralSchedulingType Scheduling) const {
+ if (ChunkSize == 0 && Scheduling == OMPGeneralSchedulingType::StaticChunked)
+ return OMPGeneralSchedulingType::StaticNonChunked;
+
+ return Scheduling;
+}
diff --git a/stable/lib/CodeGen/ManagedMemoryRewrite.cpp b/stable/lib/CodeGen/ManagedMemoryRewrite.cpp
index e14da1d..8492b5f 100644
--- a/stable/lib/CodeGen/ManagedMemoryRewrite.cpp
+++ b/stable/lib/CodeGen/ManagedMemoryRewrite.cpp
@@ -1,9 +1,8 @@
//===---- ManagedMemoryRewrite.cpp - Rewrite global & malloc'd memory -----===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -16,35 +15,18 @@
//
//===----------------------------------------------------------------------===//
-#include "polly/CodeGen/CodeGeneration.h"
-#include "polly/CodeGen/IslAst.h"
-#include "polly/CodeGen/IslNodeBuilder.h"
+#include "polly/CodeGen/IRBuilder.h"
#include "polly/CodeGen/PPCGCodeGeneration.h"
-#include "polly/CodeGen/Utils.h"
#include "polly/DependenceInfo.h"
#include "polly/LinkAllPasses.h"
#include "polly/Options.h"
#include "polly/ScopDetection.h"
-#include "polly/ScopInfo.h"
-#include "polly/Support/SCEVValidator.h"
-#include "llvm/Analysis/AliasAnalysis.h"
-#include "llvm/Analysis/BasicAliasAnalysis.h"
+#include "llvm/ADT/SmallSet.h"
#include "llvm/Analysis/CaptureTracking.h"
-#include "llvm/Analysis/GlobalsModRef.h"
-#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
-#include "llvm/Analysis/TargetLibraryInfo.h"
-#include "llvm/Analysis/TargetTransformInfo.h"
-#include "llvm/IR/LegacyPassManager.h"
-#include "llvm/IR/Verifier.h"
-#include "llvm/IRReader/IRReader.h"
-#include "llvm/Linker/Linker.h"
-#include "llvm/Support/TargetRegistry.h"
-#include "llvm/Support/TargetSelect.h"
-#include "llvm/Target/TargetMachine.h"
-#include "llvm/Transforms/IPO/PassManagerBuilder.h"
-#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
+using namespace polly;
+
static cl::opt<bool> RewriteAllocas(
"polly-acc-rewrite-allocas",
cl::desc(
@@ -311,7 +293,8 @@
PollyIRBuilder Builder(M->getContext());
Builder.SetInsertPoint(Alloca);
- Value *MallocManagedFn = getOrCreatePollyMallocManaged(*Alloca->getModule());
+ Function *MallocManagedFn =
+ getOrCreatePollyMallocManaged(*Alloca->getModule());
const uint64_t Size =
DL.getTypeAllocSize(Alloca->getType()->getElementType());
Value *SizeVal = Builder.getInt64(Size);
@@ -331,7 +314,7 @@
continue;
Builder.SetInsertPoint(Return);
- Value *FreeManagedFn = getOrCreatePollyFreeManaged(*M);
+ Function *FreeManagedFn = getOrCreatePollyFreeManaged(*M);
Builder.CreateCall(FreeManagedFn, {RawManagedMem});
}
}
diff --git a/stable/lib/CodeGen/PPCGCodeGeneration.cpp b/stable/lib/CodeGen/PPCGCodeGeneration.cpp
index 47beb1c..2516b33 100644
--- a/stable/lib/CodeGen/PPCGCodeGeneration.cpp
+++ b/stable/lib/CodeGen/PPCGCodeGeneration.cpp
@@ -1,9 +1,8 @@
//===------ PPCGCodeGeneration.cpp - Polly Accelerator Code Generation. ---===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -25,30 +24,22 @@
#include "polly/ScopInfo.h"
#include "polly/Support/SCEVValidator.h"
#include "llvm/ADT/PostOrderIterator.h"
-#include "llvm/Analysis/AliasAnalysis.h"
-#include "llvm/Analysis/BasicAliasAnalysis.h"
-#include "llvm/Analysis/GlobalsModRef.h"
-#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
-#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Verifier.h"
#include "llvm/IRReader/IRReader.h"
#include "llvm/Linker/Linker.h"
+#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/TargetRegistry.h"
-#include "llvm/Support/TargetSelect.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
-
#include "isl/union_map.h"
extern "C" {
#include "ppcg/cuda.h"
#include "ppcg/gpu.h"
-#include "ppcg/gpu_print.h"
#include "ppcg/ppcg.h"
-#include "ppcg/schedule.h"
}
#include "llvm/Support/Debug.h"
diff --git a/stable/lib/CodeGen/PerfMonitor.cpp b/stable/lib/CodeGen/PerfMonitor.cpp
index 9cc99de..d9419e9 100644
--- a/stable/lib/CodeGen/PerfMonitor.cpp
+++ b/stable/lib/CodeGen/PerfMonitor.cpp
@@ -1,9 +1,8 @@
//===------ PerfMonitor.cpp - Generate a run-time performance monitor. -======//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/lib/CodeGen/RuntimeDebugBuilder.cpp b/stable/lib/CodeGen/RuntimeDebugBuilder.cpp
index dbfeae2..29cba08 100644
--- a/stable/lib/CodeGen/RuntimeDebugBuilder.cpp
+++ b/stable/lib/CodeGen/RuntimeDebugBuilder.cpp
@@ -1,9 +1,8 @@
//===--- RuntimeDebugBuilder.cpp - Helper to insert prints into LLVM-IR ---===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -12,7 +11,6 @@
#include "polly/CodeGen/RuntimeDebugBuilder.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Module.h"
-#include "llvm/Support/Debug.h"
#include <string>
#include <vector>
diff --git a/stable/lib/CodeGen/Utils.cpp b/stable/lib/CodeGen/Utils.cpp
index 4d595fb..3afb2e5 100644
--- a/stable/lib/CodeGen/Utils.cpp
+++ b/stable/lib/CodeGen/Utils.cpp
@@ -1,9 +1,8 @@
//===--- Utils.cpp - Utility functions for the code generation --*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -16,7 +15,6 @@
#include "polly/ScopInfo.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/RegionInfo.h"
-#include "llvm/Support/Debug.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
using namespace llvm;
diff --git a/stable/lib/Exchange/JSONExporter.cpp b/stable/lib/Exchange/JSONExporter.cpp
index 4197539..b9cb568 100644
--- a/stable/lib/Exchange/JSONExporter.cpp
+++ b/stable/lib/Exchange/JSONExporter.cpp
@@ -1,9 +1,8 @@
//===-- JSONExporter.cpp - Export Scops as JSON -------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -19,18 +18,14 @@
#include "polly/ScopPass.h"
#include "polly/Support/ScopLocation.h"
#include "llvm/ADT/Statistic.h"
-#include "llvm/Analysis/RegionInfo.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/JSON.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/ToolOutputFile.h"
#include "llvm/Support/raw_ostream.h"
-#include "isl/constraint.h"
#include "isl/map.h"
-#include "isl/printer.h"
#include "isl/set.h"
-#include "isl/union_map.h"
#include <memory>
#include <string>
#include <system_error>
diff --git a/stable/lib/Polly.cpp b/stable/lib/Polly.cpp
index 95903ab..e6bae93 100644
--- a/stable/lib/Polly.cpp
+++ b/stable/lib/Polly.cpp
@@ -1,16 +1,15 @@
//===---------- Polly.cpp - Initialize the Polly Module -------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
//===----------------------------------------------------------------------===//
#include "polly/RegisterPasses.h"
-#include "llvm/Transforms/IPO/PassManagerBuilder.h"
+#include "llvm/PassRegistry.h"
namespace {
diff --git a/stable/lib/Support/DumpModulePass.cpp b/stable/lib/Support/DumpModulePass.cpp
index bb581f3..615fd75 100644
--- a/stable/lib/Support/DumpModulePass.cpp
+++ b/stable/lib/Support/DumpModulePass.cpp
@@ -1,9 +1,8 @@
//===------ DumpModulePass.cpp ----------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -12,16 +11,13 @@
//===----------------------------------------------------------------------===//
#include "polly/Support/DumpModulePass.h"
-
-#include "polly/Options.h"
-#include "llvm/IR/LegacyPassManagers.h"
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/ToolOutputFile.h"
-#include <string.h>
+
#define DEBUG_TYPE "polly-dump-module"
using namespace llvm;
diff --git a/stable/lib/Support/GICHelper.cpp b/stable/lib/Support/GICHelper.cpp
index ae3d80d..1230b48 100644
--- a/stable/lib/Support/GICHelper.cpp
+++ b/stable/lib/Support/GICHelper.cpp
@@ -1,27 +1,18 @@
//===- GmpConv.cpp - Recreate LLVM IR from the Scop. ---------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Functions for converting between gmp objects and llvm::APInt.
//
//===----------------------------------------------------------------------===//
-#include "polly/Support/GICHelper.h"
-#include "llvm/IR/Value.h"
-#include "isl/aff.h"
-#include "isl/map.h"
-#include "isl/schedule.h"
-#include "isl/set.h"
-#include "isl/space.h"
-#include "isl/union_map.h"
-#include "isl/union_set.h"
-#include "isl/val.h"
-#include <climits>
+#include "polly/Support/GICHelper.h"
+#include "llvm/ADT/APInt.h"
+#include "isl/val.h"
using namespace llvm;
diff --git a/stable/lib/Support/ISLTools.cpp b/stable/lib/Support/ISLTools.cpp
index bbc4b07..2559262 100644
--- a/stable/lib/Support/ISLTools.cpp
+++ b/stable/lib/Support/ISLTools.cpp
@@ -1,9 +1,8 @@
//===------ ISLTools.cpp ----------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -13,7 +12,9 @@
//===----------------------------------------------------------------------===//
#include "polly/Support/ISLTools.h"
-#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cassert>
+#include <vector>
using namespace polly;
@@ -719,7 +720,7 @@
}
// Sort the polyhedra.
- llvm::sort(BSets.begin(), BSets.end(), orderComparer);
+ llvm::sort(BSets, orderComparer);
// Print the polyhedra.
bool First = true;
diff --git a/stable/lib/Support/RegisterPasses.cpp b/stable/lib/Support/RegisterPasses.cpp
index 975ec57..1349bdc 100644
--- a/stable/lib/Support/RegisterPasses.cpp
+++ b/stable/lib/Support/RegisterPasses.cpp
@@ -1,9 +1,8 @@
//===------ RegisterPasses.cpp - Add the Polly Passes to default passes --===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -24,15 +23,11 @@
#include "polly/CodeGen/CodeGeneration.h"
#include "polly/CodeGen/CodegenCleanup.h"
#include "polly/CodeGen/IslAst.h"
-#include "polly/CodeGen/PPCGCodeGeneration.h"
#include "polly/CodePreparation.h"
-#include "polly/DeLICM.h"
#include "polly/DependenceInfo.h"
-#include "polly/FlattenSchedule.h"
#include "polly/ForwardOpTree.h"
#include "polly/JSONExporter.h"
#include "polly/LinkAllPasses.h"
-#include "polly/Options.h"
#include "polly/PolyhedralInfo.h"
#include "polly/ScopDetection.h"
#include "polly/ScopInfo.h"
@@ -46,8 +41,6 @@
#include "llvm/Support/TargetSelect.h"
#include "llvm/Transforms/IPO.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
-#include "llvm/Transforms/Scalar.h"
-#include "llvm/Transforms/Vectorize.h"
using namespace llvm;
using namespace polly;
@@ -350,12 +343,9 @@
PM.add(polly::createPruneUnprofitablePass());
#ifdef GPU_CODEGEN
- if (Target == TARGET_HYBRID) {
+ if (Target == TARGET_HYBRID)
PM.add(
polly::createPPCGCodeGenerationPass(GPUArchChoice, GPURuntimeChoice));
- PM.add(polly::createManagedMemoryRewritePassPass(GPUArchChoice,
- GPURuntimeChoice));
- }
#endif
if (Target == TARGET_CPU || Target == TARGET_HYBRID)
switch (Optimizer) {
@@ -389,6 +379,12 @@
}
#endif
+#ifdef GPU_CODEGEN
+ if (Target == TARGET_HYBRID)
+ PM.add(polly::createManagedMemoryRewritePassPass(GPUArchChoice,
+ GPURuntimeChoice));
+#endif
+
// FIXME: This dummy ModulePass keeps some programs from miscompiling,
// probably some not correctly preserved analyses. It acts as a barrier to
// force all analysis results to be recomputed.
diff --git a/stable/lib/Support/SCEVAffinator.cpp b/stable/lib/Support/SCEVAffinator.cpp
index d00d6d6..85e39e3 100644
--- a/stable/lib/Support/SCEVAffinator.cpp
+++ b/stable/lib/Support/SCEVAffinator.cpp
@@ -1,9 +1,8 @@
//===--------- SCEVAffinator.cpp - Create Scops from LLVM IR -------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -16,7 +15,6 @@
#include "polly/ScopInfo.h"
#include "polly/Support/GICHelper.h"
#include "polly/Support/SCEVValidator.h"
-#include "polly/Support/ScopHelper.h"
#include "isl/aff.h"
#include "isl/local_space.h"
#include "isl/set.h"
diff --git a/stable/lib/Support/SCEVValidator.cpp b/stable/lib/Support/SCEVValidator.cpp
index 6732f4b..84e9b87 100644
--- a/stable/lib/Support/SCEVValidator.cpp
+++ b/stable/lib/Support/SCEVValidator.cpp
@@ -1,6 +1,6 @@
#include "polly/Support/SCEVValidator.h"
-#include "polly/ScopInfo.h"
+#include "polly/ScopDetection.h"
#include "llvm/Analysis/RegionInfo.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
diff --git a/stable/lib/Support/ScopHelper.cpp b/stable/lib/Support/ScopHelper.cpp
index fedb7b0..8c730c4 100644
--- a/stable/lib/Support/ScopHelper.cpp
+++ b/stable/lib/Support/ScopHelper.cpp
@@ -1,9 +1,8 @@
//===- ScopHelper.cpp - Some Helper Functions for Scop. ------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -17,13 +16,9 @@
#include "polly/Support/SCEVValidator.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/RegionInfo.h"
-#include "llvm/Analysis/RegionInfoImpl.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpander.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
-#include "llvm/IR/CFG.h"
-#include "llvm/IR/IntrinsicInst.h"
-#include "llvm/Support/Debug.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
using namespace llvm;
diff --git a/stable/lib/Support/ScopLocation.cpp b/stable/lib/Support/ScopLocation.cpp
index a4b3dec..1b5e82e 100644
--- a/stable/lib/Support/ScopLocation.cpp
+++ b/stable/lib/Support/ScopLocation.cpp
@@ -1,9 +1,8 @@
//=== ScopLocation.cpp - Debug location for ScopDetection ----- -*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -13,9 +12,7 @@
//
#include "polly/Support/ScopLocation.h"
#include "llvm/Analysis/RegionInfo.h"
-#include "llvm/IR/BasicBlock.h"
-#include "llvm/IR/DebugInfo.h"
-#include "llvm/IR/DebugLoc.h"
+#include "llvm/IR/DebugInfoMetadata.h"
using namespace llvm;
diff --git a/stable/lib/Support/VirtualInstruction.cpp b/stable/lib/Support/VirtualInstruction.cpp
index f779368..be055ac 100644
--- a/stable/lib/Support/VirtualInstruction.cpp
+++ b/stable/lib/Support/VirtualInstruction.cpp
@@ -1,9 +1,8 @@
//===------ VirtualInstruction.cpp ------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -13,7 +12,6 @@
//===----------------------------------------------------------------------===//
#include "polly/Support/VirtualInstruction.h"
-#include "polly/Support/SCEVValidator.h"
using namespace polly;
using namespace llvm;
diff --git a/stable/lib/Transform/Canonicalization.cpp b/stable/lib/Transform/Canonicalization.cpp
index 58e4914..8945f1f 100644
--- a/stable/lib/Transform/Canonicalization.cpp
+++ b/stable/lib/Transform/Canonicalization.cpp
@@ -1,9 +1,8 @@
//===---- Canonicalization.cpp - Run canonicalization passes --------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -16,6 +15,7 @@
#include "polly/Canonicalization.h"
#include "polly/LinkAllPasses.h"
#include "polly/Options.h"
+#include "llvm/IR/LegacyPassManager.h"
#include "llvm/Transforms/IPO.h"
#include "llvm/Transforms/InstCombine/InstCombine.h"
#include "llvm/Transforms/Scalar.h"
diff --git a/stable/lib/Transform/CodePreparation.cpp b/stable/lib/Transform/CodePreparation.cpp
index 299c141..a445d72 100644
--- a/stable/lib/Transform/CodePreparation.cpp
+++ b/stable/lib/Transform/CodePreparation.cpp
@@ -1,9 +1,8 @@
//===---- CodePreparation.cpp - Code preparation for Scop Detection -------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -18,13 +17,11 @@
#include "polly/CodePreparation.h"
#include "polly/LinkAllPasses.h"
-#include "polly/ScopDetection.h"
#include "polly/Support/ScopHelper.h"
#include "llvm/Analysis/DominanceFrontier.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/RegionInfo.h"
#include "llvm/Analysis/ScalarEvolution.h"
-#include "llvm/Transforms/Utils/Local.h"
using namespace llvm;
using namespace polly;
diff --git a/stable/lib/Transform/DeLICM.cpp b/stable/lib/Transform/DeLICM.cpp
index fde99a2..b229d60 100644
--- a/stable/lib/Transform/DeLICM.cpp
+++ b/stable/lib/Transform/DeLICM.cpp
@@ -1,9 +1,8 @@
//===------ DeLICM.cpp -----------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -16,13 +15,16 @@
//===----------------------------------------------------------------------===//
#include "polly/DeLICM.h"
+#include "polly/LinkAllPasses.h"
#include "polly/Options.h"
#include "polly/ScopInfo.h"
#include "polly/ScopPass.h"
+#include "polly/Support/GICHelper.h"
#include "polly/Support/ISLOStream.h"
#include "polly/Support/ISLTools.h"
#include "polly/ZoneAlgo.h"
#include "llvm/ADT/Statistic.h"
+
#define DEBUG_TYPE "polly-delicm"
using namespace polly;
diff --git a/stable/lib/Transform/DeadCodeElimination.cpp b/stable/lib/Transform/DeadCodeElimination.cpp
index 1a029b4..cc8923c 100644
--- a/stable/lib/Transform/DeadCodeElimination.cpp
+++ b/stable/lib/Transform/DeadCodeElimination.cpp
@@ -1,9 +1,8 @@
//===- DeadCodeElimination.cpp - Eliminate dead iteration ----------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -37,12 +36,7 @@
#include "polly/Options.h"
#include "polly/ScopInfo.h"
#include "llvm/Support/CommandLine.h"
-#include "isl/flow.h"
#include "isl/isl-noexceptions.h"
-#include "isl/map.h"
-#include "isl/set.h"
-#include "isl/union_map.h"
-#include "isl/union_set.h"
using namespace llvm;
using namespace polly;
diff --git a/stable/lib/Transform/FlattenAlgo.cpp b/stable/lib/Transform/FlattenAlgo.cpp
index 5632b14..c7d02c1 100644
--- a/stable/lib/Transform/FlattenAlgo.cpp
+++ b/stable/lib/Transform/FlattenAlgo.cpp
@@ -1,9 +1,8 @@
//===------ FlattenAlgo.cpp ------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/lib/Transform/FlattenSchedule.cpp b/stable/lib/Transform/FlattenSchedule.cpp
index 52ff0b7..fc065af 100644
--- a/stable/lib/Transform/FlattenSchedule.cpp
+++ b/stable/lib/Transform/FlattenSchedule.cpp
@@ -1,9 +1,8 @@
//===------ FlattenSchedule.cpp --------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/lib/Transform/ForwardOpTree.cpp b/stable/lib/Transform/ForwardOpTree.cpp
index f49b673..ad31673 100644
--- a/stable/lib/Transform/ForwardOpTree.cpp
+++ b/stable/lib/Transform/ForwardOpTree.cpp
@@ -1,9 +1,8 @@
//===- ForwardOpTree.h ------------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -29,7 +28,6 @@
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Value.h"
-#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
diff --git a/stable/lib/Transform/MaximalStaticExpansion.cpp b/stable/lib/Transform/MaximalStaticExpansion.cpp
index 2157db2..a9e1c50 100644
--- a/stable/lib/Transform/MaximalStaticExpansion.cpp
+++ b/stable/lib/Transform/MaximalStaticExpansion.cpp
@@ -1,9 +1,8 @@
//===- MaximalStaticExpansion.cpp -----------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -16,12 +15,10 @@
#include "polly/LinkAllPasses.h"
#include "polly/ScopInfo.h"
#include "polly/ScopPass.h"
-#include "polly/Support/GICHelper.h"
#include "polly/Support/ISLTools.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
-#include "llvm/Pass.h"
#include "isl/isl-noexceptions.h"
#include "isl/union_map.h"
#include <cassert>
diff --git a/stable/lib/Transform/RewriteByReferenceParameters.cpp b/stable/lib/Transform/RewriteByReferenceParameters.cpp
index 1b9f852..494280e 100644
--- a/stable/lib/Transform/RewriteByReferenceParameters.cpp
+++ b/stable/lib/Transform/RewriteByReferenceParameters.cpp
@@ -1,9 +1,8 @@
//===------ RewriteByReferenceParameters.cpp --------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -17,7 +16,7 @@
#include "polly/LinkAllPasses.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
-#include "llvm/IR/PassManager.h"
+#include "llvm/Pass.h"
#define DEBUG_TYPE "polly-rewrite-byref-params"
diff --git a/stable/lib/Transform/ScheduleOptimizer.cpp b/stable/lib/Transform/ScheduleOptimizer.cpp
index fb3e4b3..5554154 100644
--- a/stable/lib/Transform/ScheduleOptimizer.cpp
+++ b/stable/lib/Transform/ScheduleOptimizer.cpp
@@ -1,9 +1,8 @@
//===- Schedule.cpp - Calculate an optimized schedule ---------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -54,23 +53,18 @@
#include "polly/ScopInfo.h"
#include "polly/ScopPass.h"
#include "polly/Simplify.h"
-#include "polly/Support/GICHelper.h"
#include "polly/Support/ISLOStream.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/Function.h"
-#include "llvm/Pass.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
-#include "isl/constraint.h"
#include "isl/ctx.h"
-#include "isl/map.h"
#include "isl/options.h"
#include "isl/printer.h"
#include "isl/schedule.h"
#include "isl/schedule_node.h"
-#include "isl/space.h"
#include "isl/union_map.h"
#include "isl/union_set.h"
#include <algorithm>
diff --git a/stable/lib/Transform/ScopInliner.cpp b/stable/lib/Transform/ScopInliner.cpp
index 4aadb6a..7aaa367 100644
--- a/stable/lib/Transform/ScopInliner.cpp
+++ b/stable/lib/Transform/ScopInliner.cpp
@@ -1,9 +1,8 @@
//===---- ScopInliner.cpp - Polyhedral based inliner ----------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-/// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
@@ -15,10 +14,8 @@
//===----------------------------------------------------------------------===//
#include "polly/LinkAllPasses.h"
-#include "polly/RegisterPasses.h"
#include "polly/ScopDetection.h"
#include "llvm/Analysis/CallGraphSCCPass.h"
-#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/PassManager.h"
#include "llvm/Passes/PassBuilder.h"
#include "llvm/Transforms/IPO/AlwaysInliner.h"
diff --git a/stable/lib/Transform/Simplify.cpp b/stable/lib/Transform/Simplify.cpp
index 8b0a695..d58aa0b 100644
--- a/stable/lib/Transform/Simplify.cpp
+++ b/stable/lib/Transform/Simplify.cpp
@@ -1,9 +1,8 @@
//===------ Simplify.cpp ----------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/lib/Transform/ZoneAlgo.cpp b/stable/lib/Transform/ZoneAlgo.cpp
index f5109a6..6802615 100644
--- a/stable/lib/Transform/ZoneAlgo.cpp
+++ b/stable/lib/Transform/ZoneAlgo.cpp
@@ -1,9 +1,8 @@
//===------ ZoneAlgo.cpp ----------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
diff --git a/stable/test/Isl/CodeGen/OpenMP/reference-argument-from-non-affine-region.ll b/stable/test/Isl/CodeGen/OpenMP/reference-argument-from-non-affine-region.ll
index ce30395..28461ef 100644
--- a/stable/test/Isl/CodeGen/OpenMP/reference-argument-from-non-affine-region.ll
+++ b/stable/test/Isl/CodeGen/OpenMP/reference-argument-from-non-affine-region.ll
@@ -1,10 +1,25 @@
; RUN: opt %loadPolly -polly-parallel \
-; RUN: -polly-parallel-force -polly-codegen -S -verify-dom-info < %s \
+; RUN: -polly-parallel-force -polly-codegen \
+; RUN: -S -verify-dom-info < %s \
; RUN: | FileCheck %s -check-prefix=IR
-target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+; RUN: opt %loadPolly -polly-parallel \
+; RUN: -polly-parallel-force -polly-codegen -polly-scheduling=runtime \
+; RUN: -S -verify-dom-info < %s \
+; RUN: | FileCheck %s -check-prefix=IR
+
+; RUN: opt %loadPolly -polly-parallel \
+; RUN: -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM \
+; RUN: -S -verify-dom-info < %s \
+; RUN: | FileCheck %s -check-prefix=LIBOMP-IR
; IR: @GOMP_parallel_loop_runtime_start
+; LIBOMP-IR: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call
+; LIBOMP-IR: call void @__kmpc_dispatch_init_{{[4|8]}}
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
@longLimit = external global [9 x [23 x i32]], align 16
@shortLimit = external global [9 x [14 x i32]], align 16
diff --git a/stable/test/Isl/CodeGen/OpenMP/single_loop.ll b/stable/test/Isl/CodeGen/OpenMP/single_loop.ll
index 6aeda25..6de65bd 100644
--- a/stable/test/Isl/CodeGen/OpenMP/single_loop.ll
+++ b/stable/test/Isl/CodeGen/OpenMP/single_loop.ll
@@ -4,9 +4,14 @@
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-ast -analyze < %s | FileCheck %s -check-prefix=AST-STRIDE4
; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-codegen -S < %s | FileCheck %s -check-prefix=IR-STRIDE4
+; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=static -polly-scheduling-chunksize=43 -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR
+; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=dynamic -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-DYNAMIC
+; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM -polly-scheduling=dynamic -polly-scheduling-chunksize=4 -S -verify-dom-info < %s | FileCheck %s -check-prefix=LIBOMP-IR-DYNAMIC-FOUR
+; RUN: opt %loadPolly -polly-parallel -polly-parallel-force -polly-import-jscop -polly-codegen -polly-omp-backend=LLVM -S < %s | FileCheck %s -check-prefix=LIBOMP-IR-STRIDE4
+
; This extensive test case tests the creation of the full set of OpenMP calls
; as well as the subfunction creation using a trivial loop as example.
-
+;
; #define N 1024
; float A[N];
;
@@ -83,6 +88,90 @@
; IR-STRIDE4: %polly.indvar_next = add nsw i64 %polly.indvar, 4
; IR-STRIDE4 %polly.adjust_ub = sub i64 %polly.par.UBAdjusted, 4
+; LIBOMP-IR: %struct.ident_t = type { i32, i32, i32, i32, i8* }
+
+; LIBOMP-IR-LABEL: single_parallel_loop()
+; LIBOMP-IR-NEXT: entry
+; LIBOMP-IR-NEXT: %polly.par.userContext = alloca
+
+; LIBOMP-IR-LABEL: polly.parallel.for:
+; LIBOMP-IR-NEXT: %polly.par.userContext1 = bitcast {}* %polly.par.userContext to i8*
+; LIBOMP-IR-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @.loc.dummy, i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i8*)* @single_parallel_loop_polly_subfn to void (i32*, i32*, ...)*), i64 0, i64 1024, i64 1, i8* %polly.par.userContext1)
+; LIBOMP-IR-NEXT: br label %polly.exiting
+
+; LIBOMP-IR: define internal void @single_parallel_loop_polly_subfn(i32* %polly.kmpc.global_tid, i32* %polly.kmpc.bound_tid, i64 %polly.kmpc.lb, i64 %polly.kmpc.ub, i64 %polly.kmpc.inc, i8* %polly.kmpc.shared)
+; LIBOMP-IR-LABEL: polly.par.setup:
+; LIBOMP-IR-NEXT: %polly.par.LBPtr = alloca i64
+; LIBOMP-IR-NEXT: %polly.par.UBPtr = alloca i64
+; LIBOMP-IR-NEXT: %polly.par.lastIterPtr = alloca i32
+; LIBOMP-IR-NEXT: %polly.par.StridePtr = alloca i64
+; LIBOMP-IR-NEXT: %polly.par.userContext = bitcast i8* %polly.kmpc.shared
+; LIBOMP-IR-NEXT: %polly.par.global_tid = load i32, i32* %polly.kmpc.global_tid
+; LIBOMP-IR-NEXT: store i64 %polly.kmpc.lb, i64* %polly.par.LBPtr
+; LIBOMP-IR-NEXT: store i64 %polly.kmpc.ub, i64* %polly.par.UBPtr
+; LIBOMP-IR-NEXT: store i32 0, i32* %polly.par.lastIterPtr
+; LIBOMP-IR-NEXT: store i64 %polly.kmpc.inc, i64* %polly.par.StridePtr
+; LIBOMP-IR-NEXT: %polly.indvar.UBAdjusted = add i64 %polly.kmpc.ub, -1
+; LIBOMP-IR-NEXT: call void @__kmpc_for_static_init_{{[4|8]}}(%struct.ident_t* @.loc.dummy{{[.0-9]*}}, i32 %polly.par.global_tid, i32 33, i32* %polly.par.lastIterPtr, i64* %polly.par.LBPtr, i64* %polly.par.UBPtr, i64* %polly.par.StridePtr, i64 1, i64 43)
+; LIBOMP-IR-NEXT: %polly.indvar.LB = load i64, i64* %polly.par.LBPtr
+; LIBOMP-IR-NEXT: %polly.indvar.UB = load i64, i64* %polly.par.UBPtr
+; LIBOMP-IR-NEXT: %polly.adjustedUBOutOfBounds = icmp slt i64 %polly.indvar.UB, %polly.indvar.UBAdjusted
+; LIBOMP-IR-NEXT: %{{[0-9]+}} = select i1 %polly.adjustedUBOutOfBounds, i64 %polly.indvar.UB, i64 %polly.indvar.UBAdjusted
+; LIBOMP-IR-NEXT: store i64 %{{[0-9]+}}, i64* %polly.par.UBPtr
+; LIBOMP-IR-NEXT: %polly.hasIteration = icmp sle i64 %polly.indvar.LB, %{{[0-9]+}}
+; LIBOMP-IR: br i1 %polly.hasIteration, label %polly.par.loadIVBounds, label %polly.par.exit
+
+; LIBOMP-IR-LABEL: polly.par.exit:
+; LIBOMP-IR-NEXT: call void @__kmpc_for_static_fini(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid)
+; LIBOMP-IR-NEXT: ret void
+
+; LIBOMP-IR-LABEL: polly.par.checkNext:
+; LIBOMP-IR-NEXT: br label %polly.par.exit
+
+; LIBOMP-IR-LABEL: polly.par.loadIVBounds:
+; LIBOMP-IR-NEXT: br label %polly.loop_preheader
+
+; LIBOMP-IR-LABEL: polly.loop_exit:
+; LIBOMP-IR-NEXT: br label %polly.par.checkNext
+
+; LIBOMP-IR-LABEL: polly.loop_header:
+; LIBOMP-IR-NEXT: %polly.indvar = phi i64 [ %polly.indvar.LB, %polly.loop_preheader ], [ %polly.indvar_next, %polly.stmt.S ]
+; LIBOMP-IR-NEXT: br label %polly.stmt.S
+
+; LIBOMP-IR-LABEL: polly.stmt.S:
+; LIBOMP-IR-NEXT: %[[gep:[._a-zA-Z0-9]*]] = getelementptr [1024 x float], [1024 x float]* {{.*}}, i64 0, i64 %polly.indvar
+; LIBOMP-IR-NEXT: store float 1.000000e+00, float* %[[gep]]
+; LIBOMP-IR-NEXT: %polly.indvar_next = add nsw i64 %polly.indvar, %polly.kmpc.inc
+; LIBOMP-IR-NEXT: %polly.loop_cond = icmp sle i64 %polly.indvar_next, %{{[0-9]+}}
+; LIBOMP-IR-NEXT: br i1 %polly.loop_cond, label %polly.loop_header, label %polly.loop_exit
+
+; LIBOMP-IR-LABEL: polly.loop_preheader:
+; LIBOMP-IR-NEXT: br label %polly.loop_header
+
+; LIBOMP-IR: attributes #1 = { "polly.skip.fn" }
+
+; LIBOMP-IR-DYNAMIC: call void @__kmpc_dispatch_init_{{[4|8]}}(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid, i32 35, i64 %polly.kmpc.lb, i64 %polly.indvar.UBAdjusted, i64 %polly.kmpc.inc, i64 1)
+; LIBOMP-IR-DYNAMIC-NEXT: %{{[0-9]+}} = call i32 @__kmpc_dispatch_next_{{[4|8]}}(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid, i32* %polly.par.lastIterPtr, i64* %polly.par.LBPtr, i64* %polly.par.UBPtr, i64* %polly.par.StridePtr)
+; LIBOMP-IR-DYNAMIC-NEXT: %polly.hasIteration = icmp eq i32 %{{[0-9]+}}, 1
+; LIBOMP-IR-DYNAMIC-NEXT: br i1 %polly.hasIteration, label %polly.par.loadIVBounds, label %polly.par.exit
+
+; LIBOMP-IR-DYNAMIC-LABEL: polly.par.exit:
+; LIBOMP-IR-DYNAMIC-NEXT: ret void
+
+; LIBOMP-IR-DYNAMIC-LABEL: polly.par.checkNext:
+; LIBOMP-IR-DYNAMIC-NEXT: %{{[0-9]+}} = call i32 @__kmpc_dispatch_next_{{[4|8]}}(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid, i32* %polly.par.lastIterPtr, i64* %polly.par.LBPtr, i64* %polly.par.UBPtr, i64* %polly.par.StridePtr)
+; LIBOMP-IR-DYNAMIC-NEXT: %polly.hasWork = icmp eq i32 %{{[0-9]+}}, 1
+; LIBOMP-IR-DYNAMIC-NEXT: br i1 %polly.hasWork, label %polly.par.loadIVBounds, label %polly.par.exit
+
+; LIBOMP-IR-DYNAMIC-LABEL: polly.par.loadIVBounds:
+; LIBOMP-IR-DYNAMIC-NEXT: %polly.indvar.LB = load i64, i64* %polly.par.LBPtr
+; LIBOMP-IR-DYNAMIC-NEXT: %polly.indvar.UB = load i64, i64* %polly.par.UBPtr
+; LIBOMP-IR-DYNAMIC-NEXT: br label %polly.loop_preheader
+
+; LIBOMP-IR-DYNAMIC-FOUR: call void @__kmpc_dispatch_init_{{[4|8]}}(%struct.ident_t* @.loc.dummy, i32 %polly.par.global_tid, i32 35, i64 %polly.kmpc.lb, i64 %polly.indvar.UBAdjusted, i64 %polly.kmpc.inc, i64 4)
+
+; LIBOMP-IR-STRIDE4: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @.loc.dummy, i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i8*)* @single_parallel_loop_polly_subfn to void (i32*, i32*, ...)*), i64 0, i64 1024, i64 4, i8* %polly.par.userContext1)
+
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
@A = common global [1024 x float] zeroinitializer, align 16
diff --git a/stable/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll b/stable/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll
index f518319..4c3bc0f 100644
--- a/stable/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll
+++ b/stable/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll
@@ -1,7 +1,21 @@
; RUN: opt %loadPolly -polly-parallel \
-; RUN: -polly-parallel-force -polly-codegen -S -verify-dom-info < %s \
+; RUN: -polly-parallel-force -polly-codegen \
+; RUN: -S -verify-dom-info < %s \
; RUN: | FileCheck %s -check-prefix=IR
+; RUN: opt %loadPolly -polly-parallel \
+; RUN: -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM \
+; RUN: -S -verify-dom-info < %s \
+; RUN: | FileCheck %s -check-prefix=LIBOMP-IR
+
+; RUN: opt %loadPolly -polly-parallel \
+; RUN: -polly-parallel-force -polly-codegen -polly-omp-backend=LLVM \
+; RUN: -polly-scheduling=static \
+; RUN: -S -verify-dom-info < %s \
+; RUN: | FileCheck %s -check-prefix=LIBOMP-STATIC-IR
+
+; Ensure the scalars are initialized before the OpenMP code is launched.
+;
; #define N 1024
; float A[N];
;
@@ -9,16 +23,24 @@
; for (long i = 0; i < N; i++)
; A[i] = alpha;
; }
-
-target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
-
-; Ensure the scalars are initialized before the OpenMP code is launched.
+;
; IR-LABEL: polly.start:
; IR-NEXT: store float %alpha, float* %alpha.s2a
; IR: GOMP_parallel_loop_runtime_start
+; LIBOMP-IR-LABEL: polly.start:
+; LIBOMP-IR-NEXT: store float %alpha, float* %alpha.s2a
+
+; LIBOMP-IR: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call
+; LIBOMP-IR: call void @__kmpc_dispatch_init_{{[4|8]}}
+
+; LIBOMP-STATIC-IR: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call
+; LIBOMP-STATIC-IR: call void @__kmpc_for_static_init_{{[4|8]}}
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+
@A = common global [1024 x float] zeroinitializer, align 16
define void @single_parallel_loop(float %alpha) nounwind {
diff --git a/stable/test/Isl/CodeGen/openmp_limit_threads.ll b/stable/test/Isl/CodeGen/openmp_limit_threads.ll
index 82b9f8d..b3c2f3f 100644
--- a/stable/test/Isl/CodeGen/openmp_limit_threads.ll
+++ b/stable/test/Isl/CodeGen/openmp_limit_threads.ll
@@ -1,20 +1,31 @@
; RUN: opt %loadPolly -polly-codegen -polly-parallel -S < %s | FileCheck %s --check-prefix=AUTO
; RUN: opt %loadPolly -polly-codegen -polly-parallel -polly-num-threads=1 -S < %s | FileCheck %s --check-prefix=ONE
; RUN: opt %loadPolly -polly-codegen -polly-parallel -polly-num-threads=4 -S < %s | FileCheck %s --check-prefix=FOUR
+
+; RUN: opt %loadPolly -polly-codegen -polly-parallel -polly-omp-backend=LLVM -S < %s | FileCheck %s --check-prefix=LIBOMP-AUTO
+; RUN: opt %loadPolly -polly-codegen -polly-parallel -polly-omp-backend=LLVM -polly-num-threads=1 -S < %s | FileCheck %s --check-prefix=LIBOMP-ONE
+; RUN: opt %loadPolly -polly-codegen -polly-parallel -polly-omp-backend=LLVM -polly-num-threads=4 -S < %s | FileCheck %s --check-prefix=LIBOMP-FOUR
+
+; Ensure that the provided thread numbers are forwarded to the OpenMP calls.
;
-; AUTO: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @jd_polly_subfn, i8* %polly.par.userContext{{[0-9]*}}, i32 0, i64 0, i64 1024, i64 1)
-; ONE: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @jd_polly_subfn, i8* %polly.par.userContext{{[0-9]*}}, i32 1, i64 0, i64 1024, i64 1)
-; FOUR: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @jd_polly_subfn, i8* %polly.par.userContext{{[0-9]*}}, i32 4, i64 0, i64 1024, i64 1)
-;
-; void jd(int *A) {
+; void storePosition(int *A) {
; for (int i = 0; i < 1024; i++)
; for (int j = 0; j < 1024; j++)
; A[i + j * 1024] = 0;
; }
-;
+
+; AUTO: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @storePosition_polly_subfn, i8* %polly.par.userContext{{[0-9]*}}, i32 0, i64 0, i64 1024, i64 1)
+; ONE: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @storePosition_polly_subfn, i8* %polly.par.userContext{{[0-9]*}}, i32 1, i64 0, i64 1024, i64 1)
+; FOUR: call void @GOMP_parallel_loop_runtime_start(void (i8*)* @storePosition_polly_subfn, i8* %polly.par.userContext{{[0-9]*}}, i32 4, i64 0, i64 1024, i64 1)
+
+; In automatic mode, no threads are pushed explicitly.
+; LIBOMP-AUTO-NOT: call void @__kmpc_push_num_threads
+; LIBOMP-ONE: call void @__kmpc_push_num_threads(%struct.ident_t* @.loc.dummy{{[.0-9]*}}, i32 %{{[0-9]+}}, i32 1)
+; LIBOMP-FOUR: call void @__kmpc_push_num_threads(%struct.ident_t* @.loc.dummy{{[.0-9]*}}, i32 %{{[0-9]+}}, i32 4)
+
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
-define void @jd(i32* %A) {
+define void @storePosition(i32* %A) {
entry:
br label %for.cond
diff --git a/stable/tools/GPURuntime/GPUJIT.c b/stable/tools/GPURuntime/GPUJIT.c
index 25c5d6b..4de9626 100644
--- a/stable/tools/GPURuntime/GPUJIT.c
+++ b/stable/tools/GPURuntime/GPUJIT.c
@@ -1,9 +1,9 @@
/******************** GPUJIT.c - GPUJIT Execution Engine **********************/
/* */
-/* The LLVM Compiler Infrastructure */
-/* */
-/* This file is dual licensed under the MIT and the University of Illinois */
-/* Open Source License. See LICENSE.TXT for details. */
+/* Part of the LLVM Project, under the Apache License v2.0 with LLVM */
+/* Exceptions. */
+/* See https://llvm.org/LICENSE.txt for license information. */
+/* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */
/* */
/******************************************************************************/
/* */
diff --git a/stable/tools/GPURuntime/GPUJIT.h b/stable/tools/GPURuntime/GPUJIT.h
index fd52ec3..768e097 100644
--- a/stable/tools/GPURuntime/GPUJIT.h
+++ b/stable/tools/GPURuntime/GPUJIT.h
@@ -1,9 +1,9 @@
/******************************************************************************/
/* */
-/* The LLVM Compiler Infrastructure */
-/* */
-/* This file is dual licensed under the MIT and the University of Illinois */
-/* Open Source License. See LICENSE.TXT for details. */
+/* Part of the LLVM Project, under the Apache License v2.0 with LLVM */
+/* Exceptions. */
+/* See https://llvm.org/LICENSE.txt for license information. */
+/* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception */
/* */
/******************************************************************************/
/* */
diff --git a/stable/tools/GPURuntime/LICENSE.TXT b/stable/tools/GPURuntime/LICENSE.TXT
index b9e3080..a556c3a 100644
--- a/stable/tools/GPURuntime/LICENSE.TXT
+++ b/stable/tools/GPURuntime/LICENSE.TXT
@@ -1,5 +1,240 @@
==============================================================================
-GPURuntime License
+The LLVM Project is under the Apache License v2.0 with LLVM Exceptions:
+==============================================================================
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+---- LLVM Exceptions to the Apache 2.0 License ----
+
+As an exception, if, as a result of your compiling your source code, portions
+of this Software are embedded into an Object form of such source code, you
+may redistribute such embedded portions in such Object form without complying
+with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
+
+In addition, if you combine or link compiled forms of this Software with
+software that is licensed under the GPLv2 ("Combined Software") and if a
+court of competent jurisdiction determines that the patent provision (Section
+3), the indemnity provision (Section 9) or other Section of the License
+conflicts with the conditions of the GPLv2, you may retroactively and
+prospectively choose to deem waived or otherwise exclude such Section(s) of
+the License, but only in their entirety and only with respect to the Combined
+Software.
+
+==============================================================================
+Software from third parties included in the LLVM Project:
+==============================================================================
+The LLVM Project contains third party software which is under different license
+terms. All such code will be identified clearly using at least one of two
+mechanisms:
+1) It will be in a separate directory tree with its own `LICENSE.txt` or
+ `LICENSE` file at the top containing the specific license and restrictions
+ which apply to that software, or
+2) It will contain specific license and restriction terms at the top of every
+ file.
+
+==============================================================================
+Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy):
==============================================================================
The GPURuntime library is dual licensed under both the University of Illinois
diff --git a/stable/unittests/DeLICM/DeLICMTest.cpp b/stable/unittests/DeLICM/DeLICMTest.cpp
index bac2366..3e6b6f0 100644
--- a/stable/unittests/DeLICM/DeLICMTest.cpp
+++ b/stable/unittests/DeLICM/DeLICMTest.cpp
@@ -1,9 +1,8 @@
//===- DeLICMTest.cpp ----------------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
diff --git a/stable/unittests/Flatten/FlattenTest.cpp b/stable/unittests/Flatten/FlattenTest.cpp
index b141d28..6668403 100644
--- a/stable/unittests/Flatten/FlattenTest.cpp
+++ b/stable/unittests/Flatten/FlattenTest.cpp
@@ -1,9 +1,8 @@
//===- FlattenTest.cpp ----------------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
diff --git a/stable/unittests/Isl/IslTest.cpp b/stable/unittests/Isl/IslTest.cpp
index 984264e..d319c64 100644
--- a/stable/unittests/Isl/IslTest.cpp
+++ b/stable/unittests/Isl/IslTest.cpp
@@ -1,9 +1,8 @@
//===- IslTest.cpp ----------------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
diff --git a/stable/unittests/ScheduleOptimizer/ScheduleOptimizerTest.cpp b/stable/unittests/ScheduleOptimizer/ScheduleOptimizerTest.cpp
index d23766d..b7fed0b 100644
--- a/stable/unittests/ScheduleOptimizer/ScheduleOptimizerTest.cpp
+++ b/stable/unittests/ScheduleOptimizer/ScheduleOptimizerTest.cpp
@@ -1,9 +1,8 @@
//===- ScheduleOptimizerTest.cpp ------------------------------------------===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
diff --git a/stable/www/get_started.html b/stable/www/get_started.html
index 5d2caba..5d3e004 100644
--- a/stable/www/get_started.html
+++ b/stable/www/get_started.html
@@ -33,20 +33,14 @@
<h2> Manual </h2>
<h3 id="source"> Get the code </h3>
-<p><b>Warning:</b> Polly/LLVM/clang need to be checked out at the same time.</p>
-
<pre>
-git clone http://llvm.org/git/llvm.git llvm_git
-git clone http://llvm.org/git/polly.git llvm_git/tools/polly
-
-# Also build the matching clang-version (optional)
-git clone http://llvm.org/git/clang.git llvm_git/tools/clang
+git clone http://github.com/llvm/llvm-project.git llvm_git
</pre>
<h3 id="build">Build Polly</h3>
<pre>
mkdir llvm_build && cd llvm_build
-cmake ../llvm_git && make
+cmake -DLLVM_ENABLE_PROJECTS='polly;clang' ../llvm_git/llvm && make
</pre>
<h3> Test Polly</h3>
@@ -59,7 +53,7 @@
build. To configure Polly to use a pre-built LLVM, set the
<code>-DCMAKE_PREFIX_PATH</code> option:
-<pre>cmake -DCMAKE_PREFIX_PATH=${LLVM_PREFIX}/lib/cmake/llvm</pre>
+<pre>cmake -DCMAKE_PREFIX_PATH=${LLVM_PREFIX}/lib/cmake/llvm ../llvm_git/polly</pre>
To run unittests, however, you need to have the LLVM source directory around.
Polly will use the <code>llvm-config</code> of the LLVM you're building against
diff --git a/stable/www/menu.html.incl b/stable/www/menu.html.incl
index da2bca6..07afd7b 100644
--- a/stable/www/menu.html.incl
+++ b/stable/www/menu.html.incl
@@ -34,7 +34,7 @@
<a href="http://lab.llvm.org:8080/coverage/coverage-reports/polly/index.html">Code Coverage</a>
<a href="http://llvm.org/reports/scan-build/">Static analysis</a>
<a href="/doxygen/">Doxygen</a>
- <a href="https://github.com/llvm-mirror/polly">Source @ GitHub</a>
+ <a href="https://github.com/llvm/llvm-project/tree/master/polly">Source @ GitHub</a>
</div>
<div class="submenu">
diff --git a/stable/www/todo.html b/stable/www/todo.html
index 8aa45c9..3624dc3 100644
--- a/stable/www/todo.html
+++ b/stable/www/todo.html
@@ -413,12 +413,6 @@
</td></tr>
<tr>
-<th align="left"> Git mirror
-</th><td class="done" align="center">
-git://llvm.org/git/polly.git
-</td><td> Tobias
-</td></tr>
-<tr>
<th align="left"> Commit mails
</th><td class="done" align="center">
llvm-commits@lists.llvm.org