SparcISelLowering.h revision a786c7b90cfacf1c36c975ad35c3b793c232e3d8
150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org//===-- SparcISelLowering.h - Sparc DAG Lowering Interface ------*- C++ -*-===// 250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// 350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// The LLVM Compiler Infrastructure 450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// 550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// This file is distributed under the University of Illinois Open Source 650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// License. See LICENSE.TXT for details. 750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// 850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org//===----------------------------------------------------------------------===// 950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// 1050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// This file defines the interfaces that Sparc uses to lower LLVM code into a 1150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// selection DAG. 1250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org// 1350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org//===----------------------------------------------------------------------===// 1450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 1550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#ifndef SPARC_ISELLOWERING_H 1650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#define SPARC_ISELLOWERING_H 1750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 18c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com#include "llvm/Target/TargetLowering.h" 19c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com#include "Sparc.h" 20c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com 21c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.comnamespace llvm { 22c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com namespace SPISD { 23bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com enum { 24bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com FIRST_NUMBER = ISD::BUILTIN_OP_END, 25bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com CMPICC, // Compare two GPR operands, set icc. 26bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com CMPFCC, // Compare two FP operands, set fcc. 27bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com BRICC, // Branch to dest on icc condition 28bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com BRFCC, // Branch to dest on fcc condition 29bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com SELECT_ICC, // Select between two values using the current ICC flags. 30bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com SELECT_FCC, // Select between two values using the current FCC flags. 31bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com 32bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com Hi, Lo, // Hi/Lo operations, typically on a global address. 33bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com 3450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org FTOI, // FP to Int within a FP register. 35dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com ITOF, // Int to FP within a FP register. 3650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 3750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org CALL, // A call instruction. 385970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org RET_FLAG // Return with a flag operand. 399c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com }; 409c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com } 4150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 42a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org class SparcTargetLowering : public TargetLowering { 4350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org int VarArgsFrameOffset; // Frame offset to start of varargs area. 449c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com public: 459c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com SparcTargetLowering(TargetMachine &TM); 469c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG); 475970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org SDValue LowerFORMAL_ARGUMENTS(SDValue Op, SelectionDAG &DAG); 4850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 4950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org int getVarArgsFrameOffset() const { return VarArgsFrameOffset; } 5050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 5150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org /// computeMaskedBitsForTargetNode - Determine which of the bits specified 525970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org /// in Mask are known to be either zero or one and return them in the 5350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org /// KnownZero/KnownOne bitsets. 5450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org virtual void computeMaskedBitsForTargetNode(const SDValue Op, 5550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org const APInt &Mask, 56c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com APInt &KnownZero, 57c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com APInt &KnownOne, 589c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com const SelectionDAG &DAG, 5964494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org unsigned Depth = 0) const; 60bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com 611aa90cf11e136a722bce71dd77f4bb03cc2b56f8skia.committer@gmail.com virtual MachineBasicBlock *EmitInstrWithCustomInserter(MachineInstr *MI, 629c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com MachineBasicBlock *MBB) const; 6350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 6450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org virtual const char *getTargetNodeName(unsigned Opcode) const; 65ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com 66c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com ConstraintType getConstraintType(const std::string &Constraint) const; 6750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org std::pair<unsigned, const TargetRegisterClass*> 6850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org getRegForInlineAsmConstraint(const std::string &Constraint, MVT VT) const; 6950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org std::vector<unsigned> 7050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org getRegClassForInlineAsmConstraint(const std::string &Constraint, 7150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org MVT VT) const; 7245ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 73c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com virtual bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const; 74c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com 7545ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com /// getFunctionAlignment - Return the Log2 alignment of this function. 76c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com virtual unsigned getFunctionAlignment(const Function *F) const; 77c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com }; 787ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com} // end namespace llvm 79bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com 80bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com#endif // SPARC_ISELLOWERING_H 817ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com