llvm/lib/VMCore/ConstantFold.h
Owen Anderson 0a5372ed3e Begin the painful process of tearing apart the rat'ss nest that is Constants.cpp and ConstantFold.cpp.
This involves temporarily hard wiring some parts to use the global context.  This isn't ideal, but it's
the only way I could figure out to make this process vaguely incremental.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75445 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-13 04:09:18 +00:00

71 lines
3.4 KiB
C++

//===-- 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
namespace llvm {
class Value;
class Constant;
class Type;
class LLVMContext;
// Constant fold various types of instruction...
Constant *ConstantFoldCastInstruction(
LLVMContext &Context,
unsigned opcode, ///< The opcode of the cast
const Constant *V, ///< The source constant
const Type *DestTy ///< The destination type
);
Constant *ConstantFoldSelectInstruction(LLVMContext &Context,
const Constant *Cond,
const Constant *V1,
const Constant *V2);
Constant *ConstantFoldExtractElementInstruction(LLVMContext &Context,
const Constant *Val,
const Constant *Idx);
Constant *ConstantFoldInsertElementInstruction(LLVMContext &Context,
const Constant *Val,
const Constant *Elt,
const Constant *Idx);
Constant *ConstantFoldShuffleVectorInstruction(LLVMContext &Context,
const Constant *V1,
const Constant *V2,
const Constant *Mask);
Constant *ConstantFoldExtractValueInstruction(LLVMContext &Context,
const Constant *Agg,
const unsigned *Idxs,
unsigned NumIdx);
Constant *ConstantFoldInsertValueInstruction(LLVMContext &Context,
const Constant *Agg,
const Constant *Val,
const unsigned* Idxs,
unsigned NumIdx);
Constant *ConstantFoldBinaryInstruction(LLVMContext &Context,
unsigned Opcode, const Constant *V1,
const Constant *V2);
Constant *ConstantFoldCompareInstruction(LLVMContext &Context,
unsigned short predicate,
const Constant *C1,
const Constant *C2);
Constant *ConstantFoldGetElementPtr(LLVMContext &Context, const Constant *C,
Constant* const *Idxs, unsigned NumIdx);
} // End llvm namespace
#endif