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