14977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman//===-- Transform/Utils/FunctionUtils.h - Function Utils --------*- C++ -*-===// 234695381d626485a560594f162701088079589dfMisha Brukman// 34977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman// The LLVM Compiler Infrastructure 44977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman// 57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source 67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// License. See LICENSE.TXT for details. 734695381d626485a560594f162701088079589dfMisha Brukman// 84977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman//===----------------------------------------------------------------------===// 94977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman// 107ace0409aa5e193a55c5679b07ca439b70c5adc3Misha Brukman// This family of transformations manipulate LLVM functions. 114977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman// 124977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman//===----------------------------------------------------------------------===// 134977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman 144977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman#ifndef LLVM_TRANSFORMS_UTILS_FUNCTION_H 154977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman#define LLVM_TRANSFORMS_UTILS_FUNCTION_H 164977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman 179e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling#include "llvm/ADT/ArrayRef.h" 18e454c0d607937d13dbd72e4b28b8fc76cc18c281Chris Lattner#include <vector> 19e454c0d607937d13dbd72e4b28b8fc76cc18c281Chris Lattner 204977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukmannamespace llvm { 21e454c0d607937d13dbd72e4b28b8fc76cc18c281Chris Lattner class BasicBlock; 221baa88e3de8947b02d9ef4caa73e5860f048ec6eDan Gohman class DominatorTree; 23268316ee1439a6a531f666944705b8cc3d1e761bChris Lattner class Function; 2403ee68a145ab5394c070298049d93f305be93ec3Dan Gohman class Loop; 2534695381d626485a560594f162701088079589dfMisha Brukman 269e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling /// ExtractCodeRegion - Rip out a sequence of basic blocks into a new 279e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling /// function. 28268316ee1439a6a531f666944705b8cc3d1e761bChris Lattner /// 294b90e3a276c0bb1bd4d90289e27aa3c4f890b5afDevang Patel Function* ExtractCodeRegion(DominatorTree& DT, 309e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling ArrayRef<BasicBlock*> code, 31de41aab1f7b06619d0b50c409ec9e7def6018282Misha Brukman bool AggregateArgs = false); 32268316ee1439a6a531f666944705b8cc3d1e761bChris Lattner 339e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling /// ExtractLoop - Rip out a natural loop into a new function. 34268316ee1439a6a531f666944705b8cc3d1e761bChris Lattner /// 354b90e3a276c0bb1bd4d90289e27aa3c4f890b5afDevang Patel Function* ExtractLoop(DominatorTree& DT, Loop *L, 36de41aab1f7b06619d0b50c409ec9e7def6018282Misha Brukman bool AggregateArgs = false); 37268316ee1439a6a531f666944705b8cc3d1e761bChris Lattner 389e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling /// ExtractBasicBlock - Rip out a basic block (and the associated landing pad) 399e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling /// into a new function. 40268316ee1439a6a531f666944705b8cc3d1e761bChris Lattner /// 419e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling Function* ExtractBasicBlock(ArrayRef<BasicBlock*> BBs, 429e7013a506d4ee7a7ec6ae650e2c34714393c78aBill Wendling bool AggregateArgs = false); 434977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman} 444977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman 454977a163b4f6f6e77e7f8f9635d2dbbbbb6bdde0Misha Brukman#endif 46