@@ -98,6 +98,46 @@ def getMatchedFromList(self, features, alist):
98
98
except ValueError as e :
99
99
raise ValueError ("Error in UNSUPPORTED list:\n %s" % str (e ))
100
100
101
+ def make_default_features_list (self , expr , triple , add_default = True ):
102
+ ### EXCEPTIONS LIST
103
+ # TODO: Define elsewhere?
104
+ exceptions = {}
105
+ exceptions ["spir64" ]= {
106
+ "cuda" :False , "hip" :False ,
107
+ }
108
+ exceptions ["system" ]= {
109
+ "linux" :True , "windows" :False , "system-windows" :False ,
110
+ "run-mode" :False , "TEMPORARY_DISABLED" :False ,
111
+ }
112
+ queried_features = []
113
+ for f in expr :
114
+ queried_features = queried_features + re .findall ("[-+=._a-zA-Z0-9]+" , f )
115
+
116
+ features = []
117
+ for f in queried_features :
118
+ if (exceptions [triple ].get (
119
+ f ,exceptions ["system" ].get (f ,add_default ))):
120
+ features .append (f )
121
+ return features
122
+
123
+ def select_triples_for_test (self , test ):
124
+ # Check Triples
125
+ triples = set ()
126
+ possible_triples = ["spir64" ]
127
+ for triple in possible_triples :
128
+ unsupported = self .make_default_features_list (test .unsupported ,triple ,False )
129
+ required = self .make_default_features_list (test .requires ,triple )
130
+ xfails = self .make_default_features_list (test .xfails ,triple ,False )
131
+ if test .getMissingRequiredFeaturesFromList (required ):
132
+ continue
133
+ if self .getMatchedFromList (unsupported , test .unsupported ):
134
+ continue
135
+ #if "*" in test.xfails or self.getMatchedFromList(xfails, test.xfails):
136
+ # continue
137
+ triples .add (triple )
138
+
139
+ return triples
140
+
101
141
def select_devices_for_test (self , test ):
102
142
devices = []
103
143
for d in test .config .sycl_devices :
@@ -157,8 +197,11 @@ def execute(self, test, litConfig):
157
197
devices_for_test = []
158
198
triples = set ()
159
199
if "run-mode" not in test .config .available_features :
160
- # TODO: Use requires/unsupported to decide triples to build for
161
- triples .add ("spir64" )
200
+ triples = self .select_triples_for_test (test )
201
+ if not triples :
202
+ return lit .Test .Result (
203
+ lit .Test .UNSUPPORTED , "No supported backend to build for"
204
+ )
162
205
else :
163
206
devices_for_test = self .select_devices_for_test (test )
164
207
if not devices_for_test :
0 commit comments