brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 80c37f8 Raw
85 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8//9// This file implements the PowerPC branch predicates.10//11//===----------------------------------------------------------------------===//12 13#include "PPCPredicates.h"14#include "llvm/Support/ErrorHandling.h"15using namespace llvm;16 17PPC::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 51PPC::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