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