| //===-- AMDGPUPredicateControl.td --------------------------*- tablegen -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| def TruePredicate : Predicate<"">; | |
| // FIXME: Tablegen should specially supports this | |
| def FalsePredicate : Predicate<"false">; | |
| // Prevent using other kinds of predicates where True16 predicates are | |
| // expected by giving them their own class. | |
| class True16PredicateClass<string cond> : Predicate<cond>; | |
| def NoTrue16Predicate : True16PredicateClass<"">; | |
| class PredicateControl { | |
| Predicate SubtargetPredicate = TruePredicate; | |
| Predicate AssemblerPredicate = TruePredicate; | |
| Predicate WaveSizePredicate = TruePredicate; | |
| True16PredicateClass True16Predicate = NoTrue16Predicate; | |
| list<Predicate> OtherPredicates = []; | |
| list<Predicate> Predicates = | |
| !foldl(OtherPredicates, [SubtargetPredicate, AssemblerPredicate, | |
| WaveSizePredicate, True16Predicate], | |
| preds, p, | |
| preds # !listremove([p], [TruePredicate, NoTrue16Predicate] # preds)); | |
| } |