X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86ISelLowering.h;h=bcfab641fd08cb45ada17b196ce3899a3dcb52ea;hb=be8c03fc66b75fa775e1f47d62a1b0d803fced1c;hp=b68de5a675394dab578f17b9522ddbf19f890d8a;hpb=2bd122c4d934a70e031dc0ca5171719bac66c2c9;p=oota-llvm.git diff --git a/lib/Target/X86/X86ISelLowering.h b/lib/Target/X86/X86ISelLowering.h index b68de5a6753..bcfab641fd0 100644 --- a/lib/Target/X86/X86ISelLowering.h +++ b/lib/Target/X86/X86ISelLowering.h @@ -2,8 +2,8 @@ // // The LLVM Compiler Infrastructure // -// This file was developed by Chris Lattner and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // @@ -28,6 +28,11 @@ namespace llvm { // Start the numbering where the builtin ops leave off. FIRST_NUMBER = ISD::BUILTIN_OP_END+X86::INSTRUCTION_LIST_END, + /// BSF - Bit scan forward. + /// BSR - Bit scan reverse. + BSF, + BSR, + /// SHLD, SHRD - Double shift instructions. These correspond to /// X86::SHLDxx and X86::SHRDxx instructions. SHLD, @@ -188,7 +193,10 @@ namespace llvm { // operand #1 callee (register or absolute) // operand #2 stack adjustment // operand #3 optional in flag - TC_RETURN + TC_RETURN, + + // Store FP control world into i16 memory + FNSTCW16m }; } @@ -296,6 +304,11 @@ namespace llvm { public: explicit X86TargetLowering(TargetMachine &TM); + /// getPICJumpTableRelocaBase - Returns relocation base for the given PIC + /// jumptable. + SDOperand getPICJumpTableRelocBase(SDOperand Table, + SelectionDAG &DAG) const; + // Return the number of bytes that a function should pop when it returns (in // addition to the space used by the return address). // @@ -313,6 +326,12 @@ namespace llvm { /// virtual SDOperand LowerOperation(SDOperand Op, SelectionDAG &DAG); + /// ExpandOperation - Custom lower the specified operation, splitting the + /// value into two pieces. + /// + virtual SDNode *ExpandOperationResult(SDNode *N, SelectionDAG &DAG); + + virtual SDOperand PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const; virtual MachineBasicBlock *InsertAtEndOfBasicBlock(MachineInstr *MI, @@ -363,6 +382,7 @@ namespace llvm { /// type Ty1 to type Ty2. e.g. On x86 it's free to truncate a i32 value in /// register EAX to i16 by referencing its sub-register AX. virtual bool isTruncateFree(const Type *Ty1, const Type *Ty2) const; + virtual bool isTruncateFree(MVT::ValueType VT1, MVT::ValueType VT2) const; /// isShuffleMaskLegal - Targets can use this to indicate that they only /// support *some* VECTOR_SHUFFLE operations, those with specific masks. @@ -385,6 +405,10 @@ namespace llvm { SDOperand Ret, SelectionDAG &DAG) const; + virtual const TargetSubtarget* getSubtarget() { + return static_cast(Subtarget); + } + private: /// Subtarget - Keep a pointer to the X86Subtarget around so that we can /// make the right decision when generating code for different targets. @@ -431,6 +455,9 @@ namespace llvm { SDOperand LowerFastCCArguments(SDOperand Op, SelectionDAG &DAG); SDOperand LowerFastCCCallTo(SDOperand Op, SelectionDAG &DAG, unsigned CC); + std::pair FP_TO_SINTHelper(SDOperand Op, + SelectionDAG &DAG); + SDOperand LowerBUILD_VECTOR(SDOperand Op, SelectionDAG &DAG); SDOperand LowerVECTOR_SHUFFLE(SDOperand Op, SelectionDAG &DAG); SDOperand LowerEXTRACT_VECTOR_ELT(SDOperand Op, SelectionDAG &DAG); @@ -453,16 +480,11 @@ namespace llvm { SDOperand LowerMEMCPYInline(SDOperand Dest, SDOperand Source, SDOperand Chain, unsigned Size, unsigned Align, SelectionDAG &DAG); - SDOperand LowerMEMCPYCall(SDOperand ChainOp, SDOperand DestOp, - SDOperand SourceOp, SDOperand CountOp, - SelectionDAG &DAG); - SDOperand LowerMEMCPY(SDOperand Op, SelectionDAG &DAG); SDOperand LowerJumpTable(SDOperand Op, SelectionDAG &DAG); SDOperand LowerCALL(SDOperand Op, SelectionDAG &DAG); SDOperand LowerRET(SDOperand Op, SelectionDAG &DAG); SDOperand LowerDYNAMIC_STACKALLOC(SDOperand Op, SelectionDAG &DAG); SDOperand LowerFORMAL_ARGUMENTS(SDOperand Op, SelectionDAG &DAG); - SDOperand LowerREADCYCLCECOUNTER(SDOperand Op, SelectionDAG &DAG); SDOperand LowerVASTART(SDOperand Op, SelectionDAG &DAG); SDOperand LowerVACOPY(SDOperand Op, SelectionDAG &DAG); SDOperand LowerINTRINSIC_WO_CHAIN(SDOperand Op, SelectionDAG &DAG); @@ -471,6 +493,11 @@ namespace llvm { SDOperand LowerFRAME_TO_ARGS_OFFSET(SDOperand Op, SelectionDAG &DAG); SDOperand LowerEH_RETURN(SDOperand Op, SelectionDAG &DAG); SDOperand LowerTRAMPOLINE(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerFLT_ROUNDS(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerCTLZ(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerCTTZ(SDOperand Op, SelectionDAG &DAG); + SDNode *ExpandFP_TO_SINT(SDNode *N, SelectionDAG &DAG); + SDNode *ExpandREADCYCLECOUNTER(SDNode *N, SelectionDAG &DAG); }; }