//===- Codegen/IRBuilder.h - The IR builder used by Polly -*- 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 // //===----------------------------------------------------------------------===// // // The Polly IRBuilder file contains Polly specific extensions for the IRBuilder // that are used e.g. to emit the llvm.loop.parallel metadata. // //===----------------------------------------------------------------------===// #ifndef POLLY_CODEGEN_IRBUILDER_H #define POLLY_CODEGEN_IRBUILDER_H #include "llvm/ADT/MapVector.h" #include "llvm/IR/IRBuilder.h" namespace llvm { class Loop; class SCEV; class ScalarEvolution; } // namespace llvm namespace polly { class Scop; struct BandAttr; /// Helper class to annotate newly generated SCoPs with metadata. /// /// The annotations are twofold: /// 1) Loops are stored in a stack-like structure in the order they are /// constructed and the LoopID metadata node is added to the backedge. /// Contained memory instructions and loop headers are annotated according /// to all parallel surrounding loops. /// 2) The new SCoP is assumed alias free (either due to the result of /// AliasAnalysis queries or runtime alias checks). We annotate therefore /// all memory instruction with alias scopes to indicate that fact to /// later optimizations. /// These alias scopes live in a new alias domain only used in this SCoP. /// Each base pointer has its own alias scope and is annotated to not /// alias with any access to different base pointers. class ScopAnnotator { … }; /// Add Polly specifics when running IRBuilder. /// /// This is used to add additional items such as e.g. the llvm.loop.parallel /// metadata. class IRInserter final : public llvm::IRBuilderDefaultInserter { … }; // TODO: We should not name instructions in NDEBUG builds. // // We currently always name instructions, as the polly test suite currently // matches for certain names. PollyIRBuilder; } // namespace polly #endif