//===-- DxilConstantFolding.h - Constant folding for Dxil ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // // Copyright (C) Microsoft Corporation. All rights reserved. //===----------------------------------------------------------------------===// // // This file declares routines for folding dxil intrinsics into constants when // all operands are constants. // // We hook into the LLVM routines for constant folding so the function // interfaces are dictated by what llvm provides. // //===----------------------------------------------------------------------===// #ifndef LLVM_ANALYSIS_HLSLCONSTANTFOLDING_H #define LLVM_ANALYSIS_HLSLCONSTANTFOLDING_H #include "llvm/ADT/StringRef.h" namespace llvm { class Constant; class Function; class Type; template class ArrayRef; } namespace hlsl { /// ConstantFoldScalarCall - Try to constant fold the call instruction. /// If successful, the constant result is returned, if not, null is returned. llvm::Constant *ConstantFoldScalarCall(llvm::StringRef Name, llvm::Type *Ty, llvm::ArrayRef Operands); /// ConstantFoldScalarCallExt /// Hook point for constant folding of extensions. llvm::Constant *ConstantFoldScalarCallExt(llvm::StringRef Name, llvm::Type *Ty, llvm::ArrayRef Operands); /// CanConstantFoldCallTo - Return true if we can potentially constant /// fold a call to the given function. bool CanConstantFoldCallTo(const llvm::Function *F); /// CanConstantFoldCallToExt /// Hook point for constant folding of extensions. bool CanConstantFoldCallToExt(const llvm::Function *F); } #endif