Home | History | Annotate | Download | only in MCTargetDesc
      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>
     17 using namespace llvm;
     18 
     19 PPC::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 
     49 PPC::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