xref: /llvm-project/llvm/lib/Target/AMDGPU/AMDGPUPredicateControl.td (revision 6d160a49c2e7f36367de3f61f0460e28921450d5)
1f122268cSIvan Kosarev//===-- AMDGPUPredicateControl.td --------------------------*- tablegen -*-===//
2f122268cSIvan Kosarev//
3f122268cSIvan Kosarev// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4f122268cSIvan Kosarev// See https://llvm.org/LICENSE.txt for license information.
5f122268cSIvan Kosarev// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f122268cSIvan Kosarev//
7f122268cSIvan Kosarev//===----------------------------------------------------------------------===//
8f122268cSIvan Kosarev
9f122268cSIvan Kosarevdef TruePredicate : Predicate<"">;
10f122268cSIvan Kosarev
11f122268cSIvan Kosarev// FIXME: Tablegen should specially supports this
12f122268cSIvan Kosarevdef FalsePredicate : Predicate<"false">;
13f122268cSIvan Kosarev
14f122268cSIvan Kosarev// Prevent using other kinds of predicates where True16 predicates are
15f122268cSIvan Kosarev// expected by giving them their own class.
16f122268cSIvan Kosarevclass True16PredicateClass<string cond> : Predicate<cond>;
17f122268cSIvan Kosarevdef NoTrue16Predicate : True16PredicateClass<"">;
18f122268cSIvan Kosarev
19f122268cSIvan Kosarevclass PredicateControl {
20f122268cSIvan Kosarev  Predicate SubtargetPredicate = TruePredicate;
21f122268cSIvan Kosarev  Predicate AssemblerPredicate = TruePredicate;
22f122268cSIvan Kosarev  Predicate WaveSizePredicate = TruePredicate;
23f122268cSIvan Kosarev  True16PredicateClass True16Predicate = NoTrue16Predicate;
24f122268cSIvan Kosarev  list<Predicate> OtherPredicates = [];
25f122268cSIvan Kosarev  list<Predicate> Predicates =
26*6d160a49SIvan Kosarev      !foldl(OtherPredicates, [SubtargetPredicate, AssemblerPredicate,
27*6d160a49SIvan Kosarev                               WaveSizePredicate, True16Predicate],
28*6d160a49SIvan Kosarev             preds, p,
29*6d160a49SIvan Kosarev             preds # !listremove([p], [TruePredicate, NoTrue16Predicate] # preds));
30f122268cSIvan Kosarev}
31