PPCISelLowering.h revision 0bbea954331b8f08afa5b094dfb0841829c70eaa
10bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner//===-- PPC32ISelLowering.h - PPC32 DAG Lowering Interface ------*- C++ -*-===// 27c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// 37c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// The LLVM Compiler Infrastructure 47c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// 57c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// This file was developed by Chris Lattner and is distributed under 67c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner// the University of Illinois Open Source 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 187c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#include "llvm/Target/TargetLowering.h" 190bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner#include "llvm/CodeGen/SelectionDAG.h" 200bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner#include "PowerPC.h" 217c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 227c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattnernamespace llvm { 230bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner namespace PPCISD { 240bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner enum NodeType { 250bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner // Start the numbering where the builting ops and target ops leave off. 260bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner FIRST_NUMBER = ISD::BUILTIN_OP_END+PPC::INSTRUCTION_LIST_END, 270bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner 280bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner /// FSEL - Traditional three-operand fsel node. 290bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner /// 300bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner FSEL, 310bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner }; 320bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner } 330bbea954331b8f08afa5b094dfb0841829c70eaaChris Lattner 347c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner class PPC32TargetLowering : public TargetLowering { 357c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner int VarArgsFrameIndex; // FrameIndex for start of varargs area. 367c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner int ReturnAddrIndex; // FrameIndex for return slot. 377c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner public: 387c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner PPC32TargetLowering(TargetMachine &TM); 397c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 40e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner /// LowerOperation - Provide custom lowering hooks for some operations. 41e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner /// 42e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner virtual SDOperand LowerOperation(SDOperand Op, SelectionDAG &DAG); 43e4bc9ea0a560d8a0ba42f5a2da617e1f1f834710Chris Lattner 447c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner /// LowerArguments - This hook must be implemented to indicate how we should 457c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner /// lower the arguments for the specified function, into the specified DAG. 467c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner virtual std::vector<SDOperand> 477c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner LowerArguments(Function &F, SelectionDAG &DAG); 487c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 497c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner /// LowerCallTo - This hook lowers an abstract call to a function into an 507c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner /// actual call. 517c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner virtual std::pair<SDOperand, SDOperand> 527c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg, 537c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner unsigned CC, 547c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner bool isTailCall, SDOperand Callee, ArgListTy &Args, 557c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner SelectionDAG &DAG); 567c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 577c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner virtual SDOperand LowerVAStart(SDOperand Chain, SDOperand VAListP, 587c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner Value *VAListV, SelectionDAG &DAG); 597c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 607c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner virtual std::pair<SDOperand,SDOperand> 617c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner LowerVAArg(SDOperand Chain, SDOperand VAListP, Value *VAListV, 627c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner const Type *ArgTy, SelectionDAG &DAG); 637c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 647c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner virtual std::pair<SDOperand, SDOperand> 657c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner LowerFrameReturnAddress(bool isFrameAddr, SDOperand Chain, unsigned Depth, 667c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner SelectionDAG &DAG); 677c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner }; 687c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner} 697c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner 707c5a3d390a463fb50a6eee7ae3174817925e6d28Chris Lattner#endif // LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H 71