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