PreciseVisitor.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //===--- PreciseVisitor.h ---- Precise Visitor -------------------*- C++ -*-==//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #ifndef LLVM_CLANG_LIB_SPIRV_PRECISEVISITOR_H
  10. #define LLVM_CLANG_LIB_SPIRV_PRECISEVISITOR_H
  11. #include "clang/SPIRV/SpirvVisitor.h"
  12. namespace clang {
  13. namespace spirv {
  14. class PreciseVisitor : public Visitor {
  15. public:
  16. PreciseVisitor(SpirvContext &spvCtx, const SpirvCodeGenOptions &opts)
  17. : Visitor(opts, spvCtx) {}
  18. bool visit(SpirvFunction *, Phase);
  19. bool visit(SpirvVariable *);
  20. bool visit(SpirvReturn *);
  21. bool visit(SpirvSelect *);
  22. bool visit(SpirvVectorShuffle *);
  23. bool visit(SpirvBitFieldExtract *);
  24. bool visit(SpirvBitFieldInsert *);
  25. bool visit(SpirvAtomic *);
  26. bool visit(SpirvCompositeConstruct *);
  27. bool visit(SpirvCompositeExtract *);
  28. bool visit(SpirvCompositeInsert *);
  29. bool visit(SpirvLoad *);
  30. bool visit(SpirvStore *);
  31. bool visit(SpirvBinaryOp *);
  32. bool visit(SpirvUnaryOp *);
  33. bool visit(SpirvNonUniformBinaryOp *);
  34. bool visit(SpirvNonUniformUnaryOp *);
  35. bool visit(SpirvExtInst *);
  36. // TODO: Support propagation of 'precise' through OpSpecConstantOp and image
  37. // operations if necessary. Related instruction classes are:
  38. // SpirvSpecConstantBinaryOp, SpirvSpecConstantUnaryOp
  39. // SpirvImageOp, SpirvImageQuery, SpirvImageTexelPointer, SpirvSampledImage
  40. private:
  41. bool curFnRetValPrecise; ///< Whether current function is 'precise'
  42. };
  43. } // end namespace spirv
  44. } // end namespace clang
  45. #endif // LLVM_CLANG_LIB_SPIRV_PRECISEVISITOR_H