Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===-- GuardUtils.h - Utils for work with guards ---------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. // Utils that are used to perform analyzes related to guards and their
  9. // conditions.
  10. //===----------------------------------------------------------------------===//
  11.  
  12. #ifndef LLVM_ANALYSIS_GUARDUTILS_H
  13. #define LLVM_ANALYSIS_GUARDUTILS_H
  14.  
  15. namespace llvm {
  16.  
  17. class BasicBlock;
  18. class Use;
  19. class User;
  20. class Value;
  21.  
  22. /// Returns true iff \p U has semantics of a guard expressed in a form of call
  23. /// of llvm.experimental.guard intrinsic.
  24. bool isGuard(const User *U);
  25.  
  26. /// Returns true iff \p U is a widenable branch (that is, parseWidenableBranch
  27. /// returns true).
  28. bool isWidenableBranch(const User *U);
  29.  
  30. /// Returns true iff \p U has semantics of a guard expressed in a form of a
  31. /// widenable conditional branch to deopt block.
  32. bool isGuardAsWidenableBranch(const User *U);
  33.  
  34. /// If U is widenable branch looking like:
  35. ///   %cond = ...
  36. ///   %wc = call i1 @llvm.experimental.widenable.condition()
  37. ///   %branch_cond = and i1 %cond, %wc
  38. ///   br i1 %branch_cond, label %if_true_bb, label %if_false_bb ; <--- U
  39. /// The function returns true, and the values %cond and %wc and blocks
  40. /// %if_true_bb, if_false_bb are returned in
  41. /// the parameters (Condition, WidenableCondition, IfTrueBB and IfFalseFF)
  42. /// respectively. If \p U does not match this pattern, return false.
  43. bool parseWidenableBranch(const User *U, Value *&Condition,
  44.                           Value *&WidenableCondition, BasicBlock *&IfTrueBB,
  45.                           BasicBlock *&IfFalseBB);
  46.  
  47. /// Analgous to the above, but return the Uses so that that they can be
  48. /// modified. Unlike previous version, Condition is optional and may be null.
  49. bool parseWidenableBranch(User *U, Use *&Cond, Use *&WC, BasicBlock *&IfTrueBB,
  50.                           BasicBlock *&IfFalseBB);
  51.  
  52. } // llvm
  53.  
  54. #endif // LLVM_ANALYSIS_GUARDUTILS_H
  55.