brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · 4e99ebd Raw
139 lines · c
1//===- AssertMacros.h - Macro aliases for ease-of-use -----------*- 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-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// Provides macros to be used in unit tests for OMPT events.11///12//===----------------------------------------------------------------------===//13 14#ifndef OPENMP_TOOLS_OMPTEST_INCLUDE_ASSERTMACROS_H15#define OPENMP_TOOLS_OMPTEST_INCLUDE_ASSERTMACROS_H16 17#define OMPTEST_EXCLUDED_EVENT omptest::ObserveState::Never18#define OMPTEST_REQUIRED_EVENT omptest::ObserveState::Always19 20/// ASSERT MACROS TO BE USED BY THE USER21 22#define OMPT_GENERATE_EVENTS(NumberOfCopies, EventMacro)                       \23  for (size_t i = 0; i < NumberOfCopies; ++i) {                                \24    EventMacro                                                                 \25  }26 27// Handle a minimum unordered set of events28// Required events29#define OMPT_ASSERT_SET_EVENT(Name, Group, EventTy, ...)                       \30  SetAsserter->insert(OmptAssertEvent::EventTy(                                \31      Name, Group, OMPTEST_REQUIRED_EVENT, __VA_ARGS__));32#define OMPT_ASSERT_SET(EventTy, ...)                                          \33  OMPT_ASSERT_SET_EVENT("", "", EventTy, __VA_ARGS__)34#define OMPT_ASSERT_SET_GROUPED(Group, EventTy, ...)                           \35  OMPT_ASSERT_SET_EVENT("", Group, EventTy, __VA_ARGS__)36#define OMPT_ASSERT_SET_NAMED(Name, EventTy, ...)                              \37  OMPT_ASSERT_SET_EVENT(Name, "", EventTy, __VA_ARGS__)38// Excluded ("NOT") events39#define OMPT_ASSERT_SET_EVENT_NOT(Name, Group, EventTy, ...)                   \40  SetAsserter->insert(OmptAssertEvent::EventTy(                                \41      Name, Group, OMPTEST_EXCLUDED_EVENT, __VA_ARGS__));42#define OMPT_ASSERT_SET_NOT(EventTy, ...)                                      \43  OMPT_ASSERT_SET_EVENT_NOT("", "", EventTy, __VA_ARGS__)44#define OMPT_ASSERT_SET_GROUPED_NOT(Group, EventTy, ...)                       \45  OMPT_ASSERT_SET_EVENT_NOT("", Group, EventTy, __VA_ARGS__)46#define OMPT_ASSERT_SET_NAMED_NOT(Name, EventTy, ...)                          \47  OMPT_ASSERT_SET_EVENT_NOT(Name, "", EventTy, __VA_ARGS__)48 49// Handle an exact sequence of events50// Required events51#define OMPT_ASSERT_SEQUENCE_EVENT(Name, Group, EventTy, ...)                  \52  SequenceAsserter->insert(OmptAssertEvent::EventTy(                           \53      Name, Group, OMPTEST_REQUIRED_EVENT, __VA_ARGS__));54#define OMPT_ASSERT_SEQUENCE(EventTy, ...)                                     \55  OMPT_ASSERT_SEQUENCE_EVENT("", "", EventTy, __VA_ARGS__)56#define OMPT_ASSERT_SEQUENCE_GROUPED(Group, EventTy, ...)                      \57  OMPT_ASSERT_SEQUENCE_EVENT("", Group, EventTy, __VA_ARGS__)58#define OMPT_ASSERT_SEQUENCE_NAMED(Name, EventTy, ...)                         \59  OMPT_ASSERT_SEQUENCE_EVENT(Name, "", EventTy, __VA_ARGS__)60// Excluded ("NOT") events61#define OMPT_ASSERT_SEQUENCE_EVENT_NOT(Name, Group, EventTy, ...)              \62  SequenceAsserter->insert(OmptAssertEvent::EventTy(                           \63      Name, Group, OMPTEST_EXCLUDED_EVENT, __VA_ARGS__));64#define OMPT_ASSERT_SEQUENCE_NOT(EventTy, ...)                                 \65  OMPT_ASSERT_SEQUENCE_EVENT_NOT("", "", EventTy, __VA_ARGS__)66#define OMPT_ASSERT_SEQUENCE_GROUPED_NOT(Group, EventTy, ...)                  \67  OMPT_ASSERT_SEQUENCE_EVENT_NOT("", Group, EventTy, __VA_ARGS__)68#define OMPT_ASSERT_SEQUENCE_NAMED_NOT(Name, EventTy, ...)                     \69  OMPT_ASSERT_SEQUENCE_EVENT_NOT(Name, "", EventTy, __VA_ARGS__)70// Special command: suspend active assertion71// The created event is not correlated to any observed event72#define OMPT_ASSERT_SEQUENCE_SUSPEND()                                         \73  SequenceAsserter->insert(                                                    \74      OmptAssertEvent::AssertionSuspend("", "", OMPTEST_EXCLUDED_EVENT));75#define OMPT_ASSERT_SEQUENCE_ONLY(EventTy, ...)                                \76  OMPT_ASSERT_SEQUENCE_SUSPEND()                                               \77  OMPT_ASSERT_SEQUENCE_EVENT("", "", EventTy, __VA_ARGS__)                     \78  OMPT_ASSERT_SEQUENCE_SUSPEND()79#define OMPT_ASSERT_SEQUENCE_GROUPED_ONLY(Group, EventTy, ...)                 \80  OMPT_ASSERT_SEQUENCE_SUSPEND()                                               \81  OMPT_ASSERT_SEQUENCE_EVENT("", Group, EventTy, __VA_ARGS__)                  \82  OMPT_ASSERT_SEQUENCE_SUSPEND()83#define OMPT_ASSERT_SEQUENCE_NAMED_ONLY(Name, EventTy, ...)                    \84  OMPT_ASSERT_SEQUENCE_SUSPEND()                                               \85  OMPT_ASSERT_SEQUENCE_EVENT(Name, "", EventTy, __VA_ARGS__)                   \86  OMPT_ASSERT_SEQUENCE_SUSPEND()87 88#define OMPT_ASSERTER_MODE_STRICT(Asserter)                                    \89  Asserter->setOperationMode(AssertMode::Strict);90#define OMPT_ASSERTER_MODE_RELAXED(Asserter)                                   \91  Asserter->setOperationMode(AssertMode::Relaxed);92#define OMPT_ASSERT_SEQUENCE_MODE_STRICT()                                     \93  OMPT_ASSERTER_MODE_STRICT(SequenceAsserter)94#define OMPT_ASSERT_SEQUENCE_MODE_RELAXED()                                    \95  OMPT_ASSERTER_MODE_RELAXED(SequenceAsserter)96#define OMPT_ASSERT_SET_MODE_STRICT() OMPT_ASSERTER_MODE_STRICT(SetAsserter)97#define OMPT_ASSERT_SET_MODE_RELAXED() OMPT_ASSERTER_MODE_RELAXED(SetAsserter)98 99// Enable / disable asserters entirely100#define OMPT_ASSERTER_DISABLE(Asserter) Asserter->setActive(false);101#define OMPT_ASSERTER_ENABLE(Asserter) Asserter->setActive(true);102#define OMPT_ASSERT_SET_DISABLE() OMPT_ASSERTER_DISABLE(SetAsserter)103#define OMPT_ASSERT_SET_ENABLE() OMPT_ASSERTER_ENABLE(SetAsserter)104#define OMPT_ASSERT_SEQUENCE_DISABLE() OMPT_ASSERTER_DISABLE(SequenceAsserter)105#define OMPT_ASSERT_SEQUENCE_ENABLE() OMPT_ASSERTER_ENABLE(SequenceAsserter)106#define OMPT_REPORT_EVENT_DISABLE() OMPT_ASSERTER_DISABLE(EventReporter)107#define OMPT_REPORT_EVENT_ENABLE() OMPT_ASSERTER_ENABLE(EventReporter)108 109// Enable / disable certain event types for asserters110#define OMPT_ASSERTER_PERMIT_EVENT(Asserter, EventTy)                          \111  Asserter->permitEvent(EventTy);112#define OMPT_ASSERTER_SUPPRESS_EVENT(Asserter, EventTy)                        \113  Asserter->suppressEvent(EventTy);114#define OMPT_PERMIT_EVENT(EventTy)                                             \115  OMPT_ASSERTER_PERMIT_EVENT(SetAsserter, EventTy);                            \116  OMPT_ASSERTER_PERMIT_EVENT(EventReporter, EventTy);                          \117  OMPT_ASSERTER_PERMIT_EVENT(SequenceAsserter, EventTy);118#define OMPT_SUPPRESS_EVENT(EventTy)                                           \119  OMPT_ASSERTER_SUPPRESS_EVENT(SetAsserter, EventTy);                          \120  OMPT_ASSERTER_SUPPRESS_EVENT(EventReporter, EventTy);                        \121  OMPT_ASSERTER_SUPPRESS_EVENT(SequenceAsserter, EventTy);122 123// Set logging level for asserters124// Note: Logger is a singleton, hence this will affect all asserter instances125#define OMPT_ASSERTER_LOG_LEVEL(Asserter, LogLevel)                            \126  Asserter->getLog()->setLoggingLevel(LogLevel);127 128// Set log formatting (esp. coloring) for asserters129// Note: Logger is a singleton, hence this will affect all asserter instances130#define OMPT_ASSERTER_LOG_FORMATTED(Asserter, FormatLog)                       \131  Asserter->getLog()->setFormatOutput(FormatLog);132 133// SyncPoint handling134#define OMPT_ASSERT_SYNC_POINT(SyncPointName)                                  \135  flush_traced_devices();                                                      \136  OmptCallbackHandler::get().handleAssertionSyncPoint(SyncPointName);137 138#endif139