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