Use the canonical library name for library PIC16Passes.
[oota-llvm.git] / lib / Target / X86 / X86ISelLowering.h
1 //===-- X86ISelLowering.h - X86 DAG Lowering Interface ----------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the interfaces that X86 uses to lower LLVM code into a
11 // selection DAG.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef X86ISELLOWERING_H
16 #define X86ISELLOWERING_H
17
18 #include "X86Subtarget.h"
19 #include "X86RegisterInfo.h"
20 #include "X86MachineFunctionInfo.h"
21 #include "llvm/Target/TargetLowering.h"
22 #include "llvm/Target/TargetOptions.h"
23 #include "llvm/CodeGen/FastISel.h"
24 #include "llvm/CodeGen/SelectionDAG.h"
25 #include "llvm/CodeGen/CallingConvLower.h"
26
27 namespace llvm {
28   namespace X86ISD {
29     // X86 Specific DAG Nodes
30     enum NodeType {
31       // Start the numbering where the builtin ops leave off.
32       FIRST_NUMBER = ISD::BUILTIN_OP_END,
33
34       /// BSF - Bit scan forward.
35       /// BSR - Bit scan reverse.
36       BSF,
37       BSR,
38
39       /// SHLD, SHRD - Double shift instructions. These correspond to
40       /// X86::SHLDxx and X86::SHRDxx instructions.
41       SHLD,
42       SHRD,
43
44       /// FAND - Bitwise logical AND of floating point values. This corresponds
45       /// to X86::ANDPS or X86::ANDPD.
46       FAND,
47
48       /// FOR - Bitwise logical OR of floating point values. This corresponds
49       /// to X86::ORPS or X86::ORPD.
50       FOR,
51
52       /// FXOR - Bitwise logical XOR of floating point values. This corresponds
53       /// to X86::XORPS or X86::XORPD.
54       FXOR,
55
56       /// FSRL - Bitwise logical right shift of floating point values. These
57       /// corresponds to X86::PSRLDQ.
58       FSRL,
59
60       /// CALL - These operations represent an abstract X86 call
61       /// instruction, which includes a bunch of information.  In particular the
62       /// operands of these node are:
63       ///
64       ///     #0 - The incoming token chain
65       ///     #1 - The callee
66       ///     #2 - The number of arg bytes the caller pushes on the stack.
67       ///     #3 - The number of arg bytes the callee pops off the stack.
68       ///     #4 - The value to pass in AL/AX/EAX (optional)
69       ///     #5 - The value to pass in DL/DX/EDX (optional)
70       ///
71       /// The result values of these nodes are:
72       ///
73       ///     #0 - The outgoing token chain
74       ///     #1 - The first register result value (optional)
75       ///     #2 - The second register result value (optional)
76       ///
77       CALL,
78
79       /// RDTSC_DAG - This operation implements the lowering for 
80       /// readcyclecounter
81       RDTSC_DAG,
82
83       /// X86 compare and logical compare instructions.
84       CMP, COMI, UCOMI,
85
86       /// X86 bit-test instructions.
87       BT,
88
89       /// X86 SetCC. Operand 0 is condition code, and operand 1 is the flag
90       /// operand produced by a CMP instruction.
91       SETCC,
92
93       // Same as SETCC except it's materialized with a sbb and the value is all
94       // one's or all zero's.
95       SETCC_CARRY,
96
97       /// X86 conditional moves. Operand 0 and operand 1 are the two values
98       /// to select from. Operand 2 is the condition code, and operand 3 is the
99       /// flag operand produced by a CMP or TEST instruction. It also writes a
100       /// flag result.
101       CMOV,
102
103       /// X86 conditional branches. Operand 0 is the chain operand, operand 1
104       /// is the block to branch if condition is true, operand 2 is the
105       /// condition code, and operand 3 is the flag operand produced by a CMP
106       /// or TEST instruction.
107       BRCOND,
108
109       /// Return with a flag operand. Operand 0 is the chain operand, operand
110       /// 1 is the number of bytes of stack to pop.
111       RET_FLAG,
112
113       /// REP_STOS - Repeat fill, corresponds to X86::REP_STOSx.
114       REP_STOS,
115
116       /// REP_MOVS - Repeat move, corresponds to X86::REP_MOVSx.
117       REP_MOVS,
118
119       /// GlobalBaseReg - On Darwin, this node represents the result of the popl
120       /// at function entry, used for PIC code.
121       GlobalBaseReg,
122
123       /// Wrapper - A wrapper node for TargetConstantPool,
124       /// TargetExternalSymbol, and TargetGlobalAddress.
125       Wrapper,
126
127       /// WrapperRIP - Special wrapper used under X86-64 PIC mode for RIP
128       /// relative displacements.
129       WrapperRIP,
130
131       /// MOVQ2DQ - Copies a 64-bit value from a vector to another vector.
132       /// Can be used to move a vector value from a MMX register to a XMM
133       /// register.
134       MOVQ2DQ,
135
136       /// PEXTRB - Extract an 8-bit value from a vector and zero extend it to
137       /// i32, corresponds to X86::PEXTRB.
138       PEXTRB,
139
140       /// PEXTRW - Extract a 16-bit value from a vector and zero extend it to
141       /// i32, corresponds to X86::PEXTRW.
142       PEXTRW,
143
144       /// INSERTPS - Insert any element of a 4 x float vector into any element
145       /// of a destination 4 x floatvector.
146       INSERTPS,
147
148       /// PINSRB - Insert the lower 8-bits of a 32-bit value to a vector,
149       /// corresponds to X86::PINSRB.
150       PINSRB,
151
152       /// PINSRW - Insert the lower 16-bits of a 32-bit value to a vector,
153       /// corresponds to X86::PINSRW.
154       PINSRW, MMX_PINSRW,
155
156       /// PSHUFB - Shuffle 16 8-bit values within a vector.
157       PSHUFB,
158
159       /// FMAX, FMIN - Floating point max and min.
160       ///
161       FMAX, FMIN,
162
163       /// FRSQRT, FRCP - Floating point reciprocal-sqrt and reciprocal
164       /// approximation.  Note that these typically require refinement
165       /// in order to obtain suitable precision.
166       FRSQRT, FRCP,
167
168       // TLSADDR - Thread Local Storage.
169       TLSADDR,
170       
171       // TLSCALL - Thread Local Storage.  When calling to an OS provided
172       // thunk at the address from an earlier relocation.
173       TLSCALL,
174
175       // EH_RETURN - Exception Handling helpers.
176       EH_RETURN,
177       
178       /// TC_RETURN - Tail call return.
179       ///   operand #0 chain
180       ///   operand #1 callee (register or absolute)
181       ///   operand #2 stack adjustment
182       ///   operand #3 optional in flag
183       TC_RETURN,
184
185       // VZEXT_MOVL - Vector move low and zero extend.
186       VZEXT_MOVL,
187
188       // VSHL, VSRL - Vector logical left / right shift.
189       VSHL, VSRL,
190
191       // CMPPD, CMPPS - Vector double/float comparison.
192       // CMPPD, CMPPS - Vector double/float comparison.
193       CMPPD, CMPPS,
194       
195       // PCMP* - Vector integer comparisons.
196       PCMPEQB, PCMPEQW, PCMPEQD, PCMPEQQ,
197       PCMPGTB, PCMPGTW, PCMPGTD, PCMPGTQ,
198
199       // ADD, SUB, SMUL, UMUL, etc. - Arithmetic operations with FLAGS results.
200       ADD, SUB, SMUL, UMUL,
201       INC, DEC, OR, XOR, AND,
202
203       // MUL_IMM - X86 specific multiply by immediate.
204       MUL_IMM,
205       
206       // PTEST - Vector bitwise comparisons
207       PTEST,
208
209       // TESTP - Vector packed fp sign bitwise comparisons
210       TESTP,
211
212       // Several flavors of instructions with vector shuffle behaviors.
213       PALIGN,
214       PSHUFD,
215       PSHUFHW,
216       PSHUFLW,
217       PSHUFHW_LD,
218       PSHUFLW_LD,
219       SHUFPD,
220       SHUFPS,
221       MOVDDUP,
222       MOVSHDUP,
223       MOVSLDUP,
224       MOVSHDUP_LD,
225       MOVSLDUP_LD,
226       MOVLHPS,
227       MOVLHPD,
228       MOVHLPS,
229       MOVHLPD,
230       MOVLPS,
231       MOVLPD,
232       MOVSD,
233       MOVSS,
234       UNPCKLPS,
235       UNPCKLPD,
236       UNPCKHPS,
237       UNPCKHPD,
238       PUNPCKLBW,
239       PUNPCKLWD,
240       PUNPCKLDQ,
241       PUNPCKLQDQ,
242       PUNPCKHBW,
243       PUNPCKHWD,
244       PUNPCKHDQ,
245       PUNPCKHQDQ,
246
247       // VASTART_SAVE_XMM_REGS - Save xmm argument registers to the stack,
248       // according to %al. An operator is needed so that this can be expanded
249       // with control flow.
250       VASTART_SAVE_XMM_REGS,
251
252       // MINGW_ALLOCA - MingW's __alloca call to do stack probing.
253       MINGW_ALLOCA,
254
255       // ATOMADD64_DAG, ATOMSUB64_DAG, ATOMOR64_DAG, ATOMAND64_DAG, 
256       // ATOMXOR64_DAG, ATOMNAND64_DAG, ATOMSWAP64_DAG - 
257       // Atomic 64-bit binary operations.
258       ATOMADD64_DAG = ISD::FIRST_TARGET_MEMORY_OPCODE,
259       ATOMSUB64_DAG,
260       ATOMOR64_DAG,
261       ATOMXOR64_DAG,
262       ATOMAND64_DAG,
263       ATOMNAND64_DAG,
264       ATOMSWAP64_DAG,
265       
266       // Memory barrier
267       MEMBARRIER,
268       MFENCE,
269       SFENCE,
270       LFENCE,
271       
272       // LCMPXCHG_DAG, LCMPXCHG8_DAG - Compare and swap.
273       LCMPXCHG_DAG,
274       LCMPXCHG8_DAG,
275
276       // VZEXT_LOAD - Load, scalar_to_vector, and zero extend.
277       VZEXT_LOAD,
278       
279       // FNSTCW16m - Store FP control world into i16 memory.
280       FNSTCW16m,
281       
282       /// FP_TO_INT*_IN_MEM - This instruction implements FP_TO_SINT with the
283       /// integer destination in memory and a FP reg source.  This corresponds
284       /// to the X86::FIST*m instructions and the rounding mode change stuff. It
285       /// has two inputs (token chain and address) and two outputs (int value
286       /// and token chain).
287       FP_TO_INT16_IN_MEM,
288       FP_TO_INT32_IN_MEM,
289       FP_TO_INT64_IN_MEM,
290       
291       /// FILD, FILD_FLAG - This instruction implements SINT_TO_FP with the
292       /// integer source in memory and FP reg result.  This corresponds to the
293       /// X86::FILD*m instructions. It has three inputs (token chain, address,
294       /// and source type) and two outputs (FP value and token chain). FILD_FLAG
295       /// also produces a flag).
296       FILD,
297       FILD_FLAG,
298       
299       /// FLD - This instruction implements an extending load to FP stack slots.
300       /// This corresponds to the X86::FLD32m / X86::FLD64m. It takes a chain
301       /// operand, ptr to load from, and a ValueType node indicating the type
302       /// to load to.
303       FLD,
304       
305       /// FST - This instruction implements a truncating store to FP stack
306       /// slots. This corresponds to the X86::FST32m / X86::FST64m. It takes a
307       /// chain operand, value to store, address, and a ValueType to store it
308       /// as.
309       FST
310       
311       // WARNING: Do not add anything in the end unless you want the node to
312       // have memop! In fact, starting from ATOMADD64_DAG all opcodes will be
313       // thought as target memory ops!
314     };
315   }
316
317   /// Define some predicates that are used for node matching.
318   namespace X86 {
319     /// isPSHUFDMask - Return true if the specified VECTOR_SHUFFLE operand
320     /// specifies a shuffle of elements that is suitable for input to PSHUFD.
321     bool isPSHUFDMask(ShuffleVectorSDNode *N);
322
323     /// isPSHUFHWMask - Return true if the specified VECTOR_SHUFFLE operand
324     /// specifies a shuffle of elements that is suitable for input to PSHUFD.
325     bool isPSHUFHWMask(ShuffleVectorSDNode *N);
326
327     /// isPSHUFLWMask - Return true if the specified VECTOR_SHUFFLE operand
328     /// specifies a shuffle of elements that is suitable for input to PSHUFD.
329     bool isPSHUFLWMask(ShuffleVectorSDNode *N);
330
331     /// isSHUFPMask - Return true if the specified VECTOR_SHUFFLE operand
332     /// specifies a shuffle of elements that is suitable for input to SHUFP*.
333     bool isSHUFPMask(ShuffleVectorSDNode *N);
334
335     /// isMOVHLPSMask - Return true if the specified VECTOR_SHUFFLE operand
336     /// specifies a shuffle of elements that is suitable for input to MOVHLPS.
337     bool isMOVHLPSMask(ShuffleVectorSDNode *N);
338
339     /// isMOVHLPS_v_undef_Mask - Special case of isMOVHLPSMask for canonical form
340     /// of vector_shuffle v, v, <2, 3, 2, 3>, i.e. vector_shuffle v, undef,
341     /// <2, 3, 2, 3>
342     bool isMOVHLPS_v_undef_Mask(ShuffleVectorSDNode *N);
343
344     /// isMOVLPMask - Return true if the specified VECTOR_SHUFFLE operand
345     /// specifies a shuffle of elements that is suitable for MOVLP{S|D}.
346     bool isMOVLPMask(ShuffleVectorSDNode *N);
347
348     /// isMOVHPMask - Return true if the specified VECTOR_SHUFFLE operand
349     /// specifies a shuffle of elements that is suitable for MOVHP{S|D}.
350     /// as well as MOVLHPS.
351     bool isMOVLHPSMask(ShuffleVectorSDNode *N);
352
353     /// isUNPCKLMask - Return true if the specified VECTOR_SHUFFLE operand
354     /// specifies a shuffle of elements that is suitable for input to UNPCKL.
355     bool isUNPCKLMask(ShuffleVectorSDNode *N, bool V2IsSplat = false);
356
357     /// isUNPCKHMask - Return true if the specified VECTOR_SHUFFLE operand
358     /// specifies a shuffle of elements that is suitable for input to UNPCKH.
359     bool isUNPCKHMask(ShuffleVectorSDNode *N, bool V2IsSplat = false);
360
361     /// isUNPCKL_v_undef_Mask - Special case of isUNPCKLMask for canonical form
362     /// of vector_shuffle v, v, <0, 4, 1, 5>, i.e. vector_shuffle v, undef,
363     /// <0, 0, 1, 1>
364     bool isUNPCKL_v_undef_Mask(ShuffleVectorSDNode *N);
365
366     /// isUNPCKH_v_undef_Mask - Special case of isUNPCKHMask for canonical form
367     /// of vector_shuffle v, v, <2, 6, 3, 7>, i.e. vector_shuffle v, undef,
368     /// <2, 2, 3, 3>
369     bool isUNPCKH_v_undef_Mask(ShuffleVectorSDNode *N);
370
371     /// isMOVLMask - Return true if the specified VECTOR_SHUFFLE operand
372     /// specifies a shuffle of elements that is suitable for input to MOVSS,
373     /// MOVSD, and MOVD, i.e. setting the lowest element.
374     bool isMOVLMask(ShuffleVectorSDNode *N);
375
376     /// isMOVSHDUPMask - Return true if the specified VECTOR_SHUFFLE operand
377     /// specifies a shuffle of elements that is suitable for input to MOVSHDUP.
378     bool isMOVSHDUPMask(ShuffleVectorSDNode *N);
379
380     /// isMOVSLDUPMask - Return true if the specified VECTOR_SHUFFLE operand
381     /// specifies a shuffle of elements that is suitable for input to MOVSLDUP.
382     bool isMOVSLDUPMask(ShuffleVectorSDNode *N);
383
384     /// isMOVDDUPMask - Return true if the specified VECTOR_SHUFFLE operand
385     /// specifies a shuffle of elements that is suitable for input to MOVDDUP.
386     bool isMOVDDUPMask(ShuffleVectorSDNode *N);
387
388     /// isPALIGNRMask - Return true if the specified VECTOR_SHUFFLE operand
389     /// specifies a shuffle of elements that is suitable for input to PALIGNR.
390     bool isPALIGNRMask(ShuffleVectorSDNode *N);
391
392     /// getShuffleSHUFImmediate - Return the appropriate immediate to shuffle
393     /// the specified isShuffleMask VECTOR_SHUFFLE mask with PSHUF* and SHUFP*
394     /// instructions.
395     unsigned getShuffleSHUFImmediate(SDNode *N);
396
397     /// getShufflePSHUFHWImmediate - Return the appropriate immediate to shuffle
398     /// the specified VECTOR_SHUFFLE mask with PSHUFHW instruction.
399     unsigned getShufflePSHUFHWImmediate(SDNode *N);
400
401     /// getShufflePSHUFLWImmediate - Return the appropriate immediate to shuffle
402     /// the specified VECTOR_SHUFFLE mask with PSHUFLW instruction.
403     unsigned getShufflePSHUFLWImmediate(SDNode *N);
404
405     /// getShufflePALIGNRImmediate - Return the appropriate immediate to shuffle
406     /// the specified VECTOR_SHUFFLE mask with the PALIGNR instruction.
407     unsigned getShufflePALIGNRImmediate(SDNode *N);
408
409     /// isZeroNode - Returns true if Elt is a constant zero or a floating point
410     /// constant +0.0.
411     bool isZeroNode(SDValue Elt);
412
413     /// isOffsetSuitableForCodeModel - Returns true of the given offset can be
414     /// fit into displacement field of the instruction.
415     bool isOffsetSuitableForCodeModel(int64_t Offset, CodeModel::Model M,
416                                       bool hasSymbolicDisplacement = true);
417   }
418
419   //===--------------------------------------------------------------------===//
420   //  X86TargetLowering - X86 Implementation of the TargetLowering interface
421   class X86TargetLowering : public TargetLowering {
422   public:
423     explicit X86TargetLowering(X86TargetMachine &TM);
424
425     /// getPICBaseSymbol - Return the X86-32 PIC base.
426     MCSymbol *getPICBaseSymbol(const MachineFunction *MF, MCContext &Ctx) const;
427     
428     virtual unsigned getJumpTableEncoding() const;
429
430     virtual const MCExpr *
431     LowerCustomJumpTableEntry(const MachineJumpTableInfo *MJTI,
432                               const MachineBasicBlock *MBB, unsigned uid,
433                               MCContext &Ctx) const;
434     
435     /// getPICJumpTableRelocaBase - Returns relocation base for the given PIC
436     /// jumptable.
437     virtual SDValue getPICJumpTableRelocBase(SDValue Table,
438                                              SelectionDAG &DAG) const;
439     virtual const MCExpr *
440     getPICJumpTableRelocBaseExpr(const MachineFunction *MF,
441                                  unsigned JTI, MCContext &Ctx) const;
442     
443     /// getStackPtrReg - Return the stack pointer register we are using: either
444     /// ESP or RSP.
445     unsigned getStackPtrReg() const { return X86StackPtr; }
446
447     /// getByValTypeAlignment - Return the desired alignment for ByVal aggregate
448     /// function arguments in the caller parameter area. For X86, aggregates
449     /// that contains are placed at 16-byte boundaries while the rest are at
450     /// 4-byte boundaries.
451     virtual unsigned getByValTypeAlignment(const Type *Ty) const;
452
453     /// getOptimalMemOpType - Returns the target specific optimal type for load
454     /// and store operations as a result of memset, memcpy, and memmove
455     /// lowering. If DstAlign is zero that means it's safe to destination
456     /// alignment can satisfy any constraint. Similarly if SrcAlign is zero it
457     /// means there isn't a need to check it against alignment requirement,
458     /// probably because the source does not need to be loaded. If
459     /// 'NonScalarIntSafe' is true, that means it's safe to return a
460     /// non-scalar-integer type, e.g. empty string source, constant, or loaded
461     /// from memory. 'MemcpyStrSrc' indicates whether the memcpy source is
462     /// constant so it does not need to be loaded.
463     /// It returns EVT::Other if the type should be determined using generic
464     /// target-independent logic.
465     virtual EVT
466     getOptimalMemOpType(uint64_t Size, unsigned DstAlign, unsigned SrcAlign,
467                         bool NonScalarIntSafe, bool MemcpyStrSrc,
468                         MachineFunction &MF) const;
469
470     /// allowsUnalignedMemoryAccesses - Returns true if the target allows
471     /// unaligned memory accesses. of the specified type.
472     virtual bool allowsUnalignedMemoryAccesses(EVT VT) const {
473       return true;
474     }
475
476     /// LowerOperation - Provide custom lowering hooks for some operations.
477     ///
478     virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
479
480     /// ReplaceNodeResults - Replace the results of node with an illegal result
481     /// type with new values built out of custom code.
482     ///
483     virtual void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue>&Results,
484                                     SelectionDAG &DAG) const;
485
486     
487     virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const;
488
489     /// isTypeDesirableForOp - Return true if the target has native support for
490     /// the specified value type and it is 'desirable' to use the type for the
491     /// given node type. e.g. On x86 i16 is legal, but undesirable since i16
492     /// instruction encodings are longer and some i16 instructions are slow.
493     virtual bool isTypeDesirableForOp(unsigned Opc, EVT VT) const;
494
495     /// isTypeDesirable - Return true if the target has native support for the
496     /// specified value type and it is 'desirable' to use the type. e.g. On x86
497     /// i16 is legal, but undesirable since i16 instruction encodings are longer
498     /// and some i16 instructions are slow.
499     virtual bool IsDesirableToPromoteOp(SDValue Op, EVT &PVT) const;
500
501     virtual MachineBasicBlock *
502       EmitInstrWithCustomInserter(MachineInstr *MI,
503                                   MachineBasicBlock *MBB) const;
504
505  
506     /// getTargetNodeName - This method returns the name of a target specific
507     /// DAG node.
508     virtual const char *getTargetNodeName(unsigned Opcode) const;
509
510     /// getSetCCResultType - Return the ISD::SETCC ValueType
511     virtual MVT::SimpleValueType getSetCCResultType(EVT VT) const;
512
513     /// computeMaskedBitsForTargetNode - Determine which of the bits specified 
514     /// in Mask are known to be either zero or one and return them in the 
515     /// KnownZero/KnownOne bitsets.
516     virtual void computeMaskedBitsForTargetNode(const SDValue Op,
517                                                 const APInt &Mask,
518                                                 APInt &KnownZero, 
519                                                 APInt &KnownOne,
520                                                 const SelectionDAG &DAG,
521                                                 unsigned Depth = 0) const;
522
523     // ComputeNumSignBitsForTargetNode - Determine the number of bits in the
524     // operation that are sign bits.
525     virtual unsigned ComputeNumSignBitsForTargetNode(SDValue Op,
526                                                      unsigned Depth) const;
527
528     virtual bool
529     isGAPlusOffset(SDNode *N, const GlobalValue* &GA, int64_t &Offset) const;
530     
531     SDValue getReturnAddressFrameIndex(SelectionDAG &DAG) const;
532
533     virtual bool ExpandInlineAsm(CallInst *CI) const;
534     
535     ConstraintType getConstraintType(const std::string &Constraint) const;
536   
537     /// Examine constraint string and operand type and determine a weight value,
538     /// where: -1 = invalid match, and 0 = so-so match to 3 = good match.
539     /// The operand object must already have been set up with the operand type.
540     virtual int getSingleConstraintMatchWeight(
541       AsmOperandInfo &info, const char *constraint) const;
542      
543     std::vector<unsigned> 
544       getRegClassForInlineAsmConstraint(const std::string &Constraint,
545                                         EVT VT) const;
546
547     virtual const char *LowerXConstraint(EVT ConstraintVT) const;
548
549     /// LowerAsmOperandForConstraint - Lower the specified operand into the Ops
550     /// vector.  If it is invalid, don't add anything to Ops. If hasMemory is
551     /// true it means one of the asm constraint of the inline asm instruction
552     /// being processed is 'm'.
553     virtual void LowerAsmOperandForConstraint(SDValue Op,
554                                               char ConstraintLetter,
555                                               std::vector<SDValue> &Ops,
556                                               SelectionDAG &DAG) const;
557     
558     /// getRegForInlineAsmConstraint - Given a physical register constraint
559     /// (e.g. {edx}), return the register number and the register class for the
560     /// register.  This should only be used for C_Register constraints.  On
561     /// error, this returns a register number of 0.
562     std::pair<unsigned, const TargetRegisterClass*> 
563       getRegForInlineAsmConstraint(const std::string &Constraint,
564                                    EVT VT) const;
565     
566     /// isLegalAddressingMode - Return true if the addressing mode represented
567     /// by AM is legal for this target, for a load/store of the specified type.
568     virtual bool isLegalAddressingMode(const AddrMode &AM, const Type *Ty)const;
569
570     /// isTruncateFree - Return true if it's free to truncate a value of
571     /// type Ty1 to type Ty2. e.g. On x86 it's free to truncate a i32 value in
572     /// register EAX to i16 by referencing its sub-register AX.
573     virtual bool isTruncateFree(const Type *Ty1, const Type *Ty2) const;
574     virtual bool isTruncateFree(EVT VT1, EVT VT2) const;
575
576     /// isZExtFree - Return true if any actual instruction that defines a
577     /// value of type Ty1 implicit zero-extends the value to Ty2 in the result
578     /// register. This does not necessarily include registers defined in
579     /// unknown ways, such as incoming arguments, or copies from unknown
580     /// virtual registers. Also, if isTruncateFree(Ty2, Ty1) is true, this
581     /// does not necessarily apply to truncate instructions. e.g. on x86-64,
582     /// all instructions that define 32-bit values implicit zero-extend the
583     /// result out to 64 bits.
584     virtual bool isZExtFree(const Type *Ty1, const Type *Ty2) const;
585     virtual bool isZExtFree(EVT VT1, EVT VT2) const;
586
587     /// isNarrowingProfitable - Return true if it's profitable to narrow
588     /// operations of type VT1 to VT2. e.g. on x86, it's profitable to narrow
589     /// from i32 to i8 but not from i32 to i16.
590     virtual bool isNarrowingProfitable(EVT VT1, EVT VT2) const;
591
592     /// isFPImmLegal - Returns true if the target can instruction select the
593     /// specified FP immediate natively. If false, the legalizer will
594     /// materialize the FP immediate as a load from a constant pool.
595     virtual bool isFPImmLegal(const APFloat &Imm, EVT VT) const;
596
597     /// isShuffleMaskLegal - Targets can use this to indicate that they only
598     /// support *some* VECTOR_SHUFFLE operations, those with specific masks.
599     /// By default, if a target supports the VECTOR_SHUFFLE node, all mask
600     /// values are assumed to be legal.
601     virtual bool isShuffleMaskLegal(const SmallVectorImpl<int> &Mask,
602                                     EVT VT) const;
603
604     /// isVectorClearMaskLegal - Similar to isShuffleMaskLegal. This is
605     /// used by Targets can use this to indicate if there is a suitable
606     /// VECTOR_SHUFFLE that can be used to replace a VAND with a constant
607     /// pool entry.
608     virtual bool isVectorClearMaskLegal(const SmallVectorImpl<int> &Mask,
609                                         EVT VT) const;
610
611     /// ShouldShrinkFPConstant - If true, then instruction selection should
612     /// seek to shrink the FP constant of the specified type to a smaller type
613     /// in order to save space and / or reduce runtime.
614     virtual bool ShouldShrinkFPConstant(EVT VT) const {
615       // Don't shrink FP constpool if SSE2 is available since cvtss2sd is more
616       // expensive than a straight movsd. On the other hand, it's important to
617       // shrink long double fp constant since fldt is very slow.
618       return !X86ScalarSSEf64 || VT == MVT::f80;
619     }
620     
621     const X86Subtarget* getSubtarget() const {
622       return Subtarget;
623     }
624
625     /// isScalarFPTypeInSSEReg - Return true if the specified scalar FP type is
626     /// computed in an SSE register, not on the X87 floating point stack.
627     bool isScalarFPTypeInSSEReg(EVT VT) const {
628       return (VT == MVT::f64 && X86ScalarSSEf64) || // f64 is when SSE2
629       (VT == MVT::f32 && X86ScalarSSEf32);   // f32 is when SSE1
630     }
631
632     /// createFastISel - This method returns a target specific FastISel object,
633     /// or null if the target does not support "fast" ISel.
634     virtual FastISel *createFastISel(FunctionLoweringInfo &funcInfo) const;
635
636     /// getFunctionAlignment - Return the Log2 alignment of this function.
637     virtual unsigned getFunctionAlignment(const Function *F) const;
638
639     unsigned getRegPressureLimit(const TargetRegisterClass *RC,
640                                  MachineFunction &MF) const;
641
642     /// getStackCookieLocation - Return true if the target stores stack
643     /// protector cookies at a fixed offset in some non-standard address
644     /// space, and populates the address space and offset as
645     /// appropriate.
646     virtual bool getStackCookieLocation(unsigned &AddressSpace, unsigned &Offset) const;
647
648   protected:
649     std::pair<const TargetRegisterClass*, uint8_t>
650     findRepresentativeClass(EVT VT) const;
651
652   private:
653     /// Subtarget - Keep a pointer to the X86Subtarget around so that we can
654     /// make the right decision when generating code for different targets.
655     const X86Subtarget *Subtarget;
656     const X86RegisterInfo *RegInfo;
657     const TargetData *TD;
658
659     /// X86StackPtr - X86 physical register used as stack ptr.
660     unsigned X86StackPtr;
661    
662     /// X86ScalarSSEf32, X86ScalarSSEf64 - Select between SSE or x87 
663     /// floating point ops.
664     /// When SSE is available, use it for f32 operations.
665     /// When SSE2 is available, use it for f64 operations.
666     bool X86ScalarSSEf32;
667     bool X86ScalarSSEf64;
668
669     /// LegalFPImmediates - A list of legal fp immediates.
670     std::vector<APFloat> LegalFPImmediates;
671
672     /// addLegalFPImmediate - Indicate that this x86 target can instruction
673     /// select the specified FP immediate natively.
674     void addLegalFPImmediate(const APFloat& Imm) {
675       LegalFPImmediates.push_back(Imm);
676     }
677
678     SDValue LowerCallResult(SDValue Chain, SDValue InFlag,
679                             CallingConv::ID CallConv, bool isVarArg,
680                             const SmallVectorImpl<ISD::InputArg> &Ins,
681                             DebugLoc dl, SelectionDAG &DAG,
682                             SmallVectorImpl<SDValue> &InVals) const;
683     SDValue LowerMemArgument(SDValue Chain,
684                              CallingConv::ID CallConv,
685                              const SmallVectorImpl<ISD::InputArg> &ArgInfo,
686                              DebugLoc dl, SelectionDAG &DAG,
687                              const CCValAssign &VA,  MachineFrameInfo *MFI,
688                               unsigned i) const;
689     SDValue LowerMemOpCallTo(SDValue Chain, SDValue StackPtr, SDValue Arg,
690                              DebugLoc dl, SelectionDAG &DAG,
691                              const CCValAssign &VA,
692                              ISD::ArgFlagsTy Flags) const;
693
694     // Call lowering helpers.
695
696     /// IsEligibleForTailCallOptimization - Check whether the call is eligible
697     /// for tail call optimization. Targets which want to do tail call
698     /// optimization should implement this function.
699     bool IsEligibleForTailCallOptimization(SDValue Callee,
700                                            CallingConv::ID CalleeCC,
701                                            bool isVarArg,
702                                            bool isCalleeStructRet,
703                                            bool isCallerStructRet,
704                                     const SmallVectorImpl<ISD::OutputArg> &Outs,
705                                     const SmallVectorImpl<SDValue> &OutVals,
706                                     const SmallVectorImpl<ISD::InputArg> &Ins,
707                                            SelectionDAG& DAG) const;
708     bool IsCalleePop(bool isVarArg, CallingConv::ID CallConv) const;
709     SDValue EmitTailCallLoadRetAddr(SelectionDAG &DAG, SDValue &OutRetAddr,
710                                 SDValue Chain, bool IsTailCall, bool Is64Bit,
711                                 int FPDiff, DebugLoc dl) const;
712
713     CCAssignFn *CCAssignFnForNode(CallingConv::ID CallConv) const;
714     unsigned GetAlignedArgumentStackSize(unsigned StackSize,
715                                          SelectionDAG &DAG) const;
716
717     std::pair<SDValue,SDValue> FP_TO_INTHelper(SDValue Op, SelectionDAG &DAG,
718                                                bool isSigned) const;
719
720     SDValue LowerAsSplatVectorLoad(SDValue SrcOp, EVT VT, DebugLoc dl,
721                                    SelectionDAG &DAG) const;
722     SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const;
723     SDValue LowerCONCAT_VECTORS(SDValue Op, SelectionDAG &DAG) const;
724     SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const;
725     SDValue LowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
726     SDValue LowerEXTRACT_VECTOR_ELT_SSE4(SDValue Op, SelectionDAG &DAG) const;
727     SDValue LowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
728     SDValue LowerINSERT_VECTOR_ELT_SSE4(SDValue Op, SelectionDAG &DAG) const;
729     SDValue LowerSCALAR_TO_VECTOR(SDValue Op, SelectionDAG &DAG) const;
730     SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const;
731     SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const;
732     SDValue LowerGlobalAddress(const GlobalValue *GV, DebugLoc dl,
733                                int64_t Offset, SelectionDAG &DAG) const;
734     SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
735     SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const;
736     SDValue LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const;
737     SDValue LowerShift(SDValue Op, SelectionDAG &DAG) const;
738     SDValue BuildFILD(SDValue Op, EVT SrcVT, SDValue Chain, SDValue StackSlot,
739                       SelectionDAG &DAG) const;
740     SDValue LowerBIT_CONVERT(SDValue op, SelectionDAG &DAG) const;
741     SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
742     SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
743     SDValue LowerUINT_TO_FP_i64(SDValue Op, SelectionDAG &DAG) const;
744     SDValue LowerUINT_TO_FP_i32(SDValue Op, SelectionDAG &DAG) const;
745     SDValue LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG) const;
746     SDValue LowerFP_TO_UINT(SDValue Op, SelectionDAG &DAG) const;
747     SDValue LowerFABS(SDValue Op, SelectionDAG &DAG) const;
748     SDValue LowerFNEG(SDValue Op, SelectionDAG &DAG) const;
749     SDValue LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const;
750     SDValue LowerToBT(SDValue And, ISD::CondCode CC,
751                       DebugLoc dl, SelectionDAG &DAG) const;
752     SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
753     SDValue LowerVSETCC(SDValue Op, SelectionDAG &DAG) const;
754     SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const;
755     SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const;
756     SDValue LowerMEMSET(SDValue Op, SelectionDAG &DAG) const;
757     SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const;
758     SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const;
759     SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
760     SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) const;
761     SDValue LowerVACOPY(SDValue Op, SelectionDAG &DAG) const;
762     SDValue LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG) const;
763     SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const;
764     SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const;
765     SDValue LowerFRAME_TO_ARGS_OFFSET(SDValue Op, SelectionDAG &DAG) const;
766     SDValue LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const;
767     SDValue LowerTRAMPOLINE(SDValue Op, SelectionDAG &DAG) const;
768     SDValue LowerFLT_ROUNDS_(SDValue Op, SelectionDAG &DAG) const;
769     SDValue LowerCTLZ(SDValue Op, SelectionDAG &DAG) const;
770     SDValue LowerCTTZ(SDValue Op, SelectionDAG &DAG) const;
771     SDValue LowerMUL_V2I64(SDValue Op, SelectionDAG &DAG) const;
772     SDValue LowerSHL(SDValue Op, SelectionDAG &DAG) const;
773     SDValue LowerXALUO(SDValue Op, SelectionDAG &DAG) const;
774
775     SDValue LowerCMP_SWAP(SDValue Op, SelectionDAG &DAG) const;
776     SDValue LowerLOAD_SUB(SDValue Op, SelectionDAG &DAG) const;
777     SDValue LowerREADCYCLECOUNTER(SDValue Op, SelectionDAG &DAG) const;
778     SDValue LowerMEMBARRIER(SDValue Op, SelectionDAG &DAG) const;
779
780     // Utility functions to help LowerVECTOR_SHUFFLE
781     SDValue LowerVECTOR_SHUFFLEv8i16(SDValue Op, SelectionDAG &DAG) const;
782
783     virtual SDValue
784       LowerFormalArguments(SDValue Chain,
785                            CallingConv::ID CallConv, bool isVarArg,
786                            const SmallVectorImpl<ISD::InputArg> &Ins,
787                            DebugLoc dl, SelectionDAG &DAG,
788                            SmallVectorImpl<SDValue> &InVals) const;
789     virtual SDValue
790       LowerCall(SDValue Chain, SDValue Callee,
791                 CallingConv::ID CallConv, bool isVarArg, bool &isTailCall,
792                 const SmallVectorImpl<ISD::OutputArg> &Outs,
793                 const SmallVectorImpl<SDValue> &OutVals,
794                 const SmallVectorImpl<ISD::InputArg> &Ins,
795                 DebugLoc dl, SelectionDAG &DAG,
796                 SmallVectorImpl<SDValue> &InVals) const;
797
798     virtual SDValue
799       LowerReturn(SDValue Chain,
800                   CallingConv::ID CallConv, bool isVarArg,
801                   const SmallVectorImpl<ISD::OutputArg> &Outs,
802                   const SmallVectorImpl<SDValue> &OutVals,
803                   DebugLoc dl, SelectionDAG &DAG) const;
804
805     virtual bool
806       CanLowerReturn(CallingConv::ID CallConv, bool isVarArg,
807                      const SmallVectorImpl<ISD::OutputArg> &Outs,
808                      LLVMContext &Context) const;
809
810     void ReplaceATOMIC_BINARY_64(SDNode *N, SmallVectorImpl<SDValue> &Results,
811                                  SelectionDAG &DAG, unsigned NewOp) const;
812
813     /// Utility function to emit string processing sse4.2 instructions
814     /// that return in xmm0.
815     /// This takes the instruction to expand, the associated machine basic
816     /// block, the number of args, and whether or not the second arg is
817     /// in memory or not.
818     MachineBasicBlock *EmitPCMP(MachineInstr *BInstr, MachineBasicBlock *BB,
819                                 unsigned argNum, bool inMem) const;
820
821     /// Utility function to emit atomic bitwise operations (and, or, xor).
822     /// It takes the bitwise instruction to expand, the associated machine basic
823     /// block, and the associated X86 opcodes for reg/reg and reg/imm.
824     MachineBasicBlock *EmitAtomicBitwiseWithCustomInserter(
825                                                     MachineInstr *BInstr,
826                                                     MachineBasicBlock *BB,
827                                                     unsigned regOpc,
828                                                     unsigned immOpc,
829                                                     unsigned loadOpc,
830                                                     unsigned cxchgOpc,
831                                                     unsigned notOpc,
832                                                     unsigned EAXreg,
833                                                     TargetRegisterClass *RC,
834                                                     bool invSrc = false) const;
835
836     MachineBasicBlock *EmitAtomicBit6432WithCustomInserter(
837                                                     MachineInstr *BInstr,
838                                                     MachineBasicBlock *BB,
839                                                     unsigned regOpcL,
840                                                     unsigned regOpcH,
841                                                     unsigned immOpcL,
842                                                     unsigned immOpcH,
843                                                     bool invSrc = false) const;
844     
845     /// Utility function to emit atomic min and max.  It takes the min/max
846     /// instruction to expand, the associated basic block, and the associated
847     /// cmov opcode for moving the min or max value.
848     MachineBasicBlock *EmitAtomicMinMaxWithCustomInserter(MachineInstr *BInstr,
849                                                           MachineBasicBlock *BB,
850                                                         unsigned cmovOpc) const;
851
852     /// Utility function to emit the xmm reg save portion of va_start.
853     MachineBasicBlock *EmitVAStartSaveXMMRegsWithCustomInserter(
854                                                    MachineInstr *BInstr,
855                                                    MachineBasicBlock *BB) const;
856
857     MachineBasicBlock *EmitLoweredSelect(MachineInstr *I,
858                                          MachineBasicBlock *BB) const;
859
860     MachineBasicBlock *EmitLoweredMingwAlloca(MachineInstr *MI,
861                                               MachineBasicBlock *BB) const;
862     
863     MachineBasicBlock *EmitLoweredTLSCall(MachineInstr *MI,
864                                           MachineBasicBlock *BB) const;
865
866     /// Emit nodes that will be selected as "test Op0,Op0", or something
867     /// equivalent, for use with the given x86 condition code.
868     SDValue EmitTest(SDValue Op0, unsigned X86CC, SelectionDAG &DAG) const;
869
870     /// Emit nodes that will be selected as "cmp Op0,Op1", or something
871     /// equivalent, for use with the given x86 condition code.
872     SDValue EmitCmp(SDValue Op0, SDValue Op1, unsigned X86CC,
873                     SelectionDAG &DAG) const;
874   };
875
876   namespace X86 {
877     FastISel *createFastISel(FunctionLoweringInfo &funcInfo);
878   }
879 }
880
881 #endif    // X86ISELLOWERING_H