12ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel//===-- ModuleUtils.h - Functions to manipulate Modules ---------*- C++ -*-===// 22ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// 32ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// The LLVM Compiler Infrastructure 42ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// 52ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// This file is distributed under the University of Illinois Open Source 62ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// License. See LICENSE.TXT for details. 72ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// 82ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel//===----------------------------------------------------------------------===// 92ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// 102ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// This family of functions perform manipulations on Modules. 112ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel// 122ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel//===----------------------------------------------------------------------===// 132ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel 14674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#ifndef LLVM_TRANSFORMS_UTILS_MODULEUTILS_H 15674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#define LLVM_TRANSFORMS_UTILS_MODULEUTILS_H 162ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel 172ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patelnamespace llvm { 182ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel 192ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patelclass Module; 202ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patelclass Function; 214ef7eafa3f823443d1b8921f6020d946612281dbRafael Espindolaclass GlobalValue; 224ef7eafa3f823443d1b8921f6020d946612281dbRafael Espindolaclass GlobalVariable; 234ef7eafa3f823443d1b8921f6020d946612281dbRafael Espindolatemplate <class PtrType, unsigned SmallSize> class SmallPtrSet; 242ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel 252ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel/// Append F to the list of global ctors of module M with the given Priority. 262ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel/// This wraps the function in the appropriate structure and stores it along 272ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel/// side other global constructors. For details see 282ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel/// http://llvm.org/docs/LangRef.html#intg_global_ctors 292ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patelvoid appendToGlobalCtors(Module &M, Function *F, int Priority); 302ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel 317bcfc9950bac0f411f9671e8d6ce483bd219727eKostya Serebryany/// Same as appendToGlobalCtors(), but for global dtors. 327bcfc9950bac0f411f9671e8d6ce483bd219727eKostya Serebryanyvoid appendToGlobalDtors(Module &M, Function *F, int Priority); 337bcfc9950bac0f411f9671e8d6ce483bd219727eKostya Serebryany 344ef7eafa3f823443d1b8921f6020d946612281dbRafael Espindola/// \brief Given "llvm.used" or "llvm.compiler.used" as a global name, collect 354ef7eafa3f823443d1b8921f6020d946612281dbRafael Espindola/// the initializer elements of that global in Set and return the global itself. 364ef7eafa3f823443d1b8921f6020d946612281dbRafael EspindolaGlobalVariable *collectUsedGlobalVariables(Module &M, 374ef7eafa3f823443d1b8921f6020d946612281dbRafael Espindola SmallPtrSet<GlobalValue *, 8> &Set, 384ef7eafa3f823443d1b8921f6020d946612281dbRafael Espindola bool CompilerUsed); 392ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel} // End llvm namespace 402ad3f93b5f1d6e22f682efd6fd10f7f3ed9fa992Devang Patel 41674be02d525d4e24bc6943ed9274958c580bcfbcJakub Staszak#endif // LLVM_TRANSFORMS_UTILS_MODULEUTILS_H 42