1c953409fSJohannes Doerfert //===- unittest/IR/OpenMPContextTest.cpp - OpenMP Context handling tests --===//
2c953409fSJohannes Doerfert //
3c953409fSJohannes Doerfert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4c953409fSJohannes Doerfert // See https://llvm.org/LICENSE.txt for license information.
5c953409fSJohannes Doerfert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c953409fSJohannes Doerfert //
7c953409fSJohannes Doerfert //===----------------------------------------------------------------------===//
8c953409fSJohannes Doerfert
9c953409fSJohannes Doerfert #include "llvm/Frontend/OpenMP/OMPConstants.h"
10c953409fSJohannes Doerfert #include "llvm/Frontend/OpenMP/OMPContext.h"
11*62c7f035SArchibald Elliott #include "llvm/TargetParser/Triple.h"
12c953409fSJohannes Doerfert #include "gtest/gtest.h"
13c953409fSJohannes Doerfert
14c953409fSJohannes Doerfert using namespace llvm;
15c953409fSJohannes Doerfert using namespace omp;
16c953409fSJohannes Doerfert
17c953409fSJohannes Doerfert namespace {
18c953409fSJohannes Doerfert
19c953409fSJohannes Doerfert class OpenMPContextTest : public testing::Test {
20c953409fSJohannes Doerfert protected:
SetUp()21c953409fSJohannes Doerfert void SetUp() override {}
22c953409fSJohannes Doerfert
TearDown()23c953409fSJohannes Doerfert void TearDown() override {}
24c953409fSJohannes Doerfert };
25c953409fSJohannes Doerfert
TEST_F(OpenMPContextTest,RoundTripAndAssociation)26c953409fSJohannes Doerfert TEST_F(OpenMPContextTest, RoundTripAndAssociation) {
27c953409fSJohannes Doerfert #define OMP_TRAIT_SET(Enum, Str) \
28c953409fSJohannes Doerfert EXPECT_EQ(TraitSet::Enum, \
29c953409fSJohannes Doerfert getOpenMPContextTraitSetKind( \
30c953409fSJohannes Doerfert getOpenMPContextTraitSetName(TraitSet::Enum))); \
31c953409fSJohannes Doerfert EXPECT_EQ(Str, \
32c953409fSJohannes Doerfert getOpenMPContextTraitSetName(getOpenMPContextTraitSetKind(Str)));
33c953409fSJohannes Doerfert #define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, RequiresProperty) \
34c953409fSJohannes Doerfert EXPECT_EQ(TraitSelector::Enum, \
35c953409fSJohannes Doerfert getOpenMPContextTraitSelectorKind( \
36c953409fSJohannes Doerfert getOpenMPContextTraitSelectorName(TraitSelector::Enum))); \
37c953409fSJohannes Doerfert EXPECT_EQ(Str, getOpenMPContextTraitSelectorName( \
38c953409fSJohannes Doerfert getOpenMPContextTraitSelectorKind(Str)));
39c953409fSJohannes Doerfert #define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str) \
40c953409fSJohannes Doerfert EXPECT_EQ(TraitProperty::Enum, \
41c953409fSJohannes Doerfert getOpenMPContextTraitPropertyKind( \
42ee05167cSJohannes Doerfert TraitSet::TraitSetEnum, TraitSelector::TraitSelectorEnum, \
43ee05167cSJohannes Doerfert getOpenMPContextTraitPropertyName(TraitProperty::Enum, Str))); \
441228d42dSJohannes Doerfert EXPECT_EQ(Str, getOpenMPContextTraitPropertyName( \
45ee05167cSJohannes Doerfert getOpenMPContextTraitPropertyKind( \
46ee05167cSJohannes Doerfert TraitSet::TraitSetEnum, \
47ee05167cSJohannes Doerfert TraitSelector::TraitSelectorEnum, Str), \
48ee05167cSJohannes Doerfert Str)); \
49c953409fSJohannes Doerfert EXPECT_EQ(TraitSet::TraitSetEnum, \
50c953409fSJohannes Doerfert getOpenMPContextTraitSetForProperty(TraitProperty::Enum)); \
51c953409fSJohannes Doerfert EXPECT_EQ(TraitSelector::TraitSelectorEnum, \
52c953409fSJohannes Doerfert getOpenMPContextTraitSelectorForProperty(TraitProperty::Enum));
53c953409fSJohannes Doerfert #include "llvm/Frontend/OpenMP/OMPKinds.def"
54c953409fSJohannes Doerfert }
55c953409fSJohannes Doerfert
TEST_F(OpenMPContextTest,ValidNesting)56c953409fSJohannes Doerfert TEST_F(OpenMPContextTest, ValidNesting) {
57c953409fSJohannes Doerfert bool AllowsTraitScore, ReqProperty;
58c953409fSJohannes Doerfert #define OMP_TRAIT_SELECTOR(Enum, TraitSetEnum, Str, RequiresProperty) \
59c953409fSJohannes Doerfert EXPECT_TRUE(isValidTraitSelectorForTraitSet(TraitSelector::Enum, \
60c953409fSJohannes Doerfert TraitSet::TraitSetEnum, \
61c953409fSJohannes Doerfert AllowsTraitScore, ReqProperty)); \
62c953409fSJohannes Doerfert EXPECT_EQ(RequiresProperty, ReqProperty);
63c953409fSJohannes Doerfert #define OMP_TRAIT_PROPERTY(Enum, TraitSetEnum, TraitSelectorEnum, Str) \
64c953409fSJohannes Doerfert EXPECT_TRUE(isValidTraitPropertyForTraitSetAndSelector( \
65c953409fSJohannes Doerfert TraitProperty::Enum, TraitSelector::TraitSelectorEnum, \
66c953409fSJohannes Doerfert TraitSet::TraitSetEnum));
67c953409fSJohannes Doerfert #include "llvm/Frontend/OpenMP/OMPKinds.def"
68c953409fSJohannes Doerfert }
69c953409fSJohannes Doerfert
TEST_F(OpenMPContextTest,ApplicabilityNonConstruct)70c953409fSJohannes Doerfert TEST_F(OpenMPContextTest, ApplicabilityNonConstruct) {
71c953409fSJohannes Doerfert OMPContext HostLinux(false, Triple("x86_64-unknown-linux"));
72c953409fSJohannes Doerfert OMPContext DeviceLinux(true, Triple("x86_64-unknown-linux"));
73c953409fSJohannes Doerfert OMPContext HostNVPTX(false, Triple("nvptx64-nvidia-cuda"));
74c953409fSJohannes Doerfert OMPContext DeviceNVPTX(true, Triple("nvptx64-nvidia-cuda"));
75c953409fSJohannes Doerfert
76c953409fSJohannes Doerfert VariantMatchInfo Empty;
77c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(Empty, HostLinux));
78c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(Empty, DeviceLinux));
79c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(Empty, HostNVPTX));
80c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(Empty, DeviceNVPTX));
81c953409fSJohannes Doerfert
82c953409fSJohannes Doerfert VariantMatchInfo UserCondFalse;
83ee05167cSJohannes Doerfert UserCondFalse.addTrait(TraitProperty::user_condition_false, "");
84c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(UserCondFalse, HostLinux));
85c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(UserCondFalse, DeviceLinux));
86c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(UserCondFalse, HostNVPTX));
87c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(UserCondFalse, DeviceNVPTX));
88c953409fSJohannes Doerfert
89c953409fSJohannes Doerfert VariantMatchInfo DeviceArchArm;
90ee05167cSJohannes Doerfert DeviceArchArm.addTrait(TraitProperty::device_arch_arm, "");
91c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArm, HostLinux));
92c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArm, DeviceLinux));
93c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArm, HostNVPTX));
94c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArm, DeviceNVPTX));
95c953409fSJohannes Doerfert
96c953409fSJohannes Doerfert VariantMatchInfo LLVMHostUserCondTrue;
97ee05167cSJohannes Doerfert LLVMHostUserCondTrue.addTrait(TraitProperty::implementation_vendor_llvm, "");
98ee05167cSJohannes Doerfert LLVMHostUserCondTrue.addTrait(TraitProperty::device_kind_host, "");
99ee05167cSJohannes Doerfert LLVMHostUserCondTrue.addTrait(TraitProperty::device_kind_any, "");
100ee05167cSJohannes Doerfert LLVMHostUserCondTrue.addTrait(TraitProperty::user_condition_true, "");
101c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(LLVMHostUserCondTrue, HostLinux));
102c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrue, DeviceLinux));
103c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(LLVMHostUserCondTrue, HostNVPTX));
104c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrue, DeviceNVPTX));
105c953409fSJohannes Doerfert
106c953409fSJohannes Doerfert VariantMatchInfo LLVMHostUserCondTrueCPU = LLVMHostUserCondTrue;
107ee05167cSJohannes Doerfert LLVMHostUserCondTrueCPU.addTrait(TraitProperty::device_kind_cpu, "");
108c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(LLVMHostUserCondTrueCPU, HostLinux));
109c953409fSJohannes Doerfert EXPECT_FALSE(
110c953409fSJohannes Doerfert isVariantApplicableInContext(LLVMHostUserCondTrueCPU, DeviceLinux));
111c953409fSJohannes Doerfert EXPECT_FALSE(
112c953409fSJohannes Doerfert isVariantApplicableInContext(LLVMHostUserCondTrueCPU, HostNVPTX));
113c953409fSJohannes Doerfert EXPECT_FALSE(
114c953409fSJohannes Doerfert isVariantApplicableInContext(LLVMHostUserCondTrueCPU, DeviceNVPTX));
115c953409fSJohannes Doerfert
116c953409fSJohannes Doerfert VariantMatchInfo GPU;
117ee05167cSJohannes Doerfert GPU.addTrait(TraitProperty::device_kind_gpu, "");
118c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPU, HostLinux));
119c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPU, DeviceLinux));
120c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(GPU, HostNVPTX));
121c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(GPU, DeviceNVPTX));
122c953409fSJohannes Doerfert
123c953409fSJohannes Doerfert VariantMatchInfo NoHost;
124ee05167cSJohannes Doerfert NoHost.addTrait(TraitProperty::device_kind_nohost, "");
125c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(NoHost, HostLinux));
126c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(NoHost, DeviceLinux));
127c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(NoHost, HostNVPTX));
128c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(NoHost, DeviceNVPTX));
129c953409fSJohannes Doerfert }
130c953409fSJohannes Doerfert
TEST_F(OpenMPContextTest,ApplicabilityAllTraits)131c953409fSJohannes Doerfert TEST_F(OpenMPContextTest, ApplicabilityAllTraits) {
132c953409fSJohannes Doerfert OMPContext HostLinuxParallelParallel(false, Triple("x86_64-unknown-linux"));
133c953409fSJohannes Doerfert HostLinuxParallelParallel.addTrait(
134c953409fSJohannes Doerfert TraitProperty::construct_parallel_parallel);
135c953409fSJohannes Doerfert HostLinuxParallelParallel.addTrait(
136c953409fSJohannes Doerfert TraitProperty::construct_parallel_parallel);
137c953409fSJohannes Doerfert OMPContext DeviceLinuxTargetParallel(true, Triple("x86_64-unknown-linux"));
138c953409fSJohannes Doerfert DeviceLinuxTargetParallel.addTrait(TraitProperty::construct_target_target);
139c953409fSJohannes Doerfert DeviceLinuxTargetParallel.addTrait(
140c953409fSJohannes Doerfert TraitProperty::construct_parallel_parallel);
141c953409fSJohannes Doerfert OMPContext HostNVPTXFor(false, Triple("nvptx64-nvidia-cuda"));
142c953409fSJohannes Doerfert HostNVPTXFor.addTrait(TraitProperty::construct_for_for);
143c953409fSJohannes Doerfert OMPContext DeviceNVPTXTargetTeamsParallel(true,
144c953409fSJohannes Doerfert Triple("nvptx64-nvidia-cuda"));
145c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel.addTrait(
146c953409fSJohannes Doerfert TraitProperty::construct_target_target);
147c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel.addTrait(TraitProperty::construct_teams_teams);
148c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel.addTrait(
149c953409fSJohannes Doerfert TraitProperty::construct_parallel_parallel);
150c953409fSJohannes Doerfert
151c953409fSJohannes Doerfert { // non-construct variants
152c953409fSJohannes Doerfert VariantMatchInfo Empty;
153c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(Empty, HostLinuxParallelParallel));
154c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(Empty, DeviceLinuxTargetParallel));
155c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(Empty, HostNVPTXFor));
156c953409fSJohannes Doerfert EXPECT_TRUE(
157c953409fSJohannes Doerfert isVariantApplicableInContext(Empty, DeviceNVPTXTargetTeamsParallel));
158c953409fSJohannes Doerfert
159c953409fSJohannes Doerfert VariantMatchInfo UserCondFalse;
160ee05167cSJohannes Doerfert UserCondFalse.addTrait(TraitProperty::user_condition_false, "");
161c953409fSJohannes Doerfert EXPECT_FALSE(
162c953409fSJohannes Doerfert isVariantApplicableInContext(UserCondFalse, HostLinuxParallelParallel));
163c953409fSJohannes Doerfert EXPECT_FALSE(
164c953409fSJohannes Doerfert isVariantApplicableInContext(UserCondFalse, DeviceLinuxTargetParallel));
165c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(UserCondFalse, HostNVPTXFor));
166c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(UserCondFalse,
167c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
168c953409fSJohannes Doerfert
169c953409fSJohannes Doerfert VariantMatchInfo DeviceArchArm;
170ee05167cSJohannes Doerfert DeviceArchArm.addTrait(TraitProperty::device_arch_arm, "");
171c953409fSJohannes Doerfert EXPECT_FALSE(
172c953409fSJohannes Doerfert isVariantApplicableInContext(DeviceArchArm, HostLinuxParallelParallel));
173c953409fSJohannes Doerfert EXPECT_FALSE(
174c953409fSJohannes Doerfert isVariantApplicableInContext(DeviceArchArm, DeviceLinuxTargetParallel));
175c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArm, HostNVPTXFor));
176c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArm,
177c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
178c953409fSJohannes Doerfert
179c953409fSJohannes Doerfert APInt Score(32, 1000);
180c953409fSJohannes Doerfert VariantMatchInfo LLVMHostUserCondTrue;
181ee05167cSJohannes Doerfert LLVMHostUserCondTrue.addTrait(TraitProperty::implementation_vendor_llvm,
182ee05167cSJohannes Doerfert "");
183ee05167cSJohannes Doerfert LLVMHostUserCondTrue.addTrait(TraitProperty::device_kind_host, "");
184ee05167cSJohannes Doerfert LLVMHostUserCondTrue.addTrait(TraitProperty::device_kind_any, "");
185ee05167cSJohannes Doerfert LLVMHostUserCondTrue.addTrait(TraitProperty::user_condition_true, "",
186ee05167cSJohannes Doerfert &Score);
187c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(LLVMHostUserCondTrue,
188c953409fSJohannes Doerfert HostLinuxParallelParallel));
189c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrue,
190c953409fSJohannes Doerfert DeviceLinuxTargetParallel));
191c953409fSJohannes Doerfert EXPECT_TRUE(
192c953409fSJohannes Doerfert isVariantApplicableInContext(LLVMHostUserCondTrue, HostNVPTXFor));
193c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrue,
194c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
195c953409fSJohannes Doerfert
196c953409fSJohannes Doerfert VariantMatchInfo LLVMHostUserCondTrueCPU = LLVMHostUserCondTrue;
197ee05167cSJohannes Doerfert LLVMHostUserCondTrueCPU.addTrait(TraitProperty::device_kind_cpu, "");
198c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(LLVMHostUserCondTrueCPU,
199c953409fSJohannes Doerfert HostLinuxParallelParallel));
200c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrueCPU,
201c953409fSJohannes Doerfert DeviceLinuxTargetParallel));
202c953409fSJohannes Doerfert EXPECT_FALSE(
203c953409fSJohannes Doerfert isVariantApplicableInContext(LLVMHostUserCondTrueCPU, HostNVPTXFor));
204c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrueCPU,
205c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
206c953409fSJohannes Doerfert
207c953409fSJohannes Doerfert VariantMatchInfo GPU;
208ee05167cSJohannes Doerfert GPU.addTrait(TraitProperty::device_kind_gpu, "");
209c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPU, HostLinuxParallelParallel));
210c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPU, DeviceLinuxTargetParallel));
211c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(GPU, HostNVPTXFor));
212c953409fSJohannes Doerfert EXPECT_TRUE(
213c953409fSJohannes Doerfert isVariantApplicableInContext(GPU, DeviceNVPTXTargetTeamsParallel));
214c953409fSJohannes Doerfert
215c953409fSJohannes Doerfert VariantMatchInfo NoHost;
216ee05167cSJohannes Doerfert NoHost.addTrait(TraitProperty::device_kind_nohost, "");
217c953409fSJohannes Doerfert EXPECT_FALSE(
218c953409fSJohannes Doerfert isVariantApplicableInContext(NoHost, HostLinuxParallelParallel));
219c953409fSJohannes Doerfert EXPECT_TRUE(
220c953409fSJohannes Doerfert isVariantApplicableInContext(NoHost, DeviceLinuxTargetParallel));
221c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(NoHost, HostNVPTXFor));
222c953409fSJohannes Doerfert EXPECT_TRUE(
223c953409fSJohannes Doerfert isVariantApplicableInContext(NoHost, DeviceNVPTXTargetTeamsParallel));
224c953409fSJohannes Doerfert }
225c953409fSJohannes Doerfert { // variants with all sets
226c953409fSJohannes Doerfert VariantMatchInfo DeviceArchArmParallel;
227ee05167cSJohannes Doerfert DeviceArchArmParallel.addTrait(TraitProperty::construct_parallel_parallel,
228ee05167cSJohannes Doerfert "");
229ee05167cSJohannes Doerfert DeviceArchArmParallel.addTrait(TraitProperty::device_arch_arm, "");
230c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArmParallel,
231c953409fSJohannes Doerfert HostLinuxParallelParallel));
232c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArmParallel,
233c953409fSJohannes Doerfert DeviceLinuxTargetParallel));
234c953409fSJohannes Doerfert EXPECT_FALSE(
235c953409fSJohannes Doerfert isVariantApplicableInContext(DeviceArchArmParallel, HostNVPTXFor));
236c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(DeviceArchArmParallel,
237c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
238c953409fSJohannes Doerfert
239c953409fSJohannes Doerfert VariantMatchInfo LLVMHostUserCondTrueParallel;
240c953409fSJohannes Doerfert LLVMHostUserCondTrueParallel.addTrait(
241ee05167cSJohannes Doerfert TraitProperty::implementation_vendor_llvm, "");
242ee05167cSJohannes Doerfert LLVMHostUserCondTrueParallel.addTrait(TraitProperty::device_kind_host, "");
243ee05167cSJohannes Doerfert LLVMHostUserCondTrueParallel.addTrait(TraitProperty::device_kind_any, "");
244ee05167cSJohannes Doerfert LLVMHostUserCondTrueParallel.addTrait(TraitProperty::user_condition_true,
245ee05167cSJohannes Doerfert "");
246c953409fSJohannes Doerfert LLVMHostUserCondTrueParallel.addTrait(
247ee05167cSJohannes Doerfert TraitProperty::construct_parallel_parallel, "");
248c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(LLVMHostUserCondTrueParallel,
249c953409fSJohannes Doerfert HostLinuxParallelParallel));
250c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrueParallel,
251c953409fSJohannes Doerfert DeviceLinuxTargetParallel));
252c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrueParallel,
253c953409fSJohannes Doerfert HostNVPTXFor));
254c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(LLVMHostUserCondTrueParallel,
255c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
256c953409fSJohannes Doerfert
257c953409fSJohannes Doerfert VariantMatchInfo LLVMHostUserCondTrueParallelParallel =
258c953409fSJohannes Doerfert LLVMHostUserCondTrueParallel;
259c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallel.addTrait(
260ee05167cSJohannes Doerfert TraitProperty::construct_parallel_parallel, "");
261c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(
262c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallel, HostLinuxParallelParallel));
263c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(
264c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallel, DeviceLinuxTargetParallel));
265c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(
266c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallel, HostNVPTXFor));
267c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(
268c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallel, DeviceNVPTXTargetTeamsParallel));
269c953409fSJohannes Doerfert
270c953409fSJohannes Doerfert VariantMatchInfo LLVMHostUserCondTrueParallelParallelParallel =
271c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallel;
272c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallelParallel.addTrait(
273ee05167cSJohannes Doerfert TraitProperty::construct_parallel_parallel, "");
274c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(
275c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallelParallel,
276c953409fSJohannes Doerfert HostLinuxParallelParallel));
277c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(
278c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallelParallel,
279c953409fSJohannes Doerfert DeviceLinuxTargetParallel));
280c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(
281c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallelParallel, HostNVPTXFor));
282c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(
283c953409fSJohannes Doerfert LLVMHostUserCondTrueParallelParallelParallel,
284c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
285c953409fSJohannes Doerfert
286c953409fSJohannes Doerfert VariantMatchInfo GPUTargetTeams;
287ee05167cSJohannes Doerfert GPUTargetTeams.addTrait(TraitProperty::construct_target_target, "");
288ee05167cSJohannes Doerfert GPUTargetTeams.addTrait(TraitProperty::construct_teams_teams, "");
289ee05167cSJohannes Doerfert GPUTargetTeams.addTrait(TraitProperty::device_kind_gpu, "");
290c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPUTargetTeams,
291c953409fSJohannes Doerfert HostLinuxParallelParallel));
292c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPUTargetTeams,
293c953409fSJohannes Doerfert DeviceLinuxTargetParallel));
294c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPUTargetTeams, HostNVPTXFor));
295c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(GPUTargetTeams,
296c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
297c953409fSJohannes Doerfert
298c953409fSJohannes Doerfert VariantMatchInfo GPUTargetParallel;
299ee05167cSJohannes Doerfert GPUTargetParallel.addTrait(TraitProperty::construct_target_target, "");
300ee05167cSJohannes Doerfert GPUTargetParallel.addTrait(TraitProperty::construct_parallel_parallel, "");
301ee05167cSJohannes Doerfert GPUTargetParallel.addTrait(TraitProperty::device_kind_gpu, "");
302c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPUTargetParallel,
303c953409fSJohannes Doerfert HostLinuxParallelParallel));
304c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPUTargetParallel,
305c953409fSJohannes Doerfert DeviceLinuxTargetParallel));
306c953409fSJohannes Doerfert EXPECT_FALSE(isVariantApplicableInContext(GPUTargetParallel, HostNVPTXFor));
307c953409fSJohannes Doerfert EXPECT_TRUE(isVariantApplicableInContext(GPUTargetParallel,
308c953409fSJohannes Doerfert DeviceNVPTXTargetTeamsParallel));
309c953409fSJohannes Doerfert }
310c953409fSJohannes Doerfert }
311c953409fSJohannes Doerfert
TEST_F(OpenMPContextTest,ScoringSimple)312c953409fSJohannes Doerfert TEST_F(OpenMPContextTest, ScoringSimple) {
313c953409fSJohannes Doerfert // TODO: Add scoring tests (via getBestVariantMatchForContext).
314c953409fSJohannes Doerfert }
315c953409fSJohannes Doerfert
316c953409fSJohannes Doerfert } // namespace
317