ConstantFolder.h revision 413c3bd9fd820a0969cd0e84124f3a3fadc5cc61
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" 21131b0d2fcfa72de250f0add965f6f12aea943bf3Douglas Gregor#include "llvm/InstrTypes.h" 221e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 231e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sandsnamespace llvm { 247f4151bc69e02a22862752742ad1cb637d90ded0Dan Gohman 2512ddd409535b52a7fa5157ded9a4cedd161fedb6Benjamin Kramerclass LLVMContext; 267f4151bc69e02a22862752742ad1cb637d90ded0Dan Gohman 271e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands/// ConstantFolder - Create constants with minimum, target independent, folding. 281e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sandsclass ConstantFolder { 291e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sandspublic: 307f4151bc69e02a22862752742ad1cb637d90ded0Dan Gohman explicit ConstantFolder(LLVMContext &) {} 311e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 321e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 331e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Binary Operators 341e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 351e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 361e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateAdd(Constant *LHS, Constant *RHS) const { 37baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getAdd(LHS, RHS); 381e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 39d6474fa1f19224e62e5095a6373bed0c69bdb215Dan Gohman Constant *CreateNSWAdd(Constant *LHS, Constant *RHS) const { 406e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman return ConstantExpr::getNSWAdd(LHS, RHS); 41d6474fa1f19224e62e5095a6373bed0c69bdb215Dan Gohman } 428991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands Constant *CreateNUWAdd(Constant *LHS, Constant *RHS) const { 438991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands return ConstantExpr::getNUWAdd(LHS, RHS); 448991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands } 45ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman Constant *CreateFAdd(Constant *LHS, Constant *RHS) const { 46baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFAdd(LHS, RHS); 47ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman } 481e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateSub(Constant *LHS, Constant *RHS) const { 49baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getSub(LHS, RHS); 501e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 513548ea8e905269e819fdd4c7fab42142b745c6c5Duncan Sands Constant *CreateNSWSub(Constant *LHS, Constant *RHS) const { 523548ea8e905269e819fdd4c7fab42142b745c6c5Duncan Sands return ConstantExpr::getNSWSub(LHS, RHS); 533548ea8e905269e819fdd4c7fab42142b745c6c5Duncan Sands } 548991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands Constant *CreateNUWSub(Constant *LHS, Constant *RHS) const { 558991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands return ConstantExpr::getNUWSub(LHS, RHS); 568991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands } 57ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman Constant *CreateFSub(Constant *LHS, Constant *RHS) const { 58baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFSub(LHS, RHS); 59ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman } 601e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateMul(Constant *LHS, Constant *RHS) const { 61baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getMul(LHS, RHS); 621e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 63411984810e4a66591123e1b16873e5f19ae18817Dan Gohman Constant *CreateNSWMul(Constant *LHS, Constant *RHS) const { 64411984810e4a66591123e1b16873e5f19ae18817Dan Gohman return ConstantExpr::getNSWMul(LHS, RHS); 65411984810e4a66591123e1b16873e5f19ae18817Dan Gohman } 668991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands Constant *CreateNUWMul(Constant *LHS, Constant *RHS) const { 678991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands return ConstantExpr::getNUWMul(LHS, RHS); 688991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands } 69ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman Constant *CreateFMul(Constant *LHS, Constant *RHS) const { 70baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFMul(LHS, RHS); 71ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman } 72413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner Constant *CreateUDiv(Constant *LHS, Constant *RHS, 73413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner bool isExact = false) const { 74413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner return ConstantExpr::getUDiv(LHS, RHS, isExact); 751e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 76413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner Constant *CreateSDiv(Constant *LHS, Constant *RHS, 77413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner bool isExact = false) const { 78413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner return ConstantExpr::getSDiv(LHS, RHS, isExact); 7959c4f5c2fc82af14b0f4f332709aac62921c6177Dan Gohman } 801e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateFDiv(Constant *LHS, Constant *RHS) const { 81baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFDiv(LHS, RHS); 821e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 831e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateURem(Constant *LHS, Constant *RHS) const { 84baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getURem(LHS, RHS); 851e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 861e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateSRem(Constant *LHS, Constant *RHS) const { 87baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getSRem(LHS, RHS); 881e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 891e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateFRem(Constant *LHS, Constant *RHS) const { 90baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFRem(LHS, RHS); 911e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 921e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateShl(Constant *LHS, Constant *RHS) const { 93baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getShl(LHS, RHS); 941e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 95413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner Constant *CreateLShr(Constant *LHS, Constant *RHS, 96413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner bool isExact = false) const { 97413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner return ConstantExpr::getLShr(LHS, RHS, isExact); 981e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 99413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner Constant *CreateAShr(Constant *LHS, Constant *RHS, 100413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner bool isExact = false) const { 101413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner return ConstantExpr::getAShr(LHS, RHS, isExact); 1021e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1031e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateAnd(Constant *LHS, Constant *RHS) const { 104baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getAnd(LHS, RHS); 1051e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1061e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateOr(Constant *LHS, Constant *RHS) const { 107baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getOr(LHS, RHS); 1081e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1091e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateXor(Constant *LHS, Constant *RHS) const { 110baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getXor(LHS, RHS); 1111e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1121e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1131e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateBinOp(Instruction::BinaryOps Opc, 1141e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *LHS, Constant *RHS) const { 115baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::get(Opc, LHS, RHS); 1161e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1171e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1181e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1191e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Unary Operators 1201e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1211e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1221e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateNeg(Constant *C) const { 123baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getNeg(C); 1241e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 125bdc46c6af5ffcf3596a72df75880fe8703436060Dan Gohman Constant *CreateNSWNeg(Constant *C) const { 126bdc46c6af5ffcf3596a72df75880fe8703436060Dan Gohman return ConstantExpr::getNSWNeg(C); 127bdc46c6af5ffcf3596a72df75880fe8703436060Dan Gohman } 1288991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands Constant *CreateNUWNeg(Constant *C) const { 1298991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands return ConstantExpr::getNUWNeg(C); 1308991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands } 131ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman Constant *CreateFNeg(Constant *C) const { 132baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFNeg(C); 133ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman } 1341e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateNot(Constant *C) const { 135baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getNot(C); 1361e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1371e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1381e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1391e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Memory Instructions 1401e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1411e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1421e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateGetElementPtr(Constant *C, Constant* const *IdxList, 1431e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands unsigned NumIdx) const { 144baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx); 1451e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1461e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateGetElementPtr(Constant *C, Value* const *IdxList, 1471e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands unsigned NumIdx) const { 148baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getGetElementPtr(C, IdxList, NumIdx); 1491e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1501e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 151e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman Constant *CreateInBoundsGetElementPtr(Constant *C, Constant* const *IdxList, 152e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman unsigned NumIdx) const { 1536e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman return ConstantExpr::getInBoundsGetElementPtr(C, IdxList, NumIdx); 154e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman } 155e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman Constant *CreateInBoundsGetElementPtr(Constant *C, Value* const *IdxList, 156e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman unsigned NumIdx) const { 1576e7ad958683f34bf6c014c88fef723e5a2d741beDan Gohman return ConstantExpr::getInBoundsGetElementPtr(C, IdxList, NumIdx); 158e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman } 159e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman 1601e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1611e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Cast/Conversion Operators 1621e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1631e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1641e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateCast(Instruction::CastOps Op, Constant *C, 1651e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands const Type *DestTy) const { 166baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getCast(Op, C, DestTy); 1671e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 16802904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar Constant *CreatePointerCast(Constant *C, const Type *DestTy) const { 16902904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar return ConstantExpr::getPointerCast(C, DestTy); 17002904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar } 1711e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateIntCast(Constant *C, const Type *DestTy, 1721e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands bool isSigned) const { 173baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getIntegerCast(C, DestTy, isSigned); 1741e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 17502904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar Constant *CreateFPCast(Constant *C, const Type *DestTy) const { 17602904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar return ConstantExpr::getFPCast(C, DestTy); 17702904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar } 1781e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1791e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateBitCast(Constant *C, const Type *DestTy) const { 1801e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands return CreateCast(Instruction::BitCast, C, DestTy); 1811e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1821e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateIntToPtr(Constant *C, const Type *DestTy) const { 1831e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands return CreateCast(Instruction::IntToPtr, C, DestTy); 1841e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1851e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreatePtrToInt(Constant *C, const Type *DestTy) const { 1861e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands return CreateCast(Instruction::PtrToInt, C, DestTy); 1871e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 18802904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar Constant *CreateZExtOrBitCast(Constant *C, const Type *DestTy) const { 18902904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar return ConstantExpr::getZExtOrBitCast(C, DestTy); 19002904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar } 19102904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar Constant *CreateSExtOrBitCast(Constant *C, const Type *DestTy) const { 19202904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar return ConstantExpr::getSExtOrBitCast(C, DestTy); 19302904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar } 19402904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar 1951e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateTruncOrBitCast(Constant *C, const Type *DestTy) const { 196baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getTruncOrBitCast(C, DestTy); 1971e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1981e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1991e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 2001e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Compare Instructions 2011e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 2021e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 203fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands Constant *CreateICmp(CmpInst::Predicate P, Constant *LHS, 204fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands Constant *RHS) const { 205baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getCompare(P, LHS, RHS); 206fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands } 207fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands Constant *CreateFCmp(CmpInst::Predicate P, Constant *LHS, 208fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands Constant *RHS) const { 209baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getCompare(P, LHS, RHS); 210fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands } 2111e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2121e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 2131e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Other Instructions 2141e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 2151e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2161e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateSelect(Constant *C, Constant *True, Constant *False) const { 217baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getSelect(C, True, False); 2181e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2191e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2201e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateExtractElement(Constant *Vec, Constant *Idx) const { 221baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getExtractElement(Vec, Idx); 2221e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2231e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2241e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateInsertElement(Constant *Vec, Constant *NewElt, 2251e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *Idx) const { 226baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getInsertElement(Vec, NewElt, Idx); 2271e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2281e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2291e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateShuffleVector(Constant *V1, Constant *V2, 2301e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *Mask) const { 231baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getShuffleVector(V1, V2, Mask); 2321e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2331e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2341e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateExtractValue(Constant *Agg, const unsigned *IdxList, 2351e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands unsigned NumIdx) const { 236baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getExtractValue(Agg, IdxList, NumIdx); 2371e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2381e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2391e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateInsertValue(Constant *Agg, Constant *Val, 2401e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands const unsigned *IdxList, unsigned NumIdx) const { 241baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getInsertValue(Agg, Val, IdxList, NumIdx); 2421e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2431e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands}; 2441e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2451e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands} 2461e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2471e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands#endif 248