#ifndef CONSTANTFOLDING_H
#define CONSTANTFOLDING_H
namespace llvm {
class Value;
class Constant;
class Type;
Constant *ConstantFoldCastInstruction(
unsigned opcode, const Constant *V, const Type *DestTy );
Constant *ConstantFoldSelectInstruction(const Constant *Cond,
const Constant *V1,
const Constant *V2);
Constant *ConstantFoldExtractElementInstruction(const Constant *Val,
const Constant *Idx);
Constant *ConstantFoldInsertElementInstruction(const Constant *Val,
const Constant *Elt,
const Constant *Idx);
Constant *ConstantFoldShuffleVectorInstruction(const Constant *V1,
const Constant *V2,
const Constant *Mask);
Constant *ConstantFoldExtractValueInstruction(const Constant *Agg,
const unsigned *Idxs,
unsigned NumIdx);
Constant *ConstantFoldInsertValueInstruction(const Constant *Agg,
const Constant *Val,
const unsigned* Idxs,
unsigned NumIdx);
Constant *ConstantFoldBinaryInstruction(unsigned Opcode, const Constant *V1,
const Constant *V2);
Constant *ConstantFoldCompareInstruction(unsigned short predicate,
const Constant *C1,
const Constant *C2);
Constant *ConstantFoldGetElementPtr(const Constant *C,
Constant* const *Idxs, unsigned NumIdx);
}
#endif