|  | //===-- ConstantFolding.h - Internal Constant Folding Interface -*- C++ -*-===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file defines the (internal) constant folding interfaces for LLVM.  These | 
|  | // interfaces are used by the ConstantExpr::get* methods to automatically fold | 
|  | // constants when possible. | 
|  | // | 
|  | // These operators may return a null object if they don't know how to perform | 
|  | // the specified operation on the specified constant types. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef CONSTANTFOLDING_H | 
|  | #define CONSTANTFOLDING_H | 
|  |  | 
|  | #include "llvm/ADT/ArrayRef.h" | 
|  |  | 
|  | namespace llvm { | 
|  | class Value; | 
|  | class Constant; | 
|  | class Type; | 
|  |  | 
|  | // Constant fold various types of instruction... | 
|  | Constant *ConstantFoldCastInstruction( | 
|  | unsigned opcode,     ///< The opcode of the cast | 
|  | Constant *V,         ///< The source constant | 
|  | Type *DestTy   ///< The destination type | 
|  | ); | 
|  | Constant *ConstantFoldSelectInstruction(Constant *Cond, | 
|  | Constant *V1, Constant *V2); | 
|  | Constant *ConstantFoldExtractElementInstruction(Constant *Val, Constant *Idx); | 
|  | Constant *ConstantFoldInsertElementInstruction(Constant *Val, Constant *Elt, | 
|  | Constant *Idx); | 
|  | Constant *ConstantFoldShuffleVectorInstruction(Constant *V1, Constant *V2, | 
|  | Constant *Mask); | 
|  | Constant *ConstantFoldExtractValueInstruction(Constant *Agg, | 
|  | ArrayRef<unsigned> Idxs); | 
|  | Constant *ConstantFoldInsertValueInstruction(Constant *Agg, Constant *Val, | 
|  | ArrayRef<unsigned> Idxs); | 
|  | Constant *ConstantFoldBinaryInstruction(unsigned Opcode, Constant *V1, | 
|  | Constant *V2); | 
|  | Constant *ConstantFoldCompareInstruction(unsigned short predicate, | 
|  | Constant *C1, Constant *C2); | 
|  | Constant *ConstantFoldGetElementPtr(Constant *C, bool inBounds, | 
|  | ArrayRef<Constant *> Idxs); | 
|  | Constant *ConstantFoldGetElementPtr(Constant *C, bool inBounds, | 
|  | ArrayRef<Value *> Idxs); | 
|  | } // End llvm namespace | 
|  |  | 
|  | #endif |