Revert "[OpenMP] Do not propagate match extensions to nested contexts"

Two tests failed for some reason, need to investigate:
  https://lab.llvm.org/buildbot/#/builders/109/builds/10399

This reverts commit ad9e98b8ef.
This commit is contained in:
Johannes Doerfert 2021-03-11 23:47:19 -06:00
parent 0fe0d114e4
commit 49ed3032ff
4 changed files with 3 additions and 46 deletions

View File

@ -4014,8 +4014,7 @@ The match extensions change when the *entire* context selector is considered a
match for an OpenMP context. The default is ``all``, with ``none`` no trait in the
selector is allowed to be in the OpenMP context, with ``any`` a single trait in
both the selector and OpenMP context is sufficient. Only a single match
extension trait is allowed per context selector. Note that match extensions are
not propagated to nested selectors like the standard defines it for other traits.
extension trait is allowed per context selector.
The disable extensions remove default effects of the ``begin declare variant``
applied to a definition. If ``disable_implicit_base`` is given, we will not
introduce an implicit base function for a variant if no base function was

View File

@ -21,7 +21,6 @@
#include "clang/Parse/RAIIObjectsForParser.h"
#include "clang/Sema/Scope.h"
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/UniqueVector.h"
#include "llvm/Frontend/OpenMP/OMPContext.h"
@ -1464,29 +1463,7 @@ bool Parser::parseOMPDeclareVariantMatchClause(SourceLocation Loc,
// TODO: Keep some source location in the TI to provide better diagnostics.
// TODO: Perform some kind of equivalence check on the condition and score
// expressions.
auto StripImplementation = [](const OMPTraitSet &TSet) -> OMPTraitSet {
if (TSet.Kind != llvm::omp::TraitSet::implementation)
return TSet;
OMPTraitSet Set = TSet;
for (OMPTraitSelector &Selector : Set.Selectors) {
if (Selector.Kind != llvm::omp::TraitSelector::implementation_extension)
continue;
// Do not propagate match extensions to nested contexts.
llvm::erase_if(Selector.Properties, [](const OMPTraitProperty &Property) {
return (
Property.Kind ==
llvm::omp::TraitProperty::implementation_extension_match_any ||
Property.Kind ==
llvm::omp::TraitProperty::implementation_extension_match_all ||
Property.Kind ==
llvm::omp::TraitProperty::implementation_extension_match_none);
});
return Set;
}
return Set;
};
for (const OMPTraitSet &PSet : ParentTI->Sets) {
const OMPTraitSet ParentSet = StripImplementation(PSet);
for (const OMPTraitSet &ParentSet : ParentTI->Sets) {
bool MergedSet = false;
for (OMPTraitSet &Set : TI.Sets) {
if (Set.Kind != ParentSet.Kind)

View File

@ -1,14 +0,0 @@
// RUN: %clang_cc1 -triple=x86_64-pc-win32 -verify -fopenmp -x c -std=c99 -fms-extensions -Wno-pragma-pack %s
// expected-no-diagnostics
#pragma omp begin declare variant match(user={condition(1)}, device={kind(cpu)}, implementation={extension(match_any)})
#pragma omp begin declare variant match(device = {kind(cpu, fpga)})
this is never reached
#pragma omp end declare variant
#pragma omp end declare variant
#pragma omp begin declare variant match(user={condition(1)}, device={kind(cpu)}, implementation={extension(match_any)})
#pragma omp begin declare variant match(device = {kind(cpu, fpga)}, implementation={vendor(llvm)})
this is never reached
#pragma omp end declare variant
#pragma omp end declare variant

View File

@ -168,13 +168,8 @@ static int isVariantApplicableInContextHelper(
// For kind "any" a single match is enough but we ignore non-matched
// properties.
if (MK == MK_ANY) {
if (WasFound) {
LLVM_DEBUG(
dbgs() << "[" << DEBUG_TYPE << "] Property "
<< getOpenMPContextTraitPropertyName(Property, "")
<< " was in the OpenMP context and match kind is any.\n";);
if (WasFound)
return true;
}
return None;
}