PPCISelLowering.h revision 65c3c8f323198b99b88b109654194540cf9b3fa5
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//===-- PPCISelLowering.h - PPC32 DAG Lowering Interface --------*- C++ -*-===// 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// The LLVM Compiler Infrastructure 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// This file is distributed under the University of Illinois Open Source 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// License. See LICENSE.TXT for details. 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//===----------------------------------------------------------------------===// 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// This file defines the interfaces that PPC uses to lower LLVM code into a 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// selection DAG. 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project//===----------------------------------------------------------------------===// 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#define LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "llvm/Target/TargetLowering.h" 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "llvm/CodeGen/SelectionDAG.h" 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "PPC.h" 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "PPCSubtarget.h" 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace llvm { 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project namespace PPCISD { 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project enum NodeType { 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Start the numbering where the builtin ops and target ops leave off. 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FIRST_NUMBER = ISD::BUILTIN_OP_END, 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// FSEL - Traditional three-operand fsel node. 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSEL, 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// FCFID - The FCFID instruction, taking an f64 operand and producing 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// and f64 value containing the FP representation of the integer that 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// was temporarily in the f64 operand. 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FCFID, 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// FCTI[D,W]Z - The FCTIDZ and FCTIWZ instructions, taking an f32 or f64 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// operand, producing an f64 value containing the integer representation 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// of that FP value. 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FCTIDZ, FCTIWZ, 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// STFIWX - The STFIWX instruction. The first operand is an input token 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// chain, then an f64 value to store, then an address to store it to, 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// then a SRCVALUE for the address. 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STFIWX, 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // VMADDFP, VNMSUBFP - The VMADDFP and VNMSUBFP instructions, taking 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // three v4f32 operands and producing a v4f32 result. 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project VMADDFP, VNMSUBFP, 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// VPERM - The PPC VPERM Instruction. 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project VPERM, 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Hi/Lo - These represent the high and low 16-bit parts of a global 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// address respectively. These nodes have two operands, the first of 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// which must be a TargetGlobalAddress, and the second of which must be a 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Constant. Selected naively, these turn into 'lis G+C' and 'li G+C', 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// though these are usually folded into other nodes. 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Hi, Lo, 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project TOC_ENTRY, 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// OPRC, CHAIN = DYNALLOC(CHAIN, NEGSIZE, FRAME_INDEX) 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// This instruction is lowered in PPCRegisterInfo::eliminateFrameIndex to 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// compute an allocation on the stack. 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DYNALLOC, 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// GlobalBaseReg - On Darwin, this node represents the result of the mflr 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// at function entry, used for PIC code. 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project GlobalBaseReg, 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// These nodes represent the 32-bit PPC shifts that operate on 6-bit 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// shift amounts. These nodes are generated by the multi-precision shift 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// code. 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SRL, SRA, SHL, 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// EXTSW_32 - This is the EXTSW instruction for use with "32-bit" 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// registers. 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTSW_32, 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// STD_32 - This is the STD instruction for use with "32-bit" registers. 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD_32, 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// CALL - A direct function call. 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CALL_Darwin, CALL_SVR4, 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// NOP - Special NOP which follows 64-bit SVR4 calls. 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP, 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// CHAIN,FLAG = MTCTR(VAL, CHAIN[, INFLAG]) - Directly corresponds to a 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// MTCTR instruction. 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MTCTR, 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// CHAIN,FLAG = BCTRL(CHAIN, INFLAG) - Directly corresponds to a 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// BCTRL instruction. 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BCTRL_Darwin, BCTRL_SVR4, 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Return with a flag operand, matched by 'blr' 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project RET_FLAG, 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// R32 = MFCR(CRREG, INFLAG) - Represents the MFCR/MFOCRF instructions. 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// This copies the bits corresponding to the specified CRREG into the 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// resultant GPR. Bits corresponding to other CR regs are undefined. 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MFCR, 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// RESVEC = VCMP(LHS, RHS, OPC) - Represents one of the altivec VCMP* 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// instructions. For lack of better number, we use the opcode number 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// encoding for the OPC field to identify the compare. For example, 838 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// is VCMPGTSH. 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project VCMP, 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// RESVEC, OUTFLAG = VCMPo(LHS, RHS, OPC) - Represents one of the 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// altivec VCMP*o instructions. For lack of better number, we use the 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// opcode number encoding for the OPC field to identify the compare. For 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// example, 838 is VCMPGTSH. 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project VCMPo, 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// CHAIN = COND_BRANCH CHAIN, CRRC, OPC, DESTBB [, INFLAG] - This 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// corresponds to the COND_BRANCH pseudo instruction. CRRC is the 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// condition register to branch on, OPC is the branch opcode to use (e.g. 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// PPC::BLE), DESTBB is the destination block to branch to, and INFLAG is 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// an optional input flag argument. 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COND_BRANCH, 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// CHAIN = STBRX CHAIN, GPRC, Ptr, SRCVALUE, Type - This is a 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// byte-swapping store instruction. It byte-swaps the low "Type" bits of 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// the GPRC input, then stores it through Ptr. Type can be either i16 or 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// i32. 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STBRX, 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// GPRC, CHAIN = LBRX CHAIN, Ptr, SRCVALUE, Type - This is a 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// byte-swapping load instruction. It loads "Type" bits, byte swaps it, 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// then puts it in the bottom bits of the GPRC. TYPE can be either i16 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// or i32. 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LBRX, 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // The following 5 instructions are used only as part of the 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // long double-to-int conversion sequence. 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// OUTFLAG = MFFS F8RC - This moves the FPSCR (not modelled) into the 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// register. 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MFFS, 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// OUTFLAG = MTFSB0 INFLAG - This clears a bit in the FPSCR. 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MTFSB0, 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// OUTFLAG = MTFSB1 INFLAG - This sets a bit in the FPSCR. 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MTFSB1, 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// F8RC, OUTFLAG = FADDRTZ F8RC, F8RC, INFLAG - This is an FADD done with 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// rounding towards zero. It has flags added so it won't move past the 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// FPSCR-setting instructions. 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FADDRTZ, 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// MTFSF = F8RC, INFLAG - This moves the register into the FPSCR. 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MTFSF, 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// LARX = This corresponds to PPC l{w|d}arx instrcution: load and 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// reserve indexed. This is used to implement atomic operations. 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LARX, 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// STCX = This corresponds to PPC stcx. instrcution: store conditional 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// indexed. This is used to implement atomic operations. 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STCX, 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// TC_RETURN - A tail call return. 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// operand #0 chain 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// operand #1 callee (register or absolute) 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// operand #2 stack adjustment 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// operand #3 optional in flag 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project TC_RETURN 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// Define some predicates that are used for node matching. 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project namespace PPC { 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isVPKUHUMShuffleMask - Return true if this is the shuffle mask for a 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// VPKUHUM instruction. 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isVPKUHUMShuffleMask(ShuffleVectorSDNode *N, bool isUnary); 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isVPKUWUMShuffleMask - Return true if this is the shuffle mask for a 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// VPKUWUM instruction. 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isVPKUWUMShuffleMask(ShuffleVectorSDNode *N, bool isUnary); 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isVMRGLShuffleMask - Return true if this is a shuffle mask suitable for 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// a VRGL* instruction with the specified unit size (1,2 or 4 bytes). 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isVMRGLShuffleMask(ShuffleVectorSDNode *N, unsigned UnitSize, 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isUnary); 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isVMRGHShuffleMask - Return true if this is a shuffle mask suitable for 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// a VRGH* instruction with the specified unit size (1,2 or 4 bytes). 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isVMRGHShuffleMask(ShuffleVectorSDNode *N, unsigned UnitSize, 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isUnary); 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isVSLDOIShuffleMask - If this is a vsldoi shuffle mask, return the shift 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// amount, otherwise return -1. 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int isVSLDOIShuffleMask(SDNode *N, bool isUnary); 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isSplatShuffleMask - Return true if the specified VECTOR_SHUFFLE operand 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// specifies a splat of a single element that is suitable for input to 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// VSPLTB/VSPLTH/VSPLTW. 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isSplatShuffleMask(ShuffleVectorSDNode *N, unsigned EltSize); 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isAllNegativeZeroVector - Returns true if all elements of build_vector 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// are -0.0. 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isAllNegativeZeroVector(SDNode *N); 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// getVSPLTImmediate - Return the appropriate VSPLT* immediate to splat the 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// specified isSplatShuffleMask VECTOR_SHUFFLE mask. 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned getVSPLTImmediate(SDNode *N, unsigned EltSize); 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// get_VSPLTI_elt - If this is a build_vector of constants which can be 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// formed by using a vspltis[bhw] instruction of the specified element 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// size, return the constant being splatted. The ByteSize field indicates 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// the number of bytes of each element [124] -> [bhw]. 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue get_VSPLTI_elt(SDNode *N, unsigned ByteSize, SelectionDAG &DAG); 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project class PPCTargetLowering : public TargetLowering { 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int VarArgsFrameIndex; // FrameIndex for start of varargs area. 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int VarArgsStackOffset; // StackOffset for start of stack 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // arguments. 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned VarArgsNumGPR; // Index of the first unused integer 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // register for parameter passing. 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned VarArgsNumFPR; // Index of the first unused double 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // register for parameter passing. 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const PPCSubtarget &PPCSubTarget; 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project public: 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project explicit PPCTargetLowering(PPCTargetMachine &TM); 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// getTargetNodeName() - This method returns the name of a target specific 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// DAG node. 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual const char *getTargetNodeName(unsigned Opcode) const; 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// getSetCCResultType - Return the ISD::SETCC ValueType 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual MVT::SimpleValueType getSetCCResultType(EVT VT) const; 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// getPreIndexedAddressParts - returns true by value, base pointer and 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// offset pointer and addressing mode by reference if the node's address 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// can be legally represented as pre-indexed load / store address. 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual bool getPreIndexedAddressParts(SDNode *N, SDValue &Base, 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue &Offset, 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ISD::MemIndexedMode &AM, 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG) const; 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// SelectAddressRegReg - Given the specified addressed, check to see if it 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// can be represented as an indexed [r+r] operation. Returns false if it 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// can be more efficiently represented with [r+imm]. 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool SelectAddressRegReg(SDValue N, SDValue &Base, SDValue &Index, 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG) const; 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// SelectAddressRegImm - Returns true if the address N can be represented 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// by a base register plus a signed 16-bit displacement [r+imm], and if it 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// is not better represented as reg+reg. 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool SelectAddressRegImm(SDValue N, SDValue &Disp, SDValue &Base, 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG) const; 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// SelectAddressRegRegOnly - Given the specified addressed, force it to be 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// represented as an indexed [r+r] operation. 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool SelectAddressRegRegOnly(SDValue N, SDValue &Base, SDValue &Index, 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG) const; 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// SelectAddressRegImmShift - Returns true if the address N can be 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// represented by a base register plus a signed 14-bit displacement 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// [r+imm*4]. Suitable for use by STD and friends. 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool SelectAddressRegImmShift(SDValue N, SDValue &Disp, SDValue &Base, 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG) const; 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// LowerOperation - Provide custom lowering hooks for some operations. 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG); 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// ReplaceNodeResults - Replace the results of node with an illegal result 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// type with new values built out of custom code. 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue>&Results, 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG); 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const; 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual void computeMaskedBitsForTargetNode(const SDValue Op, 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const APInt &Mask, 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project APInt &KnownZero, 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project APInt &KnownOne, 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SelectionDAG &DAG, 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned Depth = 0) const; 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual MachineBasicBlock *EmitInstrWithCustomInserter(MachineInstr *MI, 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MachineBasicBlock *MBB) const; 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MachineBasicBlock *EmitAtomicBinary(MachineInstr *MI, 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MachineBasicBlock *MBB, bool is64Bit, 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned BinOpcode) const; 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MachineBasicBlock *EmitPartwordAtomicBinary(MachineInstr *MI, 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MachineBasicBlock *MBB, 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool is8bit, unsigned Opcode) const; 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ConstraintType getConstraintType(const std::string &Constraint) const; 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project std::pair<unsigned, const TargetRegisterClass*> 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project getRegForInlineAsmConstraint(const std::string &Constraint, 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EVT VT) const; 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// getByValTypeAlignment - Return the desired alignment for ByVal aggregate 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// function arguments in the caller parameter area. This is the actual 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// alignment, not its logarithm. 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned getByValTypeAlignment(const Type *Ty) const; 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// LowerAsmOperandForConstraint - Lower the specified operand into the Ops 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// vector. If it is invalid, don't add anything to Ops. If hasMemory is 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// true it means one of the asm constraint of the inline asm instruction 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// being processed is 'm'. 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual void LowerAsmOperandForConstraint(SDValue Op, 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project char ConstraintLetter, 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool hasMemory, 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project std::vector<SDValue> &Ops, 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG) const; 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isLegalAddressingMode - Return true if the addressing mode represented 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// by AM is legal for this target, for a load/store of the specified type. 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual bool isLegalAddressingMode(const AddrMode &AM, const Type *Ty)const; 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isLegalAddressImmediate - Return true if the integer value can be used 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// as the offset of the target addressing mode for load / store of the 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// given type. 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual bool isLegalAddressImmediate(int64_t V, const Type *Ty) const; 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// isLegalAddressImmediate - Return true if the GlobalValue can be used as 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// the offset of the target addressing mode. 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual bool isLegalAddressImmediate(GlobalValue *GV) const; 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual bool 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project IsEligibleForTailCallOptimization(SDValue Callee, 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CalleeCC, 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isVarArg, 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG& DAG) const; 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const; 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual EVT getOptimalMemOpType(uint64_t Size, unsigned Align, 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isSrcConst, bool isSrcStr, 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG) const; 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /// getFunctionAlignment - Return the Log2 alignment of this function. 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual unsigned getFunctionAlignment(const Function *F) const; 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project private: 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue getFramePointerFrameIndex(SelectionDAG & DAG) const; 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue getReturnAddrFrameIndex(SelectionDAG & DAG) const; 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue EmitTailCallLoadFPAndRetAddr(SelectionDAG & DAG, 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int SPDiff, 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue Chain, 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue &LROpOut, 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue &FPOpOut, 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isDarwinABI, 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl); 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG); 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG); 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG); 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG); 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG); 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG); 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG); 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerTRAMPOLINE(SDValue Op, SelectionDAG &DAG); 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG, 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int VarArgsFrameIndex, int VarArgsStackOffset, 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned VarArgsNumGPR, unsigned VarArgsNumFPR, 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const PPCSubtarget &Subtarget); 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG, int VarArgsFrameIndex, 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int VarArgsStackOffset, unsigned VarArgsNumGPR, 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned VarArgsNumFPR, const PPCSubtarget &Subtarget); 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerSTACKRESTORE(SDValue Op, SelectionDAG &DAG, 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const PPCSubtarget &Subtarget); 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG, 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const PPCSubtarget &Subtarget); 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG); 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG, DebugLoc dl); 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG); 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerFLT_ROUNDS_(SDValue Op, SelectionDAG &DAG); 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerSHL_PARTS(SDValue Op, SelectionDAG &DAG); 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerSRL_PARTS(SDValue Op, SelectionDAG &DAG); 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerSRA_PARTS(SDValue Op, SelectionDAG &DAG); 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG); 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG); 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG); 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerSCALAR_TO_VECTOR(SDValue Op, SelectionDAG &DAG); 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerMUL(SDValue Op, SelectionDAG &DAG); 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue LowerCallResult(SDValue Chain, SDValue InFlag, 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CallConv, bool isVarArg, 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl, SelectionDAG &DAG, 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVectorImpl<SDValue> &InVals); 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue FinishCall(CallingConv::ID CallConv, DebugLoc dl, bool isTailCall, 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bool isVarArg, 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SelectionDAG &DAG, 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVector<std::pair<unsigned, SDValue>, 8> 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &RegsToPass, 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue InFlag, SDValue Chain, 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue &Callee, 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int SPDiff, unsigned NumBytes, 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVectorImpl<SDValue> &InVals); 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual SDValue 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LowerFormalArguments(SDValue Chain, 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CallConv, bool isVarArg, 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl, SelectionDAG &DAG, 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVectorImpl<SDValue> &InVals); 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual SDValue 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LowerCall(SDValue Chain, SDValue Callee, 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CallConv, bool isVarArg, bool isTailCall, 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::OutputArg> &Outs, 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl, SelectionDAG &DAG, 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVectorImpl<SDValue> &InVals); 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual SDValue 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LowerReturn(SDValue Chain, 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CallConv, bool isVarArg, 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::OutputArg> &Outs, 428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl, SelectionDAG &DAG); 429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LowerFormalArguments_Darwin(SDValue Chain, 432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CallConv, bool isVarArg, 433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl, SelectionDAG &DAG, 435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVectorImpl<SDValue> &InVals); 436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue 437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LowerFormalArguments_SVR4(SDValue Chain, 438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CallConv, bool isVarArg, 439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl, SelectionDAG &DAG, 441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVectorImpl<SDValue> &InVals); 442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue 444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LowerCall_Darwin(SDValue Chain, SDValue Callee, 445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CallConv, bool isVarArg, bool isTailCall, 446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::OutputArg> &Outs, 447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl, SelectionDAG &DAG, 449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVectorImpl<SDValue> &InVals); 450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SDValue 451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LowerCall_SVR4(SDValue Chain, SDValue Callee, 452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CallingConv::ID CallConv, bool isVarArg, bool isTailCall, 453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::OutputArg> &Outs, 454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const SmallVectorImpl<ISD::InputArg> &Ins, 455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DebugLoc dl, SelectionDAG &DAG, 456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SmallVectorImpl<SDValue> &InVals); 457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; 458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif // LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H 461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project