SparcISelLowering.h revision d23405e6f04135cabcad4d9bd7aa6e4f187bed3a
1d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner//===-- SparcISelLowering.h - Sparc DAG Lowering Interface ------*- C++ -*-===// 2d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// 3d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// The LLVM Compiler Infrastructure 4d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// 5d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// This file is distributed under the University of Illinois Open Source 6d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// License. See LICENSE.TXT for details. 7d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// 8d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner//===----------------------------------------------------------------------===// 9d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// 10d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// This file defines the interfaces that Sparc uses to lower LLVM code into a 11d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// selection DAG. 12d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner// 13d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner//===----------------------------------------------------------------------===// 14d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 15d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#ifndef SPARC_ISELLOWERING_H 16d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#define SPARC_ISELLOWERING_H 17d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 18d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "llvm/Target/TargetLowering.h" 19d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#include "Sparc.h" 20d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 21d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattnernamespace llvm { 22d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner namespace SPISD { 23d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner enum { 24d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner FIRST_NUMBER = ISD::BUILTIN_OP_END+SP::INSTRUCTION_LIST_END, 25d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner CMPICC, // Compare two GPR operands, set icc. 26d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner CMPFCC, // Compare two FP operands, set fcc. 27d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner BRICC, // Branch to dest on icc condition 28d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner BRFCC, // Branch to dest on fcc condition 29d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner SELECT_ICC, // Select between two values using the current ICC flags. 30d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner SELECT_FCC, // Select between two values using the current FCC flags. 31d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 32d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner Hi, Lo, // Hi/Lo operations, typically on a global address. 33d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 34d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner FTOI, // FP to Int within a FP register. 35d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner ITOF, // Int to FP within a FP register. 36d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 37d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner CALL, // A call instruction. 38d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner RET_FLAG // Return with a flag operand. 39d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner }; 40d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner } 41d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 42d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner class SparcTargetLowering : public TargetLowering { 43d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner int VarArgsFrameOffset; // Frame offset to start of varargs area. 44d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner public: 45d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner SparcTargetLowering(TargetMachine &TM); 46d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner virtual SDOperand LowerOperation(SDOperand Op, SelectionDAG &DAG); 47d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 48d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner int getVarArgsFrameOffset() const { return VarArgsFrameOffset; } 49d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 50d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner /// computeMaskedBitsForTargetNode - Determine which of the bits specified 51d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner /// in Mask are known to be either zero or one and return them in the 52d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner /// KnownZero/KnownOne bitsets. 53d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner virtual void computeMaskedBitsForTargetNode(const SDOperand Op, 54d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner const APInt &Mask, 55d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner APInt &KnownZero, 56d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner APInt &KnownOne, 57d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner const SelectionDAG &DAG, 58d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner unsigned Depth = 0) const; 59d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 60d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner virtual std::vector<SDOperand> 61d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner LowerArguments(Function &F, SelectionDAG &DAG); 62d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner virtual std::pair<SDOperand, SDOperand> 63d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner LowerCallTo(SDOperand Chain, const Type *RetTy, 64d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner bool RetSExt, bool RetZExt, bool isVarArg, 65d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner unsigned CC, bool isTailCall, SDOperand Callee, 66d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner ArgListTy &Args, SelectionDAG &DAG); 67d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner virtual MachineBasicBlock *EmitInstrWithCustomInserter(MachineInstr *MI, 68d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner MachineBasicBlock *MBB); 69d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 70d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner virtual const char *getTargetNodeName(unsigned Opcode) const; 71d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner }; 72d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner} // end namespace llvm 73d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner 74d23405e6f04135cabcad4d9bd7aa6e4f187bed3aChris Lattner#endif // SPARC_ISELLOWERING_H 75