57 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- ConstantFolding.h - Internal Constant Folding Interface -*- C++ -*-===//
 | |
| //
 | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | |
| // See https://llvm.org/LICENSE.txt for license information.
 | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file defines the (internal) constant folding interfaces for LLVM.  These
 | |
| // interfaces are used by the ConstantExpr::get* methods to automatically fold
 | |
| // constants when possible.
 | |
| //
 | |
| // These operators may return a null object if they don't know how to perform
 | |
| // the specified operation on the specified constant types.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #ifndef LLVM_LIB_IR_CONSTANTFOLD_H
 | |
| #define LLVM_LIB_IR_CONSTANTFOLD_H
 | |
| 
 | |
| #include "llvm/ADT/Optional.h"
 | |
| 
 | |
| namespace llvm {
 | |
| template <typename T> class ArrayRef;
 | |
|   class Value;
 | |
|   class Constant;
 | |
|   class Type;
 | |
| 
 | |
|   // Constant fold various types of instruction...
 | |
|   Constant *ConstantFoldCastInstruction(
 | |
|     unsigned opcode,     ///< The opcode of the cast
 | |
|     Constant *V,         ///< The source constant
 | |
|     Type *DestTy   ///< The destination type
 | |
|   );
 | |
|   Constant *ConstantFoldSelectInstruction(Constant *Cond,
 | |
|                                           Constant *V1, Constant *V2);
 | |
|   Constant *ConstantFoldExtractElementInstruction(Constant *Val, Constant *Idx);
 | |
|   Constant *ConstantFoldInsertElementInstruction(Constant *Val, Constant *Elt,
 | |
|                                                  Constant *Idx);
 | |
|   Constant *ConstantFoldShuffleVectorInstruction(Constant *V1, Constant *V2,
 | |
|                                                  Constant *Mask);
 | |
|   Constant *ConstantFoldExtractValueInstruction(Constant *Agg,
 | |
|                                                 ArrayRef<unsigned> Idxs);
 | |
|   Constant *ConstantFoldInsertValueInstruction(Constant *Agg, Constant *Val,
 | |
|                                                ArrayRef<unsigned> Idxs);
 | |
|   Constant *ConstantFoldUnaryInstruction(unsigned Opcode, Constant *V);
 | |
|   Constant *ConstantFoldBinaryInstruction(unsigned Opcode, Constant *V1,
 | |
|                                           Constant *V2);
 | |
|   Constant *ConstantFoldCompareInstruction(unsigned short predicate,
 | |
|                                            Constant *C1, Constant *C2);
 | |
|   Constant *ConstantFoldGetElementPtr(Type *Ty, Constant *C, bool InBounds,
 | |
|                                       Optional<unsigned> InRangeIndex,
 | |
|                                       ArrayRef<Value *> Idxs);
 | |
| } // End llvm namespace
 | |
| 
 | |
| #endif
 |