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