DirectXShaderCompiler/include/dxc/HLSL/DxilPoisonValues.h

40 строки
1.8 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// //
// DxilPoisonValues.h //
// Copyright (C) Microsoft Corporation. All rights reserved. //
// This file is distributed under the University of Illinois Open Source //
// License. See LICENSE.TXT for details. //
// //
// Allows insertion of poisoned values with error messages that get //
// cleaned up late in the compiler. //
// //
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include "llvm/IR/DebugLoc.h"
namespace llvm {
class Instruction;
class Type;
class Value;
class Module;
} // namespace llvm
namespace hlsl {
// Create a special dx.poison.* instruction with debug location and an error
// message. The reason for this is certain invalid code is allowed in the code
// as long as it is removed by optimization at the end of compilation. We only
// want to emit the error for real if we are sure the code with the problem is
// in the final DXIL.
//
// This "emits" an error message with the specified type. If by the end the
// compilation it is still used, then FinalizePoisonValues will emit the correct
// error for real.
llvm::Value *CreatePoisonValue(llvm::Type *ty, const llvm::Twine &errMsg,
llvm::DebugLoc DL, llvm::Instruction *InsertPt);
// If there's any dx.poison.* values present in the module, emit them. Returns
// true M was modified in any way.
bool FinalizePoisonValues(llvm::Module &M);
} // namespace hlsl