]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/X86/X86ISelLowering.h
Merge llvm, clang, lld and lldb trunk r300890, and update build glue.
[FreeBSD/FreeBSD.git] / contrib / llvm / 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 : unsigned {
30       // Start the numbering where the builtin ops leave off.
31       FIRST_NUMBER = ISD::BUILTIN_OP_END,
32
33       /// Bit scan forward.
34       BSF,
35       /// Bit scan reverse.
36       BSR,
37
38       /// Double shift instructions. These correspond to
39       /// X86::SHLDxx and X86::SHRDxx instructions.
40       SHLD,
41       SHRD,
42
43       /// Bitwise logical AND of floating point values. This corresponds
44       /// to X86::ANDPS or X86::ANDPD.
45       FAND,
46
47       /// Bitwise logical OR of floating point values. This corresponds
48       /// to X86::ORPS or X86::ORPD.
49       FOR,
50
51       /// Bitwise logical XOR of floating point values. This corresponds
52       /// to X86::XORPS or X86::XORPD.
53       FXOR,
54
55       ///  Bitwise logical ANDNOT of floating point values. This
56       /// corresponds to X86::ANDNPS or X86::ANDNPD.
57       FANDN,
58
59       /// These operations represent an abstract X86 call
60       /// instruction, which includes a bunch of information.  In particular the
61       /// operands of these node are:
62       ///
63       ///     #0 - The incoming token chain
64       ///     #1 - The callee
65       ///     #2 - The number of arg bytes the caller pushes on the stack.
66       ///     #3 - The number of arg bytes the callee pops off the stack.
67       ///     #4 - The value to pass in AL/AX/EAX (optional)
68       ///     #5 - The value to pass in DL/DX/EDX (optional)
69       ///
70       /// The result values of these nodes are:
71       ///
72       ///     #0 - The outgoing token chain
73       ///     #1 - The first register result value (optional)
74       ///     #2 - The second register result value (optional)
75       ///
76       CALL,
77
78       /// This operation implements the lowering for readcyclecounter.
79       RDTSC_DAG,
80
81       /// X86 Read Time-Stamp Counter and Processor ID.
82       RDTSCP_DAG,
83
84       /// X86 Read Performance Monitoring Counters.
85       RDPMC_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, SELECTS,
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 FP SETCC, similar to above, but with output as an i1 mask and
110       /// with optional rounding mode.
111       FSETCCM, FSETCCM_RND,
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       /// Return from interrupt. Operand 0 is the number of bytes to pop.
130       IRET,
131
132       /// Repeat fill, corresponds to X86::REP_STOSx.
133       REP_STOS,
134
135       /// Repeat move, corresponds to X86::REP_MOVSx.
136       REP_MOVS,
137
138       /// On Darwin, this node represents the result of the popl
139       /// at function entry, used for PIC code.
140       GlobalBaseReg,
141
142       /// A wrapper node for TargetConstantPool, TargetJumpTable,
143       /// TargetExternalSymbol, TargetGlobalAddress, TargetGlobalTLSAddress,
144       /// MCSymbol and TargetBlockAddress.
145       Wrapper,
146
147       /// Special wrapper used under X86-64 PIC mode for RIP
148       /// relative displacements.
149       WrapperRIP,
150
151       /// Copies a 64-bit value from the low word of an XMM vector
152       /// to an MMX vector.
153       MOVDQ2Q,
154
155       /// Copies a 32-bit value from the low word of a MMX
156       /// vector to a GPR.
157       MMX_MOVD2W,
158
159       /// Copies a GPR into the low 32-bit word of a MMX vector
160       /// and zero out the high word.
161       MMX_MOVW2D,
162
163       /// Extract an 8-bit value from a vector and zero extend it to
164       /// i32, corresponds to X86::PEXTRB.
165       PEXTRB,
166
167       /// Extract a 16-bit value from a vector and zero extend it to
168       /// i32, corresponds to X86::PEXTRW.
169       PEXTRW,
170
171       /// Insert any element of a 4 x float vector into any element
172       /// of a destination 4 x floatvector.
173       INSERTPS,
174
175       /// Insert the lower 8-bits of a 32-bit value to a vector,
176       /// corresponds to X86::PINSRB.
177       PINSRB,
178
179       /// Insert the lower 16-bits of a 32-bit value to a vector,
180       /// corresponds to X86::PINSRW.
181       PINSRW,
182
183       /// Shuffle 16 8-bit values within a vector.
184       PSHUFB,
185
186       /// Compute Sum of Absolute Differences.
187       PSADBW,
188       /// Compute Double Block Packed Sum-Absolute-Differences
189       DBPSADBW,
190
191       /// Bitwise Logical AND NOT of Packed FP values.
192       ANDNP,
193
194       /// Blend where the selector is an immediate.
195       BLENDI,
196
197       /// Dynamic (non-constant condition) vector blend where only the sign bits
198       /// of the condition elements are used. This is used to enforce that the
199       /// condition mask is not valid for generic VSELECT optimizations.
200       SHRUNKBLEND,
201
202       /// Combined add and sub on an FP vector.
203       ADDSUB,
204
205       //  FP vector ops with rounding mode.
206       FADD_RND, FADDS_RND,
207       FSUB_RND, FSUBS_RND,
208       FMUL_RND, FMULS_RND,
209       FDIV_RND, FDIVS_RND,
210       FMAX_RND, FMAXS_RND,
211       FMIN_RND, FMINS_RND,
212       FSQRT_RND, FSQRTS_RND,
213
214       // FP vector get exponent.
215       FGETEXP_RND, FGETEXPS_RND,
216       // Extract Normalized Mantissas.
217       VGETMANT, VGETMANTS,
218       // FP Scale.
219       SCALEF,
220       SCALEFS,
221
222       // Integer add/sub with unsigned saturation.
223       ADDUS,
224       SUBUS,
225
226       // Integer add/sub with signed saturation.
227       ADDS,
228       SUBS,
229
230       // Unsigned Integer average.
231       AVG,
232
233       /// Integer horizontal add/sub.
234       HADD,
235       HSUB,
236
237       /// Floating point horizontal add/sub.
238       FHADD,
239       FHSUB,
240
241       // Detect Conflicts Within a Vector
242       CONFLICT,
243
244       /// Floating point max and min.
245       FMAX, FMIN,
246
247       /// Commutative FMIN and FMAX.
248       FMAXC, FMINC,
249
250       /// Scalar intrinsic floating point max and min.
251       FMAXS, FMINS,
252
253       /// Floating point reciprocal-sqrt and reciprocal approximation.
254       /// Note that these typically require refinement
255       /// in order to obtain suitable precision.
256       FRSQRT, FRCP,
257       FRSQRTS, FRCPS,
258
259       // Thread Local Storage.
260       TLSADDR,
261
262       // Thread Local Storage. A call to get the start address
263       // of the TLS block for the current module.
264       TLSBASEADDR,
265
266       // Thread Local Storage.  When calling to an OS provided
267       // thunk at the address from an earlier relocation.
268       TLSCALL,
269
270       // Exception Handling helpers.
271       EH_RETURN,
272
273       // SjLj exception handling setjmp.
274       EH_SJLJ_SETJMP,
275
276       // SjLj exception handling longjmp.
277       EH_SJLJ_LONGJMP,
278
279       // SjLj exception handling dispatch.
280       EH_SJLJ_SETUP_DISPATCH,
281
282       /// Tail call return. See X86TargetLowering::LowerCall for
283       /// the list of operands.
284       TC_RETURN,
285
286       // Vector move to low scalar and zero higher vector elements.
287       VZEXT_MOVL,
288
289       // Vector integer zero-extend.
290       VZEXT,
291       // Vector integer signed-extend.
292       VSEXT,
293
294       // Vector integer truncate.
295       VTRUNC,
296       // Vector integer truncate with unsigned/signed saturation.
297       VTRUNCUS, VTRUNCS,
298
299       // Vector FP extend.
300       VFPEXT, VFPEXT_RND, VFPEXTS_RND,
301
302       // Vector FP round.
303       VFPROUND, VFPROUND_RND, VFPROUNDS_RND,
304
305       // Convert a vector to mask, set bits base on MSB.
306       CVT2MASK,
307
308       // 128-bit vector logical left / right shift
309       VSHLDQ, VSRLDQ,
310
311       // Vector shift elements
312       VSHL, VSRL, VSRA,
313
314       // Vector variable shift right arithmetic.
315       // Unlike ISD::SRA, in case shift count greater then element size
316       // use sign bit to fill destination data element.
317       VSRAV,
318
319       // Vector shift elements by immediate
320       VSHLI, VSRLI, VSRAI,
321
322       // Shifts of mask registers.
323       KSHIFTL, KSHIFTR,
324
325       // Bit rotate by immediate
326       VROTLI, VROTRI,
327
328       // Vector packed double/float comparison.
329       CMPP,
330
331       // Vector integer comparisons.
332       PCMPEQ, PCMPGT,
333       // Vector integer comparisons, the result is in a mask vector.
334       PCMPEQM, PCMPGTM,
335
336       MULTISHIFT,
337
338       /// Vector comparison generating mask bits for fp and
339       /// integer signed and unsigned data types.
340       CMPM,
341       CMPMU,
342       // Vector comparison with rounding mode for FP values
343       CMPM_RND,
344
345       // Arithmetic operations with FLAGS results.
346       ADD, SUB, ADC, SBB, SMUL,
347       INC, DEC, OR, XOR, AND,
348
349       // Bit field extract.
350       BEXTR,
351
352       // LOW, HI, FLAGS = umul LHS, RHS.
353       UMUL,
354
355       // 8-bit SMUL/UMUL - AX, FLAGS = smul8/umul8 AL, RHS.
356       SMUL8, UMUL8,
357
358       // 8-bit divrem that zero-extend the high result (AH).
359       UDIVREM8_ZEXT_HREG,
360       SDIVREM8_SEXT_HREG,
361
362       // X86-specific multiply by immediate.
363       MUL_IMM,
364
365       // Vector sign bit extraction.
366       MOVMSK,
367
368       // Vector bitwise comparisons.
369       PTEST,
370
371       // Vector packed fp sign bitwise comparisons.
372       TESTP,
373
374       // Vector "test" in AVX-512, the result is in a mask vector.
375       TESTM,
376       TESTNM,
377
378       // OR/AND test for masks.
379       KORTEST,
380       KTEST,
381
382       // Several flavors of instructions with vector shuffle behaviors.
383       // Saturated signed/unnsigned packing.
384       PACKSS,
385       PACKUS,
386       // Intra-lane alignr.
387       PALIGNR,
388       // AVX512 inter-lane alignr.
389       VALIGN,
390       PSHUFD,
391       PSHUFHW,
392       PSHUFLW,
393       SHUFP,
394       //Shuffle Packed Values at 128-bit granularity.
395       SHUF128,
396       MOVDDUP,
397       MOVSHDUP,
398       MOVSLDUP,
399       MOVLHPS,
400       MOVLHPD,
401       MOVHLPS,
402       MOVLPS,
403       MOVLPD,
404       MOVSD,
405       MOVSS,
406       UNPCKL,
407       UNPCKH,
408       VPERMILPV,
409       VPERMILPI,
410       VPERMI,
411       VPERM2X128,
412
413       // Variable Permute (VPERM).
414       // Res = VPERMV MaskV, V0
415       VPERMV,
416
417       // 3-op Variable Permute (VPERMT2).
418       // Res = VPERMV3 V0, MaskV, V1
419       VPERMV3,
420
421       // 3-op Variable Permute overwriting the index (VPERMI2).
422       // Res = VPERMIV3 V0, MaskV, V1
423       VPERMIV3,
424
425       // Bitwise ternary logic.
426       VPTERNLOG,
427       // Fix Up Special Packed Float32/64 values.
428       VFIXUPIMM,
429       VFIXUPIMMS,
430       // Range Restriction Calculation For Packed Pairs of Float32/64 values.
431       VRANGE,
432       // Reduce - Perform Reduction Transformation on scalar\packed FP.
433       VREDUCE, VREDUCES,
434       // RndScale - Round FP Values To Include A Given Number Of Fraction Bits.
435       VRNDSCALE, VRNDSCALES,
436       // Tests Types Of a FP Values for packed types.
437       VFPCLASS,
438       // Tests Types Of a FP Values for scalar types.
439       VFPCLASSS,
440
441       // Broadcast scalar to vector.
442       VBROADCAST,
443       // Broadcast mask to vector.
444       VBROADCASTM,
445       // Broadcast subvector to vector.
446       SUBV_BROADCAST,
447
448       // Extract vector element.
449       VEXTRACT,
450
451       /// SSE4A Extraction and Insertion.
452       EXTRQI, INSERTQI,
453
454       // XOP variable/immediate rotations.
455       VPROT, VPROTI,
456       // XOP arithmetic/logical shifts.
457       VPSHA, VPSHL,
458       // XOP signed/unsigned integer comparisons.
459       VPCOM, VPCOMU,
460       // XOP packed permute bytes.
461       VPPERM,
462       // XOP two source permutation.
463       VPERMIL2,
464
465       // Vector multiply packed unsigned doubleword integers.
466       PMULUDQ,
467       // Vector multiply packed signed doubleword integers.
468       PMULDQ,
469       // Vector Multiply Packed UnsignedIntegers with Round and Scale.
470       MULHRS,
471
472       // Multiply and Add Packed Integers.
473       VPMADDUBSW, VPMADDWD,
474       VPMADD52L, VPMADD52H,
475
476       // FMA nodes.
477       FMADD,
478       FNMADD,
479       FMSUB,
480       FNMSUB,
481       FMADDSUB,
482       FMSUBADD,
483
484       // FMA with rounding mode.
485       FMADD_RND,
486       FNMADD_RND,
487       FMSUB_RND,
488       FNMSUB_RND,
489       FMADDSUB_RND,
490       FMSUBADD_RND,
491
492       // Scalar intrinsic FMA with rounding mode.
493       // Two versions, passthru bits on op1 or op3.
494       FMADDS1_RND, FMADDS3_RND,
495       FNMADDS1_RND, FNMADDS3_RND,
496       FMSUBS1_RND, FMSUBS3_RND,
497       FNMSUBS1_RND, FNMSUBS3_RND,
498
499       // Compress and expand.
500       COMPRESS,
501       EXPAND,
502
503       // Convert Unsigned/Integer to Floating-Point Value with rounding mode.
504       SINT_TO_FP_RND, UINT_TO_FP_RND,
505       SCALAR_SINT_TO_FP_RND, SCALAR_UINT_TO_FP_RND,
506
507       // Vector float/double to signed/unsigned integer.
508       CVTP2SI, CVTP2UI, CVTP2SI_RND, CVTP2UI_RND,
509       // Scalar float/double to signed/unsigned integer.
510       CVTS2SI_RND, CVTS2UI_RND,
511
512       // Vector float/double to signed/unsigned integer with truncation.
513       CVTTP2SI, CVTTP2UI, CVTTP2SI_RND, CVTTP2UI_RND,
514       // Scalar float/double to signed/unsigned integer with truncation.
515       CVTTS2SI_RND, CVTTS2UI_RND,
516
517       // Vector signed/unsigned integer to float/double.
518       CVTSI2P, CVTUI2P,
519
520       // Save xmm argument registers to the stack, according to %al. An operator
521       // is needed so that this can be expanded with control flow.
522       VASTART_SAVE_XMM_REGS,
523
524       // Windows's _chkstk call to do stack probing.
525       WIN_ALLOCA,
526
527       // For allocating variable amounts of stack space when using
528       // segmented stacks. Check if the current stacklet has enough space, and
529       // falls back to heap allocation if not.
530       SEG_ALLOCA,
531
532       // Memory barriers.
533       MEMBARRIER,
534       MFENCE,
535
536       // Store FP status word into i16 register.
537       FNSTSW16r,
538
539       // Store contents of %ah into %eflags.
540       SAHF,
541
542       // Get a random integer and indicate whether it is valid in CF.
543       RDRAND,
544
545       // Get a NIST SP800-90B & C compliant random integer and
546       // indicate whether it is valid in CF.
547       RDSEED,
548
549       // SSE42 string comparisons.
550       PCMPISTRI,
551       PCMPESTRI,
552
553       // Test if in transactional execution.
554       XTEST,
555
556       // ERI instructions.
557       RSQRT28, RSQRT28S, RCP28, RCP28S, EXP2,
558
559       // Conversions between float and half-float.
560       CVTPS2PH, CVTPH2PS,
561
562       // Compare and swap.
563       LCMPXCHG_DAG = ISD::FIRST_TARGET_MEMORY_OPCODE,
564       LCMPXCHG8_DAG,
565       LCMPXCHG16_DAG,
566       LCMPXCHG8_SAVE_EBX_DAG,
567       LCMPXCHG16_SAVE_RBX_DAG,
568
569       /// LOCK-prefixed arithmetic read-modify-write instructions.
570       /// EFLAGS, OUTCHAIN = LADD(INCHAIN, PTR, RHS)
571       LADD, LSUB, LOR, LXOR, LAND,
572
573       // Load, scalar_to_vector, and zero extend.
574       VZEXT_LOAD,
575
576       // Store FP control world into i16 memory.
577       FNSTCW16m,
578
579       /// This instruction implements FP_TO_SINT with the
580       /// integer destination in memory and a FP reg source.  This corresponds
581       /// to the X86::FIST*m instructions and the rounding mode change stuff. It
582       /// has two inputs (token chain and address) and two outputs (int value
583       /// and token chain).
584       FP_TO_INT16_IN_MEM,
585       FP_TO_INT32_IN_MEM,
586       FP_TO_INT64_IN_MEM,
587
588       /// This instruction implements SINT_TO_FP with the
589       /// integer source in memory and FP reg result.  This corresponds to the
590       /// X86::FILD*m instructions. It has three inputs (token chain, address,
591       /// and source type) and two outputs (FP value and token chain). FILD_FLAG
592       /// also produces a flag).
593       FILD,
594       FILD_FLAG,
595
596       /// This instruction implements an extending load to FP stack slots.
597       /// This corresponds to the X86::FLD32m / X86::FLD64m. It takes a chain
598       /// operand, ptr to load from, and a ValueType node indicating the type
599       /// to load to.
600       FLD,
601
602       /// This instruction implements a truncating store to FP stack
603       /// slots. This corresponds to the X86::FST32m / X86::FST64m. It takes a
604       /// chain operand, value to store, address, and a ValueType to store it
605       /// as.
606       FST,
607
608       /// This instruction grabs the address of the next argument
609       /// from a va_list. (reads and modifies the va_list in memory)
610       VAARG_64,
611
612       // Vector truncating store with unsigned/signed saturation
613       VTRUNCSTOREUS, VTRUNCSTORES,
614       // Vector truncating masked store with unsigned/signed saturation
615       VMTRUNCSTOREUS, VMTRUNCSTORES
616
617       // WARNING: Do not add anything in the end unless you want the node to
618       // have memop! In fact, starting from FIRST_TARGET_MEMORY_OPCODE all
619       // opcodes will be thought as target memory ops!
620     };
621   } // end namespace X86ISD
622
623   /// Define some predicates that are used for node matching.
624   namespace X86 {
625     /// Return true if the specified
626     /// EXTRACT_SUBVECTOR operand specifies a vector extract that is
627     /// suitable for input to VEXTRACTF128, VEXTRACTI128 instructions.
628     bool isVEXTRACT128Index(SDNode *N);
629
630     /// Return true if the specified
631     /// INSERT_SUBVECTOR operand specifies a subvector insert that is
632     /// suitable for input to VINSERTF128, VINSERTI128 instructions.
633     bool isVINSERT128Index(SDNode *N);
634
635     /// Return true if the specified
636     /// EXTRACT_SUBVECTOR operand specifies a vector extract that is
637     /// suitable for input to VEXTRACTF64X4, VEXTRACTI64X4 instructions.
638     bool isVEXTRACT256Index(SDNode *N);
639
640     /// Return true if the specified
641     /// INSERT_SUBVECTOR operand specifies a subvector insert that is
642     /// suitable for input to VINSERTF64X4, VINSERTI64X4 instructions.
643     bool isVINSERT256Index(SDNode *N);
644
645     /// Return the appropriate
646     /// immediate to extract the specified EXTRACT_SUBVECTOR index
647     /// with VEXTRACTF128, VEXTRACTI128 instructions.
648     unsigned getExtractVEXTRACT128Immediate(SDNode *N);
649
650     /// Return the appropriate
651     /// immediate to insert at the specified INSERT_SUBVECTOR index
652     /// with VINSERTF128, VINSERT128 instructions.
653     unsigned getInsertVINSERT128Immediate(SDNode *N);
654
655     /// Return the appropriate
656     /// immediate to extract the specified EXTRACT_SUBVECTOR index
657     /// with VEXTRACTF64X4, VEXTRACTI64x4 instructions.
658     unsigned getExtractVEXTRACT256Immediate(SDNode *N);
659
660     /// Return the appropriate
661     /// immediate to insert at the specified INSERT_SUBVECTOR index
662     /// with VINSERTF64x4, VINSERTI64x4 instructions.
663     unsigned getInsertVINSERT256Immediate(SDNode *N);
664
665     /// Returns true if Elt is a constant zero or floating point constant +0.0.
666     bool isZeroNode(SDValue Elt);
667
668     /// Returns true of the given offset can be
669     /// fit into displacement field of the instruction.
670     bool isOffsetSuitableForCodeModel(int64_t Offset, CodeModel::Model M,
671                                       bool hasSymbolicDisplacement = true);
672
673     /// Determines whether the callee is required to pop its
674     /// own arguments. Callee pop is necessary to support tail calls.
675     bool isCalleePop(CallingConv::ID CallingConv,
676                      bool is64Bit, bool IsVarArg, bool GuaranteeTCO);
677
678   } // end namespace X86
679
680   //===--------------------------------------------------------------------===//
681   //  X86 Implementation of the TargetLowering interface
682   class X86TargetLowering final : public TargetLowering {
683   public:
684     explicit X86TargetLowering(const X86TargetMachine &TM,
685                                const X86Subtarget &STI);
686
687     unsigned getJumpTableEncoding() const override;
688     bool useSoftFloat() const override;
689
690     void markLibCallAttributes(MachineFunction *MF, unsigned CC,
691                                ArgListTy &Args) const override;
692
693     MVT getScalarShiftAmountTy(const DataLayout &, EVT) const override {
694       return MVT::i8;
695     }
696
697     const MCExpr *
698     LowerCustomJumpTableEntry(const MachineJumpTableInfo *MJTI,
699                               const MachineBasicBlock *MBB, unsigned uid,
700                               MCContext &Ctx) const override;
701
702     /// Returns relocation base for the given PIC jumptable.
703     SDValue getPICJumpTableRelocBase(SDValue Table,
704                                      SelectionDAG &DAG) const override;
705     const MCExpr *
706     getPICJumpTableRelocBaseExpr(const MachineFunction *MF,
707                                  unsigned JTI, MCContext &Ctx) const override;
708
709     /// Return the desired alignment for ByVal aggregate
710     /// function arguments in the caller parameter area. For X86, aggregates
711     /// that contains are placed at 16-byte boundaries while the rest are at
712     /// 4-byte boundaries.
713     unsigned getByValTypeAlignment(Type *Ty,
714                                    const DataLayout &DL) const override;
715
716     /// Returns the target specific optimal type for load
717     /// and store operations as a result of memset, memcpy, and memmove
718     /// lowering. If DstAlign is zero that means it's safe to destination
719     /// alignment can satisfy any constraint. Similarly if SrcAlign is zero it
720     /// means there isn't a need to check it against alignment requirement,
721     /// probably because the source does not need to be loaded. If 'IsMemset' is
722     /// true, that means it's expanding a memset. If 'ZeroMemset' is true, that
723     /// means it's a memset of zero. 'MemcpyStrSrc' indicates whether the memcpy
724     /// source is constant so it does not need to be loaded.
725     /// It returns EVT::Other if the type should be determined using generic
726     /// target-independent logic.
727     EVT getOptimalMemOpType(uint64_t Size, unsigned DstAlign, unsigned SrcAlign,
728                             bool IsMemset, bool ZeroMemset, bool MemcpyStrSrc,
729                             MachineFunction &MF) const override;
730
731     /// Returns true if it's safe to use load / store of the
732     /// specified type to expand memcpy / memset inline. This is mostly true
733     /// for all types except for some special cases. For example, on X86
734     /// targets without SSE2 f64 load / store are done with fldl / fstpl which
735     /// also does type conversion. Note the specified type doesn't have to be
736     /// legal as the hook is used before type legalization.
737     bool isSafeMemOpType(MVT VT) const override;
738
739     /// Returns true if the target allows unaligned memory accesses of the
740     /// specified type. Returns whether it is "fast" in the last argument.
741     bool allowsMisalignedMemoryAccesses(EVT VT, unsigned AS, unsigned Align,
742                                        bool *Fast) const override;
743
744     /// Provide custom lowering hooks for some operations.
745     ///
746     SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;
747
748     /// Places new result values for the node in Results (their number
749     /// and types must exactly match those of the original return values of
750     /// the node), or leaves Results empty, which indicates that the node is not
751     /// to be custom lowered after all.
752     void LowerOperationWrapper(SDNode *N,
753                                SmallVectorImpl<SDValue> &Results,
754                                SelectionDAG &DAG) const override;
755
756     /// Replace the results of node with an illegal result
757     /// type with new values built out of custom code.
758     ///
759     void ReplaceNodeResults(SDNode *N, SmallVectorImpl<SDValue>&Results,
760                             SelectionDAG &DAG) const override;
761
762     SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override;
763
764     /// Return true if the target has native support for
765     /// the specified value type and it is 'desirable' to use the type for the
766     /// given node type. e.g. On x86 i16 is legal, but undesirable since i16
767     /// instruction encodings are longer and some i16 instructions are slow.
768     bool isTypeDesirableForOp(unsigned Opc, EVT VT) const override;
769
770     /// Return true if the target has native support for the
771     /// specified value type and it is 'desirable' to use the type. e.g. On x86
772     /// i16 is legal, but undesirable since i16 instruction encodings are longer
773     /// and some i16 instructions are slow.
774     bool IsDesirableToPromoteOp(SDValue Op, EVT &PVT) const override;
775
776     /// Return true if the MachineFunction contains a COPY which would imply
777     /// HasOpaqueSPAdjustment.
778     bool hasCopyImplyingStackAdjustment(MachineFunction *MF) const override;
779
780     MachineBasicBlock *
781     EmitInstrWithCustomInserter(MachineInstr &MI,
782                                 MachineBasicBlock *MBB) const override;
783
784     /// This method returns the name of a target specific DAG node.
785     const char *getTargetNodeName(unsigned Opcode) const override;
786
787     bool isCheapToSpeculateCttz() const override;
788
789     bool isCheapToSpeculateCtlz() const override;
790
791     bool isCtlzFast() const override;
792
793     bool hasBitPreservingFPLogic(EVT VT) const override {
794       return VT == MVT::f32 || VT == MVT::f64 || VT.isVector();
795     }
796
797     bool isMultiStoresCheaperThanBitsMerge(EVT LTy, EVT HTy) const override {
798       // If the pair to store is a mixture of float and int values, we will
799       // save two bitwise instructions and one float-to-int instruction and
800       // increase one store instruction. There is potentially a more
801       // significant benefit because it avoids the float->int domain switch
802       // for input value. So It is more likely a win.
803       if ((LTy.isFloatingPoint() && HTy.isInteger()) ||
804           (LTy.isInteger() && HTy.isFloatingPoint()))
805         return true;
806       // If the pair only contains int values, we will save two bitwise
807       // instructions and increase one store instruction (costing one more
808       // store buffer). Since the benefit is more blurred so we leave
809       // such pair out until we get testcase to prove it is a win.
810       return false;
811     }
812
813     bool isMaskAndCmp0FoldingBeneficial(const Instruction &AndI) const override;
814
815     bool hasAndNotCompare(SDValue Y) const override;
816
817     bool convertSetCCLogicToBitwiseLogic(EVT VT) const override {
818       return VT.isScalarInteger();
819     }
820
821     /// Vector-sized comparisons are fast using PCMPEQ + PMOVMSK or PTEST.
822     MVT hasFastEqualityCompare(unsigned NumBits) const override;
823
824     /// Return the value type to use for ISD::SETCC.
825     EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context,
826                            EVT VT) const override;
827
828     /// Determine which of the bits specified in Mask are known to be either
829     /// zero or one and return them in the KnownZero/KnownOne bitsets.
830     void computeKnownBitsForTargetNode(const SDValue Op,
831                                        APInt &KnownZero,
832                                        APInt &KnownOne,
833                                        const APInt &DemandedElts,
834                                        const SelectionDAG &DAG,
835                                        unsigned Depth = 0) const override;
836
837     /// Determine the number of bits in the operation that are sign bits.
838     unsigned ComputeNumSignBitsForTargetNode(SDValue Op,
839                                              const APInt &DemandedElts,
840                                              const SelectionDAG &DAG,
841                                              unsigned Depth) const override;
842
843     bool isGAPlusOffset(SDNode *N, const GlobalValue* &GA,
844                         int64_t &Offset) const override;
845
846     SDValue getReturnAddressFrameIndex(SelectionDAG &DAG) const;
847
848     bool ExpandInlineAsm(CallInst *CI) const override;
849
850     ConstraintType getConstraintType(StringRef Constraint) const override;
851
852     /// Examine constraint string and operand type and determine a weight value.
853     /// The operand object must already have been set up with the operand type.
854     ConstraintWeight
855       getSingleConstraintMatchWeight(AsmOperandInfo &info,
856                                      const char *constraint) const override;
857
858     const char *LowerXConstraint(EVT ConstraintVT) const override;
859
860     /// Lower the specified operand into the Ops vector. If it is invalid, don't
861     /// add anything to Ops. If hasMemory is true it means one of the asm
862     /// constraint of the inline asm instruction being processed is 'm'.
863     void LowerAsmOperandForConstraint(SDValue Op,
864                                       std::string &Constraint,
865                                       std::vector<SDValue> &Ops,
866                                       SelectionDAG &DAG) const override;
867
868     unsigned
869     getInlineAsmMemConstraint(StringRef ConstraintCode) const override {
870       if (ConstraintCode == "i")
871         return InlineAsm::Constraint_i;
872       else if (ConstraintCode == "o")
873         return InlineAsm::Constraint_o;
874       else if (ConstraintCode == "v")
875         return InlineAsm::Constraint_v;
876       else if (ConstraintCode == "X")
877         return InlineAsm::Constraint_X;
878       return TargetLowering::getInlineAsmMemConstraint(ConstraintCode);
879     }
880
881     /// Given a physical register constraint
882     /// (e.g. {edx}), return the register number and the register class for the
883     /// register.  This should only be used for C_Register constraints.  On
884     /// error, this returns a register number of 0.
885     std::pair<unsigned, const TargetRegisterClass *>
886     getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
887                                  StringRef Constraint, MVT VT) const override;
888
889     /// Return true if the addressing mode represented
890     /// by AM is legal for this target, for a load/store of the specified type.
891     bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM,
892                                Type *Ty, unsigned AS) const override;
893
894     /// Return true if the specified immediate is legal
895     /// icmp immediate, that is the target has icmp instructions which can
896     /// compare a register against the immediate without having to materialize
897     /// the immediate into a register.
898     bool isLegalICmpImmediate(int64_t Imm) const override;
899
900     /// Return true if the specified immediate is legal
901     /// add immediate, that is the target has add instructions which can
902     /// add a register and the immediate without having to materialize
903     /// the immediate into a register.
904     bool isLegalAddImmediate(int64_t Imm) const override;
905
906     /// \brief Return the cost of the scaling factor used in the addressing
907     /// mode represented by AM for this target, for a load/store
908     /// of the specified type.
909     /// If the AM is supported, the return value must be >= 0.
910     /// If the AM is not supported, it returns a negative value.
911     int getScalingFactorCost(const DataLayout &DL, const AddrMode &AM, Type *Ty,
912                              unsigned AS) const override;
913
914     bool isVectorShiftByScalarCheap(Type *Ty) const override;
915
916     /// Return true if it's free to truncate a value of
917     /// type Ty1 to type Ty2. e.g. On x86 it's free to truncate a i32 value in
918     /// register EAX to i16 by referencing its sub-register AX.
919     bool isTruncateFree(Type *Ty1, Type *Ty2) const override;
920     bool isTruncateFree(EVT VT1, EVT VT2) const override;
921
922     bool allowTruncateForTailCall(Type *Ty1, Type *Ty2) const override;
923
924     /// Return true if any actual instruction that defines a
925     /// value of type Ty1 implicit zero-extends the value to Ty2 in the result
926     /// register. This does not necessarily include registers defined in
927     /// unknown ways, such as incoming arguments, or copies from unknown
928     /// virtual registers. Also, if isTruncateFree(Ty2, Ty1) is true, this
929     /// does not necessarily apply to truncate instructions. e.g. on x86-64,
930     /// all instructions that define 32-bit values implicit zero-extend the
931     /// result out to 64 bits.
932     bool isZExtFree(Type *Ty1, Type *Ty2) const override;
933     bool isZExtFree(EVT VT1, EVT VT2) const override;
934     bool isZExtFree(SDValue Val, EVT VT2) const override;
935
936     /// Return true if folding a vector load into ExtVal (a sign, zero, or any
937     /// extend node) is profitable.
938     bool isVectorLoadExtDesirable(SDValue) const override;
939
940     /// Return true if an FMA operation is faster than a pair of fmul and fadd
941     /// instructions. fmuladd intrinsics will be expanded to FMAs when this
942     /// method returns true, otherwise fmuladd is expanded to fmul + fadd.
943     bool isFMAFasterThanFMulAndFAdd(EVT VT) const override;
944
945     /// Return true if it's profitable to narrow
946     /// operations of type VT1 to VT2. e.g. on x86, it's profitable to narrow
947     /// from i32 to i8 but not from i32 to i16.
948     bool isNarrowingProfitable(EVT VT1, EVT VT2) const override;
949
950     /// Given an intrinsic, checks if on the target the intrinsic will need to map
951     /// to a MemIntrinsicNode (touches memory). If this is the case, it returns
952     /// true and stores the intrinsic information into the IntrinsicInfo that was
953     /// passed to the function.
954     bool getTgtMemIntrinsic(IntrinsicInfo &Info, const CallInst &I,
955                             unsigned Intrinsic) const override;
956
957     /// Returns true if the target can instruction select the
958     /// specified FP immediate natively. If false, the legalizer will
959     /// materialize the FP immediate as a load from a constant pool.
960     bool isFPImmLegal(const APFloat &Imm, EVT VT) const override;
961
962     /// Targets can use this to indicate that they only support *some*
963     /// VECTOR_SHUFFLE operations, those with specific masks. By default, if a
964     /// target supports the VECTOR_SHUFFLE node, all mask values are assumed to
965     /// be legal.
966     bool isShuffleMaskLegal(const SmallVectorImpl<int> &Mask,
967                             EVT VT) const override;
968
969     /// Similar to isShuffleMaskLegal. This is used by Targets can use this to
970     /// indicate if there is a suitable VECTOR_SHUFFLE that can be used to
971     /// replace a VAND with a constant pool entry.
972     bool isVectorClearMaskLegal(const SmallVectorImpl<int> &Mask,
973                                 EVT VT) const override;
974
975     /// If true, then instruction selection should
976     /// seek to shrink the FP constant of the specified type to a smaller type
977     /// in order to save space and / or reduce runtime.
978     bool ShouldShrinkFPConstant(EVT VT) const override {
979       // Don't shrink FP constpool if SSE2 is available since cvtss2sd is more
980       // expensive than a straight movsd. On the other hand, it's important to
981       // shrink long double fp constant since fldt is very slow.
982       return !X86ScalarSSEf64 || VT == MVT::f80;
983     }
984
985     /// Return true if we believe it is correct and profitable to reduce the
986     /// load node to a smaller type.
987     bool shouldReduceLoadWidth(SDNode *Load, ISD::LoadExtType ExtTy,
988                                EVT NewVT) const override;
989
990     /// Return true if the specified scalar FP type is computed in an SSE
991     /// register, not on the X87 floating point stack.
992     bool isScalarFPTypeInSSEReg(EVT VT) const {
993       return (VT == MVT::f64 && X86ScalarSSEf64) || // f64 is when SSE2
994              (VT == MVT::f32 && X86ScalarSSEf32);   // f32 is when SSE1
995     }
996
997     /// \brief Returns true if it is beneficial to convert a load of a constant
998     /// to just the constant itself.
999     bool shouldConvertConstantLoadToIntImm(const APInt &Imm,
1000                                            Type *Ty) const override;
1001
1002     bool convertSelectOfConstantsToMath() const override {
1003       return true;
1004     }
1005
1006     /// Return true if EXTRACT_SUBVECTOR is cheap for this result type
1007     /// with this index.
1008     bool isExtractSubvectorCheap(EVT ResVT, unsigned Index) const override;
1009
1010     /// Intel processors have a unified instruction and data cache
1011     const char * getClearCacheBuiltinName() const override {
1012       return nullptr; // nothing to do, move along.
1013     }
1014
1015     unsigned getRegisterByName(const char* RegName, EVT VT,
1016                                SelectionDAG &DAG) const override;
1017
1018     /// If a physical register, this returns the register that receives the
1019     /// exception address on entry to an EH pad.
1020     unsigned
1021     getExceptionPointerRegister(const Constant *PersonalityFn) const override;
1022
1023     /// If a physical register, this returns the register that receives the
1024     /// exception typeid on entry to a landing pad.
1025     unsigned
1026     getExceptionSelectorRegister(const Constant *PersonalityFn) const override;
1027
1028     virtual bool needsFixedCatchObjects() const override;
1029
1030     /// This method returns a target specific FastISel object,
1031     /// or null if the target does not support "fast" ISel.
1032     FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
1033                              const TargetLibraryInfo *libInfo) const override;
1034
1035     /// If the target has a standard location for the stack protector cookie,
1036     /// returns the address of that location. Otherwise, returns nullptr.
1037     Value *getIRStackGuard(IRBuilder<> &IRB) const override;
1038
1039     bool useLoadStackGuardNode() const override;
1040     void insertSSPDeclarations(Module &M) const override;
1041     Value *getSDagStackGuard(const Module &M) const override;
1042     Value *getSSPStackGuardCheck(const Module &M) const override;
1043
1044     /// Return true if the target stores SafeStack pointer at a fixed offset in
1045     /// some non-standard address space, and populates the address space and
1046     /// offset as appropriate.
1047     Value *getSafeStackPointerLocation(IRBuilder<> &IRB) const override;
1048
1049     SDValue BuildFILD(SDValue Op, EVT SrcVT, SDValue Chain, SDValue StackSlot,
1050                       SelectionDAG &DAG) const;
1051
1052     bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override;
1053
1054     /// \brief Customize the preferred legalization strategy for certain types.
1055     LegalizeTypeAction getPreferredVectorAction(EVT VT) const override;
1056
1057     bool isIntDivCheap(EVT VT, AttributeList Attr) const override;
1058
1059     bool supportSwiftError() const override;
1060
1061     unsigned getMaxSupportedInterleaveFactor() const override { return 4; }
1062
1063     /// \brief Lower interleaved load(s) into target specific
1064     /// instructions/intrinsics.
1065     bool lowerInterleavedLoad(LoadInst *LI,
1066                               ArrayRef<ShuffleVectorInst *> Shuffles,
1067                               ArrayRef<unsigned> Indices,
1068                               unsigned Factor) const override;
1069   protected:
1070     std::pair<const TargetRegisterClass *, uint8_t>
1071     findRepresentativeClass(const TargetRegisterInfo *TRI,
1072                             MVT VT) const override;
1073
1074   private:
1075     /// Keep a reference to the X86Subtarget around so that we can
1076     /// make the right decision when generating code for different targets.
1077     const X86Subtarget &Subtarget;
1078
1079     /// Select between SSE or x87 floating point ops.
1080     /// When SSE is available, use it for f32 operations.
1081     /// When SSE2 is available, use it for f64 operations.
1082     bool X86ScalarSSEf32;
1083     bool X86ScalarSSEf64;
1084
1085     /// A list of legal FP immediates.
1086     std::vector<APFloat> LegalFPImmediates;
1087
1088     /// Indicate that this x86 target can instruction
1089     /// select the specified FP immediate natively.
1090     void addLegalFPImmediate(const APFloat& Imm) {
1091       LegalFPImmediates.push_back(Imm);
1092     }
1093
1094     SDValue LowerCallResult(SDValue Chain, SDValue InFlag,
1095                             CallingConv::ID CallConv, bool isVarArg,
1096                             const SmallVectorImpl<ISD::InputArg> &Ins,
1097                             const SDLoc &dl, SelectionDAG &DAG,
1098                             SmallVectorImpl<SDValue> &InVals,
1099                             uint32_t *RegMask) const;
1100     SDValue LowerMemArgument(SDValue Chain, CallingConv::ID CallConv,
1101                              const SmallVectorImpl<ISD::InputArg> &ArgInfo,
1102                              const SDLoc &dl, SelectionDAG &DAG,
1103                              const CCValAssign &VA, MachineFrameInfo &MFI,
1104                              unsigned i) const;
1105     SDValue LowerMemOpCallTo(SDValue Chain, SDValue StackPtr, SDValue Arg,
1106                              const SDLoc &dl, SelectionDAG &DAG,
1107                              const CCValAssign &VA,
1108                              ISD::ArgFlagsTy Flags) const;
1109
1110     // Call lowering helpers.
1111
1112     /// Check whether the call is eligible for tail call optimization. Targets
1113     /// that want to do tail call optimization should implement this function.
1114     bool IsEligibleForTailCallOptimization(SDValue Callee,
1115                                            CallingConv::ID CalleeCC,
1116                                            bool isVarArg,
1117                                            bool isCalleeStructRet,
1118                                            bool isCallerStructRet,
1119                                            Type *RetTy,
1120                                     const SmallVectorImpl<ISD::OutputArg> &Outs,
1121                                     const SmallVectorImpl<SDValue> &OutVals,
1122                                     const SmallVectorImpl<ISD::InputArg> &Ins,
1123                                            SelectionDAG& DAG) const;
1124     SDValue EmitTailCallLoadRetAddr(SelectionDAG &DAG, SDValue &OutRetAddr,
1125                                     SDValue Chain, bool IsTailCall,
1126                                     bool Is64Bit, int FPDiff,
1127                                     const SDLoc &dl) const;
1128
1129     unsigned GetAlignedArgumentStackSize(unsigned StackSize,
1130                                          SelectionDAG &DAG) const;
1131
1132     unsigned getAddressSpace(void) const;
1133
1134     std::pair<SDValue,SDValue> FP_TO_INTHelper(SDValue Op, SelectionDAG &DAG,
1135                                                bool isSigned,
1136                                                bool isReplace) const;
1137
1138     SDValue LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const;
1139     SDValue LowerBUILD_VECTORvXi1(SDValue Op, SelectionDAG &DAG) const;
1140     SDValue LowerVSELECT(SDValue Op, SelectionDAG &DAG) const;
1141     SDValue LowerEXTRACT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
1142     SDValue ExtractBitFromMaskVector(SDValue Op, SelectionDAG &DAG) const;
1143     SDValue InsertBitToMaskVector(SDValue Op, SelectionDAG &DAG) const;
1144     SDValue LowerINSERT_VECTOR_ELT(SDValue Op, SelectionDAG &DAG) const;
1145
1146     unsigned getGlobalWrapperKind(const GlobalValue *GV = nullptr) const;
1147     SDValue LowerConstantPool(SDValue Op, SelectionDAG &DAG) const;
1148     SDValue LowerBlockAddress(SDValue Op, SelectionDAG &DAG) const;
1149     SDValue LowerGlobalAddress(const GlobalValue *GV, const SDLoc &dl,
1150                                int64_t Offset, SelectionDAG &DAG) const;
1151     SDValue LowerGlobalAddress(SDValue Op, SelectionDAG &DAG) const;
1152     SDValue LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const;
1153     SDValue LowerExternalSymbol(SDValue Op, SelectionDAG &DAG) const;
1154
1155     SDValue LowerSINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
1156     SDValue LowerUINT_TO_FP(SDValue Op, SelectionDAG &DAG) const;
1157     SDValue LowerUINT_TO_FP_i64(SDValue Op, SelectionDAG &DAG) const;
1158     SDValue LowerUINT_TO_FP_i32(SDValue Op, SelectionDAG &DAG) const;
1159     SDValue lowerUINT_TO_FP_vec(SDValue Op, SelectionDAG &DAG) const;
1160     SDValue LowerTRUNCATE(SDValue Op, SelectionDAG &DAG) const;
1161     SDValue LowerFP_TO_INT(SDValue Op, SelectionDAG &DAG) const;
1162     SDValue LowerToBT(SDValue And, ISD::CondCode CC, const SDLoc &dl,
1163                       SelectionDAG &DAG) const;
1164     SDValue LowerSETCC(SDValue Op, SelectionDAG &DAG) const;
1165     SDValue LowerSETCCE(SDValue Op, SelectionDAG &DAG) const;
1166     SDValue LowerSELECT(SDValue Op, SelectionDAG &DAG) const;
1167     SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) const;
1168     SDValue LowerJumpTable(SDValue Op, SelectionDAG &DAG) const;
1169     SDValue LowerDYNAMIC_STACKALLOC(SDValue Op, SelectionDAG &DAG) const;
1170     SDValue LowerVASTART(SDValue Op, SelectionDAG &DAG) const;
1171     SDValue LowerVAARG(SDValue Op, SelectionDAG &DAG) const;
1172     SDValue LowerRETURNADDR(SDValue Op, SelectionDAG &DAG) const;
1173     SDValue LowerADDROFRETURNADDR(SDValue Op, SelectionDAG &DAG) const;
1174     SDValue LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const;
1175     SDValue LowerFRAME_TO_ARGS_OFFSET(SDValue Op, SelectionDAG &DAG) const;
1176     SDValue LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const;
1177     SDValue lowerEH_SJLJ_SETJMP(SDValue Op, SelectionDAG &DAG) const;
1178     SDValue lowerEH_SJLJ_LONGJMP(SDValue Op, SelectionDAG &DAG) const;
1179     SDValue lowerEH_SJLJ_SETUP_DISPATCH(SDValue Op, SelectionDAG &DAG) const;
1180     SDValue LowerINIT_TRAMPOLINE(SDValue Op, SelectionDAG &DAG) const;
1181     SDValue LowerFLT_ROUNDS_(SDValue Op, SelectionDAG &DAG) const;
1182     SDValue LowerWin64_i128OP(SDValue Op, SelectionDAG &DAG) const;
1183     SDValue LowerGC_TRANSITION_START(SDValue Op, SelectionDAG &DAG) const;
1184     SDValue LowerGC_TRANSITION_END(SDValue Op, SelectionDAG &DAG) const;
1185
1186     SDValue
1187     LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
1188                          const SmallVectorImpl<ISD::InputArg> &Ins,
1189                          const SDLoc &dl, SelectionDAG &DAG,
1190                          SmallVectorImpl<SDValue> &InVals) const override;
1191     SDValue LowerCall(CallLoweringInfo &CLI,
1192                       SmallVectorImpl<SDValue> &InVals) const override;
1193
1194     SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool isVarArg,
1195                         const SmallVectorImpl<ISD::OutputArg> &Outs,
1196                         const SmallVectorImpl<SDValue> &OutVals,
1197                         const SDLoc &dl, SelectionDAG &DAG) const override;
1198
1199     bool supportSplitCSR(MachineFunction *MF) const override {
1200       return MF->getFunction()->getCallingConv() == CallingConv::CXX_FAST_TLS &&
1201           MF->getFunction()->hasFnAttribute(Attribute::NoUnwind);
1202     }
1203     void initializeSplitCSR(MachineBasicBlock *Entry) const override;
1204     void insertCopiesSplitCSR(
1205       MachineBasicBlock *Entry,
1206       const SmallVectorImpl<MachineBasicBlock *> &Exits) const override;
1207
1208     bool isUsedByReturnOnly(SDNode *N, SDValue &Chain) const override;
1209
1210     bool mayBeEmittedAsTailCall(const CallInst *CI) const override;
1211
1212     EVT getTypeForExtReturn(LLVMContext &Context, EVT VT,
1213                             ISD::NodeType ExtendKind) const override;
1214
1215     bool CanLowerReturn(CallingConv::ID CallConv, MachineFunction &MF,
1216                         bool isVarArg,
1217                         const SmallVectorImpl<ISD::OutputArg> &Outs,
1218                         LLVMContext &Context) const override;
1219
1220     const MCPhysReg *getScratchRegisters(CallingConv::ID CC) const override;
1221
1222     TargetLoweringBase::AtomicExpansionKind
1223     shouldExpandAtomicLoadInIR(LoadInst *SI) const override;
1224     bool shouldExpandAtomicStoreInIR(StoreInst *SI) const override;
1225     TargetLoweringBase::AtomicExpansionKind
1226     shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const override;
1227
1228     LoadInst *
1229     lowerIdempotentRMWIntoFencedLoad(AtomicRMWInst *AI) const override;
1230
1231     bool needsCmpXchgNb(Type *MemType) const;
1232
1233     void SetupEntryBlockForSjLj(MachineInstr &MI, MachineBasicBlock *MBB,
1234                                 MachineBasicBlock *DispatchBB, int FI) const;
1235
1236     // Utility function to emit the low-level va_arg code for X86-64.
1237     MachineBasicBlock *
1238     EmitVAARG64WithCustomInserter(MachineInstr &MI,
1239                                   MachineBasicBlock *MBB) const;
1240
1241     /// Utility function to emit the xmm reg save portion of va_start.
1242     MachineBasicBlock *
1243     EmitVAStartSaveXMMRegsWithCustomInserter(MachineInstr &BInstr,
1244                                              MachineBasicBlock *BB) const;
1245
1246     MachineBasicBlock *EmitLoweredSelect(MachineInstr &I,
1247                                          MachineBasicBlock *BB) const;
1248
1249     MachineBasicBlock *EmitLoweredAtomicFP(MachineInstr &I,
1250                                            MachineBasicBlock *BB) const;
1251
1252     MachineBasicBlock *EmitLoweredCatchRet(MachineInstr &MI,
1253                                            MachineBasicBlock *BB) const;
1254
1255     MachineBasicBlock *EmitLoweredCatchPad(MachineInstr &MI,
1256                                            MachineBasicBlock *BB) const;
1257
1258     MachineBasicBlock *EmitLoweredSegAlloca(MachineInstr &MI,
1259                                             MachineBasicBlock *BB) const;
1260
1261     MachineBasicBlock *EmitLoweredTLSAddr(MachineInstr &MI,
1262                                           MachineBasicBlock *BB) const;
1263
1264     MachineBasicBlock *EmitLoweredTLSCall(MachineInstr &MI,
1265                                           MachineBasicBlock *BB) const;
1266
1267     MachineBasicBlock *emitEHSjLjSetJmp(MachineInstr &MI,
1268                                         MachineBasicBlock *MBB) const;
1269
1270     MachineBasicBlock *emitEHSjLjLongJmp(MachineInstr &MI,
1271                                          MachineBasicBlock *MBB) const;
1272
1273     MachineBasicBlock *emitFMA3Instr(MachineInstr &MI,
1274                                      MachineBasicBlock *MBB) const;
1275
1276     MachineBasicBlock *EmitSjLjDispatchBlock(MachineInstr &MI,
1277                                              MachineBasicBlock *MBB) const;
1278
1279     /// Emit nodes that will be selected as "test Op0,Op0", or something
1280     /// equivalent, for use with the given x86 condition code.
1281     SDValue EmitTest(SDValue Op0, unsigned X86CC, const SDLoc &dl,
1282                      SelectionDAG &DAG) const;
1283
1284     /// Emit nodes that will be selected as "cmp Op0,Op1", or something
1285     /// equivalent, for use with the given x86 condition code.
1286     SDValue EmitCmp(SDValue Op0, SDValue Op1, unsigned X86CC, const SDLoc &dl,
1287                     SelectionDAG &DAG) const;
1288
1289     /// Convert a comparison if required by the subtarget.
1290     SDValue ConvertCmpIfNecessary(SDValue Cmp, SelectionDAG &DAG) const;
1291
1292     /// Check if replacement of SQRT with RSQRT should be disabled.
1293     bool isFsqrtCheap(SDValue Operand, SelectionDAG &DAG) const override;
1294
1295     /// Use rsqrt* to speed up sqrt calculations.
1296     SDValue getSqrtEstimate(SDValue Operand, SelectionDAG &DAG, int Enabled,
1297                             int &RefinementSteps, bool &UseOneConstNR,
1298                             bool Reciprocal) const override;
1299
1300     /// Use rcp* to speed up fdiv calculations.
1301     SDValue getRecipEstimate(SDValue Operand, SelectionDAG &DAG, int Enabled,
1302                              int &RefinementSteps) const override;
1303
1304     /// Reassociate floating point divisions into multiply by reciprocal.
1305     unsigned combineRepeatedFPDivisors() const override;
1306   };
1307
1308   namespace X86 {
1309     FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
1310                              const TargetLibraryInfo *libInfo);
1311   } // end namespace X86
1312
1313   // Base class for all X86 non-masked store operations.
1314   class X86StoreSDNode : public MemSDNode {
1315   public:
1316     X86StoreSDNode(unsigned Opcode, unsigned Order, const DebugLoc &dl,
1317                    SDVTList VTs, EVT MemVT,
1318                    MachineMemOperand *MMO)
1319       :MemSDNode(Opcode, Order, dl, VTs, MemVT, MMO) {}
1320     const SDValue &getValue() const { return getOperand(1); }
1321     const SDValue &getBasePtr() const { return getOperand(2); }
1322
1323     static bool classof(const SDNode *N) {
1324       return N->getOpcode() == X86ISD::VTRUNCSTORES ||
1325         N->getOpcode() == X86ISD::VTRUNCSTOREUS;
1326     }
1327   };
1328
1329   // Base class for all X86 masked store operations.
1330   // The class has the same order of operands as MaskedStoreSDNode for
1331   // convenience.
1332   class X86MaskedStoreSDNode : public MemSDNode {
1333   public:
1334     X86MaskedStoreSDNode(unsigned Opcode, unsigned Order,
1335                          const DebugLoc &dl, SDVTList VTs, EVT MemVT,
1336                          MachineMemOperand *MMO)
1337       : MemSDNode(Opcode, Order, dl, VTs, MemVT, MMO) {}
1338
1339     const SDValue &getBasePtr() const { return getOperand(1); }
1340     const SDValue &getMask()    const { return getOperand(2); }
1341     const SDValue &getValue()   const { return getOperand(3); }
1342
1343     static bool classof(const SDNode *N) {
1344       return N->getOpcode() == X86ISD::VMTRUNCSTORES ||
1345         N->getOpcode() == X86ISD::VMTRUNCSTOREUS;
1346     }
1347   };
1348
1349   // X86 Truncating Store with Signed saturation.
1350   class TruncSStoreSDNode : public X86StoreSDNode {
1351   public:
1352     TruncSStoreSDNode(unsigned Order, const DebugLoc &dl,
1353                         SDVTList VTs, EVT MemVT, MachineMemOperand *MMO)
1354       : X86StoreSDNode(X86ISD::VTRUNCSTORES, Order, dl, VTs, MemVT, MMO) {}
1355
1356     static bool classof(const SDNode *N) {
1357       return N->getOpcode() == X86ISD::VTRUNCSTORES;
1358     }
1359   };
1360
1361   // X86 Truncating Store with Unsigned saturation.
1362   class TruncUSStoreSDNode : public X86StoreSDNode {
1363   public:
1364     TruncUSStoreSDNode(unsigned Order, const DebugLoc &dl,
1365                       SDVTList VTs, EVT MemVT, MachineMemOperand *MMO)
1366       : X86StoreSDNode(X86ISD::VTRUNCSTOREUS, Order, dl, VTs, MemVT, MMO) {}
1367
1368     static bool classof(const SDNode *N) {
1369       return N->getOpcode() == X86ISD::VTRUNCSTOREUS;
1370     }
1371   };
1372
1373   // X86 Truncating Masked Store with Signed saturation.
1374   class MaskedTruncSStoreSDNode : public X86MaskedStoreSDNode {
1375   public:
1376     MaskedTruncSStoreSDNode(unsigned Order,
1377                          const DebugLoc &dl, SDVTList VTs, EVT MemVT,
1378                          MachineMemOperand *MMO)
1379       : X86MaskedStoreSDNode(X86ISD::VMTRUNCSTORES, Order, dl, VTs, MemVT, MMO) {}
1380
1381     static bool classof(const SDNode *N) {
1382       return N->getOpcode() == X86ISD::VMTRUNCSTORES;
1383     }
1384   };
1385
1386   // X86 Truncating Masked Store with Unsigned saturation.
1387   class MaskedTruncUSStoreSDNode : public X86MaskedStoreSDNode {
1388   public:
1389     MaskedTruncUSStoreSDNode(unsigned Order,
1390                             const DebugLoc &dl, SDVTList VTs, EVT MemVT,
1391                             MachineMemOperand *MMO)
1392       : X86MaskedStoreSDNode(X86ISD::VMTRUNCSTOREUS, Order, dl, VTs, MemVT, MMO) {}
1393
1394     static bool classof(const SDNode *N) {
1395       return N->getOpcode() == X86ISD::VMTRUNCSTOREUS;
1396     }
1397   };
1398
1399 } // end namespace llvm
1400
1401 #endif // LLVM_LIB_TARGET_X86_X86ISELLOWERING_H