//===-- VE.h - Top-level interface for VE representation --------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file contains the entry points for global functions defined in the LLVM // VE back-end. // //===----------------------------------------------------------------------===// #ifndef LLVM_LIB_TARGET_VE_VE_H #define LLVM_LIB_TARGET_VE_VE_H #include "MCTargetDesc/VEMCTargetDesc.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Target/TargetMachine.h" namespace llvm { class FunctionPass; class VETargetMachine; class formatted_raw_ostream; class AsmPrinter; class MCInst; class MachineInstr; FunctionPass *createVEISelDag(VETargetMachine &TM); FunctionPass *createVEPromoteToI1Pass(); void LowerVEMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI, AsmPrinter &AP); } // namespace llvm namespace llvm { // Enums corresponding to VE condition codes, both icc's and fcc's. These // values must be kept in sync with the ones in the .td file. namespace VECC { enum CondCodes { // Integer comparison CC_IG = 0, // Greater CC_IL = 1, // Less CC_INE = 2, // Not Equal CC_IEQ = 3, // Equal CC_IGE = 4, // Greater or Equal CC_ILE = 5, // Less or Equal // Floating point comparison CC_AF = 0 + 6, // Never CC_G = 1 + 6, // Greater CC_L = 2 + 6, // Less CC_NE = 3 + 6, // Not Equal CC_EQ = 4 + 6, // Equal CC_GE = 5 + 6, // Greater or Equal CC_LE = 6 + 6, // Less or Equal CC_NUM = 7 + 6, // Number CC_NAN = 8 + 6, // NaN CC_GNAN = 9 + 6, // Greater or NaN CC_LNAN = 10 + 6, // Less or NaN CC_NENAN = 11 + 6, // Not Equal or NaN CC_EQNAN = 12 + 6, // Equal or NaN CC_GENAN = 13 + 6, // Greater or Equal or NaN CC_LENAN = 14 + 6, // Less or Equal or NaN CC_AT = 15 + 6, // Always }; } inline static const char *VECondCodeToString(VECC::CondCodes CC) { switch (CC) { case VECC::CC_IG: return "gt"; case VECC::CC_IL: return "lt"; case VECC::CC_INE: return "ne"; case VECC::CC_IEQ: return "eq"; case VECC::CC_IGE: return "ge"; case VECC::CC_ILE: return "le"; case VECC::CC_AF: return "af"; case VECC::CC_G: return "gt"; case VECC::CC_L: return "lt"; case VECC::CC_NE: return "ne"; case VECC::CC_EQ: return "eq"; case VECC::CC_GE: return "ge"; case VECC::CC_LE: return "le"; case VECC::CC_NUM: return "num"; case VECC::CC_NAN: return "nan"; case VECC::CC_GNAN: return "gtnan"; case VECC::CC_LNAN: return "ltnan"; case VECC::CC_NENAN: return "nenan"; case VECC::CC_EQNAN: return "eqnan"; case VECC::CC_GENAN: return "genan"; case VECC::CC_LENAN: return "lenan"; case VECC::CC_AT: return "at"; } llvm_unreachable("Invalid cond code"); } // Different to Hi_32/Lo_32 the HI32 and LO32 functions // preserve the correct numerical value // on the LLVM data type for MC immediates (int64_t). inline static int64_t HI32(int64_t imm) { return (int32_t)(imm >> 32); } inline static int64_t LO32(int64_t imm) { return (int32_t)(imm); } } // namespace llvm #endif