ConstantFolder.h revision 02904d5d848a12be0d5857fc7a25261fb162e0ed
11e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//===-- llvm/Support/ConstantFolder.h - Constant folding helper -*- C++ -*-===//
21e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//
31e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//                     The LLVM Compiler Infrastructure
41e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//
51e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands// This file is distributed under the University of Illinois Open Source
61e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands// License. See LICENSE.TXT for details.
71e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//
81e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//===----------------------------------------------------------------------===//
91e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//
1020df07ba22c0b7e907c1a7912b5d3d1d2fb948dbDuncan Sands// This file defines the ConstantFolder class, a helper for IRBuilder.
1120df07ba22c0b7e907c1a7912b5d3d1d2fb948dbDuncan Sands// It provides IRBuilder with a set of methods for creating constants
1220df07ba22c0b7e907c1a7912b5d3d1d2fb948dbDuncan Sands// with minimal folding.  For general constant creation and folding,
1320df07ba22c0b7e907c1a7912b5d3d1d2fb948dbDuncan Sands// use ConstantExpr and the routines in llvm/Analysis/ConstantFolding.h.
141e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//
151e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands//===----------------------------------------------------------------------===//
161e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
171e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands#ifndef LLVM_SUPPORT_CONSTANTFOLDER_H
181e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands#define LLVM_SUPPORT_CONSTANTFOLDER_H
191e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
201e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands#include "llvm/Constants.h"
211e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
221e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sandsnamespace llvm {
237f4151bc69e02a22862752742ad1cb637d90ded0Dan Gohman
2412ddd409535b52a7fa5157ded9a4cedd161fedb6Benjamin Kramerclass LLVMContext;
257f4151bc69e02a22862752742ad1cb637d90ded0Dan Gohman
261e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands/// ConstantFolder - Create constants with minimum, target independent, folding.
271e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sandsclass ConstantFolder {
281e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sandspublic:
297f4151bc69e02a22862752742ad1cb637d90ded0Dan Gohman  explicit ConstantFolder(LLVMContext &) {}
301e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
311e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
321e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  // Binary Operators
331e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
341e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
351e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateAdd(Constant *LHS, Constant *RHS) const {
36baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getAdd(LHS, RHS);
371e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
38d6474fa1f19224e62e5095a6373bed0c69bdb215Dan Gohman  Constant *CreateNSWAdd(Constant *LHS, Constant *RHS) const {
39d6474fa1f19224e62e5095a6373bed0c69bdb215Dan Gohman    return ConstantExpr::getNSWAdd(LHS, RHS);
40d6474fa1f19224e62e5095a6373bed0c69bdb215Dan Gohman  }
41ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman  Constant *CreateFAdd(Constant *LHS, Constant *RHS) const {
42baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getFAdd(LHS, RHS);
43ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman  }
441e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateSub(Constant *LHS, Constant *RHS) const {
45baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getSub(LHS, RHS);
461e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
47ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman  Constant *CreateFSub(Constant *LHS, Constant *RHS) const {
48baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getFSub(LHS, RHS);
49ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman  }
501e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateMul(Constant *LHS, Constant *RHS) const {
51baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getMul(LHS, RHS);
521e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
53ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman  Constant *CreateFMul(Constant *LHS, Constant *RHS) const {
54baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getFMul(LHS, RHS);
55ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman  }
561e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateUDiv(Constant *LHS, Constant *RHS) const {
57baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getUDiv(LHS, RHS);
581e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
591e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateSDiv(Constant *LHS, Constant *RHS) const {
60baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getSDiv(LHS, RHS);
611e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
6259c4f5c2fc82af14b0f4f332709aac62921c6177Dan Gohman  Constant *CreateExactSDiv(Constant *LHS, Constant *RHS) const {
6359c4f5c2fc82af14b0f4f332709aac62921c6177Dan Gohman    return ConstantExpr::getExactSDiv(LHS, RHS);
6459c4f5c2fc82af14b0f4f332709aac62921c6177Dan Gohman  }
651e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateFDiv(Constant *LHS, Constant *RHS) const {
66baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getFDiv(LHS, RHS);
671e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
681e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateURem(Constant *LHS, Constant *RHS) const {
69baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getURem(LHS, RHS);
701e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
711e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateSRem(Constant *LHS, Constant *RHS) const {
72baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getSRem(LHS, RHS);
731e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
741e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateFRem(Constant *LHS, Constant *RHS) const {
75baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getFRem(LHS, RHS);
761e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
771e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateShl(Constant *LHS, Constant *RHS) const {
78baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getShl(LHS, RHS);
791e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
801e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateLShr(Constant *LHS, Constant *RHS) const {
81baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getLShr(LHS, RHS);
821e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
831e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateAShr(Constant *LHS, Constant *RHS) const {
84baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getAShr(LHS, RHS);
851e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
861e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateAnd(Constant *LHS, Constant *RHS) const {
87baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getAnd(LHS, RHS);
881e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
891e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateOr(Constant *LHS, Constant *RHS) const {
90baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getOr(LHS, RHS);
911e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
921e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateXor(Constant *LHS, Constant *RHS) const {
93baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getXor(LHS, RHS);
941e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
951e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
961e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateBinOp(Instruction::BinaryOps Opc,
971e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                        Constant *LHS, Constant *RHS) const {
98baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::get(Opc, LHS, RHS);
991e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
1001e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1011e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1021e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  // Unary Operators
1031e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1041e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1051e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateNeg(Constant *C) const {
106baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getNeg(C);
1071e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
108ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman  Constant *CreateFNeg(Constant *C) const {
109baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getFNeg(C);
110ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman  }
1111e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateNot(Constant *C) const {
112baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getNot(C);
1131e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
1141e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1151e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1161e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  // Memory Instructions
1171e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1181e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1191e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateGetElementPtr(Constant *C, Constant* const *IdxList,
1201e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                                unsigned NumIdx) const {
121baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx);
1221e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
1231e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateGetElementPtr(Constant *C, Value* const *IdxList,
1241e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                                unsigned NumIdx) const {
125baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx);
1261e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
1271e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
128e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman  Constant *CreateInBoundsGetElementPtr(Constant *C, Constant* const *IdxList,
129e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman                                        unsigned NumIdx) const {
130e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman    return ConstantExpr::getInBoundsGetElementPtr(C, IdxList, NumIdx);
131e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman  }
132e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman  Constant *CreateInBoundsGetElementPtr(Constant *C, Value* const *IdxList,
133e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman                                        unsigned NumIdx) const {
134e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman    return ConstantExpr::getInBoundsGetElementPtr(C, IdxList, NumIdx);
135e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman  }
136e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman
1371e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1381e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  // Cast/Conversion Operators
1391e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1401e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1411e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateCast(Instruction::CastOps Op, Constant *C,
1421e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                       const Type *DestTy) const {
143baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getCast(Op, C, DestTy);
1441e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
14502904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar  Constant *CreatePointerCast(Constant *C, const Type *DestTy) const {
14602904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar    return ConstantExpr::getPointerCast(C, DestTy);
14702904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar  }
1481e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateIntCast(Constant *C, const Type *DestTy,
1491e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                          bool isSigned) const {
150baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getIntegerCast(C, DestTy, isSigned);
1511e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
15202904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar  Constant *CreateFPCast(Constant *C, const Type *DestTy) const {
15302904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar    return ConstantExpr::getFPCast(C, DestTy);
15402904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar  }
1551e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1561e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateBitCast(Constant *C, const Type *DestTy) const {
1571e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands    return CreateCast(Instruction::BitCast, C, DestTy);
1581e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
1591e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateIntToPtr(Constant *C, const Type *DestTy) const {
1601e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands    return CreateCast(Instruction::IntToPtr, C, DestTy);
1611e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
1621e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreatePtrToInt(Constant *C, const Type *DestTy) const {
1631e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands    return CreateCast(Instruction::PtrToInt, C, DestTy);
1641e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
16502904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar  Constant *CreateZExtOrBitCast(Constant *C, const Type *DestTy) const {
16602904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar    return ConstantExpr::getZExtOrBitCast(C, DestTy);
16702904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar  }
16802904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar  Constant *CreateSExtOrBitCast(Constant *C, const Type *DestTy) const {
16902904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar    return ConstantExpr::getSExtOrBitCast(C, DestTy);
17002904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar  }
17102904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar
1721e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateTruncOrBitCast(Constant *C, const Type *DestTy) const {
173baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getTruncOrBitCast(C, DestTy);
1741e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
1751e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1761e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1771e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  // Compare Instructions
1781e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1791e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
180fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands  Constant *CreateICmp(CmpInst::Predicate P, Constant *LHS,
181fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands                       Constant *RHS) const {
182baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getCompare(P, LHS, RHS);
183fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands  }
184fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands  Constant *CreateFCmp(CmpInst::Predicate P, Constant *LHS,
185fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands                       Constant *RHS) const {
186baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getCompare(P, LHS, RHS);
187fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands  }
1881e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1891e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1901e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  // Other Instructions
1911e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  //===--------------------------------------------------------------------===//
1921e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1931e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateSelect(Constant *C, Constant *True, Constant *False) const {
194baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getSelect(C, True, False);
1951e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
1961e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
1971e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateExtractElement(Constant *Vec, Constant *Idx) const {
198baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getExtractElement(Vec, Idx);
1991e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
2001e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
2011e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateInsertElement(Constant *Vec, Constant *NewElt,
2021e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                                Constant *Idx) const {
203baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getInsertElement(Vec, NewElt, Idx);
2041e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
2051e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
2061e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateShuffleVector(Constant *V1, Constant *V2,
2071e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                                Constant *Mask) const {
208baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getShuffleVector(V1, V2, Mask);
2091e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
2101e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
2111e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateExtractValue(Constant *Agg, const unsigned *IdxList,
2121e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                               unsigned NumIdx) const {
213baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getExtractValue(Agg, IdxList, NumIdx);
2141e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
2151e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
2161e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  Constant *CreateInsertValue(Constant *Agg, Constant *Val,
2171e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands                              const unsigned *IdxList, unsigned NumIdx) const {
218baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson    return ConstantExpr::getInsertValue(Agg, Val, IdxList, NumIdx);
2191e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands  }
2201e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands};
2211e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
2221e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands}
2231e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands
2241e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands#endif
225