blob: 680b39eaf483a106801511a41fa61ef8615b867a [file] [log] [blame]
Chris Lattner5a945e32004-01-12 21:13:12 +00001//===-- ConstantFolding.h - Internal Constant Folding Interface -*- C++ -*-===//
John Criswellb6445982003-10-20 20:19:47 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
Chris Lattner2f7c9632001-06-06 20:29:01 +00009//
Chris Lattner5a945e32004-01-12 21:13:12 +000010// 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 I don't know how to perform the
15// specified operation on the specified constant types.
Chris Lattner2f7c9632001-06-06 20:29:01 +000016//
17//===----------------------------------------------------------------------===//
Chris Lattner2f7c9632001-06-06 20:29:01 +000018
Chris Lattner5a945e32004-01-12 21:13:12 +000019#ifndef CONSTANTFOLDING_H
20#define CONSTANTFOLDING_H
Chris Lattner2f7c9632001-06-06 20:29:01 +000021
Chris Lattner6ff6cea2004-01-12 21:02:29 +000022#include <vector>
Brian Gaeke960707c2003-11-11 22:41:34 +000023
24namespace llvm {
Chris Lattner6ff6cea2004-01-12 21:02:29 +000025 class Constant;
26 class Type;
Chris Lattner5a945e32004-01-12 21:13:12 +000027
28 // Constant fold various types of instruction...
29 Constant *ConstantFoldCastInstruction(const Constant *V, const Type *DestTy);
Chris Lattner16375e32004-03-12 05:53:41 +000030 Constant *ConstantFoldSelectInstruction(const Constant *Cond,
31 const Constant *V1,
32 const Constant *V2);
Chris Lattner5a945e32004-01-12 21:13:12 +000033 Constant *ConstantFoldBinaryInstruction(unsigned Opcode, const Constant *V1,
34 const Constant *V2);
35 Constant *ConstantFoldGetElementPtr(const Constant *C,
36 const std::vector<Constant*> &IdxList);
Brian Gaeke960707c2003-11-11 22:41:34 +000037} // End llvm namespace
38
Chris Lattner2f7c9632001-06-06 20:29:01 +000039#endif