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