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 251e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands/// ConstantFolder - Create constants with minimum, target independent, folding. 261e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sandsclass ConstantFolder { 271e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sandspublic: 28c12d4c93f94e271d32e60fae1d521c4fca39ae1eFrits van Bommel explicit ConstantFolder() {} 291e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 301e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 311e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Binary Operators 321e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 331e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 3481baf14fdfa29c22a08d609144c285169e23a247Chris Lattner Constant *CreateAdd(Constant *LHS, Constant *RHS, 3581baf14fdfa29c22a08d609144c285169e23a247Chris Lattner bool HasNUW = false, bool HasNSW = false) const { 3681baf14fdfa29c22a08d609144c285169e23a247Chris Lattner return ConstantExpr::getAdd(LHS, RHS, HasNUW, HasNSW); 378991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands } 38ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman Constant *CreateFAdd(Constant *LHS, Constant *RHS) const { 39baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFAdd(LHS, RHS); 40ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman } 4181baf14fdfa29c22a08d609144c285169e23a247Chris Lattner Constant *CreateSub(Constant *LHS, Constant *RHS, 4281baf14fdfa29c22a08d609144c285169e23a247Chris Lattner bool HasNUW = false, bool HasNSW = false) const { 4381baf14fdfa29c22a08d609144c285169e23a247Chris Lattner return ConstantExpr::getSub(LHS, RHS, HasNUW, HasNSW); 448991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands } 45ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman Constant *CreateFSub(Constant *LHS, Constant *RHS) const { 46baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFSub(LHS, RHS); 47ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman } 4881baf14fdfa29c22a08d609144c285169e23a247Chris Lattner Constant *CreateMul(Constant *LHS, Constant *RHS, 4981baf14fdfa29c22a08d609144c285169e23a247Chris Lattner bool HasNUW = false, bool HasNSW = false) const { 5081baf14fdfa29c22a08d609144c285169e23a247Chris Lattner return ConstantExpr::getMul(LHS, RHS, HasNUW, HasNSW); 518991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands } 52ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman Constant *CreateFMul(Constant *LHS, Constant *RHS) const { 53baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFMul(LHS, RHS); 54ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman } 55413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner Constant *CreateUDiv(Constant *LHS, Constant *RHS, 56413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner bool isExact = false) const { 57413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner return ConstantExpr::getUDiv(LHS, RHS, isExact); 581e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 59413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner Constant *CreateSDiv(Constant *LHS, Constant *RHS, 60413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner bool isExact = false) const { 61413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner return ConstantExpr::getSDiv(LHS, RHS, isExact); 6259c4f5c2fc82af14b0f4f332709aac62921c6177Dan Gohman } 631e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateFDiv(Constant *LHS, Constant *RHS) const { 64baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFDiv(LHS, RHS); 651e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 661e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateURem(Constant *LHS, Constant *RHS) const { 67baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getURem(LHS, RHS); 681e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 691e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateSRem(Constant *LHS, Constant *RHS) const { 70baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getSRem(LHS, RHS); 711e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 721e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateFRem(Constant *LHS, Constant *RHS) const { 73baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFRem(LHS, RHS); 741e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 7581baf14fdfa29c22a08d609144c285169e23a247Chris Lattner Constant *CreateShl(Constant *LHS, Constant *RHS, 7681baf14fdfa29c22a08d609144c285169e23a247Chris Lattner bool HasNUW = false, bool HasNSW = false) const { 7781baf14fdfa29c22a08d609144c285169e23a247Chris Lattner return ConstantExpr::getShl(LHS, RHS, HasNUW, HasNSW); 781e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 79413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner Constant *CreateLShr(Constant *LHS, Constant *RHS, 80413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner bool isExact = false) const { 81413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner return ConstantExpr::getLShr(LHS, RHS, isExact); 821e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 83413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner Constant *CreateAShr(Constant *LHS, Constant *RHS, 84413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner bool isExact = false) const { 85413c3bd9fd820a0969cd0e84124f3a3fadc5cc61Chris Lattner return ConstantExpr::getAShr(LHS, RHS, isExact); 861e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 871e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateAnd(Constant *LHS, Constant *RHS) const { 88baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getAnd(LHS, RHS); 891e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 901e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateOr(Constant *LHS, Constant *RHS) const { 91baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getOr(LHS, RHS); 921e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 931e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateXor(Constant *LHS, Constant *RHS) const { 94baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getXor(LHS, RHS); 951e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 961e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 971e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateBinOp(Instruction::BinaryOps Opc, 981e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *LHS, Constant *RHS) const { 99baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::get(Opc, LHS, RHS); 1001e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1011e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1021e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1031e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Unary Operators 1041e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1051e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 10681baf14fdfa29c22a08d609144c285169e23a247Chris Lattner Constant *CreateNeg(Constant *C, 10781baf14fdfa29c22a08d609144c285169e23a247Chris Lattner bool HasNUW = false, bool HasNSW = false) const { 10881baf14fdfa29c22a08d609144c285169e23a247Chris Lattner return ConstantExpr::getNeg(C, HasNUW, HasNSW); 1098991d51ddcea31e198aff1fd01c05af2679ee8f8Duncan Sands } 110ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman Constant *CreateFNeg(Constant *C) const { 111baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getFNeg(C); 112ae3a0be92e33bc716722aa600983fc1535acb122Dan Gohman } 1131e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateNot(Constant *C) const { 114baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getNot(C); 1151e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1161e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1171e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1181e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Memory Instructions 1191e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1201e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 12112fc16f1950796486988dc91ba69797efa5bdb64Jay Foad Constant *CreateGetElementPtr(Constant *C, 12212fc16f1950796486988dc91ba69797efa5bdb64Jay Foad ArrayRef<Constant *> IdxList) const { 123dab3d29605a5c83db41b28176273ef55961120c1Jay Foad return ConstantExpr::getGetElementPtr(C, IdxList); 1241e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 12512fc16f1950796486988dc91ba69797efa5bdb64Jay Foad Constant *CreateGetElementPtr(Constant *C, Constant *Idx) const { 12612fc16f1950796486988dc91ba69797efa5bdb64Jay Foad // This form of the function only exists to avoid ambiguous overload 12712fc16f1950796486988dc91ba69797efa5bdb64Jay Foad // warnings about whether to convert Idx to ArrayRef<Constant *> or 12812fc16f1950796486988dc91ba69797efa5bdb64Jay Foad // ArrayRef<Value *>. 129dab3d29605a5c83db41b28176273ef55961120c1Jay Foad return ConstantExpr::getGetElementPtr(C, Idx); 1301e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 13112fc16f1950796486988dc91ba69797efa5bdb64Jay Foad Constant *CreateGetElementPtr(Constant *C, 13212fc16f1950796486988dc91ba69797efa5bdb64Jay Foad ArrayRef<Value *> IdxList) const { 133dab3d29605a5c83db41b28176273ef55961120c1Jay Foad return ConstantExpr::getGetElementPtr(C, IdxList); 134e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman } 13512fc16f1950796486988dc91ba69797efa5bdb64Jay Foad 13612fc16f1950796486988dc91ba69797efa5bdb64Jay Foad Constant *CreateInBoundsGetElementPtr(Constant *C, 13712fc16f1950796486988dc91ba69797efa5bdb64Jay Foad ArrayRef<Constant *> IdxList) const { 138dab3d29605a5c83db41b28176273ef55961120c1Jay Foad return ConstantExpr::getInBoundsGetElementPtr(C, IdxList); 13912fc16f1950796486988dc91ba69797efa5bdb64Jay Foad } 14012fc16f1950796486988dc91ba69797efa5bdb64Jay Foad Constant *CreateInBoundsGetElementPtr(Constant *C, Constant *Idx) const { 14112fc16f1950796486988dc91ba69797efa5bdb64Jay Foad // This form of the function only exists to avoid ambiguous overload 14212fc16f1950796486988dc91ba69797efa5bdb64Jay Foad // warnings about whether to convert Idx to ArrayRef<Constant *> or 14312fc16f1950796486988dc91ba69797efa5bdb64Jay Foad // ArrayRef<Value *>. 144dab3d29605a5c83db41b28176273ef55961120c1Jay Foad return ConstantExpr::getInBoundsGetElementPtr(C, Idx); 14512fc16f1950796486988dc91ba69797efa5bdb64Jay Foad } 14612fc16f1950796486988dc91ba69797efa5bdb64Jay Foad Constant *CreateInBoundsGetElementPtr(Constant *C, 14712fc16f1950796486988dc91ba69797efa5bdb64Jay Foad ArrayRef<Value *> IdxList) const { 148dab3d29605a5c83db41b28176273ef55961120c1Jay Foad return ConstantExpr::getInBoundsGetElementPtr(C, IdxList); 149e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman } 150e2574d3215c412a15763d26aee9aa5d856764c2cDan Gohman 1511e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1521e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Cast/Conversion Operators 1531e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1541e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1551e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateCast(Instruction::CastOps Op, Constant *C, 156db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Type *DestTy) const { 157baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getCast(Op, C, DestTy); 1581e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 159db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreatePointerCast(Constant *C, Type *DestTy) const { 16002904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar return ConstantExpr::getPointerCast(C, DestTy); 16102904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar } 162db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreateIntCast(Constant *C, Type *DestTy, 1631e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands bool isSigned) const { 164baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getIntegerCast(C, DestTy, isSigned); 1651e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 166db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreateFPCast(Constant *C, Type *DestTy) const { 16702904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar return ConstantExpr::getFPCast(C, DestTy); 16802904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar } 1691e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 170db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreateBitCast(Constant *C, Type *DestTy) const { 1711e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands return CreateCast(Instruction::BitCast, C, DestTy); 1721e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 173db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreateIntToPtr(Constant *C, Type *DestTy) const { 1741e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands return CreateCast(Instruction::IntToPtr, C, DestTy); 1751e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 176db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreatePtrToInt(Constant *C, Type *DestTy) const { 1771e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands return CreateCast(Instruction::PtrToInt, C, DestTy); 1781e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 179db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreateZExtOrBitCast(Constant *C, Type *DestTy) const { 18002904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar return ConstantExpr::getZExtOrBitCast(C, DestTy); 18102904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar } 182db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreateSExtOrBitCast(Constant *C, Type *DestTy) const { 18302904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar return ConstantExpr::getSExtOrBitCast(C, DestTy); 18402904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar } 18502904d5d848a12be0d5857fc7a25261fb162e0edErick Tryzelaar 186db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner Constant *CreateTruncOrBitCast(Constant *C, Type *DestTy) const { 187baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getTruncOrBitCast(C, DestTy); 1881e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 1891e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 1901e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1911e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Compare Instructions 1921e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 1931e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 194fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands Constant *CreateICmp(CmpInst::Predicate P, Constant *LHS, 195fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands Constant *RHS) const { 196baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getCompare(P, LHS, RHS); 197fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands } 198fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands Constant *CreateFCmp(CmpInst::Predicate P, Constant *LHS, 199fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands Constant *RHS) const { 200baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getCompare(P, LHS, RHS); 201fe24bd3a89c44f9a16e3cbcf60c119dac88fad40Duncan Sands } 2021e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2031e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 2041e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands // Other Instructions 2051e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands //===--------------------------------------------------------------------===// 2061e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2071e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateSelect(Constant *C, Constant *True, Constant *False) const { 208baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getSelect(C, True, False); 2091e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2101e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2111e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateExtractElement(Constant *Vec, Constant *Idx) const { 212baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getExtractElement(Vec, Idx); 2131e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2141e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2151e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateInsertElement(Constant *Vec, Constant *NewElt, 2161e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *Idx) const { 217baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getInsertElement(Vec, NewElt, Idx); 2181e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2191e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2201e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateShuffleVector(Constant *V1, Constant *V2, 2211e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *Mask) const { 222baf3c404409d5e47b13984a7f95bfbd6d1f2e79eOwen Anderson return ConstantExpr::getShuffleVector(V1, V2, Mask); 2231e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2241e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 225fc6d3a49867cd38954dc40936a88f1907252c6d2Jay Foad Constant *CreateExtractValue(Constant *Agg, 226fc6d3a49867cd38954dc40936a88f1907252c6d2Jay Foad ArrayRef<unsigned> IdxList) const { 227fc6d3a49867cd38954dc40936a88f1907252c6d2Jay Foad return ConstantExpr::getExtractValue(Agg, IdxList); 2281e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2291e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2301e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands Constant *CreateInsertValue(Constant *Agg, Constant *Val, 231fc6d3a49867cd38954dc40936a88f1907252c6d2Jay Foad ArrayRef<unsigned> IdxList) const { 232fc6d3a49867cd38954dc40936a88f1907252c6d2Jay Foad return ConstantExpr::getInsertValue(Agg, Val, IdxList); 2331e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands } 2341e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands}; 2351e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2361e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands} 2371e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands 2381e7f7865ebd3b47c93dc8867abe5baae0df0ebceDuncan Sands#endif 239