blob: 2824979cf4431b30e0763dc91a87695c86a57ee6 [file] [log] [blame]
Chris Lattnercbfd4062004-01-12 21:13:12 +00001//===-- ConstantFolding.h - Internal Constant Folding Interface -*- C++ -*-===//
Misha Brukmanfd939082005-04-21 23:48:37 +00002//
John Criswell6fbcc262003-10-20 20:19:47 +00003// 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.
Misha Brukmanfd939082005-04-21 23:48:37 +00007//
John Criswell6fbcc262003-10-20 20:19:47 +00008//===----------------------------------------------------------------------===//
Chris Lattner00950542001-06-06 20:29:01 +00009//
Chris Lattnercbfd4062004-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 Lattner00950542001-06-06 20:29:01 +000016//
17//===----------------------------------------------------------------------===//
Chris Lattner00950542001-06-06 20:29:01 +000018
Chris Lattnercbfd4062004-01-12 21:13:12 +000019#ifndef CONSTANTFOLDING_H
20#define CONSTANTFOLDING_H
Chris Lattner00950542001-06-06 20:29:01 +000021
Chris Lattner8b0f0cb2004-01-12 21:02:29 +000022#include <vector>
Brian Gaeked0fde302003-11-11 22:41:34 +000023
24namespace llvm {
Chris Lattner7fa6e662004-10-11 22:52:25 +000025 class Value;
Chris Lattner8b0f0cb2004-01-12 21:02:29 +000026 class Constant;
Chris Lattner1fca5ff2004-10-27 16:14:51 +000027 class Type;
Misha Brukmanfd939082005-04-21 23:48:37 +000028
Chris Lattnercbfd4062004-01-12 21:13:12 +000029 // Constant fold various types of instruction...
Reid Spencer3da59db2006-11-27 01:05:10 +000030 Constant *ConstantFoldCastInstruction(
31 unsigned opcode, ///< The opcode of the cast
32 const Constant *V, ///< The source constant
33 const Type *DestTy ///< The destination type
34 );
Chris Lattner647f82b2004-03-12 05:53:41 +000035 Constant *ConstantFoldSelectInstruction(const Constant *Cond,
36 const Constant *V1,
37 const Constant *V2);
Robert Bocchinobb90a7a2006-01-10 20:03:46 +000038 Constant *ConstantFoldExtractElementInstruction(const Constant *Val,
39 const Constant *Idx);
Robert Bocchinoc152f9c2006-01-17 20:07:22 +000040 Constant *ConstantFoldInsertElementInstruction(const Constant *Val,
41 const Constant *Elt,
42 const Constant *Idx);
Chris Lattner00f10232006-04-08 01:18:18 +000043 Constant *ConstantFoldShuffleVectorInstruction(const Constant *V1,
44 const Constant *V2,
45 const Constant *Mask);
Chris Lattnercbfd4062004-01-12 21:13:12 +000046 Constant *ConstantFoldBinaryInstruction(unsigned Opcode, const Constant *V1,
47 const Constant *V2);
48 Constant *ConstantFoldGetElementPtr(const Constant *C,
Chris Lattner7fa6e662004-10-11 22:52:25 +000049 const std::vector<Value*> &IdxList);
Brian Gaeked0fde302003-11-11 22:41:34 +000050} // End llvm namespace
51
Chris Lattner00950542001-06-06 20:29:01 +000052#endif