blob: 199dd00979cd9659e5479dfca3b00850777bd3c7 [file] [edit]
//===-- 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 <typename T> class ArrayRef;
} // namespace llvm
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<llvm::Constant *> Operands);
/// ConstantFoldScalarCallExt
/// Hook point for constant folding of extensions.
llvm::Constant *
ConstantFoldScalarCallExt(llvm::StringRef Name, llvm::Type *Ty,
llvm::ArrayRef<llvm::Constant *> 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);
} // namespace hlsl
#endif