LLVM API Documentation

PPCPredicates.cpp
Go to the documentation of this file.
00001 //===-- PPCPredicates.cpp - PPC Branch Predicate Information --------------===//
00002 //
00003 //                     The LLVM Compiler Infrastructure
00004 //
00005 // This file is distributed under the University of Illinois Open Source
00006 // License. See LICENSE.TXT for details.
00007 //
00008 //===----------------------------------------------------------------------===//
00009 //
00010 // This file implements the PowerPC branch predicates.
00011 //
00012 //===----------------------------------------------------------------------===//
00013 
00014 #include "PPCPredicates.h"
00015 #include "llvm/Support/ErrorHandling.h"
00016 #include <cassert>
00017 using namespace llvm;
00018 
00019 PPC::Predicate PPC::InvertPredicate(PPC::Predicate Opcode) {
00020   switch (Opcode) {
00021   case PPC::PRED_EQ: return PPC::PRED_NE;
00022   case PPC::PRED_NE: return PPC::PRED_EQ;
00023   case PPC::PRED_LT: return PPC::PRED_GE;
00024   case PPC::PRED_GE: return PPC::PRED_LT;
00025   case PPC::PRED_GT: return PPC::PRED_LE;
00026   case PPC::PRED_LE: return PPC::PRED_GT;
00027   case PPC::PRED_NU: return PPC::PRED_UN;
00028   case PPC::PRED_UN: return PPC::PRED_NU;
00029   case PPC::PRED_EQ_MINUS: return PPC::PRED_NE_PLUS;
00030   case PPC::PRED_NE_MINUS: return PPC::PRED_EQ_PLUS;
00031   case PPC::PRED_LT_MINUS: return PPC::PRED_GE_PLUS;
00032   case PPC::PRED_GE_MINUS: return PPC::PRED_LT_PLUS;
00033   case PPC::PRED_GT_MINUS: return PPC::PRED_LE_PLUS;
00034   case PPC::PRED_LE_MINUS: return PPC::PRED_GT_PLUS;
00035   case PPC::PRED_NU_MINUS: return PPC::PRED_UN_PLUS;
00036   case PPC::PRED_UN_MINUS: return PPC::PRED_NU_PLUS;
00037   case PPC::PRED_EQ_PLUS: return PPC::PRED_NE_MINUS;
00038   case PPC::PRED_NE_PLUS: return PPC::PRED_EQ_MINUS;
00039   case PPC::PRED_LT_PLUS: return PPC::PRED_GE_MINUS;
00040   case PPC::PRED_GE_PLUS: return PPC::PRED_LT_MINUS;
00041   case PPC::PRED_GT_PLUS: return PPC::PRED_LE_MINUS;
00042   case PPC::PRED_LE_PLUS: return PPC::PRED_GT_MINUS;
00043   case PPC::PRED_NU_PLUS: return PPC::PRED_UN_MINUS;
00044   case PPC::PRED_UN_PLUS: return PPC::PRED_NU_MINUS;
00045 
00046   // Simple predicates for single condition-register bits.
00047   case PPC::PRED_BIT_SET:   return PPC::PRED_BIT_UNSET;
00048   case PPC::PRED_BIT_UNSET: return PPC::PRED_BIT_SET;
00049   }
00050   llvm_unreachable("Unknown PPC branch opcode!");
00051 }
00052 
00053 PPC::Predicate PPC::getSwappedPredicate(PPC::Predicate Opcode) {
00054   switch (Opcode) {
00055   case PPC::PRED_EQ: return PPC::PRED_EQ;
00056   case PPC::PRED_NE: return PPC::PRED_NE;
00057   case PPC::PRED_LT: return PPC::PRED_GT;
00058   case PPC::PRED_GE: return PPC::PRED_LE;
00059   case PPC::PRED_GT: return PPC::PRED_LT;
00060   case PPC::PRED_LE: return PPC::PRED_GE;
00061   case PPC::PRED_NU: return PPC::PRED_NU;
00062   case PPC::PRED_UN: return PPC::PRED_UN;
00063   case PPC::PRED_EQ_MINUS: return PPC::PRED_EQ_MINUS;
00064   case PPC::PRED_NE_MINUS: return PPC::PRED_NE_MINUS;
00065   case PPC::PRED_LT_MINUS: return PPC::PRED_GT_MINUS;
00066   case PPC::PRED_GE_MINUS: return PPC::PRED_LE_MINUS;
00067   case PPC::PRED_GT_MINUS: return PPC::PRED_LT_MINUS;
00068   case PPC::PRED_LE_MINUS: return PPC::PRED_GE_MINUS;
00069   case PPC::PRED_NU_MINUS: return PPC::PRED_NU_MINUS;
00070   case PPC::PRED_UN_MINUS: return PPC::PRED_UN_MINUS;
00071   case PPC::PRED_EQ_PLUS: return PPC::PRED_EQ_PLUS;
00072   case PPC::PRED_NE_PLUS: return PPC::PRED_NE_PLUS;
00073   case PPC::PRED_LT_PLUS: return PPC::PRED_GT_PLUS;
00074   case PPC::PRED_GE_PLUS: return PPC::PRED_LE_PLUS;
00075   case PPC::PRED_GT_PLUS: return PPC::PRED_LT_PLUS;
00076   case PPC::PRED_LE_PLUS: return PPC::PRED_GE_PLUS;
00077   case PPC::PRED_NU_PLUS: return PPC::PRED_NU_PLUS;
00078   case PPC::PRED_UN_PLUS: return PPC::PRED_UN_PLUS;
00079 
00080   case PPC::PRED_BIT_SET:
00081   case PPC::PRED_BIT_UNSET:
00082     llvm_unreachable("Invalid use of bit predicate code");
00083   }
00084   llvm_unreachable("Unknown PPC branch opcode!");
00085 }
00086