1 //===-- PPCPredicates.cpp - PPC Branch Predicate Information --------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // This file implements the PowerPC branch predicates.
11 //===----------------------------------------------------------------------===//
13 #include "PPCPredicates.h"
14 #include "llvm/Support/ErrorHandling.h"
18 PPC::Predicate
PPC::InvertPredicate(PPC::Predicate Opcode
) {
20 case PPC::PRED_EQ
: return PPC::PRED_NE
;
21 case PPC::PRED_NE
: return PPC::PRED_EQ
;
22 case PPC::PRED_LT
: return PPC::PRED_GE
;
23 case PPC::PRED_GE
: return PPC::PRED_LT
;
24 case PPC::PRED_GT
: return PPC::PRED_LE
;
25 case PPC::PRED_LE
: return PPC::PRED_GT
;
26 case PPC::PRED_NU
: return PPC::PRED_UN
;
27 case PPC::PRED_UN
: return PPC::PRED_NU
;
28 case PPC::PRED_EQ_MINUS
: return PPC::PRED_NE_PLUS
;
29 case PPC::PRED_NE_MINUS
: return PPC::PRED_EQ_PLUS
;
30 case PPC::PRED_LT_MINUS
: return PPC::PRED_GE_PLUS
;
31 case PPC::PRED_GE_MINUS
: return PPC::PRED_LT_PLUS
;
32 case PPC::PRED_GT_MINUS
: return PPC::PRED_LE_PLUS
;
33 case PPC::PRED_LE_MINUS
: return PPC::PRED_GT_PLUS
;
34 case PPC::PRED_NU_MINUS
: return PPC::PRED_UN_PLUS
;
35 case PPC::PRED_UN_MINUS
: return PPC::PRED_NU_PLUS
;
36 case PPC::PRED_EQ_PLUS
: return PPC::PRED_NE_MINUS
;
37 case PPC::PRED_NE_PLUS
: return PPC::PRED_EQ_MINUS
;
38 case PPC::PRED_LT_PLUS
: return PPC::PRED_GE_MINUS
;
39 case PPC::PRED_GE_PLUS
: return PPC::PRED_LT_MINUS
;
40 case PPC::PRED_GT_PLUS
: return PPC::PRED_LE_MINUS
;
41 case PPC::PRED_LE_PLUS
: return PPC::PRED_GT_MINUS
;
42 case PPC::PRED_NU_PLUS
: return PPC::PRED_UN_MINUS
;
43 case PPC::PRED_UN_PLUS
: return PPC::PRED_NU_MINUS
;
45 // Simple predicates for single condition-register bits.
46 case PPC::PRED_BIT_SET
: return PPC::PRED_BIT_UNSET
;
47 case PPC::PRED_BIT_UNSET
: return PPC::PRED_BIT_SET
;
49 llvm_unreachable("Unknown PPC branch opcode!");
52 PPC::Predicate
PPC::getSwappedPredicate(PPC::Predicate Opcode
) {
54 case PPC::PRED_EQ
: return PPC::PRED_EQ
;
55 case PPC::PRED_NE
: return PPC::PRED_NE
;
56 case PPC::PRED_LT
: return PPC::PRED_GT
;
57 case PPC::PRED_GE
: return PPC::PRED_LE
;
58 case PPC::PRED_GT
: return PPC::PRED_LT
;
59 case PPC::PRED_LE
: return PPC::PRED_GE
;
60 case PPC::PRED_NU
: return PPC::PRED_NU
;
61 case PPC::PRED_UN
: return PPC::PRED_UN
;
62 case PPC::PRED_EQ_MINUS
: return PPC::PRED_EQ_MINUS
;
63 case PPC::PRED_NE_MINUS
: return PPC::PRED_NE_MINUS
;
64 case PPC::PRED_LT_MINUS
: return PPC::PRED_GT_MINUS
;
65 case PPC::PRED_GE_MINUS
: return PPC::PRED_LE_MINUS
;
66 case PPC::PRED_GT_MINUS
: return PPC::PRED_LT_MINUS
;
67 case PPC::PRED_LE_MINUS
: return PPC::PRED_GE_MINUS
;
68 case PPC::PRED_NU_MINUS
: return PPC::PRED_NU_MINUS
;
69 case PPC::PRED_UN_MINUS
: return PPC::PRED_UN_MINUS
;
70 case PPC::PRED_EQ_PLUS
: return PPC::PRED_EQ_PLUS
;
71 case PPC::PRED_NE_PLUS
: return PPC::PRED_NE_PLUS
;
72 case PPC::PRED_LT_PLUS
: return PPC::PRED_GT_PLUS
;
73 case PPC::PRED_GE_PLUS
: return PPC::PRED_LE_PLUS
;
74 case PPC::PRED_GT_PLUS
: return PPC::PRED_LT_PLUS
;
75 case PPC::PRED_LE_PLUS
: return PPC::PRED_GE_PLUS
;
76 case PPC::PRED_NU_PLUS
: return PPC::PRED_NU_PLUS
;
77 case PPC::PRED_UN_PLUS
: return PPC::PRED_UN_PLUS
;
79 case PPC::PRED_BIT_SET
:
80 case PPC::PRED_BIT_UNSET
:
81 llvm_unreachable("Invalid use of bit predicate code");
83 llvm_unreachable("Unknown PPC branch opcode!");