HomePhabricator

[OpenMP] Add match_{all,any,none} declare variant selector extensions.

Authored by jdoerfert on Apr 3 2020, 9:29 AM.

Description

[OpenMP] Add match_{all,any,none} declare variant selector extensions.

By default, all traits in the OpenMP context selector have to match for
it to be acceptable. Though, we sometimes want a single property out of
multiple to match (=any) or no match at all (=none). We offer these
choices as extensions via

`implementation={extension(match_{all,any,none})}`

to the user. The choice will affect the entire context selector not only
the traits following the match property.

The first user will be D75788. There we can replace

#pragma omp begin declare variant match(device={arch(nvptx64)})
#define __CUDA__

#include <__clang_cuda_cmath.h>

// TODO: Hack until we support an extension to the match clause that allows "or".
#undef __CLANG_CUDA_CMATH_H__

#undef __CUDA__
#pragma omp end declare variant

#pragma omp begin declare variant match(device={arch(nvptx)})
#define __CUDA__

#include <__clang_cuda_cmath.h>

#undef __CUDA__
#pragma omp end declare variant

with the much simpler

#pragma omp begin declare variant match(device={arch(nvptx, nvptx64)}, implementation={extension(match_any)})
#define __CUDA__

#include <__clang_cuda_cmath.h>

#undef __CUDA__
#pragma omp end declare variant

Reviewed By: mikerice

Differential Revision: https://reviews.llvm.org/D77414