111424445SEvan Cheng //===-- PPCPredicates.cpp - PPC Branch Predicate Information --------------===// 211424445SEvan Cheng // 3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 611424445SEvan Cheng // 711424445SEvan Cheng //===----------------------------------------------------------------------===// 811424445SEvan Cheng // 911424445SEvan Cheng // This file implements the PowerPC branch predicates. 1011424445SEvan Cheng // 1111424445SEvan Cheng //===----------------------------------------------------------------------===// 1211424445SEvan Cheng 1311424445SEvan Cheng #include "PPCPredicates.h" 1411424445SEvan Cheng #include "llvm/Support/ErrorHandling.h" 1511424445SEvan Cheng #include <cassert> 1611424445SEvan Cheng using namespace llvm; 1711424445SEvan Cheng InvertPredicate(PPC::Predicate Opcode)1811424445SEvan ChengPPC::Predicate PPC::InvertPredicate(PPC::Predicate Opcode) { 1911424445SEvan Cheng switch (Opcode) { 2011424445SEvan Cheng case PPC::PRED_EQ: return PPC::PRED_NE; 2111424445SEvan Cheng case PPC::PRED_NE: return PPC::PRED_EQ; 2211424445SEvan Cheng case PPC::PRED_LT: return PPC::PRED_GE; 2311424445SEvan Cheng case PPC::PRED_GE: return PPC::PRED_LT; 2411424445SEvan Cheng case PPC::PRED_GT: return PPC::PRED_LE; 2511424445SEvan Cheng case PPC::PRED_LE: return PPC::PRED_GT; 2611424445SEvan Cheng case PPC::PRED_NU: return PPC::PRED_UN; 2711424445SEvan Cheng case PPC::PRED_UN: return PPC::PRED_NU; 2886247b6eSUlrich Weigand case PPC::PRED_EQ_MINUS: return PPC::PRED_NE_PLUS; 2986247b6eSUlrich Weigand case PPC::PRED_NE_MINUS: return PPC::PRED_EQ_PLUS; 3086247b6eSUlrich Weigand case PPC::PRED_LT_MINUS: return PPC::PRED_GE_PLUS; 3186247b6eSUlrich Weigand case PPC::PRED_GE_MINUS: return PPC::PRED_LT_PLUS; 3286247b6eSUlrich Weigand case PPC::PRED_GT_MINUS: return PPC::PRED_LE_PLUS; 3386247b6eSUlrich Weigand case PPC::PRED_LE_MINUS: return PPC::PRED_GT_PLUS; 3486247b6eSUlrich Weigand case PPC::PRED_NU_MINUS: return PPC::PRED_UN_PLUS; 3586247b6eSUlrich Weigand case PPC::PRED_UN_MINUS: return PPC::PRED_NU_PLUS; 3686247b6eSUlrich Weigand case PPC::PRED_EQ_PLUS: return PPC::PRED_NE_MINUS; 3786247b6eSUlrich Weigand case PPC::PRED_NE_PLUS: return PPC::PRED_EQ_MINUS; 3886247b6eSUlrich Weigand case PPC::PRED_LT_PLUS: return PPC::PRED_GE_MINUS; 3986247b6eSUlrich Weigand case PPC::PRED_GE_PLUS: return PPC::PRED_LT_MINUS; 4086247b6eSUlrich Weigand case PPC::PRED_GT_PLUS: return PPC::PRED_LE_MINUS; 4186247b6eSUlrich Weigand case PPC::PRED_LE_PLUS: return PPC::PRED_GT_MINUS; 4286247b6eSUlrich Weigand case PPC::PRED_NU_PLUS: return PPC::PRED_UN_MINUS; 4386247b6eSUlrich Weigand case PPC::PRED_UN_PLUS: return PPC::PRED_NU_MINUS; 44940ab934SHal Finkel 45940ab934SHal Finkel // Simple predicates for single condition-register bits. 46940ab934SHal Finkel case PPC::PRED_BIT_SET: return PPC::PRED_BIT_UNSET; 47940ab934SHal Finkel case PPC::PRED_BIT_UNSET: return PPC::PRED_BIT_SET; 4811424445SEvan Cheng } 49c2467c4eSDavid Blaikie llvm_unreachable("Unknown PPC branch opcode!"); 5011424445SEvan Cheng } 510f64e21bSHal Finkel getSwappedPredicate(PPC::Predicate Opcode)520f64e21bSHal FinkelPPC::Predicate PPC::getSwappedPredicate(PPC::Predicate Opcode) { 530f64e21bSHal Finkel switch (Opcode) { 540f64e21bSHal Finkel case PPC::PRED_EQ: return PPC::PRED_EQ; 550f64e21bSHal Finkel case PPC::PRED_NE: return PPC::PRED_NE; 560f64e21bSHal Finkel case PPC::PRED_LT: return PPC::PRED_GT; 570f64e21bSHal Finkel case PPC::PRED_GE: return PPC::PRED_LE; 580f64e21bSHal Finkel case PPC::PRED_GT: return PPC::PRED_LT; 590f64e21bSHal Finkel case PPC::PRED_LE: return PPC::PRED_GE; 600f64e21bSHal Finkel case PPC::PRED_NU: return PPC::PRED_NU; 610f64e21bSHal Finkel case PPC::PRED_UN: return PPC::PRED_UN; 6286247b6eSUlrich Weigand case PPC::PRED_EQ_MINUS: return PPC::PRED_EQ_MINUS; 6386247b6eSUlrich Weigand case PPC::PRED_NE_MINUS: return PPC::PRED_NE_MINUS; 6486247b6eSUlrich Weigand case PPC::PRED_LT_MINUS: return PPC::PRED_GT_MINUS; 6586247b6eSUlrich Weigand case PPC::PRED_GE_MINUS: return PPC::PRED_LE_MINUS; 6686247b6eSUlrich Weigand case PPC::PRED_GT_MINUS: return PPC::PRED_LT_MINUS; 6786247b6eSUlrich Weigand case PPC::PRED_LE_MINUS: return PPC::PRED_GE_MINUS; 6886247b6eSUlrich Weigand case PPC::PRED_NU_MINUS: return PPC::PRED_NU_MINUS; 6986247b6eSUlrich Weigand case PPC::PRED_UN_MINUS: return PPC::PRED_UN_MINUS; 7086247b6eSUlrich Weigand case PPC::PRED_EQ_PLUS: return PPC::PRED_EQ_PLUS; 7186247b6eSUlrich Weigand case PPC::PRED_NE_PLUS: return PPC::PRED_NE_PLUS; 7286247b6eSUlrich Weigand case PPC::PRED_LT_PLUS: return PPC::PRED_GT_PLUS; 7386247b6eSUlrich Weigand case PPC::PRED_GE_PLUS: return PPC::PRED_LE_PLUS; 7486247b6eSUlrich Weigand case PPC::PRED_GT_PLUS: return PPC::PRED_LT_PLUS; 7586247b6eSUlrich Weigand case PPC::PRED_LE_PLUS: return PPC::PRED_GE_PLUS; 7686247b6eSUlrich Weigand case PPC::PRED_NU_PLUS: return PPC::PRED_NU_PLUS; 7786247b6eSUlrich Weigand case PPC::PRED_UN_PLUS: return PPC::PRED_UN_PLUS; 78940ab934SHal Finkel 79940ab934SHal Finkel case PPC::PRED_BIT_SET: 80940ab934SHal Finkel case PPC::PRED_BIT_UNSET: 81940ab934SHal Finkel llvm_unreachable("Invalid use of bit predicate code"); 820f64e21bSHal Finkel } 83c2467c4eSDavid Blaikie llvm_unreachable("Unknown PPC branch opcode!"); 840f64e21bSHal Finkel } 850f64e21bSHal Finkel 86