1311116Sdim//===- GlobalSplit.h - global variable splitter -----------------*- C++ -*-===// 2311116Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6311116Sdim// 7311116Sdim//===----------------------------------------------------------------------===// 8311116Sdim// 9311116Sdim// This pass uses inrange annotations on GEP indices to split globals where 10311116Sdim// beneficial. Clang currently attaches these annotations to references to 11311116Sdim// virtual table globals under the Itanium ABI for the benefit of the 12311116Sdim// whole-program virtual call optimization and control flow integrity passes. 13311116Sdim// 14311116Sdim//===----------------------------------------------------------------------===// 15311116Sdim 16311116Sdim#ifndef LLVM_TRANSFORMS_IPO_GLOBALSPLIT_H 17311116Sdim#define LLVM_TRANSFORMS_IPO_GLOBALSPLIT_H 18311116Sdim 19311116Sdim#include "llvm/IR/PassManager.h" 20311116Sdim 21311116Sdimnamespace llvm { 22327952Sdim 23327952Sdimclass Module; 24327952Sdim 25311116Sdim/// Pass to perform split of global variables. 26311116Sdimclass GlobalSplitPass : public PassInfoMixin<GlobalSplitPass> { 27311116Sdimpublic: 28311116Sdim PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 29311116Sdim}; 30327952Sdim 31327952Sdim} // end namespace llvm 32327952Sdim 33311116Sdim#endif // LLVM_TRANSFORMS_IPO_GLOBALSPLIT_H 34