AVX-512: Added implementation of CONCAT_VECTORS for v8i1 vectors (by Alexey Bader).
[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 "X86MachineFunctionInfo.h"
19 #include "X86RegisterInfo.h"
20 #include "X86Subtarget.h"
21 #include "llvm/CodeGen/CallingConvLower.h"
22 #include "llvm/CodeGen/FastISel.h"
23 #include "llvm/CodeGen/SelectionDAG.h"
24 #include "llvm/Target/TargetLowering.h"
25 #include "llvm/Target/TargetOptions.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       /// FANDN - Bitwise logical ANDNOT of floating point values. This
57       /// corresponds to X86::ANDNPS or X86::ANDNPD.
58       FANDN,
59
60       /// FSRL - Bitwise logical right shift of floating point values. These
61       /// corresponds to X86::PSRLDQ.
62       FSRL,
63
64       /// CALL - These operations represent an abstract X86 call
65       /// instruction, which includes a bunch of information.  In particular the
66       /// operands of these node are:
67       ///
68       ///     #0 - The incoming token chain
69       ///     #1 - The callee
70       ///     #2 - The number of arg bytes the caller pushes on the stack.
71       ///     #3 - The number of arg bytes the callee pops off the stack.
72       ///     #4 - The value to pass in AL/AX/EAX (optional)
73       ///     #5 - The value to pass in DL/DX/EDX (optional)
74       ///
75       /// The result values of these nodes are:
76       ///
77       ///     #0 - The outgoing token chain
78       ///     #1 - The first register result value (optional)
79       ///     #2 - The second register result value (optional)
80       ///
81       CALL,
82
83       /// RDTSC_DAG - This operation implements the lowering for
84       /// readcyclecounter
85       RDTSC_DAG,
86
87       /// X86 compare and logical compare instructions.
88       CMP, COMI, UCOMI,
89
90       /// X86 bit-test instructions.
91       BT,
92
93       /// X86 SetCC. Operand 0 is condition code, and operand 1 is the EFLAGS
94       /// operand, usually produced by a CMP instruction.
95       SETCC,
96
97       /// X86 Select
98       SELECT,
99
100       // Same as SETCC except it's materialized with a sbb and the value is all
101       // one's or all zero's.
102       SETCC_CARRY,  // R = carry_bit ? ~0 : 0
103
104       /// X86 FP SETCC, implemented with CMP{cc}SS/CMP{cc}SD.
105       /// Operands are two FP values to compare; result is a mask of
106       /// 0s or 1s.  Generally DTRT for C/C++ with NaNs.
107       FSETCC,
108
109       /// X86 MOVMSK{pd|ps}, extracts sign bits of two or four FP values,
110       /// result in an integer GPR.  Needs masking for scalar result.
111       FGETSIGNx86,
112
113       /// X86 conditional moves. Operand 0 and operand 1 are the two values
114       /// to select from. Operand 2 is the condition code, and operand 3 is the
115       /// flag operand produced by a CMP or TEST instruction. It also writes a
116       /// flag result.
117       CMOV,
118
119       /// X86 conditional branches. Operand 0 is the chain operand, operand 1
120       /// is the block to branch if condition is true, operand 2 is the
121       /// condition code, and operand 3 is the flag operand produced by a CMP
122       /// or TEST instruction.
123       BRCOND,
124
125       /// Return with a flag operand. Operand 0 is the chain operand, operand
126       /// 1 is the number of bytes of stack to pop.
127       RET_FLAG,
128
129       /// REP_STOS - Repeat fill, corresponds to X86::REP_STOSx.
130       REP_STOS,
131
132       /// REP_MOVS - Repeat move, corresponds to X86::REP_MOVSx.
133       REP_MOVS,
134
135       /// GlobalBaseReg - On Darwin, this node represents the result of the popl
136       /// at function entry, used for PIC code.
137       GlobalBaseReg,
138
139       /// Wrapper - A wrapper node for TargetConstantPool,
140       /// TargetExternalSymbol, and TargetGlobalAddress.
141       Wrapper,
142
143       /// WrapperRIP - Special wrapper used under X86-64 PIC mode for RIP
144       /// relative displacements.
145       WrapperRIP,
146
147       /// MOVDQ2Q - Copies a 64-bit value from the low word of an XMM vector
148       /// to an MMX vector.  If you think this is too close to the previous
149       /// mnemonic, so do I; blame Intel.
150       MOVDQ2Q,
151
152       /// MMX_MOVD2W - Copies a 32-bit value from the low word of a MMX
153       /// vector to a GPR.
154       MMX_MOVD2W,
155
156       /// PEXTRB - Extract an 8-bit value from a vector and zero extend it to
157       /// i32, corresponds to X86::PEXTRB.
158       PEXTRB,
159
160       /// PEXTRW - Extract a 16-bit value from a vector and zero extend it to
161       /// i32, corresponds to X86::PEXTRW.
162       PEXTRW,
163
164       /// INSERTPS - Insert any element of a 4 x float vector into any element
165       /// of a destination 4 x floatvector.
166       INSERTPS,
167
168       /// PINSRB - Insert the lower 8-bits of a 32-bit value to a vector,
169       /// corresponds to X86::PINSRB.
170       PINSRB,
171
172       /// PINSRW - Insert the lower 16-bits of a 32-bit value to a vector,
173       /// corresponds to X86::PINSRW.
174       PINSRW, MMX_PINSRW,
175
176       /// PSHUFB - Shuffle 16 8-bit values within a vector.
177       PSHUFB,
178
179       /// ANDNP - Bitwise Logical AND NOT of Packed FP values.
180       ANDNP,
181
182       /// PSIGN - Copy integer sign.
183       PSIGN,
184
185       /// BLENDV - Blend where the selector is a register.
186       BLENDV,
187
188       /// BLENDI - Blend where the selector is an immediate.
189       BLENDI,
190
191       // SUBUS - Integer sub with unsigned saturation.
192       SUBUS,
193
194       /// HADD - Integer horizontal add.
195       HADD,
196
197       /// HSUB - Integer horizontal sub.
198       HSUB,
199
200       /// FHADD - Floating point horizontal add.
201       FHADD,
202
203       /// FHSUB - Floating point horizontal sub.
204       FHSUB,
205
206       /// UMAX, UMIN - Unsigned integer max and min.
207       UMAX, UMIN,
208
209       /// SMAX, SMIN - Signed integer max and min.
210       SMAX, SMIN,
211
212       /// FMAX, FMIN - Floating point max and min.
213       ///
214       FMAX, FMIN,
215
216       /// FMAXC, FMINC - Commutative FMIN and FMAX.
217       FMAXC, FMINC,
218
219       /// FRSQRT, FRCP - Floating point reciprocal-sqrt and reciprocal
220       /// approximation.  Note that these typically require refinement
221       /// in order to obtain suitable precision.
222       FRSQRT, FRCP,
223
224       // TLSADDR - Thread Local Storage.
225       TLSADDR,
226
227       // TLSBASEADDR - Thread Local Storage. A call to get the start address
228       // of the TLS block for the current module.
229       TLSBASEADDR,
230
231       // TLSCALL - Thread Local Storage.  When calling to an OS provided
232       // thunk at the address from an earlier relocation.
233       TLSCALL,
234
235       // EH_RETURN - Exception Handling helpers.
236       EH_RETURN,
237
238       // EH_SJLJ_SETJMP - SjLj exception handling setjmp.
239       EH_SJLJ_SETJMP,
240
241       // EH_SJLJ_LONGJMP - SjLj exception handling longjmp.
242       EH_SJLJ_LONGJMP,
243
244       /// TC_RETURN - Tail call return. See X86TargetLowering::LowerCall for
245       /// the list of operands.
246       TC_RETURN,
247
248       // VZEXT_MOVL - Vector move low and zero extend.
249       VZEXT_MOVL,
250
251       // VSEXT_MOVL - Vector move low and sign extend.
252       VSEXT_MOVL,
253
254       // VZEXT - Vector integer zero-extend.
255       VZEXT,
256
257       // VSEXT - Vector integer signed-extend.
258       VSEXT,
259
260       // VTRUNC - Vector integer truncate.
261       VTRUNC,
262
263       // TRUNC - Integer truncate
264       TRUNC,
265
266       // VTRUNC - Vector integer truncate with mask.
267       VTRUNCM,
268
269       // VFPEXT - Vector FP extend.
270       VFPEXT,
271
272       // VFPROUND - Vector FP round.
273       VFPROUND,
274
275       // VSHL, VSRL - 128-bit vector logical left / right shift
276       VSHLDQ, VSRLDQ,
277
278       // VSHL, VSRL, VSRA - Vector shift elements
279       VSHL, VSRL, VSRA,
280
281       // VSHLI, VSRLI, VSRAI - Vector shift elements by immediate
282       VSHLI, VSRLI, VSRAI,
283
284       // CMPP - Vector packed double/float comparison.
285       CMPP,
286
287       // PCMP* - Vector integer comparisons.
288       PCMPEQ, PCMPGT,
289       // PCMP*M - Vector integer comparisons, the result is in a mask vector.
290       PCMPEQM, PCMPGTM,
291
292       /// CMPM, CMPMU - Vector comparison generating mask bits for fp and
293       /// integer signed and unsigned data types.
294       CMPM,
295       CMPMU,
296
297       // ADD, SUB, SMUL, etc. - Arithmetic operations with FLAGS results.
298       ADD, SUB, ADC, SBB, SMUL,
299       INC, DEC, OR, XOR, AND,
300
301       BLSI,   // BLSI - Extract lowest set isolated bit
302       BLSMSK, // BLSMSK - Get mask up to lowest set bit
303       BLSR,   // BLSR - Reset lowest set bit
304       BZHI,   // BZHI - Zero high bits
305       BEXTR,  // BEXTR - Bit field extract
306
307       UMUL, // LOW, HI, FLAGS = umul LHS, RHS
308
309       // MUL_IMM - X86 specific multiply by immediate.
310       MUL_IMM,
311
312       // PTEST - Vector bitwise comparisons.
313       PTEST,
314
315       // TESTP - Vector packed fp sign bitwise comparisons.
316       TESTP,
317
318       // TESTM - Vector "test" in AVX-512, the result is in a mask vector.
319       TESTM,
320
321       // OR/AND test for masks
322       KORTEST,
323
324       // Several flavors of instructions with vector shuffle behaviors.
325       PALIGNR,
326       PSHUFD,
327       PSHUFHW,
328       PSHUFLW,
329       SHUFP,
330       MOVDDUP,
331       MOVSHDUP,
332       MOVSLDUP,
333       MOVLHPS,
334       MOVLHPD,
335       MOVHLPS,
336       MOVLPS,
337       MOVLPD,
338       MOVSD,
339       MOVSS,
340       UNPCKL,
341       UNPCKH,
342       VPERMILP,
343       VPERMV,
344       VPERMV3,
345       VPERMI,
346       VPERM2X128,
347       VBROADCAST,
348       // masked broadcast
349       VBROADCASTM,
350       VINSERT,
351
352       // PMULUDQ - Vector multiply packed unsigned doubleword integers
353       PMULUDQ,
354
355       // FMA nodes
356       FMADD,
357       FNMADD,
358       FMSUB,
359       FNMSUB,
360       FMADDSUB,
361       FMSUBADD,
362
363       // VASTART_SAVE_XMM_REGS - Save xmm argument registers to the stack,
364       // according to %al. An operator is needed so that this can be expanded
365       // with control flow.
366       VASTART_SAVE_XMM_REGS,
367
368       // WIN_ALLOCA - Windows's _chkstk call to do stack probing.
369       WIN_ALLOCA,
370
371       // SEG_ALLOCA - For allocating variable amounts of stack space when using
372       // segmented stacks. Check if the current stacklet has enough space, and
373       // falls back to heap allocation if not.
374       SEG_ALLOCA,
375
376       // WIN_FTOL - Windows's _ftol2 runtime routine to do fptoui.
377       WIN_FTOL,
378
379       // Memory barrier
380       MEMBARRIER,
381       MFENCE,
382       SFENCE,
383       LFENCE,
384
385       // FNSTSW16r - Store FP status word into i16 register.
386       FNSTSW16r,
387
388       // SAHF - Store contents of %ah into %eflags.
389       SAHF,
390
391       // RDRAND - Get a random integer and indicate whether it is valid in CF.
392       RDRAND,
393
394       // RDSEED - Get a NIST SP800-90B & C compliant random integer and
395       // indicate whether it is valid in CF.
396       RDSEED,
397
398       // PCMP*STRI
399       PCMPISTRI,
400       PCMPESTRI,
401
402       // XTEST - Test if in transactional execution.
403       XTEST,
404
405       // ATOMADD64_DAG, ATOMSUB64_DAG, ATOMOR64_DAG, ATOMAND64_DAG,
406       // ATOMXOR64_DAG, ATOMNAND64_DAG, ATOMSWAP64_DAG -
407       // Atomic 64-bit binary operations.
408       ATOMADD64_DAG = ISD::FIRST_TARGET_MEMORY_OPCODE,
409       ATOMSUB64_DAG,
410       ATOMOR64_DAG,
411       ATOMXOR64_DAG,
412       ATOMAND64_DAG,
413       ATOMNAND64_DAG,
414       ATOMMAX64_DAG,
415       ATOMMIN64_DAG,
416       ATOMUMAX64_DAG,
417       ATOMUMIN64_DAG,
418       ATOMSWAP64_DAG,
419
420       // LCMPXCHG_DAG, LCMPXCHG8_DAG, LCMPXCHG16_DAG - Compare and swap.
421       LCMPXCHG_DAG,
422       LCMPXCHG8_DAG,
423       LCMPXCHG16_DAG,
424
425       // VZEXT_LOAD - Load, scalar_to_vector, and zero extend.
426       VZEXT_LOAD,
427
428       // FNSTCW16m - Store FP control world into i16 memory.
429       FNSTCW16m,
430
431       /// FP_TO_INT*_IN_MEM - This instruction implements FP_TO_SINT with the
432       /// integer destination in memory and a FP reg source.  This corresponds
433       /// to the X86::FIST*m instructions and the rounding mode change stuff. It
434       /// has two inputs (token chain and address) and two outputs (int value
435       /// and token chain).
436       FP_TO_INT16_IN_MEM,
437       FP_TO_INT32_IN_MEM,
438       FP_TO_INT64_IN_MEM,
439
440       /// FILD, FILD_FLAG - This instruction implements SINT_TO_FP with the
441       /// integer source in memory and FP reg result.  This corresponds to the
442       /// X86::FILD*m instructions. It has three inputs (token chain, address,
443       /// and source type) and two outputs (FP value and token chain). FILD_FLAG
444       /// also produces a flag).
445       FILD,
446       FILD_FLAG,
447
448       /// FLD - This instruction implements an extending load to FP stack slots.
449       /// This corresponds to the X86::FLD32m / X86::FLD64m. It takes a chain
450       /// operand, ptr to load from, and a ValueType node indicating the type
451       /// to load to.
452       FLD,
453
454       /// FST - This instruction implements a truncating store to FP stack
455       /// slots. This corresponds to the X86::FST32m / X86::FST64m. It takes a
456       /// chain operand, value to store, address, and a ValueType to store it
457       /// as.
458       FST,
459
460       /// VAARG_64 - This instruction grabs the address of the next argument
461       /// from a va_list. (reads and modifies the va_list in memory)
462       VAARG_64
463
464       // WARNING: Do not add anything in the end unless you want the node to
465       // have memop! In fact, starting from ATOMADD64_DAG all opcodes will be
466       // thought as target memory ops!
467     };
468   }
469
470   /// Define some predicates that are used for node matching.
471   namespace X86 {
472     /// isVEXTRACT128Index - Return true if the specified
473     /// EXTRACT_SUBVECTOR operand specifies a vector extract that is
474     /// suitable for input to VEXTRACTF128, VEXTRACTI128 instructions.
475     bool isVEXTRACT128Index(SDNode *N);
476
477     /// isVINSERT128Index - Return true if the specified
478     /// INSERT_SUBVECTOR operand specifies a subvector insert that is
479     /// suitable for input to VINSERTF128, VINSERTI128 instructions.
480     bool isVINSERT128Index(SDNode *N);
481
482     /// isVEXTRACT256Index - Return true if the specified
483     /// EXTRACT_SUBVECTOR operand specifies a vector extract that is
484     /// suitable for input to VEXTRACTF64X4, VEXTRACTI64X4 instructions.
485     bool isVEXTRACT256Index(SDNode *N);
486
487     /// isVINSERT256Index - Return true if the specified
488     /// INSERT_SUBVECTOR operand specifies a subvector insert that is
489     /// suitable for input to VINSERTF64X4, VINSERTI64X4 instructions.
490     bool isVINSERT256Index(SDNode *N);
491
492     /// getExtractVEXTRACT128Immediate - Return the appropriate
493     /// immediate to extract the specified EXTRACT_SUBVECTOR index
494     /// with VEXTRACTF128, VEXTRACTI128 instructions.
495     unsigned getExtractVEXTRACT128Immediate(SDNode *N);
496
497     /// getInsertVINSERT128Immediate - Return the appropriate
498     /// immediate to insert at the specified INSERT_SUBVECTOR index
499     /// with VINSERTF128, VINSERT128 instructions.
500     unsigned getInsertVINSERT128Immediate(SDNode *N);
501
502     /// getExtractVEXTRACT256Immediate - Return the appropriate
503     /// immediate to extract the specified EXTRACT_SUBVECTOR index
504     /// with VEXTRACTF64X4, VEXTRACTI64x4 instructions.
505     unsigned getExtractVEXTRACT256Immediate(SDNode *N);
506
507     /// getInsertVINSERT256Immediate - Return the appropriate
508     /// immediate to insert at the specified INSERT_SUBVECTOR index
509     /// with VINSERTF64x4, VINSERTI64x4 instructions.
510     unsigned getInsertVINSERT256Immediate(SDNode *N);
511
512     /// isZeroNode - Returns true if Elt is a constant zero or a floating point
513     /// constant +0.0.
514     bool isZeroNode(SDValue Elt);
515
516     /// isOffsetSuitableForCodeModel - Returns true of the given offset can be
517     /// fit into displacement field of the instruction.
518     bool isOffsetSuitableForCodeModel(int64_t Offset, CodeModel::Model M,
519                                       bool hasSymbolicDisplacement = true);
520
521
522     /// isCalleePop - Determines whether the callee is required to pop its
523     /// own arguments. Callee pop is necessary to support tail calls.
524     bool isCalleePop(CallingConv::ID CallingConv,
525                      bool is64Bit, bool IsVarArg, bool TailCallOpt);
526   }
527
528   //===--------------------------------------------------------------------===//
529   //  X86TargetLowering - X86 Implementation of the TargetLowering interface
530   class X86TargetLowering : public TargetLowering {
531   public:
532     explicit X86TargetLowering(X86TargetMachine &TM);
533
534     virtual unsigned getJumpTableEncoding() const;
535
536     virtual MVT getScalarShiftAmountTy(EVT LHSTy) const { return MVT::i8; }
537
538     virtual const MCExpr *
539     LowerCustomJumpTableEntry(const MachineJumpTableInfo *MJTI,
540                               const MachineBasicBlock *MBB, unsigned uid,
541                               MCContext &Ctx) const;
542
543     /// getPICJumpTableRelocaBase - Returns relocation base for the given PIC
544     /// jumptable.
545     virtual SDValue getPICJumpTableRelocBase(SDValue Table,
546                                              SelectionDAG &DAG) const;
547     virtual const MCExpr *
548     getPICJumpTableRelocBaseExpr(const MachineFunction *MF,
549                                  unsigned JTI, MCContext &Ctx) const;
550
551     /// getByValTypeAlignment - Return the desired alignment for ByVal aggregate
552     /// function arguments in the caller parameter area. For X86, aggregates
553     /// that contains are placed at 16-byte boundaries while the rest are at
554     /// 4-byte boundaries.
555     virtual unsigned getByValTypeAlignment(Type *Ty) const;
556
557     /// getOptimalMemOpType - Returns the target specific optimal type for load
558     /// and store operations as a result of memset, memcpy, and memmove
559     /// lowering. If DstAlign is zero that means it's safe to destination
560     /// alignment can satisfy any constraint. Similarly if SrcAlign is zero it
561     /// means there isn't a need to check it against alignment requirement,
562     /// probably because the source does not need to be loaded. If 'IsMemset' is
563     /// true, that means it's expanding a memset. If 'ZeroMemset' is true, that
564     /// means it's a memset of zero. 'MemcpyStrSrc' indicates whether the memcpy
565     /// source is constant so it does not need to be loaded.
566     /// It returns EVT::Other if the type should be determined using generic
567     /// target-independent logic.
568     virtual EVT
569     getOptimalMemOpType(uint64_t Size, unsigned DstAlign, unsigned SrcAlign,
570                         bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc,
571                         MachineFunction &MF) const;
572
573     /// isSafeMemOpType - Returns true if it's safe to use load / store of the
574     /// specified type to expand memcpy / memset inline. This is mostly true
575     /// for all types except for some special cases. For example, on X86
576     /// targets without SSE2 f64 load / store are done with fldl / fstpl which
577     /// also does type conversion. Note the specified type doesn't have to be
578     /// legal as the hook is used before type legalization.
579     virtual bool isSafeMemOpType(MVT VT) const;
580
581     /// allowsUnalignedMemoryAccesses - Returns true if the target allows
582     /// unaligned memory accesses. of the specified type. Returns whether it
583     /// is "fast" by reference in the second argument.
584     virtual bool allowsUnalignedMemoryAccesses(EVT VT, bool *Fast) const;
585
586     /// LowerOperation - Provide custom lowering hooks for some operations.
587     ///
588     virtual SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const;
589
590     /// ReplaceNodeResults - Replace the results of node with an illegal result
591     /// type with new values built out of custom code.
592     ///
593     virtual void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue>&Results,
594                                     SelectionDAG &DAG) const;
595
596
597     virtual SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const;
598
599     /// isTypeDesirableForOp - Return true if the target has native support for
600     /// the specified value type and it is 'desirable' to use the type for the
601     /// given node type. e.g. On x86 i16 is legal, but undesirable since i16
602     /// instruction encodings are longer and some i16 instructions are slow.
603     virtual bool isTypeDesirableForOp(unsigned Opc, EVT VT) const;
604
605     /// isTypeDesirable - Return true if the target has native support for the
606     /// specified value type and it is 'desirable' to use the type. e.g. On x86
607     /// i16 is legal, but undesirable since i16 instruction encodings are longer
608     /// and some i16 instructions are slow.
609     virtual bool IsDesirableToPromoteOp(SDValue Op, EVT &PVT) const;
610
611     virtual MachineBasicBlock *
612       EmitInstrWithCustomInserter(MachineInstr *MI,
613                                   MachineBasicBlock *MBB) const;
614
615
616     /// getTargetNodeName - This method returns the name of a target specific
617     /// DAG node.
618     virtual const char *getTargetNodeName(unsigned Opcode) const;
619
620     /// getSetCCResultType - Return the value type to use for ISD::SETCC.
621     virtual EVT getSetCCResultType(LLVMContext &Context, EVT VT) const;
622
623     /// computeMaskedBitsForTargetNode - Determine which of the bits specified
624     /// in Mask are known to be either zero or one and return them in the
625     /// KnownZero/KnownOne bitsets.
626     virtual void computeMaskedBitsForTargetNode(const SDValue Op,
627                                                 APInt &KnownZero,
628                                                 APInt &KnownOne,
629                                                 const SelectionDAG &DAG,
630                                                 unsigned Depth = 0) const;
631
632     // ComputeNumSignBitsForTargetNode - Determine the number of bits in the
633     // operation that are sign bits.
634     virtual unsigned ComputeNumSignBitsForTargetNode(SDValue Op,
635                                                      unsigned Depth) const;
636
637     virtual bool
638     isGAPlusOffset(SDNode *N, const GlobalValue* &GA, int64_t &Offset) const;
639
640     SDValue getReturnAddressFrameIndex(SelectionDAG &DAG) const;
641
642     virtual bool ExpandInlineAsm(CallInst *CI) const;
643
644     ConstraintType getConstraintType(const std::string &Constraint) const;
645
646     /// Examine constraint string and operand type and determine a weight value.
647     /// The operand object must already have been set up with the operand type.
648     virtual ConstraintWeight getSingleConstraintMatchWeight(
649       AsmOperandInfo &info, const char *constraint) const;
650
651     virtual const char *LowerXConstraint(EVT ConstraintVT) const;
652
653     /// LowerAsmOperandForConstraint - Lower the specified operand into the Ops
654     /// vector.  If it is invalid, don't add anything to Ops. If hasMemory is
655     /// true it means one of the asm constraint of the inline asm instruction
656     /// being processed is 'm'.
657     virtual void LowerAsmOperandForConstraint(SDValue Op,
658                                               std::string &Constraint,
659                                               std::vector<SDValue> &Ops,
660                                               SelectionDAG &DAG) const;
661
662     /// getRegForInlineAsmConstraint - Given a physical register constraint
663     /// (e.g. {edx}), return the register number and the register class for the
664     /// register.  This should only be used for C_Register constraints.  On
665     /// error, this returns a register number of 0.
666     std::pair<unsigned, const TargetRegisterClass*>
667       getRegForInlineAsmConstraint(const std::string &Constraint,
668                                    MVT VT) const;
669
670     /// isLegalAddressingMode - Return true if the addressing mode represented
671     /// by AM is legal for this target, for a load/store of the specified type.
672     virtual bool isLegalAddressingMode(const AddrMode &AM, Type *Ty)const;
673
674     /// isLegalICmpImmediate - Return true if the specified immediate is legal
675     /// icmp immediate, that is the target has icmp instructions which can
676     /// compare a register against the immediate without having to materialize
677     /// the immediate into a register.
678     virtual bool isLegalICmpImmediate(int64_t Imm) const;
679
680     /// isLegalAddImmediate - Return true if the specified immediate is legal
681     /// add immediate, that is the target has add instructions which can
682     /// add a register and the immediate without having to materialize
683     /// the immediate into a register.
684     virtual bool isLegalAddImmediate(int64_t Imm) const;
685
686     /// isTruncateFree - Return true if it's free to truncate a value of
687     /// type Ty1 to type Ty2. e.g. On x86 it's free to truncate a i32 value in
688     /// register EAX to i16 by referencing its sub-register AX.
689     virtual bool isTruncateFree(Type *Ty1, Type *Ty2) const;
690     virtual bool isTruncateFree(EVT VT1, EVT VT2) const;
691
692     virtual bool allowTruncateForTailCall(Type *Ty1, Type *Ty2) const;
693
694     /// isZExtFree - Return true if any actual instruction that defines a
695     /// value of type Ty1 implicit zero-extends the value to Ty2 in the result
696     /// register. This does not necessarily include registers defined in
697     /// unknown ways, such as incoming arguments, or copies from unknown
698     /// virtual registers. Also, if isTruncateFree(Ty2, Ty1) is true, this
699     /// does not necessarily apply to truncate instructions. e.g. on x86-64,
700     /// all instructions that define 32-bit values implicit zero-extend the
701     /// result out to 64 bits.
702     virtual bool isZExtFree(Type *Ty1, Type *Ty2) const;
703     virtual bool isZExtFree(EVT VT1, EVT VT2) const;
704     virtual bool isZExtFree(SDValue Val, EVT VT2) const;
705
706     /// isFMAFasterThanFMulAndFAdd - Return true if an FMA operation is faster
707     /// than a pair of fmul and fadd instructions. fmuladd intrinsics will be
708     /// expanded to FMAs when this method returns true, otherwise fmuladd is
709     /// expanded to fmul + fadd.
710     virtual bool isFMAFasterThanFMulAndFAdd(EVT VT) const;
711
712     /// isNarrowingProfitable - Return true if it's profitable to narrow
713     /// operations of type VT1 to VT2. e.g. on x86, it's profitable to narrow
714     /// from i32 to i8 but not from i32 to i16.
715     virtual bool isNarrowingProfitable(EVT VT1, EVT VT2) const;
716
717     /// isFPImmLegal - Returns true if the target can instruction select the
718     /// specified FP immediate natively. If false, the legalizer will
719     /// materialize the FP immediate as a load from a constant pool.
720     virtual bool isFPImmLegal(const APFloat &Imm, EVT VT) const;
721
722     /// isShuffleMaskLegal - Targets can use this to indicate that they only
723     /// support *some* VECTOR_SHUFFLE operations, those with specific masks.
724     /// By default, if a target supports the VECTOR_SHUFFLE node, all mask
725     /// values are assumed to be legal.
726     virtual bool isShuffleMaskLegal(const SmallVectorImpl<int> &Mask,
727                                     EVT VT) const;
728
729     /// isVectorClearMaskLegal - Similar to isShuffleMaskLegal. This is
730     /// used by Targets can use this to indicate if there is a suitable
731     /// VECTOR_SHUFFLE that can be used to replace a VAND with a constant
732     /// pool entry.
733     virtual bool isVectorClearMaskLegal(const SmallVectorImpl<int> &Mask,
734                                         EVT VT) const;
735
736     /// ShouldShrinkFPConstant - If true, then instruction selection should
737     /// seek to shrink the FP constant of the specified type to a smaller type
738     /// in order to save space and / or reduce runtime.
739     virtual bool ShouldShrinkFPConstant(EVT VT) const {
740       // Don't shrink FP constpool if SSE2 is available since cvtss2sd is more
741       // expensive than a straight movsd. On the other hand, it's important to
742       // shrink long double fp constant since fldt is very slow.
743       return !X86ScalarSSEf64 || VT == MVT::f80;
744     }
745
746     const X86Subtarget* getSubtarget() const {
747       return Subtarget;
748     }
749
750     /// isScalarFPTypeInSSEReg - Return true if the specified scalar FP type is
751     /// computed in an SSE register, not on the X87 floating point stack.
752     bool isScalarFPTypeInSSEReg(EVT VT) const {
753       return (VT == MVT::f64 && X86ScalarSSEf64) || // f64 is when SSE2
754       (VT == MVT::f32 && X86ScalarSSEf32);   // f32 is when SSE1
755     }
756
757     /// isTargetFTOL - Return true if the target uses the MSVC _ftol2 routine
758     /// for fptoui.
759     bool isTargetFTOL() const {
760       return Subtarget->isTargetWindows() && !Subtarget->is64Bit();
761     }
762
763     /// isIntegerTypeFTOL - Return true if the MSVC _ftol2 routine should be
764     /// used for fptoui to the given type.
765     bool isIntegerTypeFTOL(EVT VT) const {
766       return isTargetFTOL() && VT == MVT::i64;
767     }
768
769     /// createFastISel - This method returns a target specific FastISel object,
770     /// or null if the target does not support "fast" ISel.
771     virtual FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
772                                      const TargetLibraryInfo *libInfo) const;
773
774     /// getStackCookieLocation - Return true if the target stores stack
775     /// protector cookies at a fixed offset in some non-standard address
776     /// space, and populates the address space and offset as
777     /// appropriate.
778     virtual bool getStackCookieLocation(unsigned &AddressSpace, unsigned &Offset) const;
779
780     SDValue BuildFILD(SDValue Op, EVT SrcVT, SDValue Chain, SDValue StackSlot,
781                       SelectionDAG &DAG) const;
782
783     virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const LLVM_OVERRIDE;
784
785     /// \brief Reset the operation actions based on target options.
786     virtual void resetOperationActions();
787
788   protected:
789     std::pair<const TargetRegisterClass*, uint8_t>
790     findRepresentativeClass(MVT VT) const;
791
792   private:
793     /// Subtarget - Keep a pointer to the X86Subtarget around so that we can
794     /// make the right decision when generating code for different targets.
795     const X86Subtarget *Subtarget;
796     const DataLayout *TD;
797
798     /// Used to store the TargetOptions so that we don't waste time resetting
799     /// the operation actions unless we have to.
800     TargetOptions TO;
801
802     /// X86ScalarSSEf32, X86ScalarSSEf64 - Select between SSE or x87
803     /// floating point ops.
804     /// When SSE is available, use it for f32 operations.
805     /// When SSE2 is available, use it for f64 operations.
806     bool X86ScalarSSEf32;
807     bool X86ScalarSSEf64;
808
809     /// LegalFPImmediates - A list of legal fp immediates.
810     std::vector<APFloat> LegalFPImmediates;
811
812     /// addLegalFPImmediate - Indicate that this x86 target can instruction
813     /// select the specified FP immediate natively.
814     void addLegalFPImmediate(const APFloat& Imm) {
815       LegalFPImmediates.push_back(Imm);
816     }
817
818     SDValue LowerCallResult(SDValue Chain, SDValue InFlag,
819                             CallingConv::ID CallConv, bool isVarArg,
820                             const SmallVectorImpl<ISD::InputArg> &Ins,
821                             SDLoc dl, SelectionDAG &DAG,
822                             SmallVectorImpl<SDValue> &InVals) const;
823     SDValue LowerMemArgument(SDValue Chain,
824                              CallingConv::ID CallConv,
825                              const SmallVectorImpl<ISD::InputArg> &ArgInfo,
826                              SDLoc dl, SelectionDAG &DAG,
827                              const CCValAssign &VA,  MachineFrameInfo *MFI,
828                               unsigned i) const;
829     SDValue LowerMemOpCallTo(SDValue Chain, SDValue StackPtr, SDValue Arg,
830                              SDLoc dl, SelectionDAG &DAG,
831                              const CCValAssign &VA,
832                              ISD::ArgFlagsTy Flags) const;
833
834     // Call lowering helpers.
835
836     /// IsEligibleForTailCallOptimization - Check whether the call is eligible
837     /// for tail call optimization. Targets which want to do tail call
838     /// optimization should implement this function.
839     bool IsEligibleForTailCallOptimization(SDValue Callee,
840                                            CallingConv::ID CalleeCC,
841                                            bool isVarArg,
842                                            bool isCalleeStructRet,
843                                            bool isCallerStructRet,
844                                            Type *RetTy,
845                                     const SmallVectorImpl<ISD::OutputArg> &Outs,
846                                     const SmallVectorImpl<SDValue> &OutVals,
847                                     const SmallVectorImpl<ISD::InputArg> &Ins,
848                                            SelectionDAG& DAG) const;
849     bool IsCalleePop(bool isVarArg, CallingConv::ID CallConv) const;
850     SDValue EmitTailCallLoadRetAddr(SelectionDAG &DAG, SDValue &OutRetAddr,
851                                 SDValue Chain, bool IsTailCall, bool Is64Bit,
852                                 int FPDiff, SDLoc dl) const;
853
854     unsigned GetAlignedArgumentStackSize(unsigned StackSize,
855                                          SelectionDAG &DAG) const;
856
857     std::pair<SDValue,SDValue> FP_TO_INTHelper(SDValue Op, SelectionDAG &DAG,
858                                                bool isSigned,
859                                                bool isReplace) const;
860
861     SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const;
862     SDValue LowerBUILD_VECTORvXi1(SDValue Op, SelectionDAG &DAG) const;
863     SDValue LowerVECTOR_SHUFFLE(SDValue Op, SelectionDAG &DAG) const;
864     SDValue LowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
865     SDValue LowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
866     SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const;
867     SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const;
868     SDValue LowerGlobalAddress(const GlobalValue *GV, SDLoc dl,
869                                int64_t Offset, SelectionDAG &DAG) const;
870     SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
871     SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const;
872     SDValue LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const;
873     SDValue LowerShiftParts(SDValue Op, SelectionDAG &DAG) const;
874     SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
875     SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
876     SDValue LowerUINT_TO_FP_i64(SDValue Op, SelectionDAG &DAG) const;
877     SDValue LowerUINT_TO_FP_i32(SDValue Op, SelectionDAG &DAG) const;
878     SDValue lowerUINT_TO_FP_vec(SDValue Op, SelectionDAG &DAG) const;
879     SDValue LowerTRUNCATE(SDValue Op, SelectionDAG &DAG) const;
880     SDValue LowerFP_TO_SINT(SDValue Op, SelectionDAG &DAG) const;
881     SDValue LowerFP_TO_UINT(SDValue Op, SelectionDAG &DAG) const;
882     SDValue LowerFABS(SDValue Op, SelectionDAG &DAG) const;
883     SDValue LowerFNEG(SDValue Op, SelectionDAG &DAG) const;
884     SDValue LowerFCOPYSIGN(SDValue Op, SelectionDAG &DAG) const;
885     SDValue LowerToBT(SDValue And, ISD::CondCode CC,
886                       SDLoc dl, SelectionDAG &DAG) const;
887     SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
888     SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const;
889     SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const;
890     SDValue LowerMEMSET(SDValue Op, SelectionDAG &DAG) const;
891     SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const;
892     SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const;
893     SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
894     SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) const;
895     SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const;
896     SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const;
897     SDValue LowerFRAME_TO_ARGS_OFFSET(SDValue Op, SelectionDAG &DAG) const;
898     SDValue LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const;
899     SDValue lowerEH_SJLJ_SETJMP(SDValue Op, SelectionDAG &DAG) const;
900     SDValue lowerEH_SJLJ_LONGJMP(SDValue Op, SelectionDAG &DAG) const;
901     SDValue LowerINIT_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const;
902     SDValue LowerFLT_ROUNDS_(SDValue Op, SelectionDAG &DAG) const;
903     SDValue LowerSIGN_EXTEND_INREG(SDValue Op, SelectionDAG &DAG) const;
904
905     virtual SDValue
906       LowerFormalArguments(SDValue Chain,
907                            CallingConv::ID CallConv, bool isVarArg,
908                            const SmallVectorImpl<ISD::InputArg> &Ins,
909                            SDLoc dl, SelectionDAG &DAG,
910                            SmallVectorImpl<SDValue> &InVals) const;
911     virtual SDValue
912       LowerCall(CallLoweringInfo &CLI,
913                 SmallVectorImpl<SDValue> &InVals) const;
914
915     virtual SDValue
916       LowerReturn(SDValue Chain,
917                   CallingConv::ID CallConv, bool isVarArg,
918                   const SmallVectorImpl<ISD::OutputArg> &Outs,
919                   const SmallVectorImpl<SDValue> &OutVals,
920                   SDLoc dl, SelectionDAG &DAG) const;
921
922     virtual bool isUsedByReturnOnly(SDNode *N, SDValue &Chain) const;
923
924     virtual bool mayBeEmittedAsTailCall(CallInst *CI) const;
925
926     virtual MVT
927     getTypeForExtArgOrReturn(MVT VT, ISD::NodeType ExtendKind) const;
928
929     virtual bool
930     CanLowerReturn(CallingConv::ID CallConv, MachineFunction &MF,
931                    bool isVarArg,
932                    const SmallVectorImpl<ISD::OutputArg> &Outs,
933                    LLVMContext &Context) const;
934
935     virtual const uint16_t *getScratchRegisters(CallingConv::ID CC) const;
936
937     /// Utility function to emit atomic-load-arith operations (and, or, xor,
938     /// nand, max, min, umax, umin). It takes the corresponding instruction to
939     /// expand, the associated machine basic block, and the associated X86
940     /// opcodes for reg/reg.
941     MachineBasicBlock *EmitAtomicLoadArith(MachineInstr *MI,
942                                            MachineBasicBlock *MBB) const;
943
944     /// Utility function to emit atomic-load-arith operations (and, or, xor,
945     /// nand, add, sub, swap) for 64-bit operands on 32-bit target.
946     MachineBasicBlock *EmitAtomicLoadArith6432(MachineInstr *MI,
947                                                MachineBasicBlock *MBB) const;
948
949     // Utility function to emit the low-level va_arg code for X86-64.
950     MachineBasicBlock *EmitVAARG64WithCustomInserter(
951                        MachineInstr *MI,
952                        MachineBasicBlock *MBB) const;
953
954     /// Utility function to emit the xmm reg save portion of va_start.
955     MachineBasicBlock *EmitVAStartSaveXMMRegsWithCustomInserter(
956                                                    MachineInstr *BInstr,
957                                                    MachineBasicBlock *BB) const;
958
959     MachineBasicBlock *EmitLoweredSelect(MachineInstr *I,
960                                          MachineBasicBlock *BB) const;
961
962     MachineBasicBlock *EmitLoweredWinAlloca(MachineInstr *MI,
963                                               MachineBasicBlock *BB) const;
964
965     MachineBasicBlock *EmitLoweredSegAlloca(MachineInstr *MI,
966                                             MachineBasicBlock *BB,
967                                             bool Is64Bit) const;
968
969     MachineBasicBlock *EmitLoweredTLSCall(MachineInstr *MI,
970                                           MachineBasicBlock *BB) const;
971
972     MachineBasicBlock *emitLoweredTLSAddr(MachineInstr *MI,
973                                           MachineBasicBlock *BB) const;
974
975     MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr *MI,
976                                         MachineBasicBlock *MBB) const;
977
978     MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr *MI,
979                                          MachineBasicBlock *MBB) const;
980
981     /// Emit nodes that will be selected as "test Op0,Op0", or something
982     /// equivalent, for use with the given x86 condition code.
983     SDValue EmitTest(SDValue Op0, unsigned X86CC, SelectionDAG &DAG) const;
984
985     /// Emit nodes that will be selected as "cmp Op0,Op1", or something
986     /// equivalent, for use with the given x86 condition code.
987     SDValue EmitCmp(SDValue Op0, SDValue Op1, unsigned X86CC,
988                     SelectionDAG &DAG) const;
989
990     /// Convert a comparison if required by the subtarget.
991     SDValue ConvertCmpIfNecessary(SDValue Cmp, SelectionDAG &DAG) const;
992   };
993
994   namespace X86 {
995     FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
996                              const TargetLibraryInfo *libInfo);
997   }
998 }
999
1000 #endif    // X86ISELLOWERING_H