1 //===-- ConstantFolding.h - Internal Constant Folding Interface -*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines the (internal) constant folding interfaces for LLVM. These 11 // interfaces are used by the ConstantExpr::get* methods to automatically fold 12 // constants when possible. 13 // 14 // These operators may return a null object if they don't know how to perform 15 // the specified operation on the specified constant types. 16 // 17 //===----------------------------------------------------------------------===// 18 19 #ifndef LLVM_LIB_IR_CONSTANTFOLD_H 20 #define LLVM_LIB_IR_CONSTANTFOLD_H 21 22 namespace llvm { 23 template <typename T> class ArrayRef; 24 class Value; 25 class Constant; 26 class Type; 27 28 // Constant fold various types of instruction... 29 Constant *ConstantFoldCastInstruction( 30 unsigned opcode, ///< The opcode of the cast 31 Constant *V, ///< The source constant 32 Type *DestTy ///< The destination type 33 ); 34 Constant *ConstantFoldSelectInstruction(Constant *Cond, 35 Constant *V1, Constant *V2); 36 Constant *ConstantFoldExtractElementInstruction(Constant *Val, Constant *Idx); 37 Constant *ConstantFoldInsertElementInstruction(Constant *Val, Constant *Elt, 38 Constant *Idx); 39 Constant *ConstantFoldShuffleVectorInstruction(Constant *V1, Constant *V2, 40 Constant *Mask); 41 Constant *ConstantFoldExtractValueInstruction(Constant *Agg, 42 ArrayRef<unsigned> Idxs); 43 Constant *ConstantFoldInsertValueInstruction(Constant *Agg, Constant *Val, 44 ArrayRef<unsigned> Idxs); 45 Constant *ConstantFoldBinaryInstruction(unsigned Opcode, Constant *V1, 46 Constant *V2); 47 Constant *ConstantFoldCompareInstruction(unsigned short predicate, 48 Constant *C1, Constant *C2); 49 Constant *ConstantFoldGetElementPtr(Type *Ty, Constant *C, bool inBounds, 50 ArrayRef<Constant *> Idxs); 51 Constant *ConstantFoldGetElementPtr(Type *Ty, Constant *C, bool inBounds, 52 ArrayRef<Value *> Idxs); 53 } // End llvm namespace 54 55 #endif 56