PPCPredicates.cpp revision 263508
1//===-- PPCPredicates.cpp - PPC Branch Predicate Information --------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the PowerPC branch predicates.
11//
12//===----------------------------------------------------------------------===//
13
14#include "PPCPredicates.h"
15#include "llvm/Support/ErrorHandling.h"
16#include <cassert>
17using namespace llvm;
18
19PPC::Predicate PPC::InvertPredicate(PPC::Predicate Opcode) {
20  switch (Opcode) {
21  case PPC::PRED_EQ: return PPC::PRED_NE;
22  case PPC::PRED_NE: return PPC::PRED_EQ;
23  case PPC::PRED_LT: return PPC::PRED_GE;
24  case PPC::PRED_GE: return PPC::PRED_LT;
25  case PPC::PRED_GT: return PPC::PRED_LE;
26  case PPC::PRED_LE: return PPC::PRED_GT;
27  case PPC::PRED_NU: return PPC::PRED_UN;
28  case PPC::PRED_UN: return PPC::PRED_NU;
29  case PPC::PRED_EQ_MINUS: return PPC::PRED_NE_PLUS;
30  case PPC::PRED_NE_MINUS: return PPC::PRED_EQ_PLUS;
31  case PPC::PRED_LT_MINUS: return PPC::PRED_GE_PLUS;
32  case PPC::PRED_GE_MINUS: return PPC::PRED_LT_PLUS;
33  case PPC::PRED_GT_MINUS: return PPC::PRED_LE_PLUS;
34  case PPC::PRED_LE_MINUS: return PPC::PRED_GT_PLUS;
35  case PPC::PRED_NU_MINUS: return PPC::PRED_UN_PLUS;
36  case PPC::PRED_UN_MINUS: return PPC::PRED_NU_PLUS;
37  case PPC::PRED_EQ_PLUS: return PPC::PRED_NE_MINUS;
38  case PPC::PRED_NE_PLUS: return PPC::PRED_EQ_MINUS;
39  case PPC::PRED_LT_PLUS: return PPC::PRED_GE_MINUS;
40  case PPC::PRED_GE_PLUS: return PPC::PRED_LT_MINUS;
41  case PPC::PRED_GT_PLUS: return PPC::PRED_LE_MINUS;
42  case PPC::PRED_LE_PLUS: return PPC::PRED_GT_MINUS;
43  case PPC::PRED_NU_PLUS: return PPC::PRED_UN_MINUS;
44  case PPC::PRED_UN_PLUS: return PPC::PRED_NU_MINUS;
45  }
46  llvm_unreachable("Unknown PPC branch opcode!");
47}
48
49PPC::Predicate PPC::getSwappedPredicate(PPC::Predicate Opcode) {
50  switch (Opcode) {
51  case PPC::PRED_EQ: return PPC::PRED_EQ;
52  case PPC::PRED_NE: return PPC::PRED_NE;
53  case PPC::PRED_LT: return PPC::PRED_GT;
54  case PPC::PRED_GE: return PPC::PRED_LE;
55  case PPC::PRED_GT: return PPC::PRED_LT;
56  case PPC::PRED_LE: return PPC::PRED_GE;
57  case PPC::PRED_NU: return PPC::PRED_NU;
58  case PPC::PRED_UN: return PPC::PRED_UN;
59  case PPC::PRED_EQ_MINUS: return PPC::PRED_EQ_MINUS;
60  case PPC::PRED_NE_MINUS: return PPC::PRED_NE_MINUS;
61  case PPC::PRED_LT_MINUS: return PPC::PRED_GT_MINUS;
62  case PPC::PRED_GE_MINUS: return PPC::PRED_LE_MINUS;
63  case PPC::PRED_GT_MINUS: return PPC::PRED_LT_MINUS;
64  case PPC::PRED_LE_MINUS: return PPC::PRED_GE_MINUS;
65  case PPC::PRED_NU_MINUS: return PPC::PRED_NU_MINUS;
66  case PPC::PRED_UN_MINUS: return PPC::PRED_UN_MINUS;
67  case PPC::PRED_EQ_PLUS: return PPC::PRED_EQ_PLUS;
68  case PPC::PRED_NE_PLUS: return PPC::PRED_NE_PLUS;
69  case PPC::PRED_LT_PLUS: return PPC::PRED_GT_PLUS;
70  case PPC::PRED_GE_PLUS: return PPC::PRED_LE_PLUS;
71  case PPC::PRED_GT_PLUS: return PPC::PRED_LT_PLUS;
72  case PPC::PRED_LE_PLUS: return PPC::PRED_GE_PLUS;
73  case PPC::PRED_NU_PLUS: return PPC::PRED_NU_PLUS;
74  case PPC::PRED_UN_PLUS: return PPC::PRED_UN_PLUS;
75  }
76  llvm_unreachable("Unknown PPC branch opcode!");
77}
78
79