Path: blob/main/contrib/llvm-project/llvm/lib/Target/PowerPC/MCTargetDesc/PPCPredicates.cpp
35293 views
//===-- PPCPredicates.cpp - PPC Branch Predicate Information --------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file implements the PowerPC branch predicates.9//10//===----------------------------------------------------------------------===//1112#include "PPCPredicates.h"13#include "llvm/Support/ErrorHandling.h"14using namespace llvm;1516PPC::Predicate PPC::InvertPredicate(PPC::Predicate Opcode) {17switch (Opcode) {18case PPC::PRED_EQ: return PPC::PRED_NE;19case PPC::PRED_NE: return PPC::PRED_EQ;20case PPC::PRED_LT: return PPC::PRED_GE;21case PPC::PRED_GE: return PPC::PRED_LT;22case PPC::PRED_GT: return PPC::PRED_LE;23case PPC::PRED_LE: return PPC::PRED_GT;24case PPC::PRED_NU: return PPC::PRED_UN;25case PPC::PRED_UN: return PPC::PRED_NU;26case PPC::PRED_EQ_MINUS: return PPC::PRED_NE_PLUS;27case PPC::PRED_NE_MINUS: return PPC::PRED_EQ_PLUS;28case PPC::PRED_LT_MINUS: return PPC::PRED_GE_PLUS;29case PPC::PRED_GE_MINUS: return PPC::PRED_LT_PLUS;30case PPC::PRED_GT_MINUS: return PPC::PRED_LE_PLUS;31case PPC::PRED_LE_MINUS: return PPC::PRED_GT_PLUS;32case PPC::PRED_NU_MINUS: return PPC::PRED_UN_PLUS;33case PPC::PRED_UN_MINUS: return PPC::PRED_NU_PLUS;34case PPC::PRED_EQ_PLUS: return PPC::PRED_NE_MINUS;35case PPC::PRED_NE_PLUS: return PPC::PRED_EQ_MINUS;36case PPC::PRED_LT_PLUS: return PPC::PRED_GE_MINUS;37case PPC::PRED_GE_PLUS: return PPC::PRED_LT_MINUS;38case PPC::PRED_GT_PLUS: return PPC::PRED_LE_MINUS;39case PPC::PRED_LE_PLUS: return PPC::PRED_GT_MINUS;40case PPC::PRED_NU_PLUS: return PPC::PRED_UN_MINUS;41case PPC::PRED_UN_PLUS: return PPC::PRED_NU_MINUS;4243// Simple predicates for single condition-register bits.44case PPC::PRED_BIT_SET: return PPC::PRED_BIT_UNSET;45case PPC::PRED_BIT_UNSET: return PPC::PRED_BIT_SET;46}47llvm_unreachable("Unknown PPC branch opcode!");48}4950PPC::Predicate PPC::getSwappedPredicate(PPC::Predicate Opcode) {51switch (Opcode) {52case PPC::PRED_EQ: return PPC::PRED_EQ;53case PPC::PRED_NE: return PPC::PRED_NE;54case PPC::PRED_LT: return PPC::PRED_GT;55case PPC::PRED_GE: return PPC::PRED_LE;56case PPC::PRED_GT: return PPC::PRED_LT;57case PPC::PRED_LE: return PPC::PRED_GE;58case PPC::PRED_NU: return PPC::PRED_NU;59case PPC::PRED_UN: return PPC::PRED_UN;60case PPC::PRED_EQ_MINUS: return PPC::PRED_EQ_MINUS;61case PPC::PRED_NE_MINUS: return PPC::PRED_NE_MINUS;62case PPC::PRED_LT_MINUS: return PPC::PRED_GT_MINUS;63case PPC::PRED_GE_MINUS: return PPC::PRED_LE_MINUS;64case PPC::PRED_GT_MINUS: return PPC::PRED_LT_MINUS;65case PPC::PRED_LE_MINUS: return PPC::PRED_GE_MINUS;66case PPC::PRED_NU_MINUS: return PPC::PRED_NU_MINUS;67case PPC::PRED_UN_MINUS: return PPC::PRED_UN_MINUS;68case PPC::PRED_EQ_PLUS: return PPC::PRED_EQ_PLUS;69case PPC::PRED_NE_PLUS: return PPC::PRED_NE_PLUS;70case PPC::PRED_LT_PLUS: return PPC::PRED_GT_PLUS;71case PPC::PRED_GE_PLUS: return PPC::PRED_LE_PLUS;72case PPC::PRED_GT_PLUS: return PPC::PRED_LT_PLUS;73case PPC::PRED_LE_PLUS: return PPC::PRED_GE_PLUS;74case PPC::PRED_NU_PLUS: return PPC::PRED_NU_PLUS;75case PPC::PRED_UN_PLUS: return PPC::PRED_UN_PLUS;7677case PPC::PRED_BIT_SET:78case PPC::PRED_BIT_UNSET:79llvm_unreachable("Invalid use of bit predicate code");80}81llvm_unreachable("Unknown PPC branch opcode!");82}83848586