diff --git a/llvm/include/llvm/IR/ConstantFold.h b/llvm/include/llvm/IR/ConstantFold.h new file mode 100644 --- /dev/null +++ b/llvm/include/llvm/IR/ConstantFold.h @@ -0,0 +1,56 @@ +//===-- ConstantFold.h --- 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 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 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, + ArrayRef Mask); +Constant *ConstantFoldExtractValueInstruction(Constant *Agg, + ArrayRef Idxs); +Constant *ConstantFoldInsertValueInstruction(Constant *Agg, Constant *Val, + ArrayRef 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 InRangeIndex, + ArrayRef Idxs); +} // namespace llvm + +#endif diff --git a/llvm/lib/IR/ConstantFold.h b/llvm/lib/IR/ConstantFold.h deleted file mode 100644 --- a/llvm/lib/IR/ConstantFold.h +++ /dev/null @@ -1,56 +0,0 @@ -//===-- 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 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, - ArrayRef Mask); - Constant *ConstantFoldExtractValueInstruction(Constant *Agg, - ArrayRef Idxs); - Constant *ConstantFoldInsertValueInstruction(Constant *Agg, Constant *Val, - ArrayRef 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 InRangeIndex, - ArrayRef Idxs); -} // End llvm namespace - -#endif diff --git a/llvm/lib/IR/ConstantFold.cpp b/llvm/lib/IR/ConstantFold.cpp --- a/llvm/lib/IR/ConstantFold.cpp +++ b/llvm/lib/IR/ConstantFold.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// // // This file implements folding of constants for LLVM. This implements the -// (internal) ConstantFold.h interface, which is used by the +// ConstantFold.h interface, which is used by the // ConstantExpr::get* methods to automatically fold constants when possible. // // The current constant folding implementation is implemented in two pieces: the @@ -16,7 +16,7 @@ // //===----------------------------------------------------------------------===// -#include "ConstantFold.h" +#include "llvm/IR/ConstantFold.h" #include "llvm/ADT/APSInt.h" #include "llvm/ADT/SmallVector.h" #include "llvm/IR/Constants.h" diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp --- a/llvm/lib/IR/Constants.cpp +++ b/llvm/lib/IR/Constants.cpp @@ -11,11 +11,11 @@ //===----------------------------------------------------------------------===// #include "llvm/IR/Constants.h" -#include "ConstantFold.h" #include "LLVMContextImpl.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" +#include "llvm/IR/ConstantFold.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/GetElementPtrTypeIterator.h" #include "llvm/IR/GlobalValue.h"