PPCISelLowering.h revision 225ed7069caae9ece32d8bd3d15c6e41e21cc04b
121e463b2bf864671a87ebe386cb100ef9349a540Nate Begeman//===-- PPCISelLowering.h - PPC32 DAG Lowering Interface --------*- C++ -*-===// 27c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// 37c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// The LLVM Compiler Infrastructure 47c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 77c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// 87c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//===----------------------------------------------------------------------===// 97c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// 107c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// This file defines the interfaces that PPC uses to lower LLVM code into a 117c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// selection DAG. 127c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// 137c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner//===----------------------------------------------------------------------===// 147c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 157c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#ifndef LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H 167c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#define LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H 177c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 182668959b8879097db368aec7d76c455260abc75bChris Lattner#include "PPC.h" 19ff56d1a2011f239e114267c13302ea26db4f8046Hal Finkel#include "PPCInstrInfo.h" 207ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel#include "PPCRegisterInfo.h" 21331d1bc5dfe1be9090e29f9af9579888a63a9a79Chris Lattner#include "PPCSubtarget.h" 2279aa3417eb6f58d668aadfedf075240a41d35a26Craig Topper#include "llvm/CodeGen/SelectionDAG.h" 23a1514e24cc24b050f53a12650e047799358833a1Chandler Carruth#include "llvm/Target/TargetLowering.h" 247c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 257c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattnernamespace llvm { 260bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner namespace PPCISD { 270bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner enum NodeType { 283c983c3dc19bb83807f978c04737b4572be90a93Nate Begeman // Start the numbering where the builtin ops and target ops leave off. 290ba2bcfcc3149a25d08aa8aa00fb6c34a4e25bddDan Gohman FIRST_NUMBER = ISD::BUILTIN_OP_END, 300bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner 310bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner /// FSEL - Traditional three-operand fsel node. 320bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner /// 330bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner FSEL, 3495771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 35c09eeec0ebc378644bafd04916e5efafa7d98152Nate Begeman /// FCFID - The FCFID instruction, taking an f64 operand and producing 36c09eeec0ebc378644bafd04916e5efafa7d98152Nate Begeman /// and f64 value containing the FP representation of the integer that 37c09eeec0ebc378644bafd04916e5efafa7d98152Nate Begeman /// was temporarily in the f64 operand. 38c09eeec0ebc378644bafd04916e5efafa7d98152Nate Begeman FCFID, 3995771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 4046479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel /// Newer FCFID[US] integer-to-floating-point conversion instructions for 4146479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel /// unsigned integers and single-precision outputs. 4246479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel FCFIDU, FCFIDS, FCFIDUS, 4346479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel 4495771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson /// FCTI[D,W]Z - The FCTIDZ and FCTIWZ instructions, taking an f32 or f64 45c09eeec0ebc378644bafd04916e5efafa7d98152Nate Begeman /// operand, producing an f64 value containing the integer representation 46c09eeec0ebc378644bafd04916e5efafa7d98152Nate Begeman /// of that FP value. 47c09eeec0ebc378644bafd04916e5efafa7d98152Nate Begeman FCTIDZ, FCTIWZ, 4895771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 4946479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel /// Newer FCTI[D,W]UZ floating-point-to-integer conversion instructions for 5046479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel /// unsigned integers. 5146479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel FCTIDUZ, FCTIWUZ, 5246479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel 53827307b95fa909e35a3ddef612f9f50ffcf0963aHal Finkel /// Reciprocal estimate instructions (unary FP ops). 54827307b95fa909e35a3ddef612f9f50ffcf0963aHal Finkel FRE, FRSQRTE, 55827307b95fa909e35a3ddef612f9f50ffcf0963aHal Finkel 56993aeb2ed93f99faf1438f1b67cd922989306828Nate Begeman // VMADDFP, VNMSUBFP - The VMADDFP and VNMSUBFP instructions, taking 57993aeb2ed93f99faf1438f1b67cd922989306828Nate Begeman // three v4f32 operands and producing a v4f32 result. 58993aeb2ed93f99faf1438f1b67cd922989306828Nate Begeman VMADDFP, VNMSUBFP, 5995771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 60f1d0b2bedaa065972a5ba17259055c1176cd1497Chris Lattner /// VPERM - The PPC VPERM Instruction. 61f1d0b2bedaa065972a5ba17259055c1176cd1497Chris Lattner /// 62f1d0b2bedaa065972a5ba17259055c1176cd1497Chris Lattner VPERM, 6395771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 64860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner /// Hi/Lo - These represent the high and low 16-bit parts of a global 65860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner /// address respectively. These nodes have two operands, the first of 66860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner /// which must be a TargetGlobalAddress, and the second of which must be a 67860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner /// Constant. Selected naively, these turn into 'lis G+C' and 'li G+C', 68860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner /// though these are usually folded into other nodes. 69860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner Hi, Lo, 7095771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 716b16eff207f99bbde3c0f7340452a5287218772cTilmann Scheller TOC_ENTRY, 726b16eff207f99bbde3c0f7340452a5287218772cTilmann Scheller 733a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller /// The following three target-specific nodes are used for calls through 743a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller /// function pointers in the 64-bit SVR4 ABI. 753a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller 763a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller /// Restore the TOC from the TOC save area of the current stack frame. 773a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller /// This is basically a hard coded load instruction which additionally 783a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller /// takes/produces a flag. 793a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller TOC_RESTORE, 803a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller 813a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller /// Like a regular LOAD but additionally taking/producing a flag. 823a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller LOAD, 833a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller 843a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller /// LOAD into r2 (also taking/producing a flag). Like TOC_RESTORE, this is 853a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller /// a hard coded load instruction. 863a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller LOAD_TOC, 873a84dae654630a89a91a73807201b6067c4774ecTilmann Scheller 882f616bff7ef1e2e08d6d23c2a8b42ec2bfebb173Jim Laskey /// OPRC, CHAIN = DYNALLOC(CHAIN, NEGSIZE, FRAME_INDEX) 892f616bff7ef1e2e08d6d23c2a8b42ec2bfebb173Jim Laskey /// This instruction is lowered in PPCRegisterInfo::eliminateFrameIndex to 902f616bff7ef1e2e08d6d23c2a8b42ec2bfebb173Jim Laskey /// compute an allocation on the stack. 912f616bff7ef1e2e08d6d23c2a8b42ec2bfebb173Jim Laskey DYNALLOC, 9295771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 93860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner /// GlobalBaseReg - On Darwin, this node represents the result of the mflr 94860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner /// at function entry, used for PIC code. 95860e8862c1fbd3b261da4a64a8c0096f9f373681Chris Lattner GlobalBaseReg, 9695771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 974172b10ca1adfc1026428e5f522aaab98bd939adChris Lattner /// These nodes represent the 32-bit PPC shifts that operate on 6-bit 984172b10ca1adfc1026428e5f522aaab98bd939adChris Lattner /// shift amounts. These nodes are generated by the multi-precision shift 994172b10ca1adfc1026428e5f522aaab98bd939adChris Lattner /// code. 1004172b10ca1adfc1026428e5f522aaab98bd939adChris Lattner SRL, SRA, SHL, 10195771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 102c703a8fbf8653ac8302ae368391a4954c307ca2cChris Lattner /// CALL - A direct function call. 10386765fbe170198e7bb40fd8499d1354f4c786f60Ulrich Weigand /// CALL_NOP is a call with the special NOP which follows 64-bit 1045b00ceaeeabff8c25abb09926343c3fcb06053d8Hal Finkel /// SVR4 calls. 10586765fbe170198e7bb40fd8499d1354f4c786f60Ulrich Weigand CALL, CALL_NOP, 1066b16eff207f99bbde3c0f7340452a5287218772cTilmann Scheller 107c703a8fbf8653ac8302ae368391a4954c307ca2cChris Lattner /// CHAIN,FLAG = MTCTR(VAL, CHAIN[, INFLAG]) - Directly corresponds to a 108c703a8fbf8653ac8302ae368391a4954c307ca2cChris Lattner /// MTCTR instruction. 109c703a8fbf8653ac8302ae368391a4954c307ca2cChris Lattner MTCTR, 11095771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 111c703a8fbf8653ac8302ae368391a4954c307ca2cChris Lattner /// CHAIN,FLAG = BCTRL(CHAIN, INFLAG) - Directly corresponds to a 112c703a8fbf8653ac8302ae368391a4954c307ca2cChris Lattner /// BCTRL instruction. 11386765fbe170198e7bb40fd8499d1354f4c786f60Ulrich Weigand BCTRL, 11495771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 1159e4dd9dfc97f3930f58ca6e47bebbd8eb5cdd8a1Nate Begeman /// Return with a flag operand, matched by 'blr' 1169e4dd9dfc97f3930f58ca6e47bebbd8eb5cdd8a1Nate Begeman RET_FLAG, 11795771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 1185f07d5224ddc32f405d7e19de8e58e91ab2816bcDale Johannesen /// R32 = MFCR(CRREG, INFLAG) - Represents the MFCRpseud/MFOCRF 1195f07d5224ddc32f405d7e19de8e58e91ab2816bcDale Johannesen /// instructions. This copies the bits corresponding to the specified 1205f07d5224ddc32f405d7e19de8e58e91ab2816bcDale Johannesen /// CRREG into the resultant GPR. Bits corresponding to other CR regs 1215f07d5224ddc32f405d7e19de8e58e91ab2816bcDale Johannesen /// are undefined. 1226d92caddc4aa5fc946b294259e00cc35536e61e8Chris Lattner MFCR, 123a17b1557ad705c56c41624e6841e19093ed31f21Chris Lattner 1247ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel // EH_SJLJ_SETJMP - SjLj exception handling setjmp. 1257ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel EH_SJLJ_SETJMP, 1267ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel 1277ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel // EH_SJLJ_LONGJMP - SjLj exception handling longjmp. 1287ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel EH_SJLJ_LONGJMP, 1297ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel 130a17b1557ad705c56c41624e6841e19093ed31f21Chris Lattner /// RESVEC = VCMP(LHS, RHS, OPC) - Represents one of the altivec VCMP* 131a17b1557ad705c56c41624e6841e19093ed31f21Chris Lattner /// instructions. For lack of better number, we use the opcode number 132a17b1557ad705c56c41624e6841e19093ed31f21Chris Lattner /// encoding for the OPC field to identify the compare. For example, 838 133a17b1557ad705c56c41624e6841e19093ed31f21Chris Lattner /// is VCMPGTSH. 134a17b1557ad705c56c41624e6841e19093ed31f21Chris Lattner VCMP, 13595771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 1366d92caddc4aa5fc946b294259e00cc35536e61e8Chris Lattner /// RESVEC, OUTFLAG = VCMPo(LHS, RHS, OPC) - Represents one of the 13795771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson /// altivec VCMP*o instructions. For lack of better number, we use the 1386d92caddc4aa5fc946b294259e00cc35536e61e8Chris Lattner /// opcode number encoding for the OPC field to identify the compare. For 1396d92caddc4aa5fc946b294259e00cc35536e61e8Chris Lattner /// example, 838 is VCMPGTSH. 14090564f26d17701e11effa2f4e0fb9a18d8a91274Chris Lattner VCMPo, 14195771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 14290564f26d17701e11effa2f4e0fb9a18d8a91274Chris Lattner /// CHAIN = COND_BRANCH CHAIN, CRRC, OPC, DESTBB [, INFLAG] - This 14390564f26d17701e11effa2f4e0fb9a18d8a91274Chris Lattner /// corresponds to the COND_BRANCH pseudo instruction. CRRC is the 14490564f26d17701e11effa2f4e0fb9a18d8a91274Chris Lattner /// condition register to branch on, OPC is the branch opcode to use (e.g. 14590564f26d17701e11effa2f4e0fb9a18d8a91274Chris Lattner /// PPC::BLE), DESTBB is the destination block to branch to, and INFLAG is 14690564f26d17701e11effa2f4e0fb9a18d8a91274Chris Lattner /// an optional input flag argument. 147d9989384592a3bd9dd374470a723ca8303071a2dChris Lattner COND_BRANCH, 14895771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 149b1fd3cd78f8acd21dbf514b75fef991827c343b6Hal Finkel /// CHAIN = BDNZ CHAIN, DESTBB - These are used to create counter-based 150b1fd3cd78f8acd21dbf514b75fef991827c343b6Hal Finkel /// loops. 151b1fd3cd78f8acd21dbf514b75fef991827c343b6Hal Finkel BDNZ, BDZ, 152b1fd3cd78f8acd21dbf514b75fef991827c343b6Hal Finkel 1537d35d3f432cb59d3d1c0884af3023de9b5cb10b1Ulrich Weigand /// F8RC = FADDRTZ F8RC, F8RC - This is an FADD done with rounding 1547d35d3f432cb59d3d1c0884af3023de9b5cb10b1Ulrich Weigand /// towards zero. Used only as part of the long double-to-int 1557d35d3f432cb59d3d1c0884af3023de9b5cb10b1Ulrich Weigand /// conversion sequence. 1566eaeff29b8a6990107735f7e5f5e49da38f56223Dale Johannesen FADDRTZ, 1576eaeff29b8a6990107735f7e5f5e49da38f56223Dale Johannesen 1587d35d3f432cb59d3d1c0884af3023de9b5cb10b1Ulrich Weigand /// F8RC = MFFS - This moves the FPSCR (not modeled) into the register. 1597d35d3f432cb59d3d1c0884af3023de9b5cb10b1Ulrich Weigand MFFS, 16054fc97dcdc0ab747f49bd09c5a877bfd2a00e364Evan Cheng 1618608f2eff2dab5345243c40d0bca9138f2dce6f1Evan Cheng /// LARX = This corresponds to PPC l{w|d}arx instrcution: load and 16254fc97dcdc0ab747f49bd09c5a877bfd2a00e364Evan Cheng /// reserve indexed. This is used to implement atomic operations. 1638608f2eff2dab5345243c40d0bca9138f2dce6f1Evan Cheng LARX, 16454fc97dcdc0ab747f49bd09c5a877bfd2a00e364Evan Cheng 1658608f2eff2dab5345243c40d0bca9138f2dce6f1Evan Cheng /// STCX = This corresponds to PPC stcx. instrcution: store conditional 1668608f2eff2dab5345243c40d0bca9138f2dce6f1Evan Cheng /// indexed. This is used to implement atomic operations. 1678608f2eff2dab5345243c40d0bca9138f2dce6f1Evan Cheng STCX, 16854fc97dcdc0ab747f49bd09c5a877bfd2a00e364Evan Cheng 16930e62c098b5841259f8026df1c5c45c7c1182a38Arnold Schwaighofer /// TC_RETURN - A tail call return. 17030e62c098b5841259f8026df1c5c45c7c1182a38Arnold Schwaighofer /// operand #0 chain 17130e62c098b5841259f8026df1c5c45c7c1182a38Arnold Schwaighofer /// operand #1 callee (register or absolute) 17230e62c098b5841259f8026df1c5c45c7c1182a38Arnold Schwaighofer /// operand #2 stack adjustment 17330e62c098b5841259f8026df1c5c45c7c1182a38Arnold Schwaighofer /// operand #3 optional in flag 174c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman TC_RETURN, 175c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman 17682b3821208286aeb43f603fdac98832bd662dad9Hal Finkel /// ch, gl = CR6[UN]SET ch, inglue - Toggle CR bit 6 for SVR4 vararg calls 17782b3821208286aeb43f603fdac98832bd662dad9Hal Finkel CR6SET, 17882b3821208286aeb43f603fdac98832bd662dad9Hal Finkel CR6UNSET, 17982b3821208286aeb43f603fdac98832bd662dad9Hal Finkel 180b453e16855f347e300f1dc0cd0dfbdd65c27b0d2Bill Schmidt /// G8RC = ADDIS_GOT_TPREL_HA %X2, Symbol - Used by the initial-exec 181b453e16855f347e300f1dc0cd0dfbdd65c27b0d2Bill Schmidt /// TLS model, produces an ADDIS8 instruction that adds the GOT 1829d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// base to sym\@got\@tprel\@ha. 183b453e16855f347e300f1dc0cd0dfbdd65c27b0d2Bill Schmidt ADDIS_GOT_TPREL_HA, 184b453e16855f347e300f1dc0cd0dfbdd65c27b0d2Bill Schmidt 185b453e16855f347e300f1dc0cd0dfbdd65c27b0d2Bill Schmidt /// G8RC = LD_GOT_TPREL_L Symbol, G8RReg - Used by the initial-exec 186d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt /// TLS model, produces a LD instruction with base register G8RReg 1879d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// and offset sym\@got\@tprel\@l. This completes the addition that 188b453e16855f347e300f1dc0cd0dfbdd65c27b0d2Bill Schmidt /// finds the offset of "sym" relative to the thread pointer. 189b453e16855f347e300f1dc0cd0dfbdd65c27b0d2Bill Schmidt LD_GOT_TPREL_L, 190d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt 191d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt /// G8RC = ADD_TLS G8RReg, Symbol - Used by the initial-exec TLS 192d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt /// model, produces an ADD instruction that adds the contents of 193d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt /// G8RReg to the thread pointer. Symbol contains a relocation 1949d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// sym\@tls which is to be replaced by the thread pointer and 195d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt /// identifies to the linker that the instruction is part of a 196d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt /// TLS sequence. 197d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt ADD_TLS, 198d7802bf0ddcac16ee910105922492aee86a53e1bBill Schmidt 19957ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt /// G8RC = ADDIS_TLSGD_HA %X2, Symbol - For the general-dynamic TLS 20057ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt /// model, produces an ADDIS8 instruction that adds the GOT base 2019d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// register to sym\@got\@tlsgd\@ha. 20257ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt ADDIS_TLSGD_HA, 20357ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt 20457ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt /// G8RC = ADDI_TLSGD_L G8RReg, Symbol - For the general-dynamic TLS 20557ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt /// model, produces an ADDI8 instruction that adds G8RReg to 2069d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// sym\@got\@tlsgd\@l. 20757ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt ADDI_TLSGD_L, 20857ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt 20957ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt /// G8RC = GET_TLS_ADDR %X3, Symbol - For the general-dynamic TLS 2109d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// model, produces a call to __tls_get_addr(sym\@tlsgd). 21157ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt GET_TLS_ADDR, 21257ac1f458a754f30cf500410b438fb260f9b8fe5Bill Schmidt 213349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// G8RC = ADDIS_TLSLD_HA %X2, Symbol - For the local-dynamic TLS 214349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// model, produces an ADDIS8 instruction that adds the GOT base 2159d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// register to sym\@got\@tlsld\@ha. 216349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt ADDIS_TLSLD_HA, 217349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt 218349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// G8RC = ADDI_TLSLD_L G8RReg, Symbol - For the local-dynamic TLS 219349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// model, produces an ADDI8 instruction that adds G8RReg to 2209d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// sym\@got\@tlsld\@l. 221349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt ADDI_TLSLD_L, 222349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt 223349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// G8RC = GET_TLSLD_ADDR %X3, Symbol - For the local-dynamic TLS 2249d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// model, produces a call to __tls_get_addr(sym\@tlsld). 225349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt GET_TLSLD_ADDR, 226349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt 227349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// G8RC = ADDIS_DTPREL_HA %X3, Symbol, Chain - For the 228349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// local-dynamic TLS model, produces an ADDIS8 instruction 229225ed7069caae9ece32d8bd3d15c6e41e21cc04bMatt Arsenault /// that adds X3 to sym\@dtprel\@ha. The Chain operand is needed 230349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// to tie this in place following a copy to %X3 from the result 231349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// of a GET_TLSLD_ADDR. 232349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt ADDIS_DTPREL_HA, 233349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt 234349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// G8RC = ADDI_DTPREL_L G8RReg, Symbol - For the local-dynamic TLS 235349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt /// model, produces an ADDI8 instruction that adds G8RReg to 2369d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// sym\@got\@dtprel\@l. 237349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt ADDI_DTPREL_L, 238349c2787cf9e174c8aa955bf8e3b09a405b2aeceBill Schmidt 239b34c79e4bbe5accbb54d0291e8bef5d2bfef32e4Bill Schmidt /// VRRC = VADD_SPLAT Elt, EltSize - Temporary node to be expanded 240abc402886e407e21d845cccc15723cffd6e2dc20Bill Schmidt /// during instruction selection to optimize a BUILD_VECTOR into 241abc402886e407e21d845cccc15723cffd6e2dc20Bill Schmidt /// operations on splats. This is necessary to avoid losing these 242abc402886e407e21d845cccc15723cffd6e2dc20Bill Schmidt /// optimizations due to constant folding. 243b34c79e4bbe5accbb54d0291e8bef5d2bfef32e4Bill Schmidt VADD_SPLAT, 244b34c79e4bbe5accbb54d0291e8bef5d2bfef32e4Bill Schmidt 2455bbdb190412a55436b808cfa59820b1e6cf08db0Bill Schmidt /// CHAIN = SC CHAIN, Imm128 - System call. The 7-bit unsigned 2465bbdb190412a55436b808cfa59820b1e6cf08db0Bill Schmidt /// operand identifies the operating system entry point. 2475bbdb190412a55436b808cfa59820b1e6cf08db0Bill Schmidt SC, 2485bbdb190412a55436b808cfa59820b1e6cf08db0Bill Schmidt 24995771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson /// CHAIN = STBRX CHAIN, GPRC, Ptr, Type - This is a 250c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman /// byte-swapping store instruction. It byte-swaps the low "Type" bits of 251c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman /// the GPRC input, then stores it through Ptr. Type can be either i16 or 252c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman /// i32. 2539ad0f4907b3ba0916a8b6cdb95d298d2ddb7d405Hal Finkel STBRX = ISD::FIRST_TARGET_MEMORY_OPCODE, 25495771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 25595771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson /// GPRC, CHAIN = LBRX CHAIN, Ptr, Type - This is a 256c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman /// byte-swapping load instruction. It loads "Type" bits, byte swaps it, 257c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman /// then puts it in the bottom bits of the GPRC. TYPE can be either i16 258c76909abfec876c6b751d693ebd3df07df686aa0Dan Gohman /// or i32. 25934a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt LBRX, 26034a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt 261f170cc9b2eb98efee40ee22cff6bcf401c209b00Hal Finkel /// STFIWX - The STFIWX instruction. The first operand is an input token 262f170cc9b2eb98efee40ee22cff6bcf401c209b00Hal Finkel /// chain, then an f64 value to store, then an address to store it to. 263f170cc9b2eb98efee40ee22cff6bcf401c209b00Hal Finkel STFIWX, 264f170cc9b2eb98efee40ee22cff6bcf401c209b00Hal Finkel 2658049ab15e4b638a07d6f230329945c2310eca27bHal Finkel /// GPRC, CHAIN = LFIWAX CHAIN, Ptr - This is a floating-point 2668049ab15e4b638a07d6f230329945c2310eca27bHal Finkel /// load which sign-extends from a 32-bit integer value into the 2678049ab15e4b638a07d6f230329945c2310eca27bHal Finkel /// destination 64-bit register. 2688049ab15e4b638a07d6f230329945c2310eca27bHal Finkel LFIWAX, 2698049ab15e4b638a07d6f230329945c2310eca27bHal Finkel 27046479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel /// GPRC, CHAIN = LFIWZX CHAIN, Ptr - This is a floating-point 27146479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel /// load which zero-extends from a 32-bit integer value into the 27246479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel /// destination 64-bit register. 27346479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel LFIWZX, 27446479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel 27553b0b0e75480121e4e01a7a76e17909e92b1762aBill Schmidt /// G8RC = ADDIS_TOC_HA %X2, Symbol - For medium and large code model, 27653b0b0e75480121e4e01a7a76e17909e92b1762aBill Schmidt /// produces an ADDIS8 instruction that adds the TOC base register to 2779d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// sym\@toc\@ha. 27834a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt ADDIS_TOC_HA, 27934a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt 28053b0b0e75480121e4e01a7a76e17909e92b1762aBill Schmidt /// G8RC = LD_TOC_L Symbol, G8RReg - For medium and large code model, 28153b0b0e75480121e4e01a7a76e17909e92b1762aBill Schmidt /// produces a LD instruction with base register G8RReg and offset 2829d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// sym\@toc\@l. Preceded by an ADDIS_TOC_HA to form a full 32-bit offset. 28334a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt LD_TOC_L, 28434a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt 28534a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt /// G8RC = ADDI_TOC_L G8RReg, Symbol - For medium code model, produces 2869d86f9cc3ab4db75b388c2761bf3dd205f84a6d8NAKAMURA Takumi /// an ADDI8 instruction that adds G8RReg to sym\@toc\@l. 28734a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt /// Preceded by an ADDIS_TOC_HA to form a full 32-bit offset. 28834a9d4b3b9b7858b729a1af67afa721c048fe5e7Bill Schmidt ADDI_TOC_L 289281b55ebeccd3f0d723888c1bb9ec6e476f708f1Chris Lattner }; 2903c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner } 2913c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner 2923c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner /// Define some predicates that are used for node matching. 2933c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner namespace PPC { 294ddb739e5ea6ccf6fa4f4e2a23e3da550868efaa1Chris Lattner /// isVPKUHUMShuffleMask - Return true if this is the shuffle mask for a 295ddb739e5ea6ccf6fa4f4e2a23e3da550868efaa1Chris Lattner /// VPKUHUM instruction. 2969008ca6b6b4f638cfafccb593cbc5b1d3f5ab877Nate Begeman bool isVPKUHUMShuffleMask(ShuffleVectorSDNode *N, bool isUnary); 29795771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 298ddb739e5ea6ccf6fa4f4e2a23e3da550868efaa1Chris Lattner /// isVPKUWUMShuffleMask - Return true if this is the shuffle mask for a 299ddb739e5ea6ccf6fa4f4e2a23e3da550868efaa1Chris Lattner /// VPKUWUM instruction. 3009008ca6b6b4f638cfafccb593cbc5b1d3f5ab877Nate Begeman bool isVPKUWUMShuffleMask(ShuffleVectorSDNode *N, bool isUnary); 301116cc48e30b9c307bf3eec29c890b4ba25cd18dbChris Lattner 302116cc48e30b9c307bf3eec29c890b4ba25cd18dbChris Lattner /// isVMRGLShuffleMask - Return true if this is a shuffle mask suitable for 303116cc48e30b9c307bf3eec29c890b4ba25cd18dbChris Lattner /// a VRGL* instruction with the specified unit size (1,2 or 4 bytes). 3049008ca6b6b4f638cfafccb593cbc5b1d3f5ab877Nate Begeman bool isVMRGLShuffleMask(ShuffleVectorSDNode *N, unsigned UnitSize, 3059008ca6b6b4f638cfafccb593cbc5b1d3f5ab877Nate Begeman bool isUnary); 306116cc48e30b9c307bf3eec29c890b4ba25cd18dbChris Lattner 307116cc48e30b9c307bf3eec29c890b4ba25cd18dbChris Lattner /// isVMRGHShuffleMask - Return true if this is a shuffle mask suitable for 308116cc48e30b9c307bf3eec29c890b4ba25cd18dbChris Lattner /// a VRGH* instruction with the specified unit size (1,2 or 4 bytes). 3099008ca6b6b4f638cfafccb593cbc5b1d3f5ab877Nate Begeman bool isVMRGHShuffleMask(ShuffleVectorSDNode *N, unsigned UnitSize, 3109008ca6b6b4f638cfafccb593cbc5b1d3f5ab877Nate Begeman bool isUnary); 31195771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 312d0608e191ff9c00af68985f246410c219d1bec57Chris Lattner /// isVSLDOIShuffleMask - If this is a vsldoi shuffle mask, return the shift 313d0608e191ff9c00af68985f246410c219d1bec57Chris Lattner /// amount, otherwise return -1. 314f24380e78ecc8a2db1b2116867d878b1e7c6f6edChris Lattner int isVSLDOIShuffleMask(SDNode *N, bool isUnary); 31595771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 3163c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner /// isSplatShuffleMask - Return true if the specified VECTOR_SHUFFLE operand 3173c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner /// specifies a splat of a single element that is suitable for input to 3183c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner /// VSPLTB/VSPLTH/VSPLTW. 3199008ca6b6b4f638cfafccb593cbc5b1d3f5ab877Nate Begeman bool isSplatShuffleMask(ShuffleVectorSDNode *N, unsigned EltSize); 32095771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 32166ffe6be0c7b50100a00cb0cc87a5d4983818572Evan Cheng /// isAllNegativeZeroVector - Returns true if all elements of build_vector 32266ffe6be0c7b50100a00cb0cc87a5d4983818572Evan Cheng /// are -0.0. 32366ffe6be0c7b50100a00cb0cc87a5d4983818572Evan Cheng bool isAllNegativeZeroVector(SDNode *N); 32466ffe6be0c7b50100a00cb0cc87a5d4983818572Evan Cheng 3253c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner /// getVSPLTImmediate - Return the appropriate VSPLT* immediate to splat the 3263c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner /// specified isSplatShuffleMask VECTOR_SHUFFLE mask. 3277ff7e674580adad7a5bccdbd74cf9c9f05e46d0fChris Lattner unsigned getVSPLTImmediate(SDNode *N, unsigned EltSize); 32895771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 329e87192a854ff0f2f1904dd9ea282eb36059bb5afChris Lattner /// get_VSPLTI_elt - If this is a build_vector of constants which can be 330140a58f9dfda30dbb80edd3da1b5632c178f7efcChris Lattner /// formed by using a vspltis[bhw] instruction of the specified element 331140a58f9dfda30dbb80edd3da1b5632c178f7efcChris Lattner /// size, return the constant being splatted. The ByteSize field indicates 332140a58f9dfda30dbb80edd3da1b5632c178f7efcChris Lattner /// the number of bytes of each element [124] -> [bhw]. 333475871a144eb604ddaf37503397ba0941442e5fbDan Gohman SDValue get_VSPLTI_elt(SDNode *N, unsigned ByteSize, SelectionDAG &DAG); 3343c0f9cc90cdcb70caf0dc517b9f9206d731aeb70Chris Lattner } 33595771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 33621e463b2bf864671a87ebe386cb100ef9349a540Nate Begeman class PPCTargetLowering : public TargetLowering { 337331d1bc5dfe1be9090e29f9af9579888a63a9a79Chris Lattner const PPCSubtarget &PPCSubTarget; 3387ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel const PPCRegisterInfo *PPCRegInfo; 339ff56d1a2011f239e114267c13302ea26db4f8046Hal Finkel const PPCInstrInfo *PPCII; 3401e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman 3417c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner public: 34261e729e2e9517ab2d8887bab86fb377900fa1081Dan Gohman explicit PPCTargetLowering(PPCTargetMachine &TM); 34395771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 344da6d20f0c15205923cb2c3ef4bf9b5d77de88881Chris Lattner /// getTargetNodeName() - This method returns the name of a target specific 345da6d20f0c15205923cb2c3ef4bf9b5d77de88881Chris Lattner /// DAG node. 346da6d20f0c15205923cb2c3ef4bf9b5d77de88881Chris Lattner virtual const char *getTargetNodeName(unsigned Opcode) const; 347fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner 348a6b20ced765b67a85d9219d0c8547fc9c133e14fMichael Liao virtual MVT getScalarShiftAmountTy(EVT LHSTy) const { return MVT::i32; } 34995771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 3505b8f82e35b51bf007de07a7ca9347d804084ddf8Scott Michel /// getSetCCResultType - Return the ISD::SETCC ValueType 351225ed7069caae9ece32d8bd3d15c6e41e21cc04bMatt Arsenault virtual EVT getSetCCResultType(LLVMContext &Context, EVT VT) const; 3525b8f82e35b51bf007de07a7ca9347d804084ddf8Scott Michel 353fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// getPreIndexedAddressParts - returns true by value, base pointer and 354fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// offset pointer and addressing mode by reference if the node's address 355fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// can be legally represented as pre-indexed load / store address. 356475871a144eb604ddaf37503397ba0941442e5fbDan Gohman virtual bool getPreIndexedAddressParts(SDNode *N, SDValue &Base, 357475871a144eb604ddaf37503397ba0941442e5fbDan Gohman SDValue &Offset, 358144d8f09e139f691cafadbc17873943ba4c465f3Evan Cheng ISD::MemIndexedMode &AM, 35973e0914848662404cf2aa18eb049ff5aae543388Dan Gohman SelectionDAG &DAG) const; 36095771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 361fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// SelectAddressRegReg - Given the specified addressed, check to see if it 362fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// can be represented as an indexed [r+r] operation. Returns false if it 363fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// can be more efficiently represented with [r+imm]. 364475871a144eb604ddaf37503397ba0941442e5fbDan Gohman bool SelectAddressRegReg(SDValue N, SDValue &Base, SDValue &Index, 36573e0914848662404cf2aa18eb049ff5aae543388Dan Gohman SelectionDAG &DAG) const; 36695771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 367fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// SelectAddressRegImm - Returns true if the address N can be represented 368fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// by a base register plus a signed 16-bit displacement [r+imm], and if it 369347a5079e18278803bc05b197d325b8580e95610Ulrich Weigand /// is not better represented as reg+reg. If Aligned is true, only accept 370347a5079e18278803bc05b197d325b8580e95610Ulrich Weigand /// displacements suitable for STD and friends, i.e. multiples of 4. 371475871a144eb604ddaf37503397ba0941442e5fbDan Gohman bool SelectAddressRegImm(SDValue N, SDValue &Disp, SDValue &Base, 372347a5079e18278803bc05b197d325b8580e95610Ulrich Weigand SelectionDAG &DAG, bool Aligned) const; 37395771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 374fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// SelectAddressRegRegOnly - Given the specified addressed, force it to be 375fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner /// represented as an indexed [r+r] operation. 376475871a144eb604ddaf37503397ba0941442e5fbDan Gohman bool SelectAddressRegRegOnly(SDValue N, SDValue &Base, SDValue &Index, 37773e0914848662404cf2aa18eb049ff5aae543388Dan Gohman SelectionDAG &DAG) const; 378fc5b1ab94959879a91c34aee8859e652a50270d0Chris Lattner 3793f31d492a5d0fadf11290e8453f8c519a89b1302Hal Finkel Sched::Preference getSchedulingPreference(SDNode *N) const; 38095771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 381e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner /// LowerOperation - Provide custom lowering hooks for some operations. 382e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner /// 383d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const; 3841f873003266fbdec7c2c48a965c60f4e2e35a158Chris Lattner 3851607f05cb7d77d01ce521a30232faa389dbed4e2Duncan Sands /// ReplaceNodeResults - Replace the results of node with an illegal result 3861607f05cb7d77d01ce521a30232faa389dbed4e2Duncan Sands /// type with new values built out of custom code. 3871607f05cb7d77d01ce521a30232faa389dbed4e2Duncan Sands /// 3881607f05cb7d77d01ce521a30232faa389dbed4e2Duncan Sands virtual void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue>&Results, 389d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SelectionDAG &DAG) const; 3901607f05cb7d77d01ce521a30232faa389dbed4e2Duncan Sands 391475871a144eb604ddaf37503397ba0941442e5fbDan Gohman virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const; 39295771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 393475871a144eb604ddaf37503397ba0941442e5fbDan Gohman virtual void computeMaskedBitsForTargetNode(const SDValue Op, 39495771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson APInt &KnownZero, 395fd29e0eb060ea8b4d490860329234d2ae5f5952eDan Gohman APInt &KnownOne, 396ea859be53ca13a1547c4675549946b74dc3c6f41Dan Gohman const SelectionDAG &DAG, 397bbe77de450ef36b4f83cc3b57705a9758adbd925Chris Lattner unsigned Depth = 0) const; 3984a95945fa5aa431110f50092f4a45d24772a553bNate Begeman 399af1d8ca44a18f304f207e209b3bdb94b590f86ffDan Gohman virtual MachineBasicBlock * 400af1d8ca44a18f304f207e209b3bdb94b590f86ffDan Gohman EmitInstrWithCustomInserter(MachineInstr *MI, 401af1d8ca44a18f304f207e209b3bdb94b590f86ffDan Gohman MachineBasicBlock *MBB) const; 40295771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson MachineBasicBlock *EmitAtomicBinary(MachineInstr *MI, 403bdab93a2ef5d9574bb4e322e020849f9bc9c90d7Dale Johannesen MachineBasicBlock *MBB, bool is64Bit, 4041fdbc1dd4e9cb42c79a30e8dc308c322e923cc52Dan Gohman unsigned BinOpcode) const; 40595771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson MachineBasicBlock *EmitPartwordAtomicBinary(MachineInstr *MI, 40695771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson MachineBasicBlock *MBB, 4071fdbc1dd4e9cb42c79a30e8dc308c322e923cc52Dan Gohman bool is8bit, unsigned Opcode) const; 40895771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 4097ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr *MI, 4107ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel MachineBasicBlock *MBB) const; 4117ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel 4127ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr *MI, 4137ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel MachineBasicBlock *MBB) const; 4147ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel 4154234f57fa02b1f04a9f52a7b3c2aa22d32ac521cChris Lattner ConstraintType getConstraintType(const std::string &Constraint) const; 41644ab89eb376af838d1123293a79975aede501464John Thompson 41744ab89eb376af838d1123293a79975aede501464John Thompson /// Examine constraint string and operand type and determine a weight value. 41844ab89eb376af838d1123293a79975aede501464John Thompson /// The operand object must already have been set up with the operand type. 41944ab89eb376af838d1123293a79975aede501464John Thompson ConstraintWeight getSingleConstraintMatchWeight( 42044ab89eb376af838d1123293a79975aede501464John Thompson AsmOperandInfo &info, const char *constraint) const; 42144ab89eb376af838d1123293a79975aede501464John Thompson 42295771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson std::pair<unsigned, const TargetRegisterClass*> 423331d1bc5dfe1be9090e29f9af9579888a63a9a79Chris Lattner getRegForInlineAsmConstraint(const std::string &Constraint, 424e50ed30282bb5b4a9ed952580523f2dda16215acOwen Anderson EVT VT) const; 425c4c6257c1a154279bf10e9498d46d6c1793dbaa7Evan Cheng 42628d08fdb9f6572cafd5aae95c7caffa3cd136d8eDale Johannesen /// getByValTypeAlignment - Return the desired alignment for ByVal aggregate 42728d08fdb9f6572cafd5aae95c7caffa3cd136d8eDale Johannesen /// function arguments in the caller parameter area. This is the actual 42828d08fdb9f6572cafd5aae95c7caffa3cd136d8eDale Johannesen /// alignment, not its logarithm. 429db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner unsigned getByValTypeAlignment(Type *Ty) const; 43028d08fdb9f6572cafd5aae95c7caffa3cd136d8eDale Johannesen 43148884cd80b52be1528618f2e9b3425ac24e7b5caChris Lattner /// LowerAsmOperandForConstraint - Lower the specified operand into the Ops 4321784d160e4efa75782884d451d0788b9457e67dcDale Johannesen /// vector. If it is invalid, don't add anything to Ops. 433475871a144eb604ddaf37503397ba0941442e5fbDan Gohman virtual void LowerAsmOperandForConstraint(SDValue Op, 434100c83341676d8aae8fc34b5452563ed08b14f3eEric Christopher std::string &Constraint, 435475871a144eb604ddaf37503397ba0941442e5fbDan Gohman std::vector<SDValue> &Ops, 4365e764233f398b6929b67701672a5e78fec20ce2eChris Lattner SelectionDAG &DAG) const; 43795771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 438c9addb74883fef318140272768422656a694341fChris Lattner /// isLegalAddressingMode - Return true if the addressing mode represented 439c9addb74883fef318140272768422656a694341fChris Lattner /// by AM is legal for this target, for a load/store of the specified type. 440db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner virtual bool isLegalAddressingMode(const AddrMode &AM, Type *Ty)const; 44195771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 44254aeea39a743effe88eedb43d2f7f4805e806ab5Dan Gohman virtual bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const; 44395771afbfd604ad003fa3723cac66c9370fed55dOwen Anderson 44442642d06c915a26af1400de6ce6a53c333e5c247Evan Cheng /// getOptimalMemOpType - Returns the target specific optimal type for load 445f28f8bc40eedc6304ab25dd8bed486fa08f51f70Evan Cheng /// and store operations as a result of memset, memcpy, and memmove 446f28f8bc40eedc6304ab25dd8bed486fa08f51f70Evan Cheng /// lowering. If DstAlign is zero that means it's safe to destination 447f28f8bc40eedc6304ab25dd8bed486fa08f51f70Evan Cheng /// alignment can satisfy any constraint. Similarly if SrcAlign is zero it 448f28f8bc40eedc6304ab25dd8bed486fa08f51f70Evan Cheng /// means there isn't a need to check it against alignment requirement, 449946a3a9f22c967d5432eaab5fa464b91343477cdEvan Cheng /// probably because the source does not need to be loaded. If 'IsMemset' is 450946a3a9f22c967d5432eaab5fa464b91343477cdEvan Cheng /// true, that means it's expanding a memset. If 'ZeroMemset' is true, that 451946a3a9f22c967d5432eaab5fa464b91343477cdEvan Cheng /// means it's a memset of zero. 'MemcpyStrSrc' indicates whether the memcpy 452946a3a9f22c967d5432eaab5fa464b91343477cdEvan Cheng /// source is constant so it does not need to be loaded. 45337f32ee7ffe77d7c2bc1b185802e98979612f041Dan Gohman /// It returns EVT::Other if the type should be determined using generic 45437f32ee7ffe77d7c2bc1b185802e98979612f041Dan Gohman /// target-independent logic. 455f28f8bc40eedc6304ab25dd8bed486fa08f51f70Evan Cheng virtual EVT 4568108a80677a3ab5aff132aea5d340c0beb1ebef7NAKAMURA Takumi getOptimalMemOpType(uint64_t Size, unsigned DstAlign, unsigned SrcAlign, 457946a3a9f22c967d5432eaab5fa464b91343477cdEvan Cheng bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc, 45837f32ee7ffe77d7c2bc1b185802e98979612f041Dan Gohman MachineFunction &MF) const; 45954aeea39a743effe88eedb43d2f7f4805e806ab5Dan Gohman 4602d37f7b979a24930c444f9783173a90a6e548118Hal Finkel /// Is unaligned memory access allowed for the given type, and is it fast 4612d37f7b979a24930c444f9783173a90a6e548118Hal Finkel /// relative to software emulation. 4622d37f7b979a24930c444f9783173a90a6e548118Hal Finkel virtual bool allowsUnalignedMemoryAccesses(EVT VT, bool *Fast = 0) const; 4632d37f7b979a24930c444f9783173a90a6e548118Hal Finkel 464070b8dba809dd75267327cc823118bf7e171d17dHal Finkel /// isFMAFasterThanMulAndAdd - Return true if an FMA operation is faster than 465070b8dba809dd75267327cc823118bf7e171d17dHal Finkel /// a pair of mul and add instructions. fmuladd intrinsics will be expanded to 466070b8dba809dd75267327cc823118bf7e171d17dHal Finkel /// FMAs when this method returns true (and FMAs are legal), otherwise fmuladd 467070b8dba809dd75267327cc823118bf7e171d17dHal Finkel /// is expanded to mul + add. 468070b8dba809dd75267327cc823118bf7e171d17dHal Finkel virtual bool isFMAFasterThanMulAndAdd(EVT VT) const; 469070b8dba809dd75267327cc823118bf7e171d17dHal Finkel 47054fc97dcdc0ab747f49bd09c5a877bfd2a00e364Evan Cheng private: 471475871a144eb604ddaf37503397ba0941442e5fbDan Gohman SDValue getFramePointerFrameIndex(SelectionDAG & DAG) const; 472475871a144eb604ddaf37503397ba0941442e5fbDan Gohman SDValue getReturnAddrFrameIndex(SelectionDAG & DAG) const; 47330e62c098b5841259f8026df1c5c45c7c1182a38Arnold Schwaighofer 4740c439eb2c8397996cbccaf2798e598052d9982c8Evan Cheng bool 4750c439eb2c8397996cbccaf2798e598052d9982c8Evan Cheng IsEligibleForTailCallOptimization(SDValue Callee, 4760c439eb2c8397996cbccaf2798e598052d9982c8Evan Cheng CallingConv::ID CalleeCC, 4770c439eb2c8397996cbccaf2798e598052d9982c8Evan Cheng bool isVarArg, 4780c439eb2c8397996cbccaf2798e598052d9982c8Evan Cheng const SmallVectorImpl<ISD::InputArg> &Ins, 4790c439eb2c8397996cbccaf2798e598052d9982c8Evan Cheng SelectionDAG& DAG) const; 4800c439eb2c8397996cbccaf2798e598052d9982c8Evan Cheng 481475871a144eb604ddaf37503397ba0941442e5fbDan Gohman SDValue EmitTailCallLoadFPAndRetAddr(SelectionDAG & DAG, 48233c960f523f2308482d5b2816af46a7ec90a6d3dDale Johannesen int SPDiff, 48333c960f523f2308482d5b2816af46a7ec90a6d3dDale Johannesen SDValue Chain, 48433c960f523f2308482d5b2816af46a7ec90a6d3dDale Johannesen SDValue &LROpOut, 48533c960f523f2308482d5b2816af46a7ec90a6d3dDale Johannesen SDValue &FPOpOut, 4862a9ddfb903ae3baede7282348afae1f750905248Tilmann Scheller bool isDarwinABI, 487d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman DebugLoc dl) const; 488d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman 489d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const; 490d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const; 491d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const; 492d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const; 493fd42ed676e37c29364f53f848320b7cb706111e0Roman Divacky SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const; 494d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const; 495d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const; 496d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const; 4974a544a79bd735967f1d33fe675ae4566dbd17813Duncan Sands SDValue LowerINIT_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const; 4984a544a79bd735967f1d33fe675ae4566dbd17813Duncan Sands SDValue LowerADJUST_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const; 499475871a144eb604ddaf37503397ba0941442e5fbDan Gohman SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG, 500d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman const PPCSubtarget &Subtarget) const; 5011e93df6f0b5ee6e36d7ec18e6035f0f5a53e5ec6Dan Gohman SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG, 502d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman const PPCSubtarget &Subtarget) const; 503475871a144eb604ddaf37503397ba0941442e5fbDan Gohman SDValue LowerSTACKRESTORE(SDValue Op, SelectionDAG &DAG, 504d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman const PPCSubtarget &Subtarget) const; 505475871a144eb604ddaf37503397ba0941442e5fbDan Gohman SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG, 506d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman const PPCSubtarget &Subtarget) const; 507d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerSELECT_CC(SDValue Op, SelectionDAG &DAG) const; 508d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG, DebugLoc dl) const; 50946479197843ecb651adc9417c49bbd1b00acfcb6Hal Finkel SDValue LowerINT_TO_FP(SDValue Op, SelectionDAG &DAG) const; 510d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerFLT_ROUNDS_(SDValue Op, SelectionDAG &DAG) const; 511d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerSHL_PARTS(SDValue Op, SelectionDAG &DAG) const; 512d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerSRL_PARTS(SDValue Op, SelectionDAG &DAG) const; 513d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerSRA_PARTS(SDValue Op, SelectionDAG &DAG) const; 514d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const; 515d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const; 516d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const; 517d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerSCALAR_TO_VECTOR(SDValue Op, SelectionDAG &DAG) const; 518d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SDValue LowerMUL(SDValue Op, SelectionDAG &DAG) const; 51998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman 52098ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SDValue LowerCallResult(SDValue Chain, SDValue InFlag, 52165c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel CallingConv::ID CallConv, bool isVarArg, 52298ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman const SmallVectorImpl<ISD::InputArg> &Ins, 52398ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman DebugLoc dl, SelectionDAG &DAG, 524d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SmallVectorImpl<SDValue> &InVals) const; 52565c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel SDValue FinishCall(CallingConv::ID CallConv, DebugLoc dl, bool isTailCall, 52698ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman bool isVarArg, 52798ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SelectionDAG &DAG, 52898ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SmallVector<std::pair<unsigned, SDValue>, 8> 52998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman &RegsToPass, 53098ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SDValue InFlag, SDValue Chain, 53198ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SDValue &Callee, 53298ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman int SPDiff, unsigned NumBytes, 53398ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman const SmallVectorImpl<ISD::InputArg> &Ins, 534d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SmallVectorImpl<SDValue> &InVals) const; 53598ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman 53698ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman virtual SDValue 53798ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman LowerFormalArguments(SDValue Chain, 53865c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel CallingConv::ID CallConv, bool isVarArg, 53998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman const SmallVectorImpl<ISD::InputArg> &Ins, 54098ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman DebugLoc dl, SelectionDAG &DAG, 541d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SmallVectorImpl<SDValue> &InVals) const; 54298ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman 54398ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman virtual SDValue 544d2ea0e10cbd158c93fb870cdd03001b9cd1156b8Justin Holewinski LowerCall(TargetLowering::CallLoweringInfo &CLI, 545d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SmallVectorImpl<SDValue> &InVals) const; 54698ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman 547d712f935f7e027a733741e6ca67b3237a59f65d1Hal Finkel virtual bool 548d712f935f7e027a733741e6ca67b3237a59f65d1Hal Finkel CanLowerReturn(CallingConv::ID CallConv, MachineFunction &MF, 549d712f935f7e027a733741e6ca67b3237a59f65d1Hal Finkel bool isVarArg, 550d712f935f7e027a733741e6ca67b3237a59f65d1Hal Finkel const SmallVectorImpl<ISD::OutputArg> &Outs, 551d712f935f7e027a733741e6ca67b3237a59f65d1Hal Finkel LLVMContext &Context) const; 552d712f935f7e027a733741e6ca67b3237a59f65d1Hal Finkel 55398ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman virtual SDValue 55498ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman LowerReturn(SDValue Chain, 55565c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel CallingConv::ID CallConv, bool isVarArg, 55698ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman const SmallVectorImpl<ISD::OutputArg> &Outs, 557c9403659a98bf6487ab6fbf40b81628b5695c02eDan Gohman const SmallVectorImpl<SDValue> &OutVals, 558d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman DebugLoc dl, SelectionDAG &DAG) const; 55998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman 56098ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SDValue 561726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt extendArgForPPC64(ISD::ArgFlagsTy Flags, EVT ObjectVT, SelectionDAG &DAG, 562726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt SDValue ArgVal, DebugLoc dl) const; 563726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt 564726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt void 565726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt setMinReservedArea(MachineFunction &MF, SelectionDAG &DAG, 566726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt unsigned nAltivecParamsAtEnd, 567726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt unsigned MinReservedArea, bool isPPC64) const; 568726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt 569726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt SDValue 570b2544ece597192266199ec00ece2ee5bb6273cd9Bill Schmidt LowerFormalArguments_Darwin(SDValue Chain, 571b2544ece597192266199ec00ece2ee5bb6273cd9Bill Schmidt CallingConv::ID CallConv, bool isVarArg, 572b2544ece597192266199ec00ece2ee5bb6273cd9Bill Schmidt const SmallVectorImpl<ISD::InputArg> &Ins, 573b2544ece597192266199ec00ece2ee5bb6273cd9Bill Schmidt DebugLoc dl, SelectionDAG &DAG, 574b2544ece597192266199ec00ece2ee5bb6273cd9Bill Schmidt SmallVectorImpl<SDValue> &InVals) const; 575b2544ece597192266199ec00ece2ee5bb6273cd9Bill Schmidt SDValue 576b2544ece597192266199ec00ece2ee5bb6273cd9Bill Schmidt LowerFormalArguments_64SVR4(SDValue Chain, 57765c3c8f323198b99b88b109654194540cf9b3fa5Sandeep Patel CallingConv::ID CallConv, bool isVarArg, 57898ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman const SmallVectorImpl<ISD::InputArg> &Ins, 57998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman DebugLoc dl, SelectionDAG &DAG, 580d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SmallVectorImpl<SDValue> &InVals) const; 58198ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SDValue 582419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt LowerFormalArguments_32SVR4(SDValue Chain, 583419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt CallingConv::ID CallConv, bool isVarArg, 584419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt const SmallVectorImpl<ISD::InputArg> &Ins, 585419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt DebugLoc dl, SelectionDAG &DAG, 586419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt SmallVectorImpl<SDValue> &InVals) const; 58798ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman 58898ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SDValue 589726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt createMemcpyOutsideCallSeq(SDValue Arg, SDValue PtrOff, 590726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt SDValue CallSeqStart, ISD::ArgFlagsTy Flags, 591726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt SelectionDAG &DAG, DebugLoc dl) const; 592726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt 593726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt SDValue 594726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt LowerCall_Darwin(SDValue Chain, SDValue Callee, 595726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt CallingConv::ID CallConv, 596726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt bool isVarArg, bool isTailCall, 597726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt const SmallVectorImpl<ISD::OutputArg> &Outs, 598726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt const SmallVectorImpl<SDValue> &OutVals, 599726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt const SmallVectorImpl<ISD::InputArg> &Ins, 600726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt DebugLoc dl, SelectionDAG &DAG, 601726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt SmallVectorImpl<SDValue> &InVals) const; 602726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt SDValue 603726c23705c056e4d86f0b3d833803f1d43e6eee4Bill Schmidt LowerCall_64SVR4(SDValue Chain, SDValue Callee, 604419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt CallingConv::ID CallConv, 6054bfcd4acbc7d12aa55f8de9af84a38422f0f6d83Evan Cheng bool isVarArg, bool isTailCall, 60698ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman const SmallVectorImpl<ISD::OutputArg> &Outs, 607c9403659a98bf6487ab6fbf40b81628b5695c02eDan Gohman const SmallVectorImpl<SDValue> &OutVals, 60898ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman const SmallVectorImpl<ISD::InputArg> &Ins, 60998ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman DebugLoc dl, SelectionDAG &DAG, 610d858e90f039f5fcdc2fa93035e911a5a9505cc50Dan Gohman SmallVectorImpl<SDValue> &InVals) const; 61198ca4f2a325f72374a477f9deba7d09e8999c29bDan Gohman SDValue 612419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt LowerCall_32SVR4(SDValue Chain, SDValue Callee, CallingConv::ID CallConv, 613419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt bool isVarArg, bool isTailCall, 614419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt const SmallVectorImpl<ISD::OutputArg> &Outs, 615419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt const SmallVectorImpl<SDValue> &OutVals, 616419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt const SmallVectorImpl<ISD::InputArg> &Ins, 617419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt DebugLoc dl, SelectionDAG &DAG, 618419f376564d17eaef7e5b4a77b066668e4272eccBill Schmidt SmallVectorImpl<SDValue> &InVals) const; 6197ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel 6207ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel SDValue lowerEH_SJLJ_SETJMP(SDValue Op, SelectionDAG &DAG) const; 6217ee74a663a3b4d4ee6b55d23362f347ed1d390c2Hal Finkel SDValue lowerEH_SJLJ_LONGJMP(SDValue Op, SelectionDAG &DAG) const; 622827307b95fa909e35a3ddef612f9f50ffcf0963aHal Finkel 62363c32a7a9fd30f67bc623c818f434e742d43c085Hal Finkel SDValue DAGCombineFastRecip(SDValue Op, DAGCombinerInfo &DCI) const; 62463c32a7a9fd30f67bc623c818f434e742d43c085Hal Finkel SDValue DAGCombineFastRecipFSQRT(SDValue Op, DAGCombinerInfo &DCI) const; 6257c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner }; 6267c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner} 6277c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 6287c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#endif // LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H 629