Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/PowerPC/MCTargetDesc/PPCPredicates.cpp
35293 views
1
//===-- PPCPredicates.cpp - PPC Branch Predicate Information --------------===//
2
//
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
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file implements the PowerPC branch predicates.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "PPCPredicates.h"
14
#include "llvm/Support/ErrorHandling.h"
15
using namespace llvm;
16
17
PPC::Predicate PPC::InvertPredicate(PPC::Predicate Opcode) {
18
switch (Opcode) {
19
case PPC::PRED_EQ: return PPC::PRED_NE;
20
case PPC::PRED_NE: return PPC::PRED_EQ;
21
case PPC::PRED_LT: return PPC::PRED_GE;
22
case PPC::PRED_GE: return PPC::PRED_LT;
23
case PPC::PRED_GT: return PPC::PRED_LE;
24
case PPC::PRED_LE: return PPC::PRED_GT;
25
case PPC::PRED_NU: return PPC::PRED_UN;
26
case PPC::PRED_UN: return PPC::PRED_NU;
27
case PPC::PRED_EQ_MINUS: return PPC::PRED_NE_PLUS;
28
case PPC::PRED_NE_MINUS: return PPC::PRED_EQ_PLUS;
29
case PPC::PRED_LT_MINUS: return PPC::PRED_GE_PLUS;
30
case PPC::PRED_GE_MINUS: return PPC::PRED_LT_PLUS;
31
case PPC::PRED_GT_MINUS: return PPC::PRED_LE_PLUS;
32
case PPC::PRED_LE_MINUS: return PPC::PRED_GT_PLUS;
33
case PPC::PRED_NU_MINUS: return PPC::PRED_UN_PLUS;
34
case PPC::PRED_UN_MINUS: return PPC::PRED_NU_PLUS;
35
case PPC::PRED_EQ_PLUS: return PPC::PRED_NE_MINUS;
36
case PPC::PRED_NE_PLUS: return PPC::PRED_EQ_MINUS;
37
case PPC::PRED_LT_PLUS: return PPC::PRED_GE_MINUS;
38
case PPC::PRED_GE_PLUS: return PPC::PRED_LT_MINUS;
39
case PPC::PRED_GT_PLUS: return PPC::PRED_LE_MINUS;
40
case PPC::PRED_LE_PLUS: return PPC::PRED_GT_MINUS;
41
case PPC::PRED_NU_PLUS: return PPC::PRED_UN_MINUS;
42
case PPC::PRED_UN_PLUS: return PPC::PRED_NU_MINUS;
43
44
// Simple predicates for single condition-register bits.
45
case PPC::PRED_BIT_SET: return PPC::PRED_BIT_UNSET;
46
case PPC::PRED_BIT_UNSET: return PPC::PRED_BIT_SET;
47
}
48
llvm_unreachable("Unknown PPC branch opcode!");
49
}
50
51
PPC::Predicate PPC::getSwappedPredicate(PPC::Predicate Opcode) {
52
switch (Opcode) {
53
case PPC::PRED_EQ: return PPC::PRED_EQ;
54
case PPC::PRED_NE: return PPC::PRED_NE;
55
case PPC::PRED_LT: return PPC::PRED_GT;
56
case PPC::PRED_GE: return PPC::PRED_LE;
57
case PPC::PRED_GT: return PPC::PRED_LT;
58
case PPC::PRED_LE: return PPC::PRED_GE;
59
case PPC::PRED_NU: return PPC::PRED_NU;
60
case PPC::PRED_UN: return PPC::PRED_UN;
61
case PPC::PRED_EQ_MINUS: return PPC::PRED_EQ_MINUS;
62
case PPC::PRED_NE_MINUS: return PPC::PRED_NE_MINUS;
63
case PPC::PRED_LT_MINUS: return PPC::PRED_GT_MINUS;
64
case PPC::PRED_GE_MINUS: return PPC::PRED_LE_MINUS;
65
case PPC::PRED_GT_MINUS: return PPC::PRED_LT_MINUS;
66
case PPC::PRED_LE_MINUS: return PPC::PRED_GE_MINUS;
67
case PPC::PRED_NU_MINUS: return PPC::PRED_NU_MINUS;
68
case PPC::PRED_UN_MINUS: return PPC::PRED_UN_MINUS;
69
case PPC::PRED_EQ_PLUS: return PPC::PRED_EQ_PLUS;
70
case PPC::PRED_NE_PLUS: return PPC::PRED_NE_PLUS;
71
case PPC::PRED_LT_PLUS: return PPC::PRED_GT_PLUS;
72
case PPC::PRED_GE_PLUS: return PPC::PRED_LE_PLUS;
73
case PPC::PRED_GT_PLUS: return PPC::PRED_LT_PLUS;
74
case PPC::PRED_LE_PLUS: return PPC::PRED_GE_PLUS;
75
case PPC::PRED_NU_PLUS: return PPC::PRED_NU_PLUS;
76
case PPC::PRED_UN_PLUS: return PPC::PRED_UN_PLUS;
77
78
case PPC::PRED_BIT_SET:
79
case PPC::PRED_BIT_UNSET:
80
llvm_unreachable("Invalid use of bit predicate code");
81
}
82
llvm_unreachable("Unknown PPC branch opcode!");
83
}
84
85
86