1 //===--- XRayInstr.h --------------------------------------------*- 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 // 10 /// \file 11 /// Defines the clang::XRayInstrKind enum. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CLANG_BASIC_XRAYINSTR_H 16 #define LLVM_CLANG_BASIC_XRAYINSTR_H 17 18 #include "clang/Basic/LLVM.h" 19 #include "llvm/ADT/StringRef.h" 20 #include "llvm/Support/MathExtras.h" 21 #include <cassert> 22 #include <cstdint> 23 24 namespace clang { 25 26 using XRayInstrMask = uint32_t; 27 28 namespace XRayInstrKind { 29 30 // TODO: Auto-generate these as we add more instrumentation kinds. 31 enum XRayInstrOrdinal : XRayInstrMask { 32 XRIO_Function, 33 XRIO_Custom, 34 XRIO_Typed, 35 XRIO_Count 36 }; 37 38 constexpr XRayInstrMask None = 0; 39 constexpr XRayInstrMask Function = 1U << XRIO_Function; 40 constexpr XRayInstrMask Custom = 1U << XRIO_Custom; 41 constexpr XRayInstrMask Typed = 1U << XRIO_Typed; 42 constexpr XRayInstrMask All = Function | Custom | Typed; 43 44 } // namespace XRayInstrKind 45 46 struct XRayInstrSet { hasXRayInstrSet47 bool has(XRayInstrMask K) const { 48 assert(llvm::isPowerOf2_32(K)); 49 return Mask & K; 50 } 51 hasOneOfXRayInstrSet52 bool hasOneOf(XRayInstrMask K) const { return Mask & K; } 53 setXRayInstrSet54 void set(XRayInstrMask K, bool Value) { 55 assert(llvm::isPowerOf2_32(K)); 56 Mask = Value ? (Mask | K) : (Mask & ~K); 57 } 58 59 void clear(XRayInstrMask K = XRayInstrKind::All) { Mask &= ~K; } 60 emptyXRayInstrSet61 bool empty() const { return Mask == 0; } 62 fullXRayInstrSet63 bool full() const { return Mask == XRayInstrKind::All; } 64 65 XRayInstrMask Mask = 0; 66 }; 67 68 XRayInstrMask parseXRayInstrValue(StringRef Value); 69 70 } // namespace clang 71 72 #endif // LLVM_CLANG_BASIC_XRAYINSTR_H 73