Movatterモバイル変換


[0]ホーム

URL:


LLVM 20.0.0git
RISCVISelLowering.h
Go to the documentation of this file.
1//===-- RISCVISelLowering.h - RISC-V DAG Lowering Interface -----*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines the interfaces that RISC-V uses to lower LLVM code into a
10// selection DAG.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_RISCV_RISCVISELLOWERING_H
15#define LLVM_LIB_TARGET_RISCV_RISCVISELLOWERING_H
16
17#include "RISCV.h"
18#include "RISCVCallingConv.h"
19#include "llvm/CodeGen/CallingConvLower.h"
20#include "llvm/CodeGen/SelectionDAG.h"
21#include "llvm/CodeGen/TargetLowering.h"
22#include <optional>
23
24namespacellvm {
25classInstructionCost;
26classRISCVSubtarget;
27structRISCVRegisterInfo;
28
29namespaceRISCVISD {
30// clang-format off
31enumNodeType :unsigned {
32FIRST_NUMBER =ISD::BUILTIN_OP_END,
33RET_GLUE,
34SRET_GLUE,
35MRET_GLUE,
36CALL,
37TAIL,
38 /// Select with condition operator - This selects between a true value and
39 /// a false value (ops #3 and #4) based on the boolean result of comparing
40 /// the lhs and rhs (ops #0 and #1) of a conditional expression with the
41 /// condition code in op #2, a XLenVT constant from the ISD::CondCode enum.
42 /// The lhs and rhs are XLenVT integers. The true and false values can be
43 /// integer or floating point.
44SELECT_CC,
45BR_CC,
46
47 /// Turn a pair of `i<xlen>`s into an even-odd register pair (`untyped`).
48 /// - Output: `untyped` even-odd register pair
49 /// - Input 0: `i<xlen>` low-order bits, for even register.
50 /// - Input 1: `i<xlen>` high-order bits, for odd register.
51BuildGPRPair,
52
53 /// Turn an even-odd register pair (`untyped`) into a pair of `i<xlen>`s.
54 /// - Output 0: `i<xlen>` low-order bits, from even register.
55 /// - Output 1: `i<xlen>` high-order bits, from odd register.
56 /// - Input: `untyped` even-odd register pair
57SplitGPRPair,
58
59 /// Turns a pair of `i32`s into an `f64`. Needed for rv32d/ilp32.
60 /// - Output: `f64`.
61 /// - Input 0: low-order bits (31-0) (as `i32`), for even register.
62 /// - Input 1: high-order bits (63-32) (as `i32`), for odd register.
63BuildPairF64,
64
65 /// Turns a `f64` into a pair of `i32`s. Needed for rv32d/ilp32.
66 /// - Output 0: low-order bits (31-0) (as `i32`), from even register.
67 /// - Output 1: high-order bits (63-32) (as `i32`), from odd register.
68 /// - Input 0: `f64`.
69SplitF64,
70
71// Add the Lo 12 bits from an address. Selected to ADDI.
72ADD_LO,
73// Get the Hi 20 bits from an address. Selected to LUI.
74HI,
75
76// Represents an AUIPC+ADDI pair. Selected to PseudoLLA.
77LLA,
78
79// Selected as PseudoAddTPRel. Used to emit a TP-relative relocation.
80ADD_TPREL,
81
82// Multiply high for signedxunsigned.
83MULHSU,
84
85// Represents (ADD (SHL a, b), c) with the arguments appearing in the order
86// a, b, c. 'b' must be a constant. Maps to sh1add/sh2add/sh3add with zba
87// or addsl with XTheadBa.
88SHL_ADD,
89
90// RV64I shifts, directly matching the semantics of the named RISC-V
91// instructions.
92SLLW,
93SRAW,
94SRLW,
95// 32-bit operations from RV64M that can't be simply matched with a pattern
96// at instruction selection time. These have undefined behavior for division
97// by 0 or overflow (divw) like their target independent counterparts.
98DIVW,
99DIVUW,
100REMUW,
101// RV64IB rotates, directly matching the semantics of the named RISC-V
102// instructions.
103ROLW,
104RORW,
105// RV64IZbb bit counting instructions directly matching the semantics of the
106// named RISC-V instructions.
107CLZW,
108CTZW,
109
110// RV64IZbb absolute value for i32. Expanded to (max (negw X), X) during isel.
111ABSW,
112
113// FPR<->GPR transfer operations when the FPR is smaller than XLEN, needed as
114// XLEN is the only legal integer width.
115//
116// FMV_H_X matches the semantics of the FMV.H.X.
117// FMV_X_ANYEXTH is similar to FMV.X.H but has an any-extended result.
118// FMV_X_SIGNEXTH is similar to FMV.X.H and has a sign-extended result.
119// FMV_W_X_RV64 matches the semantics of the FMV.W.X.
120// FMV_X_ANYEXTW_RV64 is similar to FMV.X.W but has an any-extended result.
121//
122// This is a more convenient semantic for producing dagcombines that remove
123// unnecessary GPR->FPR->GPR moves.
124FMV_H_X,
125FMV_X_ANYEXTH,
126FMV_X_SIGNEXTH,
127FMV_W_X_RV64,
128FMV_X_ANYEXTW_RV64,
129// FP to XLen int conversions. Corresponds to fcvt.l(u).s/d/h on RV64 and
130// fcvt.w(u).s/d/h on RV32. Unlike FP_TO_S/UINT these saturate out of
131// range inputs. These are used for FP_TO_S/UINT_SAT lowering. Rounding mode
132// is passed as a TargetConstant operand using the RISCVFPRndMode enum.
133FCVT_X,
134FCVT_XU,
135// FP to 32 bit int conversions for RV64. These are used to keep track of the
136// result being sign extended to 64 bit. These saturate out of range inputs.
137// Used for FP_TO_S/UINT and FP_TO_S/UINT_SAT lowering. Rounding mode
138// is passed as a TargetConstant operand using the RISCVFPRndMode enum.
139FCVT_W_RV64,
140FCVT_WU_RV64,
141
142// Rounds an FP value to its corresponding integer in the same FP format.
143// First operand is the value to round, the second operand is the largest
144// integer that can be represented exactly in the FP format. This will be
145// expanded into multiple instructions and basic blocks with a custom
146// inserter.
147FROUND,
148
149FCLASS,
150FSGNJX,
151
152// Floating point fmax and fmin matching the RISC-V instruction semantics.
153FMAX,FMIN,
154
155// Zfa fli instruction for constant materialization.
156FLI,
157
158// A read of the 64-bit counter CSR on a 32-bit target (returns (Lo, Hi)).
159// It takes a chain operand and another two target constant operands (the
160// CSR numbers of the low and high parts of the counter).
161READ_COUNTER_WIDE,
162
163// brev8, orc.b, zip, and unzip from Zbb and Zbkb. All operands are i32 or
164// XLenVT.
165BREV8,
166ORC_B,
167ZIP,
168UNZIP,
169
170// Scalar cryptography
171CLMUL,CLMULH,CLMULR,
172SHA256SIG0,SHA256SIG1,SHA256SUM0,SHA256SUM1,
173SM4KS,SM4ED,
174SM3P0,SM3P1,
175
176// May-Be-Operations
177MOPR,MOPRR,
178
179// Vector Extension
180FIRST_VL_VECTOR_OP,
181// VMV_V_V_VL matches the semantics of vmv.v.v but includes an extra operand
182// for the VL value to be used for the operation. The first operand is
183// passthru operand.
184VMV_V_V_VL =FIRST_VL_VECTOR_OP,
185// VMV_V_X_VL matches the semantics of vmv.v.x but includes an extra operand
186// for the VL value to be used for the operation. The first operand is
187// passthru operand.
188VMV_V_X_VL,
189// VFMV_V_F_VL matches the semantics of vfmv.v.f but includes an extra operand
190// for the VL value to be used for the operation. The first operand is
191// passthru operand.
192VFMV_V_F_VL,
193// VMV_X_S matches the semantics of vmv.x.s. The result is always XLenVT sign
194// extended from the vector element size.
195VMV_X_S,
196// VMV_S_X_VL matches the semantics of vmv.s.x. It carries a VL operand.
197VMV_S_X_VL,
198// VFMV_S_F_VL matches the semantics of vfmv.s.f. It carries a VL operand.
199VFMV_S_F_VL,
200// Splats an 64-bit value that has been split into two i32 parts. This is
201// expanded late to two scalar stores and a stride 0 vector load.
202// The first operand is passthru operand.
203SPLAT_VECTOR_SPLIT_I64_VL,
204// Truncates a RVV integer vector by one power-of-two. Carries both an extra
205// mask and VL operand.
206TRUNCATE_VECTOR_VL,
207// Truncates a RVV integer vector by one power-of-two. If the value doesn't
208// fit in the destination type, the result is saturated. These correspond to
209// vnclip and vnclipu with a shift of 0. Carries both an extra mask and VL
210// operand.
211TRUNCATE_VECTOR_VL_SSAT,
212TRUNCATE_VECTOR_VL_USAT,
213// Matches the semantics of vslideup/vslidedown. The first operand is the
214// pass-thru operand, the second is the source vector, the third is the XLenVT
215// index (either constant or non-constant), the fourth is the mask, the fifth
216// is the VL and the sixth is the policy.
217VSLIDEUP_VL,
218VSLIDEDOWN_VL,
219// Matches the semantics of vslide1up/slide1down. The first operand is
220// passthru operand, the second is source vector, third is the XLenVT scalar
221// value. The fourth and fifth operands are the mask and VL operands.
222VSLIDE1UP_VL,
223VSLIDE1DOWN_VL,
224// Matches the semantics of vfslide1up/vfslide1down. The first operand is
225// passthru operand, the second is source vector, third is a scalar value
226// whose type matches the element type of the vectors. The fourth and fifth
227// operands are the mask and VL operands.
228VFSLIDE1UP_VL,
229VFSLIDE1DOWN_VL,
230// Matches the semantics of the vid.v instruction, with a mask and VL
231// operand.
232VID_VL,
233// Matches the semantics of the vfcnvt.rod function (Convert double-width
234// float to single-width float, rounding towards odd). Takes a double-width
235// float vector and produces a single-width float vector. Also has a mask and
236// VL operand.
237VFNCVT_ROD_VL,
238// These nodes match the semantics of the corresponding RVV vector reduction
239// instructions. They produce a vector result which is the reduction
240// performed over the second vector operand plus the first element of the
241// third vector operand. The first operand is the pass-thru operand. The
242// second operand is an unconstrained vector type, and the result, first, and
243// third operand's types are expected to be the corresponding full-width
244// LMUL=1 type for the second operand:
245// nxv8i8 = vecreduce_add nxv8i8, nxv32i8, nxv8i8
246// nxv2i32 = vecreduce_add nxv2i32, nxv8i32, nxv2i32
247// The different in types does introduce extra vsetvli instructions but
248// similarly it reduces the number of registers consumed per reduction.
249// Also has a mask and VL operand.
250VECREDUCE_ADD_VL,
251VECREDUCE_UMAX_VL,
252VECREDUCE_SMAX_VL,
253VECREDUCE_UMIN_VL,
254VECREDUCE_SMIN_VL,
255VECREDUCE_AND_VL,
256VECREDUCE_OR_VL,
257VECREDUCE_XOR_VL,
258VECREDUCE_FADD_VL,
259VECREDUCE_SEQ_FADD_VL,
260VECREDUCE_FMIN_VL,
261VECREDUCE_FMAX_VL,
262
263// Vector binary ops with a passthru as a third operand, a mask as a fourth
264// operand, and VL as a fifth operand.
265ADD_VL,
266AND_VL,
267MUL_VL,
268OR_VL,
269SDIV_VL,
270SHL_VL,
271SREM_VL,
272SRA_VL,
273SRL_VL,
274ROTL_VL,
275ROTR_VL,
276SUB_VL,
277UDIV_VL,
278UREM_VL,
279XOR_VL,
280SMIN_VL,
281SMAX_VL,
282UMIN_VL,
283UMAX_VL,
284
285BITREVERSE_VL,
286BSWAP_VL,
287CTLZ_VL,
288CTTZ_VL,
289CTPOP_VL,
290
291SADDSAT_VL,
292UADDSAT_VL,
293SSUBSAT_VL,
294USUBSAT_VL,
295
296// Averaging adds of signed integers.
297AVGFLOORS_VL,
298// Averaging adds of unsigned integers.
299AVGFLOORU_VL,
300// Rounding averaging adds of signed integers.
301AVGCEILS_VL,
302// Rounding averaging adds of unsigned integers.
303AVGCEILU_VL,
304
305MULHS_VL,
306MULHU_VL,
307FADD_VL,
308FSUB_VL,
309FMUL_VL,
310FDIV_VL,
311VFMIN_VL,
312VFMAX_VL,
313
314// Vector unary ops with a mask as a second operand and VL as a third operand.
315FNEG_VL,
316FABS_VL,
317FSQRT_VL,
318FCLASS_VL,
319FCOPYSIGN_VL,// Has a passthru operand
320VFCVT_RTZ_X_F_VL,
321VFCVT_RTZ_XU_F_VL,
322VFROUND_NOEXCEPT_VL,
323VFCVT_RM_X_F_VL,// Has a rounding mode operand.
324VFCVT_RM_XU_F_VL,// Has a rounding mode operand.
325SINT_TO_FP_VL,
326UINT_TO_FP_VL,
327VFCVT_RM_F_X_VL,// Has a rounding mode operand.
328VFCVT_RM_F_XU_VL,// Has a rounding mode operand.
329FP_ROUND_VL,
330FP_EXTEND_VL,
331
332// Vector FMA ops with a mask as a fourth operand and VL as a fifth operand.
333VFMADD_VL,
334VFNMADD_VL,
335VFMSUB_VL,
336VFNMSUB_VL,
337
338// Vector widening FMA ops with a mask as a fourth operand and VL as a fifth
339// operand.
340VFWMADD_VL,
341VFWNMADD_VL,
342VFWMSUB_VL,
343VFWNMSUB_VL,
344
345// Widening instructions with a passthru value a third operand, a mask as a
346// fourth operand, and VL as a fifth operand.
347VWMUL_VL,
348VWMULU_VL,
349VWMULSU_VL,
350VWADD_VL,
351VWADDU_VL,
352VWSUB_VL,
353VWSUBU_VL,
354VWADD_W_VL,
355VWADDU_W_VL,
356VWSUB_W_VL,
357VWSUBU_W_VL,
358VWSLL_VL,
359
360VFWMUL_VL,
361VFWADD_VL,
362VFWSUB_VL,
363VFWADD_W_VL,
364VFWSUB_W_VL,
365
366// Widening ternary operations with a mask as the fourth operand and VL as the
367// fifth operand.
368VWMACC_VL,
369VWMACCU_VL,
370VWMACCSU_VL,
371
372// Vector compare producing a mask. Fourth operand is input mask. Fifth
373// operand is VL.
374SETCC_VL,
375
376// General vmerge node with mask, true, false, passthru, and vl operands.
377// Tail agnostic vselect can be implemented by setting passthru to undef.
378VMERGE_VL,
379
380// Mask binary operators.
381VMAND_VL,
382VMOR_VL,
383VMXOR_VL,
384
385// Set mask vector to all zeros or ones.
386VMCLR_VL,
387VMSET_VL,
388
389// Matches the semantics of vrgather.vx and vrgather.vv with extra operands
390// for passthru and VL. Operands are (src, index, mask, passthru, vl).
391VRGATHER_VX_VL,
392VRGATHER_VV_VL,
393VRGATHEREI16_VV_VL,
394
395// Vector sign/zero extend with additional mask & VL operands.
396VSEXT_VL,
397VZEXT_VL,
398
399// vcpop.m with additional mask and VL operands.
400VCPOP_VL,
401
402// vfirst.m with additional mask and VL operands.
403VFIRST_VL,
404
405LAST_VL_VECTOR_OP =VFIRST_VL,
406
407// Read VLENB CSR
408READ_VLENB,
409// Reads value of CSR.
410// The first operand is a chain pointer. The second specifies address of the
411// required CSR. Two results are produced, the read value and the new chain
412// pointer.
413READ_CSR,
414// Write value to CSR.
415// The first operand is a chain pointer, the second specifies address of the
416// required CSR and the third is the value to write. The result is the new
417// chain pointer.
418WRITE_CSR,
419// Read and write value of CSR.
420// The first operand is a chain pointer, the second specifies address of the
421// required CSR and the third is the value to write. Two results are produced,
422// the value read before the modification and the new chain pointer.
423SWAP_CSR,
424
425// Branchless select operations, matching the semantics of the instructions
426// defined in Zicond or XVentanaCondOps.
427CZERO_EQZ,// vt.maskc for XVentanaCondOps.
428CZERO_NEZ,// vt.maskcn for XVentanaCondOps.
429
430// Software guarded BRIND node. Operand 0 is the chain operand and
431// operand 1 is the target address.
432SW_GUARDED_BRIND,
433// Software guarded calls for large code model
434SW_GUARDED_CALL,
435SW_GUARDED_TAIL,
436
437SF_VC_XV_SE,
438SF_VC_IV_SE,
439SF_VC_VV_SE,
440SF_VC_FV_SE,
441SF_VC_XVV_SE,
442SF_VC_IVV_SE,
443SF_VC_VVV_SE,
444SF_VC_FVV_SE,
445SF_VC_XVW_SE,
446SF_VC_IVW_SE,
447SF_VC_VVW_SE,
448SF_VC_FVW_SE,
449SF_VC_V_X_SE,
450SF_VC_V_I_SE,
451SF_VC_V_XV_SE,
452SF_VC_V_IV_SE,
453SF_VC_V_VV_SE,
454SF_VC_V_FV_SE,
455SF_VC_V_XVV_SE,
456SF_VC_V_IVV_SE,
457SF_VC_V_VVV_SE,
458SF_VC_V_FVV_SE,
459SF_VC_V_XVW_SE,
460SF_VC_V_IVW_SE,
461SF_VC_V_VVW_SE,
462SF_VC_V_FVW_SE,
463
464// To avoid stack clash, allocation is performed by block and each block is
465// probed.
466PROBED_ALLOCA,
467
468// RISC-V vector tuple type version of INSERT_SUBVECTOR/EXTRACT_SUBVECTOR.
469TUPLE_INSERT,
470TUPLE_EXTRACT,
471
472// FP to 32 bit int conversions for RV64. These are used to keep track of the
473// result being sign extended to 64 bit. These saturate out of range inputs.
474FIRST_STRICTFP_OPCODE,
475STRICT_FCVT_W_RV64 =FIRST_STRICTFP_OPCODE,
476STRICT_FCVT_WU_RV64,
477STRICT_FADD_VL,
478STRICT_FSUB_VL,
479STRICT_FMUL_VL,
480STRICT_FDIV_VL,
481STRICT_FSQRT_VL,
482STRICT_VFMADD_VL,
483STRICT_VFNMADD_VL,
484STRICT_VFMSUB_VL,
485STRICT_VFNMSUB_VL,
486STRICT_FP_ROUND_VL,
487STRICT_FP_EXTEND_VL,
488STRICT_VFNCVT_ROD_VL,
489STRICT_SINT_TO_FP_VL,
490STRICT_UINT_TO_FP_VL,
491STRICT_VFCVT_RM_X_F_VL,
492STRICT_VFCVT_RTZ_X_F_VL,
493STRICT_VFCVT_RTZ_XU_F_VL,
494STRICT_FSETCC_VL,
495STRICT_FSETCCS_VL,
496STRICT_VFROUND_NOEXCEPT_VL,
497LAST_STRICTFP_OPCODE =STRICT_VFROUND_NOEXCEPT_VL,
498
499FIRST_MEMORY_OPCODE,
500TH_LWD =FIRST_MEMORY_OPCODE,
501TH_LWUD,
502TH_LDD,
503TH_SWD,
504TH_SDD,
505LAST_MEMORY_OPCODE =TH_SDD,
506};
507// clang-format on
508}// namespace RISCVISD
509
510classRISCVTargetLowering :publicTargetLowering {
511constRISCVSubtarget &Subtarget;
512
513public:
514explicitRISCVTargetLowering(constTargetMachine &TM,
515constRISCVSubtarget &STI);
516
517constRISCVSubtarget &getSubtarget() const{return Subtarget; }
518
519boolgetTgtMemIntrinsic(IntrinsicInfo &Info,constCallInst &I,
520MachineFunction &MF,
521unsigned Intrinsic)const override;
522boolisLegalAddressingMode(constDataLayout &DL,constAddrMode &AM,Type *Ty,
523unsigned AS,
524Instruction *I =nullptr)const override;
525boolisLegalICmpImmediate(int64_t Imm)const override;
526boolisLegalAddImmediate(int64_t Imm)const override;
527boolisTruncateFree(Type *SrcTy,Type *DstTy)const override;
528boolisTruncateFree(EVT SrcVT,EVT DstVT)const override;
529boolisTruncateFree(SDValue Val,EVT VT2)const override;
530boolisZExtFree(SDValue Val,EVT VT2)const override;
531boolisSExtCheaperThanZExt(EVT SrcVT,EVT DstVT)const override;
532boolsignExtendConstant(constConstantInt *CI)const override;
533boolisCheapToSpeculateCttz(Type *Ty)const override;
534boolisCheapToSpeculateCtlz(Type *Ty)const override;
535boolisMaskAndCmp0FoldingBeneficial(constInstruction &AndI)const override;
536boolhasAndNotCompare(SDValueY)const override;
537boolhasBitTest(SDValueX,SDValueY)const override;
538boolshouldProduceAndByConstByHoistingConstFromShiftsLHSOfAnd(
539SDValueX,ConstantSDNode *XC,ConstantSDNode *CC,SDValueY,
540unsigned OldShiftOpcode,unsigned NewShiftOpcode,
541SelectionDAG &DAG)const override;
542boolshouldScalarizeBinop(SDValue VecOp)const override;
543boolisOffsetFoldingLegal(constGlobalAddressSDNode *GA)const override;
544intgetLegalZfaFPImm(constAPFloat &Imm,EVT VT)const;
545boolisFPImmLegal(constAPFloat &Imm,EVT VT,
546bool ForCodeSize)const override;
547boolisExtractSubvectorCheap(EVT ResVT,EVT SrcVT,
548unsignedIndex)const override;
549
550boolisIntDivCheap(EVT VT,AttributeList Attr)const override;
551
552boolpreferScalarizeSplat(SDNode *N)const override;
553
554boolsoftPromoteHalfType() const override{returntrue; }
555
556 /// Return the register type for a given MVT, ensuring vectors are treated
557 /// as a series of gpr sized integers.
558MVTgetRegisterTypeForCallingConv(LLVMContext &Context,CallingConv::IDCC,
559EVT VT)const override;
560
561 /// Return the number of registers for a given MVT, for inline assembly
562unsigned
563getNumRegisters(LLVMContext &Context,EVT VT,
564 std::optional<MVT> RegisterVT = std::nullopt)const override;
565
566 /// Return the number of registers for a given MVT, ensuring vectors are
567 /// treated as a series of gpr sized integers.
568unsignedgetNumRegistersForCallingConv(LLVMContext &Context,
569CallingConv::IDCC,
570EVT VT)const override;
571
572unsignedgetVectorTypeBreakdownForCallingConv(LLVMContext &Context,
573CallingConv::IDCC,EVT VT,
574EVT &IntermediateVT,
575unsigned &NumIntermediates,
576MVT &RegisterVT)const override;
577
578boolshouldFoldSelectWithIdentityConstant(unsigned BinOpcode,
579EVT VT)const override;
580
581 /// Return true if the given shuffle mask can be codegen'd directly, or if it
582 /// should be stack expanded.
583boolisShuffleMaskLegal(ArrayRef<int> M,EVT VT)const override;
584
585boolisMultiStoresCheaperThanBitsMerge(EVT LTy,EVT HTy) const override{
586// If the pair to store is a mixture of float and int values, we will
587// save two bitwise instructions and one float-to-int instruction and
588// increase one store instruction. There is potentially a more
589// significant benefit because it avoids the float->int domain switch
590// for input value. So It is more likely a win.
591if ((LTy.isFloatingPoint() && HTy.isInteger()) ||
592 (LTy.isInteger() && HTy.isFloatingPoint()))
593returntrue;
594// If the pair only contains int values, we will save two bitwise
595// instructions and increase one store instruction (costing one more
596// store buffer). Since the benefit is more blurred we leave such a pair
597// out until we get testcase to prove it is a win.
598returnfalse;
599 }
600
601bool
602shouldExpandBuildVectorWithShuffles(EVT VT,
603unsigned DefinedValues)const override;
604
605boolshouldExpandCttzElements(EVT VT)const override;
606
607 /// Return the cost of LMUL for linear operations.
608InstructionCostgetLMULCost(MVT VT)const;
609
610InstructionCostgetVRGatherVVCost(MVT VT)const;
611InstructionCostgetVRGatherVICost(MVT VT)const;
612InstructionCostgetVSlideVXCost(MVT VT)const;
613InstructionCostgetVSlideVICost(MVT VT)const;
614
615// Provide custom lowering hooks for some operations.
616SDValueLowerOperation(SDValueOp,SelectionDAG &DAG)const override;
617voidReplaceNodeResults(SDNode *N,SmallVectorImpl<SDValue> &Results,
618SelectionDAG &DAG)const override;
619
620SDValuePerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI)const override;
621
622booltargetShrinkDemandedConstant(SDValueOp,constAPInt &DemandedBits,
623constAPInt &DemandedElts,
624 TargetLoweringOpt &TLO)const override;
625
626voidcomputeKnownBitsForTargetNode(constSDValueOp,
627KnownBits &Known,
628constAPInt &DemandedElts,
629constSelectionDAG &DAG,
630unsignedDepth)const override;
631unsignedComputeNumSignBitsForTargetNode(SDValueOp,
632constAPInt &DemandedElts,
633constSelectionDAG &DAG,
634unsignedDepth)const override;
635
636boolcanCreateUndefOrPoisonForTargetNode(SDValueOp,
637constAPInt &DemandedElts,
638constSelectionDAG &DAG,
639boolPoisonOnly,bool ConsiderFlags,
640unsignedDepth)const override;
641
642constConstant *getTargetConstantFromLoad(LoadSDNode *LD)const override;
643
644// This method returns the name of a target specific DAG node.
645constchar *getTargetNodeName(unsigned Opcode)const override;
646
647MachineMemOperand::Flags
648getTargetMMOFlags(constInstruction &I)const override;
649
650MachineMemOperand::Flags
651getTargetMMOFlags(constMemSDNode &Node)const override;
652
653bool
654areTwoSDNodeTargetMMOFlagsMergeable(constMemSDNode &NodeX,
655constMemSDNode &NodeY)const override;
656
657ConstraintTypegetConstraintType(StringRef Constraint)const override;
658
659InlineAsm::ConstraintCode
660getInlineAsmMemConstraint(StringRef ConstraintCode)const override;
661
662 std::pair<unsigned, const TargetRegisterClass *>
663getRegForInlineAsmConstraint(constTargetRegisterInfo *TRI,
664StringRef Constraint,MVT VT)const override;
665
666voidLowerAsmOperandForConstraint(SDValueOp,StringRef Constraint,
667 std::vector<SDValue> &Ops,
668SelectionDAG &DAG)const override;
669
670MachineBasicBlock *
671EmitInstrWithCustomInserter(MachineInstr &MI,
672MachineBasicBlock *BB)const override;
673
674voidAdjustInstrPostInstrSelection(MachineInstr &MI,
675SDNode *Node)const override;
676
677EVTgetSetCCResultType(constDataLayout &DL,LLVMContext &Context,
678EVT VT)const override;
679
680boolshouldFormOverflowOp(unsigned Opcode,EVT VT,
681bool MathUsed) const override{
682if (VT == MVT::i8 || VT == MVT::i16)
683returnfalse;
684
685returnTargetLowering::shouldFormOverflowOp(Opcode, VT, MathUsed);
686 }
687
688boolstoreOfVectorConstantIsCheap(bool IsZero,EVT MemVT,unsigned NumElem,
689unsigned AddrSpace) const override{
690// If we can replace 4 or more scalar stores, there will be a reduction
691// in instructions even after we add a vector constant load.
692return NumElem >= 4;
693 }
694
695boolconvertSetCCLogicToBitwiseLogic(EVT VT) const override{
696return VT.isScalarInteger();
697 }
698boolconvertSelectOfConstantsToMath(EVT VT) const override{returntrue; }
699
700boolisCtpopFast(EVT VT)const override;
701
702unsignedgetCustomCtpopCost(EVT VT,ISD::CondCodeCond)const override;
703
704boolpreferZeroCompareBranch() const override{returntrue; }
705
706// Note that one specific case requires fence insertion for an
707// AtomicCmpXchgInst but is handled via the RISCVZacasABIFix pass rather
708// than this hook due to limitations in the interface here.
709boolshouldInsertFencesForAtomic(constInstruction *I)const override;
710
711Instruction *emitLeadingFence(IRBuilderBase &Builder,Instruction *Inst,
712AtomicOrdering Ord)const override;
713Instruction *emitTrailingFence(IRBuilderBase &Builder,Instruction *Inst,
714AtomicOrdering Ord)const override;
715
716boolisFMAFasterThanFMulAndFAdd(constMachineFunction &MF,
717EVT VT)const override;
718
719ISD::NodeTypegetExtendForAtomicOps() const override{
720returnISD::SIGN_EXTEND;
721 }
722
723ISD::NodeTypegetExtendForAtomicCmpSwapArg()const override;
724
725boolshouldTransformSignedTruncationCheck(EVT XVT,
726unsigned KeptBits)const override;
727
728TargetLowering::ShiftLegalizationStrategy
729preferredShiftLegalizationStrategy(SelectionDAG &DAG,SDNode *N,
730unsigned ExpansionFactor) const override{
731if (DAG.getMachineFunction().getFunction().hasMinSize())
732returnShiftLegalizationStrategy::LowerToLibcall;
733returnTargetLowering::preferredShiftLegalizationStrategy(DAG,N,
734 ExpansionFactor);
735 }
736
737boolisDesirableToCommuteWithShift(constSDNode *N,
738CombineLevel Level)const override;
739
740 /// If a physical register, this returns the register that receives the
741 /// exception address on entry to an EH pad.
742Register
743getExceptionPointerRegister(constConstant *PersonalityFn)const override;
744
745 /// If a physical register, this returns the register that receives the
746 /// exception typeid on entry to a landing pad.
747Register
748getExceptionSelectorRegister(constConstant *PersonalityFn)const override;
749
750boolshouldExtendTypeInLibCall(EVTType)const override;
751boolshouldSignExtendTypeInLibCall(Type *Ty,bool IsSigned)const override;
752
753 /// Returns the register with the specified architectural or ABI name. This
754 /// method is necessary to lower the llvm.read_register.* and
755 /// llvm.write_register.* intrinsics. Allocatable registers must be reserved
756 /// with the clang -ffixed-xX flag for access to be allowed.
757RegistergetRegisterByName(constchar *RegName,LLT VT,
758constMachineFunction &MF)const override;
759
760// Lower incoming arguments, copy physregs into vregs
761SDValueLowerFormalArguments(SDValue Chain,CallingConv::ID CallConv,
762bool IsVarArg,
763constSmallVectorImpl<ISD::InputArg> &Ins,
764constSDLoc &DL,SelectionDAG &DAG,
765SmallVectorImpl<SDValue> &InVals)const override;
766boolCanLowerReturn(CallingConv::ID CallConv,MachineFunction &MF,
767bool IsVarArg,
768constSmallVectorImpl<ISD::OutputArg> &Outs,
769LLVMContext &Context,constType *RetTy)const override;
770SDValueLowerReturn(SDValue Chain,CallingConv::ID CallConv,bool IsVarArg,
771constSmallVectorImpl<ISD::OutputArg> &Outs,
772constSmallVectorImpl<SDValue> &OutVals,constSDLoc &DL,
773SelectionDAG &DAG)const override;
774SDValueLowerCall(TargetLowering::CallLoweringInfo &CLI,
775SmallVectorImpl<SDValue> &InVals)const override;
776
777boolshouldConvertConstantLoadToIntImm(constAPInt &Imm,
778Type *Ty)const override;
779boolisUsedByReturnOnly(SDNode *N,SDValue &Chain)const override;
780boolmayBeEmittedAsTailCall(constCallInst *CI)const override;
781boolshouldConsiderGEPOffsetSplit() const override{returntrue; }
782
783booldecomposeMulByConstant(LLVMContext &Context,EVT VT,
784SDValueC)const override;
785
786boolisMulAddWithConstProfitable(SDValue AddNode,
787SDValue ConstNode)const override;
788
789TargetLowering::AtomicExpansionKind
790shouldExpandAtomicRMWInIR(AtomicRMWInst *AI)const override;
791Value *emitMaskedAtomicRMWIntrinsic(IRBuilderBase &Builder,AtomicRMWInst *AI,
792Value *AlignedAddr,Value *Incr,
793Value *Mask,Value *ShiftAmt,
794AtomicOrdering Ord)const override;
795TargetLowering::AtomicExpansionKind
796shouldExpandAtomicCmpXchgInIR(AtomicCmpXchgInst *CI)const override;
797Value *emitMaskedAtomicCmpXchgIntrinsic(IRBuilderBase &Builder,
798AtomicCmpXchgInst *CI,
799Value *AlignedAddr,Value *CmpVal,
800Value *NewVal,Value *Mask,
801AtomicOrdering Ord)const override;
802
803 /// Returns true if the target allows unaligned memory accesses of the
804 /// specified type.
805boolallowsMisalignedMemoryAccesses(
806EVT VT,unsigned AddrSpace = 0,Align Alignment =Align(1),
807MachineMemOperand::Flags Flags =MachineMemOperand::MONone,
808unsigned *Fast =nullptr)const override;
809
810EVTgetOptimalMemOpType(constMemOp &Op,
811constAttributeList &FuncAttributes)const override;
812
813boolsplitValueIntoRegisterParts(
814SelectionDAG & DAG,constSDLoc &DL,SDValue Val,SDValue *Parts,
815unsigned NumParts,MVT PartVT, std::optional<CallingConv::ID>CC)
816const override;
817
818SDValuejoinRegisterPartsIntoValue(
819SelectionDAG & DAG,constSDLoc &DL,constSDValue *Parts,
820unsigned NumParts,MVT PartVT,EVT ValueVT,
821 std::optional<CallingConv::ID>CC)const override;
822
823// Return the value of VLMax for the given vector type (i.e. SEW and LMUL)
824SDValuecomputeVLMax(MVT VecVT,constSDLoc &DL,SelectionDAG &DAG)const;
825
826staticRISCVII::VLMULgetLMUL(MVT VT);
827inlinestaticunsignedcomputeVLMAX(unsigned VectorBits,unsigned EltSize,
828unsigned MinSize) {
829// Original equation:
830// VLMAX = (VectorBits / EltSize) * LMUL
831// where LMUL = MinSize / RISCV::RVVBitsPerBlock
832// The following equations have been reordered to prevent loss of precision
833// when calculating fractional LMUL.
834return ((VectorBits / EltSize) * MinSize) /RISCV::RVVBitsPerBlock;
835 }
836
837// Return inclusive (low, high) bounds on the value of VLMAX for the
838// given scalable container type given known bounds on VLEN.
839static std::pair<unsigned, unsigned>
840computeVLMAXBounds(MVT ContainerVT,constRISCVSubtarget &Subtarget);
841
842staticunsignedgetRegClassIDForLMUL(RISCVII::VLMUL LMul);
843staticunsignedgetSubregIndexByMVT(MVT VT,unsignedIndex);
844staticunsignedgetRegClassIDForVecVT(MVT VT);
845static std::pair<unsigned, unsigned>
846decomposeSubvectorInsertExtractToSubRegs(MVT VecVT,MVT SubVecVT,
847unsigned InsertExtractIdx,
848constRISCVRegisterInfo *TRI);
849MVTgetContainerForFixedLengthVector(MVT VT)const;
850
851boolshouldRemoveExtendFromGSIndex(SDValue Extend,EVT DataVT)const override;
852
853boolisLegalElementTypeForRVV(EVT ScalarTy)const;
854
855boolshouldConvertFpToSat(unsignedOp,EVT FPVT,EVT VT)const override;
856
857unsignedgetJumpTableEncoding()const override;
858
859constMCExpr *LowerCustomJumpTableEntry(constMachineJumpTableInfo *MJTI,
860constMachineBasicBlock *MBB,
861unsigned uid,
862MCContext &Ctx)const override;
863
864boolisVScaleKnownToBeAPowerOfTwo()const override;
865
866boolgetIndexedAddressParts(SDNode *Op,SDValue &Base,SDValue &Offset,
867ISD::MemIndexedMode &AM,SelectionDAG &DAG)const;
868boolgetPreIndexedAddressParts(SDNode *N,SDValue &Base,SDValue &Offset,
869ISD::MemIndexedMode &AM,
870SelectionDAG &DAG)const override;
871boolgetPostIndexedAddressParts(SDNode *N,SDNode *Op,SDValue &Base,
872SDValue &Offset,ISD::MemIndexedMode &AM,
873SelectionDAG &DAG)const override;
874
875boolisLegalScaleForGatherScatter(uint64_t Scale,
876uint64_t ElemSize) const override{
877// Scaled addressing not supported on indexed load/stores
878return Scale == 1;
879 }
880
881 /// If the target has a standard location for the stack protector cookie,
882 /// returns the address of that location. Otherwise, returns nullptr.
883Value *getIRStackGuard(IRBuilderBase &IRB)const override;
884
885 /// Returns whether or not generating a interleaved load/store intrinsic for
886 /// this type will be legal.
887boolisLegalInterleavedAccessType(VectorType *VTy,unsigned Factor,
888Align Alignment,unsigned AddrSpace,
889constDataLayout &)const;
890
891 /// Return true if a stride load store of the given result type and
892 /// alignment is legal.
893boolisLegalStridedLoadStore(EVT DataType,Align Alignment)const;
894
895unsignedgetMaxSupportedInterleaveFactor() const override{return 8; }
896
897boolfallBackToDAGISel(constInstruction &Inst)const override;
898
899boollowerInterleavedLoad(LoadInst *LI,
900ArrayRef<ShuffleVectorInst *> Shuffles,
901ArrayRef<unsigned> Indices,
902unsigned Factor)const override;
903
904boollowerInterleavedStore(StoreInst *SI,ShuffleVectorInst *SVI,
905unsigned Factor)const override;
906
907boollowerDeinterleaveIntrinsicToLoad(
908LoadInst *LI,ArrayRef<Value *> DeinterleaveValues)const override;
909
910boollowerInterleaveIntrinsicToStore(
911StoreInst *SI,ArrayRef<Value *> InterleaveValues)const override;
912
913boolsupportKCFIBundles() const override{returntrue; }
914
915SDValueexpandIndirectJTBranch(constSDLoc &dl,SDValueValue,SDValueAddr,
916int JTI,SelectionDAG &DAG)const override;
917
918MachineInstr *EmitKCFICheck(MachineBasicBlock &MBB,
919MachineBasicBlock::instr_iterator &MBBI,
920constTargetInstrInfo *TII)const override;
921
922 /// True if stack clash protection is enabled for this functions.
923boolhasInlineStackProbe(constMachineFunction &MF)const override;
924
925unsignedgetStackProbeSize(constMachineFunction &MF,Align StackAlign)const;
926
927MachineBasicBlock *emitDynamicProbedAlloc(MachineInstr &MI,
928MachineBasicBlock *MBB)const;
929
930private:
931void analyzeInputArgs(MachineFunction &MF,CCState &CCInfo,
932constSmallVectorImpl<ISD::InputArg> &Ins,bool IsRet,
933RISCVCCAssignFn Fn)const;
934void analyzeOutputArgs(MachineFunction &MF,CCState &CCInfo,
935constSmallVectorImpl<ISD::OutputArg> &Outs,
936bool IsRet, CallLoweringInfo *CLI,
937RISCVCCAssignFn Fn)const;
938
939template <class NodeTy>
940SDValue getAddr(NodeTy *N,SelectionDAG &DAG,bool IsLocal =true,
941bool IsExternWeak =false)const;
942SDValue getStaticTLSAddr(GlobalAddressSDNode *N,SelectionDAG &DAG,
943bool UseGOT)const;
944SDValue getDynamicTLSAddr(GlobalAddressSDNode *N,SelectionDAG &DAG)const;
945SDValue getTLSDescAddr(GlobalAddressSDNode *N,SelectionDAG &DAG)const;
946
947SDValue lowerConstantFP(SDValueOp,SelectionDAG &DAG)const;
948SDValue lowerGlobalAddress(SDValueOp,SelectionDAG &DAG)const;
949SDValue lowerBlockAddress(SDValueOp,SelectionDAG &DAG)const;
950SDValue lowerConstantPool(SDValueOp,SelectionDAG &DAG)const;
951SDValue lowerJumpTable(SDValueOp,SelectionDAG &DAG)const;
952SDValue lowerGlobalTLSAddress(SDValueOp,SelectionDAG &DAG)const;
953SDValue lowerSELECT(SDValueOp,SelectionDAG &DAG)const;
954SDValue lowerBRCOND(SDValueOp,SelectionDAG &DAG)const;
955SDValue lowerVASTART(SDValueOp,SelectionDAG &DAG)const;
956SDValue lowerFRAMEADDR(SDValueOp,SelectionDAG &DAG)const;
957SDValue lowerRETURNADDR(SDValueOp,SelectionDAG &DAG)const;
958SDValue lowerShiftLeftParts(SDValueOp,SelectionDAG &DAG)const;
959SDValue lowerShiftRightParts(SDValueOp,SelectionDAG &DAG,bool IsSRA)const;
960SDValue lowerSPLAT_VECTOR_PARTS(SDValueOp,SelectionDAG &DAG)const;
961SDValue lowerVectorMaskSplat(SDValueOp,SelectionDAG &DAG)const;
962SDValue lowerVectorMaskExt(SDValueOp,SelectionDAG &DAG,
963 int64_t ExtTrueVal)const;
964SDValue lowerVectorMaskTruncLike(SDValueOp,SelectionDAG &DAG)const;
965SDValue lowerVectorTruncLike(SDValueOp,SelectionDAG &DAG)const;
966SDValue lowerVectorFPExtendOrRoundLike(SDValueOp,SelectionDAG &DAG)const;
967SDValue lowerINSERT_VECTOR_ELT(SDValueOp,SelectionDAG &DAG)const;
968SDValue lowerEXTRACT_VECTOR_ELT(SDValueOp,SelectionDAG &DAG)const;
969SDValue LowerINTRINSIC_WO_CHAIN(SDValueOp,SelectionDAG &DAG)const;
970SDValue LowerINTRINSIC_W_CHAIN(SDValueOp,SelectionDAG &DAG)const;
971SDValue LowerINTRINSIC_VOID(SDValueOp,SelectionDAG &DAG)const;
972SDValue lowerVPREDUCE(SDValueOp,SelectionDAG &DAG)const;
973SDValue lowerVECREDUCE(SDValueOp,SelectionDAG &DAG)const;
974SDValue lowerVectorMaskVecReduction(SDValueOp,SelectionDAG &DAG,
975bool IsVP)const;
976SDValue lowerFPVECREDUCE(SDValueOp,SelectionDAG &DAG)const;
977SDValue lowerINSERT_SUBVECTOR(SDValueOp,SelectionDAG &DAG)const;
978SDValue lowerEXTRACT_SUBVECTOR(SDValueOp,SelectionDAG &DAG)const;
979SDValue lowerVECTOR_DEINTERLEAVE(SDValueOp,SelectionDAG &DAG)const;
980SDValue lowerVECTOR_INTERLEAVE(SDValueOp,SelectionDAG &DAG)const;
981SDValue lowerSTEP_VECTOR(SDValueOp,SelectionDAG &DAG)const;
982SDValue lowerVECTOR_REVERSE(SDValueOp,SelectionDAG &DAG)const;
983SDValue lowerVECTOR_SPLICE(SDValueOp,SelectionDAG &DAG)const;
984SDValue lowerABS(SDValueOp,SelectionDAG &DAG)const;
985SDValue lowerMaskedLoad(SDValueOp,SelectionDAG &DAG)const;
986SDValue lowerMaskedStore(SDValueOp,SelectionDAG &DAG)const;
987SDValue lowerVectorCompress(SDValueOp,SelectionDAG &DAG)const;
988SDValue lowerFixedLengthVectorFCOPYSIGNToRVV(SDValueOp,
989SelectionDAG &DAG)const;
990SDValue lowerMaskedGather(SDValueOp,SelectionDAG &DAG)const;
991SDValue lowerMaskedScatter(SDValueOp,SelectionDAG &DAG)const;
992SDValue lowerFixedLengthVectorLoadToRVV(SDValueOp,SelectionDAG &DAG)const;
993SDValue lowerFixedLengthVectorStoreToRVV(SDValueOp,SelectionDAG &DAG)const;
994SDValue lowerFixedLengthVectorSetccToRVV(SDValueOp,SelectionDAG &DAG)const;
995SDValue lowerFixedLengthVectorSelectToRVV(SDValueOp,
996SelectionDAG &DAG)const;
997SDValue lowerToScalableOp(SDValueOp,SelectionDAG &DAG)const;
998SDValue LowerIS_FPCLASS(SDValueOp,SelectionDAG &DAG)const;
999SDValue lowerVPOp(SDValueOp,SelectionDAG &DAG)const;
1000SDValue lowerLogicVPOp(SDValueOp,SelectionDAG &DAG)const;
1001SDValue lowerVPExtMaskOp(SDValueOp,SelectionDAG &DAG)const;
1002SDValue lowerVPSetCCMaskOp(SDValueOp,SelectionDAG &DAG)const;
1003SDValue lowerVPMergeMask(SDValueOp,SelectionDAG &DAG)const;
1004SDValue lowerVPSplatExperimental(SDValueOp,SelectionDAG &DAG)const;
1005SDValue lowerVPSpliceExperimental(SDValueOp,SelectionDAG &DAG)const;
1006SDValue lowerVPReverseExperimental(SDValueOp,SelectionDAG &DAG)const;
1007SDValue lowerVPFPIntConvOp(SDValueOp,SelectionDAG &DAG)const;
1008SDValue lowerVPStridedLoad(SDValueOp,SelectionDAG &DAG)const;
1009SDValue lowerVPStridedStore(SDValueOp,SelectionDAG &DAG)const;
1010SDValue lowerVPCttzElements(SDValueOp,SelectionDAG &DAG)const;
1011SDValue lowerFixedLengthVectorExtendToRVV(SDValueOp,SelectionDAG &DAG,
1012unsigned ExtendOpc)const;
1013SDValue lowerGET_ROUNDING(SDValueOp,SelectionDAG &DAG)const;
1014SDValue lowerSET_ROUNDING(SDValueOp,SelectionDAG &DAG)const;
1015
1016SDValue lowerEH_DWARF_CFA(SDValueOp,SelectionDAG &DAG)const;
1017SDValue lowerCTLZ_CTTZ_ZERO_UNDEF(SDValueOp,SelectionDAG &DAG)const;
1018
1019SDValue lowerStrictFPExtendOrRoundLike(SDValueOp,SelectionDAG &DAG)const;
1020
1021SDValue lowerVectorStrictFSetcc(SDValueOp,SelectionDAG &DAG)const;
1022
1023SDValue lowerDYNAMIC_STACKALLOC(SDValueOp,SelectionDAG &DAG)const;
1024
1025SDValue expandUnalignedRVVLoad(SDValueOp,SelectionDAG &DAG)const;
1026SDValue expandUnalignedRVVStore(SDValueOp,SelectionDAG &DAG)const;
1027
1028SDValue lowerINIT_TRAMPOLINE(SDValueOp,SelectionDAG &DAG)const;
1029SDValue lowerADJUST_TRAMPOLINE(SDValueOp,SelectionDAG &DAG)const;
1030
1031bool isEligibleForTailCallOptimization(
1032CCState &CCInfo, CallLoweringInfo &CLI,MachineFunction &MF,
1033constSmallVector<CCValAssign, 16> &ArgLocs)const;
1034
1035 /// Generate error diagnostics if any register used by CC has been marked
1036 /// reserved.
1037void validateCCReservedRegs(
1038constSmallVectorImpl<std::pair<llvm::Register, llvm::SDValue>> &Regs,
1039MachineFunction &MF)const;
1040
1041bool useRVVForFixedLengthVectorVT(MVT VT)const;
1042
1043MVT getVPExplicitVectorLengthTy()const override;
1044
1045bool shouldExpandGetVectorLength(EVT TripCountVT,unsigned VF,
1046bool IsScalable)const override;
1047
1048 /// RVV code generation for fixed length vectors does not lower all
1049 /// BUILD_VECTORs. This makes BUILD_VECTOR legalisation a source of stores to
1050 /// merge. However, merging them creates a BUILD_VECTOR that is just as
1051 /// illegal as the original, thus leading to an infinite legalisation loop.
1052 /// NOTE: Once BUILD_VECTOR can be custom lowered for all legal vector types,
1053 /// this override can be removed.
1054bool mergeStoresAfterLegalization(EVT VT)const override;
1055
1056 /// Disable normalizing
1057 /// select(N0&N1, X, Y) => select(N0, select(N1, X, Y), Y) and
1058 /// select(N0|N1, X, Y) => select(N0, select(N1, X, Y, Y))
1059 /// RISC-V doesn't have flags so it's better to perform the and/or in a GPR.
1060bool shouldNormalizeToSelectSequence(LLVMContext &,EVT) const override{
1061returnfalse;
1062 }
1063
1064 /// For available scheduling models FDIV + two independent FMULs are much
1065 /// faster than two FDIVs.
1066unsigned combineRepeatedFPDivisors()const override;
1067
1068 SDValue BuildSDIVPow2(SDNode *N,const APInt &Divisor, SelectionDAG &DAG,
1069 SmallVectorImpl<SDNode *> &Created)const override;
1070
1071bool shouldFoldSelectWithSingleBitTest(EVT VT,
1072const APInt &AndMask)const override;
1073
1074unsigned getMinimumJumpTableEntries()const override;
1075
1076 SDValue emitFlushICache(SelectionDAG &DAG, SDValue InChain, SDValue Start,
1077 SDValueEnd, SDValue Flags, SDLocDL)const;
1078
1079 std::pair<const TargetRegisterClass *, uint8_t>
1080 findRepresentativeClass(const TargetRegisterInfo *TRI, MVT VT)const override;
1081};
1082
1083namespaceRISCVVIntrinsicsTable {
1084
1085structRISCVVIntrinsicInfo {
1086unsignedIntrinsicID;
1087uint8_tScalarOperand;
1088uint8_tVLOperand;
1089boolhasScalarOperand() const{
1090// 0xF is not valid. See NoScalarOperand in IntrinsicsRISCV.td.
1091returnScalarOperand != 0xF;
1092 }
1093boolhasVLOperand() const{
1094// 0x1F is not valid. See NoVLOperand in IntrinsicsRISCV.td.
1095returnVLOperand != 0x1F;
1096 }
1097};
1098
1099using namespaceRISCV;
1100
1101#define GET_RISCVVIntrinsicsTable_DECL
1102#include "RISCVGenSearchableTables.inc"
1103#undef GET_RISCVVIntrinsicsTable_DECL
1104
1105}// end namespace RISCVVIntrinsicsTable
1106
1107}// end namespace llvm
1108
1109#endif
MBB
MachineBasicBlock & MBB
Definition:ARMSLSHardening.cpp:71
DL
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
Definition:ARMSLSHardening.cpp:73
MBBI
MachineBasicBlock MachineBasicBlock::iterator MBBI
Definition:ARMSLSHardening.cpp:72
Results
Function Alias Analysis Results
Definition:AliasAnalysis.cpp:731
Info
Analysis containing CSE Info
Definition:CSEInfo.cpp:27
CallingConvLower.h
RetTy
return RetTy
Definition:DeadArgumentElimination.cpp:361
Addr
uint64_t Addr
Definition:ELFObjHandler.cpp:79
Index
uint32_t Index
Definition:ELFObjHandler.cpp:83
End
bool End
Definition:ELF_riscv.cpp:480
X
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
TII
const HexagonInstrInfo * TII
Definition:HexagonCopyToCombine.cpp:125
MI
IRTranslator LLVM IR MI
Definition:IRTranslator.cpp:112
RegName
#define RegName(no)
I
#define I(x, y, z)
Definition:MD5.cpp:58
AddrMode
AddrMode
Definition:MSP430Disassembler.cpp:141
TRI
unsigned const TargetRegisterInfo * TRI
Definition:MachineSink.cpp:2029
Y
static GCMetadataPrinterRegistry::Add< OcamlGCMetadataPrinter > Y("ocaml", "ocaml 3.10-compatible collector")
RISCVCallingConv.h
Cond
const SmallVectorImpl< MachineOperand > & Cond
Definition:RISCVRedundantCopyElimination.cpp:75
CC
auto CC
Definition:RISCVRedundantCopyElimination.cpp:79
RISCV.h
SelectionDAG.h
TargetLowering.h
This file describes how to lower LLVM code to machine code.
UndefPoisonKind::PoisonOnly
@ PoisonOnly
Node
Definition:ItaniumDemangle.h:163
llvm::APFloat
Definition:APFloat.h:904
llvm::APInt
Class for arbitrary precision integers.
Definition:APInt.h:78
llvm::ArrayRef
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition:ArrayRef.h:41
llvm::AtomicCmpXchgInst
An instruction that atomically checks whether a specified value is in a memory location,...
Definition:Instructions.h:501
llvm::AtomicRMWInst
an instruction that atomically reads a memory location, combines it with another value,...
Definition:Instructions.h:704
llvm::AttributeList
Definition:Attributes.h:490
llvm::CCState
CCState - This class holds information needed while lowering arguments and return values.
Definition:CallingConvLower.h:170
llvm::CallInst
This class represents a function call, abstracting a target machine's calling convention.
Definition:Instructions.h:1479
llvm::ConstantInt
This is the shared class of boolean and integer constants.
Definition:Constants.h:83
llvm::ConstantSDNode
Definition:SelectionDAGNodes.h:1684
llvm::Constant
This is an important base class in LLVM.
Definition:Constant.h:42
llvm::DWARFExpression::Operation
This class represents an Operation in the Expression.
Definition:DWARFExpression.h:32
llvm::DataLayout
A parsed version of the target data layout string in and methods for querying it.
Definition:DataLayout.h:63
llvm::DemandedBits
Definition:DemandedBits.h:40
llvm::Function::hasMinSize
bool hasMinSize() const
Optimize this function for minimum size (-Oz).
Definition:Function.h:704
llvm::GlobalAddressSDNode
Definition:SelectionDAGNodes.h:1876
llvm::IRBuilderBase
Common base class shared among various IRBuilders.
Definition:IRBuilder.h:113
llvm::InlineAsm::ConstraintCode
ConstraintCode
Definition:InlineAsm.h:239
llvm::InstructionCost
Definition:InstructionCost.h:29
llvm::Instruction
Definition:Instruction.h:68
llvm::LLT
Definition:LowLevelType.h:39
llvm::LLVMContext
This is an important class for using LLVM in a threaded context.
Definition:LLVMContext.h:67
llvm::LoadInst
An instruction for reading from memory.
Definition:Instructions.h:176
llvm::LoadSDNode
This class is used to represent ISD::LOAD nodes.
Definition:SelectionDAGNodes.h:2464
llvm::MCContext
Context object for machine code objects.
Definition:MCContext.h:83
llvm::MCExpr
Base class for the full range of assembler expressions which are needed for parsing.
Definition:MCExpr.h:34
llvm::MVT
Machine Value Type.
Definition:MachineValueType.h:35
llvm::MachineBasicBlock
Definition:MachineBasicBlock.h:125
llvm::MachineBasicBlock::instr_iterator
Instructions::iterator instr_iterator
Definition:MachineBasicBlock.h:314
llvm::MachineFunction
Definition:MachineFunction.h:267
llvm::MachineFunction::getFunction
Function & getFunction()
Return the LLVM function that this machine code represents.
Definition:MachineFunction.h:704
llvm::MachineInstr
Representation of each machine instruction.
Definition:MachineInstr.h:71
llvm::MachineJumpTableInfo
Definition:MachineJumpTableInfo.h:46
llvm::MachineMemOperand::Flags
Flags
Flags values. These may be or'd together.
Definition:MachineMemOperand.h:132
llvm::MachineMemOperand::MONone
@ MONone
Definition:MachineMemOperand.h:134
llvm::MemSDNode
This is an abstract virtual class for memory operations.
Definition:SelectionDAGNodes.h:1352
llvm::RISCVSubtarget
Definition:RISCVSubtarget.h:78
llvm::RISCVTargetLowering
Definition:RISCVISelLowering.h:510
llvm::RISCVTargetLowering::computeVLMAXBounds
static std::pair< unsigned, unsigned > computeVLMAXBounds(MVT ContainerVT, const RISCVSubtarget &Subtarget)
Definition:RISCVISelLowering.cpp:2795
llvm::RISCVTargetLowering::decomposeSubvectorInsertExtractToSubRegs
static std::pair< unsigned, unsigned > decomposeSubvectorInsertExtractToSubRegs(MVT VecVT, MVT SubVecVT, unsigned InsertExtractIdx, const RISCVRegisterInfo *TRI)
Definition:RISCVISelLowering.cpp:2498
llvm::RISCVTargetLowering::getVRGatherVVCost
InstructionCost getVRGatherVVCost(MVT VT) const
Return the cost of a vrgather.vv instruction for the type VT.
Definition:RISCVISelLowering.cpp:2852
llvm::RISCVTargetLowering::getIndexedAddressParts
bool getIndexedAddressParts(SDNode *Op, SDValue &Base, SDValue &Offset, ISD::MemIndexedMode &AM, SelectionDAG &DAG) const
Definition:RISCVISelLowering.cpp:21763
llvm::RISCVTargetLowering::getSubregIndexByMVT
static unsigned getSubregIndexByMVT(MVT VT, unsigned Index)
Definition:RISCVISelLowering.cpp:2424
llvm::RISCVTargetLowering::getIRStackGuard
Value * getIRStackGuard(IRBuilderBase &IRB) const override
If the target has a standard location for the stack protector cookie, returns the address of that loc...
Definition:RISCVISelLowering.cpp:22245
llvm::RISCVTargetLowering::shouldConvertFpToSat
bool shouldConvertFpToSat(unsigned Op, EVT FPVT, EVT VT) const override
Should we generate fp_to_si_sat and fp_to_ui_sat from type FPVT to type VT from min(max(fptoi)) satur...
Definition:RISCVISelLowering.cpp:21716
llvm::RISCVTargetLowering::storeOfVectorConstantIsCheap
bool storeOfVectorConstantIsCheap(bool IsZero, EVT MemVT, unsigned NumElem, unsigned AddrSpace) const override
Return true if it is expected to be cheaper to do a store of vector constant with the given size and ...
Definition:RISCVISelLowering.h:688
llvm::RISCVTargetLowering::getInlineAsmMemConstraint
InlineAsm::ConstraintCode getInlineAsmMemConstraint(StringRef ConstraintCode) const override
Definition:RISCVISelLowering.cpp:21444
llvm::RISCVTargetLowering::LowerReturn
SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg, const SmallVectorImpl< ISD::OutputArg > &Outs, const SmallVectorImpl< SDValue > &OutVals, const SDLoc &DL, SelectionDAG &DAG) const override
This hook must be implemented to lower outgoing return values, described by the Outs array,...
Definition:RISCVISelLowering.cpp:20720
llvm::RISCVTargetLowering::getMaxSupportedInterleaveFactor
unsigned getMaxSupportedInterleaveFactor() const override
Get the maximum supported factor for interleaved memory accesses.
Definition:RISCVISelLowering.h:895
llvm::RISCVTargetLowering::shouldFoldSelectWithIdentityConstant
bool shouldFoldSelectWithIdentityConstant(unsigned BinOpcode, EVT VT) const override
Return true if pulling a binary operation into a select with an identity constant is profitable.
Definition:RISCVISelLowering.cpp:2050
llvm::RISCVTargetLowering::mayBeEmittedAsTailCall
bool mayBeEmittedAsTailCall(const CallInst *CI) const override
Return true if the target may be able emit the call instruction as a tail call.
Definition:RISCVISelLowering.cpp:20873
llvm::RISCVTargetLowering::EmitInstrWithCustomInserter
MachineBasicBlock * EmitInstrWithCustomInserter(MachineInstr &MI, MachineBasicBlock *BB) const override
This method should be implemented by targets that mark instructions with the 'usesCustomInserter' fla...
Definition:RISCVISelLowering.cpp:19829
llvm::RISCVTargetLowering::emitLeadingFence
Instruction * emitLeadingFence(IRBuilderBase &Builder, Instruction *Inst, AtomicOrdering Ord) const override
Inserts in the IR a target-specific intrinsic specifying a fence.
Definition:RISCVISelLowering.cpp:21498
llvm::RISCVTargetLowering::getExtendForAtomicOps
ISD::NodeType getExtendForAtomicOps() const override
Returns how the platform's atomic operations are extended (ZERO_EXTEND, SIGN_EXTEND,...
Definition:RISCVISelLowering.h:719
llvm::RISCVTargetLowering::isTruncateFree
bool isTruncateFree(Type *SrcTy, Type *DstTy) const override
Return true if it's free to truncate a value of type FromTy to type ToTy.
Definition:RISCVISelLowering.cpp:1944
llvm::RISCVTargetLowering::preferZeroCompareBranch
bool preferZeroCompareBranch() const override
Return true if the heuristic to prefer icmp eq zero should be used in code gen prepare.
Definition:RISCVISelLowering.h:704
llvm::RISCVTargetLowering::lowerInterleaveIntrinsicToStore
bool lowerInterleaveIntrinsicToStore(StoreInst *SI, ArrayRef< Value * > InterleaveValues) const override
Lower an interleave intrinsic to a target specific store intrinsic.
Definition:RISCVISelLowering.cpp:22549
llvm::RISCVTargetLowering::shouldRemoveExtendFromGSIndex
bool shouldRemoveExtendFromGSIndex(SDValue Extend, EVT DataVT) const override
Definition:RISCVISelLowering.cpp:21706
llvm::RISCVTargetLowering::emitMaskedAtomicRMWIntrinsic
Value * emitMaskedAtomicRMWIntrinsic(IRBuilderBase &Builder, AtomicRMWInst *AI, Value *AlignedAddr, Value *Incr, Value *Mask, Value *ShiftAmt, AtomicOrdering Ord) const override
Perform a masked atomicrmw using a target-specific intrinsic.
Definition:RISCVISelLowering.cpp:21613
llvm::RISCVTargetLowering::getOptimalMemOpType
EVT getOptimalMemOpType(const MemOp &Op, const AttributeList &FuncAttributes) const override
Returns the target specific optimal type for load and store operations as a result of memset,...
Definition:RISCVISelLowering.cpp:22012
llvm::RISCVTargetLowering::allowsMisalignedMemoryAccesses
bool allowsMisalignedMemoryAccesses(EVT VT, unsigned AddrSpace=0, Align Alignment=Align(1), MachineMemOperand::Flags Flags=MachineMemOperand::MONone, unsigned *Fast=nullptr) const override
Returns true if the target allows unaligned memory accesses of the specified type.
Definition:RISCVISelLowering.cpp:21985
llvm::RISCVTargetLowering::getTargetConstantFromLoad
const Constant * getTargetConstantFromLoad(LoadSDNode *LD) const override
This method returns the constant pool value that will be loaded by LD.
Definition:RISCVISelLowering.cpp:19134
llvm::RISCVTargetLowering::getSubtarget
const RISCVSubtarget & getSubtarget() const
Definition:RISCVISelLowering.h:517
llvm::RISCVTargetLowering::preferredShiftLegalizationStrategy
TargetLowering::ShiftLegalizationStrategy preferredShiftLegalizationStrategy(SelectionDAG &DAG, SDNode *N, unsigned ExpansionFactor) const override
Definition:RISCVISelLowering.h:729
llvm::RISCVTargetLowering::PerformDAGCombine
SDValue PerformDAGCombine(SDNode *N, DAGCombinerInfo &DCI) const override
This method will be invoked for all target nodes and for any target-independent nodes that the target...
Definition:RISCVISelLowering.cpp:17676
llvm::RISCVTargetLowering::isOffsetFoldingLegal
bool isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const override
Return true if folding a constant offset with the given GlobalAddress is legal.
Definition:RISCVISelLowering.cpp:2138
llvm::RISCVTargetLowering::computeKnownBitsForTargetNode
void computeKnownBitsForTargetNode(const SDValue Op, KnownBits &Known, const APInt &DemandedElts, const SelectionDAG &DAG, unsigned Depth) const override
Determine which of the bits specified in Mask are known to be either zero or one and return them in t...
Definition:RISCVISelLowering.cpp:18889
llvm::RISCVTargetLowering::preferScalarizeSplat
bool preferScalarizeSplat(SDNode *N) const override
Definition:RISCVISelLowering.cpp:22228
llvm::RISCVTargetLowering::getTargetNodeName
const char * getTargetNodeName(unsigned Opcode) const override
This method returns the name of a target specific DAG node.
Definition:RISCVISelLowering.cpp:20877
llvm::RISCVTargetLowering::shouldExtendTypeInLibCall
bool shouldExtendTypeInLibCall(EVT Type) const override
Returns true if arguments should be extended in lib calls.
Definition:RISCVISelLowering.cpp:21905
llvm::RISCVTargetLowering::isLegalAddImmediate
bool isLegalAddImmediate(int64_t Imm) const override
Return true if the specified immediate is legal add immediate, that is the target has add instruction...
Definition:RISCVISelLowering.cpp:1935
llvm::RISCVTargetLowering::shouldSignExtendTypeInLibCall
bool shouldSignExtendTypeInLibCall(Type *Ty, bool IsSigned) const override
Returns true if arguments should be sign-extended in lib calls.
Definition:RISCVISelLowering.cpp:21915
llvm::RISCVTargetLowering::LowerCustomJumpTableEntry
const MCExpr * LowerCustomJumpTableEntry(const MachineJumpTableInfo *MJTI, const MachineBasicBlock *MBB, unsigned uid, MCContext &Ctx) const override
Definition:RISCVISelLowering.cpp:21743
llvm::RISCVTargetLowering::getVRGatherVICost
InstructionCost getVRGatherVICost(MVT VT) const
Return the cost of a vrgather.vi (or vx) instruction for the type VT.
Definition:RISCVISelLowering.cpp:2859
llvm::RISCVTargetLowering::shouldConvertConstantLoadToIntImm
bool shouldConvertConstantLoadToIntImm(const APInt &Imm, Type *Ty) const override
Return true if it is beneficial to convert a load of a constant to just the constant itself.
Definition:RISCVISelLowering.cpp:2062
llvm::RISCVTargetLowering::targetShrinkDemandedConstant
bool targetShrinkDemandedConstant(SDValue Op, const APInt &DemandedBits, const APInt &DemandedElts, TargetLoweringOpt &TLO) const override
Definition:RISCVISelLowering.cpp:18784
llvm::RISCVTargetLowering::shouldExpandBuildVectorWithShuffles
bool shouldExpandBuildVectorWithShuffles(EVT VT, unsigned DefinedValues) const override
Definition:RISCVISelLowering.cpp:2821
llvm::RISCVTargetLowering::getRegisterTypeForCallingConv
MVT getRegisterTypeForCallingConv(LLVMContext &Context, CallingConv::ID CC, EVT VT) const override
Return the register type for a given MVT, ensuring vectors are treated as a series of gpr sized integ...
Definition:RISCVISelLowering.cpp:2247
llvm::RISCVTargetLowering::decomposeMulByConstant
bool decomposeMulByConstant(LLVMContext &Context, EVT VT, SDValue C) const override
Return true if it is profitable to transform an integer multiplication-by-constant into simpler opera...
Definition:RISCVISelLowering.cpp:21923
llvm::RISCVTargetLowering::CanLowerReturn
bool CanLowerReturn(CallingConv::ID CallConv, MachineFunction &MF, bool IsVarArg, const SmallVectorImpl< ISD::OutputArg > &Outs, LLVMContext &Context, const Type *RetTy) const override
This hook should be implemented to check whether the return values described by the Outs array can fi...
Definition:RISCVISelLowering.cpp:20702
llvm::RISCVTargetLowering::isLegalAddressingMode
bool isLegalAddressingMode(const DataLayout &DL, const AddrMode &AM, Type *Ty, unsigned AS, Instruction *I=nullptr) const override
Return true if the addressing mode represented by AM is legal for this target, for a load/store of th...
Definition:RISCVISelLowering.cpp:1897
llvm::RISCVTargetLowering::hasAndNotCompare
bool hasAndNotCompare(SDValue Y) const override
Return true if the target should transform: (X & Y) == Y —> (~X & Y) == 0 (X & Y) !...
Definition:RISCVISelLowering.cpp:2027
llvm::RISCVTargetLowering::shouldScalarizeBinop
bool shouldScalarizeBinop(SDValue VecOp) const override
Try to convert an extract element of a vector binary operation into an extract element followed by a ...
Definition:RISCVISelLowering.cpp:2116
llvm::RISCVTargetLowering::isDesirableToCommuteWithShift
bool isDesirableToCommuteWithShift(const SDNode *N, CombineLevel Level) const override
Return true if it is profitable to move this shift by a constant amount through its operand,...
Definition:RISCVISelLowering.cpp:18696
llvm::RISCVTargetLowering::areTwoSDNodeTargetMMOFlagsMergeable
bool areTwoSDNodeTargetMMOFlagsMergeable(const MemSDNode &NodeX, const MemSDNode &NodeY) const override
Return true if it is valid to merge the TargetMMOFlags in two SDNodes.
Definition:RISCVISelLowering.cpp:22693
llvm::RISCVTargetLowering::hasBitTest
bool hasBitTest(SDValue X, SDValue Y) const override
Return true if the target has a bit-test instruction: (X & (1 << Y)) ==/!= 0 This knowledge can be us...
Definition:RISCVISelLowering.cpp:2038
llvm::RISCVTargetLowering::computeVLMAX
static unsigned computeVLMAX(unsigned VectorBits, unsigned EltSize, unsigned MinSize)
Definition:RISCVISelLowering.h:827
llvm::RISCVTargetLowering::shouldExpandCttzElements
bool shouldExpandCttzElements(EVT VT) const override
Return true if the @llvm.experimental.cttz.elts intrinsic should be expanded using generic code in Se...
Definition:RISCVISelLowering.cpp:1616
llvm::RISCVTargetLowering::isCheapToSpeculateCtlz
bool isCheapToSpeculateCtlz(Type *Ty) const override
Return true if it is cheap to speculate a call to intrinsic ctlz.
Definition:RISCVISelLowering.cpp:2006
llvm::RISCVTargetLowering::emitMaskedAtomicCmpXchgIntrinsic
Value * emitMaskedAtomicCmpXchgIntrinsic(IRBuilderBase &Builder, AtomicCmpXchgInst *CI, Value *AlignedAddr, Value *CmpVal, Value *NewVal, Value *Mask, AtomicOrdering Ord) const override
Perform a masked cmpxchg using a target-specific intrinsic.
Definition:RISCVISelLowering.cpp:21686
llvm::RISCVTargetLowering::isFPImmLegal
bool isFPImmLegal(const APFloat &Imm, EVT VT, bool ForCodeSize) const override
Returns true if the target can instruction select the specified FP immediate natively.
Definition:RISCVISelLowering.cpp:2169
llvm::RISCVTargetLowering::convertSelectOfConstantsToMath
bool convertSelectOfConstantsToMath(EVT VT) const override
Return true if a select of constants (select Cond, C1, C2) should be transformed into simple math ops...
Definition:RISCVISelLowering.h:698
llvm::RISCVTargetLowering::getLMULCost
InstructionCost getLMULCost(MVT VT) const
Return the cost of LMUL for linear operations.
Definition:RISCVISelLowering.cpp:2826
llvm::RISCVTargetLowering::supportKCFIBundles
bool supportKCFIBundles() const override
Return true if the target supports kcfi operand bundles.
Definition:RISCVISelLowering.h:913
llvm::RISCVTargetLowering::getJumpTableEncoding
unsigned getJumpTableEncoding() const override
Return the entry encoding for a jump table in the current function.
Definition:RISCVISelLowering.cpp:21733
llvm::RISCVTargetLowering::isMulAddWithConstProfitable
bool isMulAddWithConstProfitable(SDValue AddNode, SDValue ConstNode) const override
Return true if it may be profitable to transform (mul (add x, c1), c2) -> (add (mul x,...
Definition:RISCVISelLowering.cpp:21962
llvm::RISCVTargetLowering::getVSlideVICost
InstructionCost getVSlideVICost(MVT VT) const
Return the cost of a vslidedown.vi or vslideup.vi instruction for the type VT.
Definition:RISCVISelLowering.cpp:2875
llvm::RISCVTargetLowering::fallBackToDAGISel
bool fallBackToDAGISel(const Instruction &Inst) const override
Definition:RISCVISelLowering.cpp:22741
llvm::RISCVTargetLowering::getSetCCResultType
EVT getSetCCResultType(const DataLayout &DL, LLVMContext &Context, EVT VT) const override
Return the ValueType of the result of SETCC operations.
Definition:RISCVISelLowering.cpp:1574
llvm::RISCVTargetLowering::lowerInterleavedLoad
bool lowerInterleavedLoad(LoadInst *LI, ArrayRef< ShuffleVectorInst * > Shuffles, ArrayRef< unsigned > Indices, unsigned Factor) const override
Lower an interleaved load into a vlsegN intrinsic.
Definition:RISCVISelLowering.cpp:22344
llvm::RISCVTargetLowering::isCtpopFast
bool isCtpopFast(EVT VT) const override
Return true if ctpop instruction is fast.
Definition:RISCVISelLowering.cpp:22698
llvm::RISCVTargetLowering::ComputeNumSignBitsForTargetNode
unsigned ComputeNumSignBitsForTargetNode(SDValue Op, const APInt &DemandedElts, const SelectionDAG &DAG, unsigned Depth) const override
This method can be implemented by targets that want to expose additional information about sign bits ...
Definition:RISCVISelLowering.cpp:19030
llvm::RISCVTargetLowering::getContainerForFixedLengthVector
MVT getContainerForFixedLengthVector(MVT VT) const
Definition:RISCVISelLowering.cpp:2710
llvm::RISCVTargetLowering::getRegClassIDForVecVT
static unsigned getRegClassIDForVecVT(MVT VT)
Definition:RISCVISelLowering.cpp:2447
llvm::RISCVTargetLowering::getExceptionPointerRegister
Register getExceptionPointerRegister(const Constant *PersonalityFn) const override
If a physical register, this returns the register that receives the exception address on entry to an ...
Definition:RISCVISelLowering.cpp:21895
llvm::RISCVTargetLowering::shouldExpandAtomicRMWInIR
TargetLowering::AtomicExpansionKind shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const override
Returns how the IR-level AtomicExpand pass should expand the given AtomicRMW, if at all.
Definition:RISCVISelLowering.cpp:21532
llvm::RISCVTargetLowering::isExtractSubvectorCheap
bool isExtractSubvectorCheap(EVT ResVT, EVT SrcVT, unsigned Index) const override
Return true if EXTRACT_SUBVECTOR is cheap for extracting this result type from this source type with ...
Definition:RISCVISelLowering.cpp:2208
llvm::RISCVTargetLowering::getRegForInlineAsmConstraint
std::pair< unsigned, const TargetRegisterClass * > getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI, StringRef Constraint, MVT VT) const override
Given a physical register constraint (e.g.
Definition:RISCVISelLowering.cpp:21176
llvm::RISCVTargetLowering::emitDynamicProbedAlloc
MachineBasicBlock * emitDynamicProbedAlloc(MachineInstr &MI, MachineBasicBlock *MBB) const
Definition:RISCVISelLowering.cpp:22905
llvm::RISCVTargetLowering::getTargetMMOFlags
MachineMemOperand::Flags getTargetMMOFlags(const Instruction &I) const override
This callback is used to inspect load/store instructions and add target-specific MachineMemOperand fl...
Definition:RISCVISelLowering.cpp:22649
llvm::RISCVTargetLowering::computeVLMax
SDValue computeVLMax(MVT VecVT, const SDLoc &DL, SelectionDAG &DAG) const
Definition:RISCVISelLowering.cpp:2787
llvm::RISCVTargetLowering::signExtendConstant
bool signExtendConstant(const ConstantInt *CI) const override
Return true if this constant should be sign extended when promoting to a larger type.
Definition:RISCVISelLowering.cpp:1997
llvm::RISCVTargetLowering::shouldTransformSignedTruncationCheck
bool shouldTransformSignedTruncationCheck(EVT XVT, unsigned KeptBits) const override
Should we tranform the IR-optimal check for whether given truncation down into KeptBits would be trun...
Definition:RISCVISelLowering.cpp:18677
llvm::RISCVTargetLowering::shouldProduceAndByConstByHoistingConstFromShiftsLHSOfAnd
bool shouldProduceAndByConstByHoistingConstFromShiftsLHSOfAnd(SDValue X, ConstantSDNode *XC, ConstantSDNode *CC, SDValue Y, unsigned OldShiftOpcode, unsigned NewShiftOpcode, SelectionDAG &DAG) const override
Given the pattern (X & (C l>>/<< Y)) ==/!= 0 return true if it should be transformed into: ((X <</l>>...
Definition:RISCVISelLowering.cpp:2093
llvm::RISCVTargetLowering::hasInlineStackProbe
bool hasInlineStackProbe(const MachineFunction &MF) const override
True if stack clash protection is enabled for this functions.
Definition:RISCVISelLowering.cpp:22853
llvm::RISCVTargetLowering::getRegisterByName
Register getRegisterByName(const char *RegName, LLT VT, const MachineFunction &MF) const override
Returns the register with the specified architectural or ABI name.
Definition:RISCVISelLowering.cpp:22633
llvm::RISCVTargetLowering::getVSlideVXCost
InstructionCost getVSlideVXCost(MVT VT) const
Return the cost of a vslidedown.vx or vslideup.vx instruction for the type VT.
Definition:RISCVISelLowering.cpp:2867
llvm::RISCVTargetLowering::LowerOperation
SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override
This callback is invoked for operations that are unsupported by the target, which are registered to u...
Definition:RISCVISelLowering.cpp:6662
llvm::RISCVTargetLowering::getRegClassIDForLMUL
static unsigned getRegClassIDForLMUL(RISCVII::VLMUL LMul)
Definition:RISCVISelLowering.cpp:2406
llvm::RISCVTargetLowering::isUsedByReturnOnly
bool isUsedByReturnOnly(SDNode *N, SDValue &Chain) const override
Return true if result of the specified node is used by a return node only.
Definition:RISCVISelLowering.cpp:20836
llvm::RISCVTargetLowering::softPromoteHalfType
bool softPromoteHalfType() const override
Definition:RISCVISelLowering.h:554
llvm::RISCVTargetLowering::isFMAFasterThanFMulAndFAdd
bool isFMAFasterThanFMulAndFAdd(const MachineFunction &MF, EVT VT) const override
Return true if an FMA operation is faster than a pair of fmul and fadd instructions.
Definition:RISCVISelLowering.cpp:21868
llvm::RISCVTargetLowering::shouldExpandAtomicCmpXchgInIR
TargetLowering::AtomicExpansionKind shouldExpandAtomicCmpXchgInIR(AtomicCmpXchgInst *CI) const override
Returns how the given atomic cmpxchg should be expanded by the IR-level AtomicExpand pass.
Definition:RISCVISelLowering.cpp:21673
llvm::RISCVTargetLowering::getExceptionSelectorRegister
Register getExceptionSelectorRegister(const Constant *PersonalityFn) const override
If a physical register, this returns the register that receives the exception typeid on entry to a la...
Definition:RISCVISelLowering.cpp:21900
llvm::RISCVTargetLowering::convertSetCCLogicToBitwiseLogic
bool convertSetCCLogicToBitwiseLogic(EVT VT) const override
Use bitwise logic to make pairs of compares more efficient.
Definition:RISCVISelLowering.h:695
llvm::RISCVTargetLowering::getCustomCtpopCost
unsigned getCustomCtpopCost(EVT VT, ISD::CondCode Cond) const override
Return the maximum number of "x & (x - 1)" operations that can be done instead of deferring to a cust...
Definition:RISCVISelLowering.cpp:22707
llvm::RISCVTargetLowering::AdjustInstrPostInstrSelection
void AdjustInstrPostInstrSelection(MachineInstr &MI, SDNode *Node) const override
This method should be implemented by targets that mark instructions with the 'hasPostISelHook' flag.
Definition:RISCVISelLowering.cpp:19926
llvm::RISCVTargetLowering::isShuffleMaskLegal
bool isShuffleMaskLegal(ArrayRef< int > M, EVT VT) const override
Return true if the given shuffle mask can be codegen'd directly, or if it should be stack expanded.
Definition:RISCVISelLowering.cpp:5751
llvm::RISCVTargetLowering::isCheapToSpeculateCttz
bool isCheapToSpeculateCttz(Type *Ty) const override
Return true if it is cheap to speculate a call to intrinsic cttz.
Definition:RISCVISelLowering.cpp:2001
llvm::RISCVTargetLowering::isLegalICmpImmediate
bool isLegalICmpImmediate(int64_t Imm) const override
Return true if the specified immediate is legal icmp immediate, that is the target has icmp instructi...
Definition:RISCVISelLowering.cpp:1931
llvm::RISCVTargetLowering::getExtendForAtomicCmpSwapArg
ISD::NodeType getExtendForAtomicCmpSwapArg() const override
Returns how the platform's atomic compare and swap expects its comparison value to be extended (ZERO_...
Definition:RISCVISelLowering.cpp:21890
llvm::RISCVTargetLowering::lowerInterleavedStore
bool lowerInterleavedStore(StoreInst *SI, ShuffleVectorInst *SVI, unsigned Factor) const override
Lower an interleaved store into a vssegN intrinsic.
Definition:RISCVISelLowering.cpp:22416
llvm::RISCVTargetLowering::isLegalScaleForGatherScatter
bool isLegalScaleForGatherScatter(uint64_t Scale, uint64_t ElemSize) const override
Definition:RISCVISelLowering.h:875
llvm::RISCVTargetLowering::LowerFormalArguments
SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg, const SmallVectorImpl< ISD::InputArg > &Ins, const SDLoc &DL, SelectionDAG &DAG, SmallVectorImpl< SDValue > &InVals) const override
This hook must be implemented to lower the incoming (formal) arguments, described by the Ins array,...
Definition:RISCVISelLowering.cpp:20150
llvm::RISCVTargetLowering::ReplaceNodeResults
void ReplaceNodeResults(SDNode *N, SmallVectorImpl< SDValue > &Results, SelectionDAG &DAG) const override
This callback is invoked when a node result type is illegal for the target, and the operation was reg...
Definition:RISCVISelLowering.cpp:12898
llvm::RISCVTargetLowering::getTgtMemIntrinsic
bool getTgtMemIntrinsic(IntrinsicInfo &Info, const CallInst &I, MachineFunction &MF, unsigned Intrinsic) const override
Given an intrinsic, checks if on the target the intrinsic will need to map to a MemIntrinsicNode (tou...
Definition:RISCVISelLowering.cpp:1621
llvm::RISCVTargetLowering::getVectorTypeBreakdownForCallingConv
unsigned getVectorTypeBreakdownForCallingConv(LLVMContext &Context, CallingConv::ID CC, EVT VT, EVT &IntermediateVT, unsigned &NumIntermediates, MVT &RegisterVT) const override
Certain targets such as MIPS require that some types such as vectors are always broken down into scal...
Definition:RISCVISelLowering.cpp:2284
llvm::RISCVTargetLowering::isLegalElementTypeForRVV
bool isLegalElementTypeForRVV(EVT ScalarTy) const
Definition:RISCVISelLowering.cpp:2550
llvm::RISCVTargetLowering::isVScaleKnownToBeAPowerOfTwo
bool isVScaleKnownToBeAPowerOfTwo() const override
Return true only if vscale must be a power of two.
Definition:RISCVISelLowering.cpp:21751
llvm::RISCVTargetLowering::getLMUL
static RISCVII::VLMUL getLMUL(MVT VT)
Definition:RISCVISelLowering.cpp:2359
llvm::RISCVTargetLowering::getLegalZfaFPImm
int getLegalZfaFPImm(const APFloat &Imm, EVT VT) const
Definition:RISCVISelLowering.cpp:2149
llvm::RISCVTargetLowering::LowerAsmOperandForConstraint
void LowerAsmOperandForConstraint(SDValue Op, StringRef Constraint, std::vector< SDValue > &Ops, SelectionDAG &DAG) const override
Lower the specified operand into the Ops vector.
Definition:RISCVISelLowering.cpp:21458
llvm::RISCVTargetLowering::splitValueIntoRegisterParts
bool splitValueIntoRegisterParts(SelectionDAG &DAG, const SDLoc &DL, SDValue Val, SDValue *Parts, unsigned NumParts, MVT PartVT, std::optional< CallingConv::ID > CC) const override
Target-specific splitting of values into parts that fit a register storing a legal type.
Definition:RISCVISelLowering.cpp:22059
llvm::RISCVTargetLowering::emitTrailingFence
Instruction * emitTrailingFence(IRBuilderBase &Builder, Instruction *Inst, AtomicOrdering Ord) const override
Definition:RISCVISelLowering.cpp:21514
llvm::RISCVTargetLowering::getNumRegistersForCallingConv
unsigned getNumRegistersForCallingConv(LLVMContext &Context, CallingConv::ID CC, EVT VT) const override
Return the number of registers for a given MVT, ensuring vectors are treated as a series of gpr sized...
Definition:RISCVISelLowering.cpp:2272
llvm::RISCVTargetLowering::getConstraintType
ConstraintType getConstraintType(StringRef Constraint) const override
getConstraintType - Given a constraint letter, return the type of constraint it is for this target.
Definition:RISCVISelLowering.cpp:21148
llvm::RISCVTargetLowering::shouldConsiderGEPOffsetSplit
bool shouldConsiderGEPOffsetSplit() const override
Definition:RISCVISelLowering.h:781
llvm::RISCVTargetLowering::EmitKCFICheck
MachineInstr * EmitKCFICheck(MachineBasicBlock &MBB, MachineBasicBlock::instr_iterator &MBBI, const TargetInstrInfo *TII) const override
Definition:RISCVISelLowering.cpp:22612
llvm::RISCVTargetLowering::isLegalInterleavedAccessType
bool isLegalInterleavedAccessType(VectorType *VTy, unsigned Factor, Align Alignment, unsigned AddrSpace, const DataLayout &) const
Returns whether or not generating a interleaved load/store intrinsic for this type will be legal.
Definition:RISCVISelLowering.cpp:22268
llvm::RISCVTargetLowering::canCreateUndefOrPoisonForTargetNode
bool canCreateUndefOrPoisonForTargetNode(SDValue Op, const APInt &DemandedElts, const SelectionDAG &DAG, bool PoisonOnly, bool ConsiderFlags, unsigned Depth) const override
Return true if Op can create undef or poison from non-undef & non-poison operands.
Definition:RISCVISelLowering.cpp:19116
llvm::RISCVTargetLowering::isIntDivCheap
bool isIntDivCheap(EVT VT, AttributeList Attr) const override
Return true if integer divide is usually cheaper than a sequence of several shifts,...
Definition:RISCVISelLowering.cpp:22220
llvm::RISCVTargetLowering::expandIndirectJTBranch
SDValue expandIndirectJTBranch(const SDLoc &dl, SDValue Value, SDValue Addr, int JTI, SelectionDAG &DAG) const override
Expands target specific indirect branch for the case of JumpTable expansion.
Definition:RISCVISelLowering.cpp:22800
llvm::RISCVTargetLowering::lowerDeinterleaveIntrinsicToLoad
bool lowerDeinterleaveIntrinsicToLoad(LoadInst *LI, ArrayRef< Value * > DeinterleaveValues) const override
Lower a deinterleave intrinsic to a target specific load intrinsic.
Definition:RISCVISelLowering.cpp:22480
llvm::RISCVTargetLowering::getNumRegisters
unsigned getNumRegisters(LLVMContext &Context, EVT VT, std::optional< MVT > RegisterVT=std::nullopt) const override
Return the number of registers for a given MVT, for inline assembly.
Definition:RISCVISelLowering.cpp:2262
llvm::RISCVTargetLowering::isMultiStoresCheaperThanBitsMerge
bool isMultiStoresCheaperThanBitsMerge(EVT LTy, EVT HTy) const override
Return true if it is cheaper to split the store of a merged int val from a pair of smaller values int...
Definition:RISCVISelLowering.h:585
llvm::RISCVTargetLowering::getPostIndexedAddressParts
bool getPostIndexedAddressParts(SDNode *N, SDNode *Op, SDValue &Base, SDValue &Offset, ISD::MemIndexedMode &AM, SelectionDAG &DAG) const override
Returns true by value, base pointer and offset pointer and addressing mode by reference if this node ...
Definition:RISCVISelLowering.cpp:21821
llvm::RISCVTargetLowering::shouldFormOverflowOp
bool shouldFormOverflowOp(unsigned Opcode, EVT VT, bool MathUsed) const override
Try to convert math with an overflow comparison into the corresponding DAG node operation.
Definition:RISCVISelLowering.h:680
llvm::RISCVTargetLowering::getPreIndexedAddressParts
bool getPreIndexedAddressParts(SDNode *N, SDValue &Base, SDValue &Offset, ISD::MemIndexedMode &AM, SelectionDAG &DAG) const override
Returns true by value, base pointer and offset pointer and addressing mode by reference if the node's...
Definition:RISCVISelLowering.cpp:21799
llvm::RISCVTargetLowering::joinRegisterPartsIntoValue
SDValue joinRegisterPartsIntoValue(SelectionDAG &DAG, const SDLoc &DL, const SDValue *Parts, unsigned NumParts, MVT PartVT, EVT ValueVT, std::optional< CallingConv::ID > CC) const override
Target-specific combining of register parts into its original value.
Definition:RISCVISelLowering.cpp:22153
llvm::RISCVTargetLowering::isMaskAndCmp0FoldingBeneficial
bool isMaskAndCmp0FoldingBeneficial(const Instruction &AndI) const override
Return if the target supports combining a chain like:
Definition:RISCVISelLowering.cpp:2011
llvm::RISCVTargetLowering::isSExtCheaperThanZExt
bool isSExtCheaperThanZExt(EVT SrcVT, EVT DstVT) const override
Return true if sign-extension from FromTy to ToTy is cheaper than zero-extension.
Definition:RISCVISelLowering.cpp:1993
llvm::RISCVTargetLowering::isLegalStridedLoadStore
bool isLegalStridedLoadStore(EVT DataType, Align Alignment) const
Return true if a stride load store of the given result type and alignment is legal.
Definition:RISCVISelLowering.cpp:22306
llvm::RISCVTargetLowering::LowerCall
SDValue LowerCall(TargetLowering::CallLoweringInfo &CLI, SmallVectorImpl< SDValue > &InVals) const override
This hook must be implemented to lower calls into the specified DAG.
Definition:RISCVISelLowering.cpp:20383
llvm::RISCVTargetLowering::isZExtFree
bool isZExtFree(SDValue Val, EVT VT2) const override
Return true if zero-extending the specific node Val to type VT2 is free (either because it's implicit...
Definition:RISCVISelLowering.cpp:1978
llvm::RISCVTargetLowering::getStackProbeSize
unsigned getStackProbeSize(const MachineFunction &MF, Align StackAlign) const
Definition:RISCVISelLowering.cpp:22863
llvm::RISCVTargetLowering::shouldInsertFencesForAtomic
bool shouldInsertFencesForAtomic(const Instruction *I) const override
Whether AtomicExpandPass should automatically insert fences and reduce ordering for this atomic.
Definition:RISCVISelLowering.cpp:22712
llvm::Register
Wrapper class representing virtual and physical registers.
Definition:Register.h:19
llvm::SDLoc
Wrapper class for IR location info (IR ordering and DebugLoc) to be passed into SDNode creation funct...
Definition:SelectionDAGNodes.h:1182
llvm::SDNode
Represents one node in the SelectionDAG.
Definition:SelectionDAGNodes.h:496
llvm::SDValue
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation.
Definition:SelectionDAGNodes.h:145
llvm::SelectionDAG
This is used to represent a portion of an LLVM function in a low-level Data Dependence DAG representa...
Definition:SelectionDAG.h:228
llvm::SelectionDAG::getMachineFunction
MachineFunction & getMachineFunction() const
Definition:SelectionDAG.h:492
llvm::ShuffleVectorInst
This instruction constructs a fixed permutation of two input vectors.
Definition:Instructions.h:1901
llvm::SmallVectorImpl
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
Definition:SmallVector.h:573
llvm::SmallVector
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition:SmallVector.h:1196
llvm::StoreInst
An instruction for storing to memory.
Definition:Instructions.h:292
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition:StringRef.h:51
llvm::TargetInstrInfo
TargetInstrInfo - Interface to description of machine instruction set.
Definition:TargetInstrInfo.h:112
llvm::TargetLoweringBase::shouldFormOverflowOp
virtual bool shouldFormOverflowOp(unsigned Opcode, EVT VT, bool MathUsed) const
Try to convert math with an overflow comparison into the corresponding DAG node operation.
Definition:TargetLowering.h:3354
llvm::TargetLoweringBase::ShiftLegalizationStrategy
ShiftLegalizationStrategy
Return the preferred strategy to legalize tihs SHIFT instruction, with ExpansionFactor being the recu...
Definition:TargetLowering.h:1077
llvm::TargetLoweringBase::ShiftLegalizationStrategy::LowerToLibcall
@ LowerToLibcall
llvm::TargetLoweringBase::preferredShiftLegalizationStrategy
virtual ShiftLegalizationStrategy preferredShiftLegalizationStrategy(SelectionDAG &DAG, SDNode *N, unsigned ExpansionFactor) const
Definition:TargetLowering.h:1083
llvm::TargetLoweringBase::AtomicExpansionKind
AtomicExpansionKind
Enum that specifies what an atomic load/AtomicRMWInst is expanded to, if at all.
Definition:TargetLowering.h:253
llvm::TargetLowering
This class defines information used to lower LLVM code to legal SelectionDAG operators that the targe...
Definition:TargetLowering.h:3780
llvm::TargetLowering::ConstraintType
ConstraintType
Definition:TargetLowering.h:4950
llvm::TargetMachine
Primary interface to the complete machine description for the target machine.
Definition:TargetMachine.h:77
llvm::TargetRegisterInfo
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
Definition:TargetRegisterInfo.h:235
llvm::Type
The instances of the Type class are immutable: once they are created, they are never changed.
Definition:Type.h:45
llvm::Value
LLVM Value Representation.
Definition:Value.h:74
llvm::VectorType
Base class of all SIMD vector types.
Definition:DerivedTypes.h:427
uint64_t
uint8_t
unsigned
llvm::CallingConv::Fast
@ Fast
Attempts to make calls as fast as possible (e.g.
Definition:CallingConv.h:41
llvm::CallingConv::C
@ C
The default llvm calling convention, compatible with C.
Definition:CallingConv.h:34
llvm::ISD::NodeType
NodeType
ISD::NodeType enum - This enum defines the target-independent operators for a SelectionDAG.
Definition:ISDOpcodes.h:40
llvm::ISD::BUILTIN_OP_END
@ BUILTIN_OP_END
BUILTIN_OP_END - This must be the last enum value in this list.
Definition:ISDOpcodes.h:1494
llvm::ISD::SIGN_EXTEND
@ SIGN_EXTEND
Conversion operators.
Definition:ISDOpcodes.h:805
llvm::ISD::MemIndexedMode
MemIndexedMode
MemIndexedMode enum - This enum defines the load / store indexed addressing modes.
Definition:ISDOpcodes.h:1559
llvm::ISD::CondCode
CondCode
ISD::CondCode enum - These are ordered carefully to make the bitfields below work out,...
Definition:ISDOpcodes.h:1610
llvm::RISCVII::VLMUL
VLMUL
Definition:RISCVTargetParser.h:69
llvm::RISCVISD::NodeType
NodeType
Definition:RISCVISelLowering.h:31
llvm::RISCVISD::AVGFLOORU_VL
@ AVGFLOORU_VL
Definition:RISCVISelLowering.h:299
llvm::RISCVISD::SF_VC_V_FV_SE
@ SF_VC_V_FV_SE
Definition:RISCVISelLowering.h:454
llvm::RISCVISD::SRLW
@ SRLW
Definition:RISCVISelLowering.h:94
llvm::RISCVISD::SplitF64
@ SplitF64
Turns a f64 into a pair of i32s.
Definition:RISCVISelLowering.h:69
llvm::RISCVISD::DIVW
@ DIVW
Definition:RISCVISelLowering.h:98
llvm::RISCVISD::SW_GUARDED_BRIND
@ SW_GUARDED_BRIND
Definition:RISCVISelLowering.h:432
llvm::RISCVISD::SF_VC_V_X_SE
@ SF_VC_V_X_SE
Definition:RISCVISelLowering.h:449
llvm::RISCVISD::SELECT_CC
@ SELECT_CC
Select with condition operator - This selects between a true value and a false value (ops #3 and #4) ...
Definition:RISCVISelLowering.h:44
llvm::RISCVISD::VFCVT_RM_F_X_VL
@ VFCVT_RM_F_X_VL
Definition:RISCVISelLowering.h:327
llvm::RISCVISD::SF_VC_V_VVW_SE
@ SF_VC_V_VVW_SE
Definition:RISCVISelLowering.h:461
llvm::RISCVISD::SHA256SIG0
@ SHA256SIG0
Definition:RISCVISelLowering.h:172
llvm::RISCVISD::VWMULU_VL
@ VWMULU_VL
Definition:RISCVISelLowering.h:348
llvm::RISCVISD::SLLW
@ SLLW
Definition:RISCVISelLowering.h:92
llvm::RISCVISD::WRITE_CSR
@ WRITE_CSR
Definition:RISCVISelLowering.h:418
llvm::RISCVISD::FSGNJX
@ FSGNJX
Definition:RISCVISelLowering.h:150
llvm::RISCVISD::VMV_V_X_VL
@ VMV_V_X_VL
Definition:RISCVISelLowering.h:188
llvm::RISCVISD::STRICT_FMUL_VL
@ STRICT_FMUL_VL
Definition:RISCVISelLowering.h:479
llvm::RISCVISD::VWSUB_W_VL
@ VWSUB_W_VL
Definition:RISCVISelLowering.h:356
llvm::RISCVISD::VMSET_VL
@ VMSET_VL
Definition:RISCVISelLowering.h:387
llvm::RISCVISD::SUB_VL
@ SUB_VL
Definition:RISCVISelLowering.h:276
llvm::RISCVISD::FABS_VL
@ FABS_VL
Definition:RISCVISelLowering.h:316
llvm::RISCVISD::VWADDU_VL
@ VWADDU_VL
Definition:RISCVISelLowering.h:351
llvm::RISCVISD::UADDSAT_VL
@ UADDSAT_VL
Definition:RISCVISelLowering.h:292
llvm::RISCVISD::FCLASS_VL
@ FCLASS_VL
Definition:RISCVISelLowering.h:318
llvm::RISCVISD::MULHU_VL
@ MULHU_VL
Definition:RISCVISelLowering.h:306
llvm::RISCVISD::STRICT_VFNMSUB_VL
@ STRICT_VFNMSUB_VL
Definition:RISCVISelLowering.h:485
llvm::RISCVISD::STRICT_UINT_TO_FP_VL
@ STRICT_UINT_TO_FP_VL
Definition:RISCVISelLowering.h:490
llvm::RISCVISD::CTTZ_VL
@ CTTZ_VL
Definition:RISCVISelLowering.h:288
llvm::RISCVISD::STRICT_SINT_TO_FP_VL
@ STRICT_SINT_TO_FP_VL
Definition:RISCVISelLowering.h:489
llvm::RISCVISD::CZERO_EQZ
@ CZERO_EQZ
Definition:RISCVISelLowering.h:427
llvm::RISCVISD::SM4ED
@ SM4ED
Definition:RISCVISelLowering.h:173
llvm::RISCVISD::FMUL_VL
@ FMUL_VL
Definition:RISCVISelLowering.h:309
llvm::RISCVISD::STRICT_VFCVT_RTZ_XU_F_VL
@ STRICT_VFCVT_RTZ_XU_F_VL
Definition:RISCVISelLowering.h:493
llvm::RISCVISD::VSLIDE1DOWN_VL
@ VSLIDE1DOWN_VL
Definition:RISCVISelLowering.h:223
llvm::RISCVISD::STRICT_FSETCC_VL
@ STRICT_FSETCC_VL
Definition:RISCVISelLowering.h:494
llvm::RISCVISD::RET_GLUE
@ RET_GLUE
Definition:RISCVISelLowering.h:33
llvm::RISCVISD::FROUND
@ FROUND
Definition:RISCVISelLowering.h:147
llvm::RISCVISD::CTZW
@ CTZW
Definition:RISCVISelLowering.h:108
llvm::RISCVISD::VWSLL_VL
@ VWSLL_VL
Definition:RISCVISelLowering.h:358
llvm::RISCVISD::ROLW
@ ROLW
Definition:RISCVISelLowering.h:103
llvm::RISCVISD::VSEXT_VL
@ VSEXT_VL
Definition:RISCVISelLowering.h:396
llvm::RISCVISD::SMIN_VL
@ SMIN_VL
Definition:RISCVISelLowering.h:280
llvm::RISCVISD::VMAND_VL
@ VMAND_VL
Definition:RISCVISelLowering.h:381
llvm::RISCVISD::FP_EXTEND_VL
@ FP_EXTEND_VL
Definition:RISCVISelLowering.h:330
llvm::RISCVISD::CLMUL
@ CLMUL
Definition:RISCVISelLowering.h:171
llvm::RISCVISD::FCLASS
@ FCLASS
Definition:RISCVISelLowering.h:149
llvm::RISCVISD::SDIV_VL
@ SDIV_VL
Definition:RISCVISelLowering.h:269
llvm::RISCVISD::VECREDUCE_UMAX_VL
@ VECREDUCE_UMAX_VL
Definition:RISCVISelLowering.h:251
llvm::RISCVISD::CTLZ_VL
@ CTLZ_VL
Definition:RISCVISelLowering.h:287
llvm::RISCVISD::LAST_MEMORY_OPCODE
@ LAST_MEMORY_OPCODE
Definition:RISCVISelLowering.h:505
llvm::RISCVISD::TAIL
@ TAIL
Definition:RISCVISelLowering.h:37
llvm::RISCVISD::VECREDUCE_XOR_VL
@ VECREDUCE_XOR_VL
Definition:RISCVISelLowering.h:257
llvm::RISCVISD::MUL_VL
@ MUL_VL
Definition:RISCVISelLowering.h:267
llvm::RISCVISD::MULHS_VL
@ MULHS_VL
Definition:RISCVISelLowering.h:305
llvm::RISCVISD::VFSLIDE1UP_VL
@ VFSLIDE1UP_VL
Definition:RISCVISelLowering.h:228
llvm::RISCVISD::TRUNCATE_VECTOR_VL_USAT
@ TRUNCATE_VECTOR_VL_USAT
Definition:RISCVISelLowering.h:212
llvm::RISCVISD::OR_VL
@ OR_VL
Definition:RISCVISelLowering.h:268
llvm::RISCVISD::VFMV_V_F_VL
@ VFMV_V_F_VL
Definition:RISCVISelLowering.h:192
llvm::RISCVISD::SHA256SUM0
@ SHA256SUM0
Definition:RISCVISelLowering.h:172
llvm::RISCVISD::ORC_B
@ ORC_B
Definition:RISCVISelLowering.h:166
llvm::RISCVISD::RORW
@ RORW
Definition:RISCVISelLowering.h:104
llvm::RISCVISD::TH_SWD
@ TH_SWD
Definition:RISCVISelLowering.h:503
llvm::RISCVISD::FMV_X_SIGNEXTH
@ FMV_X_SIGNEXTH
Definition:RISCVISelLowering.h:126
llvm::RISCVISD::VFMV_S_F_VL
@ VFMV_S_F_VL
Definition:RISCVISelLowering.h:199
llvm::RISCVISD::CLMULR
@ CLMULR
Definition:RISCVISelLowering.h:171
llvm::RISCVISD::HI
@ HI
Definition:RISCVISelLowering.h:74
llvm::RISCVISD::VWSUBU_VL
@ VWSUBU_VL
Definition:RISCVISelLowering.h:353
llvm::RISCVISD::VECREDUCE_ADD_VL
@ VECREDUCE_ADD_VL
Definition:RISCVISelLowering.h:250
llvm::RISCVISD::VMV_X_S
@ VMV_X_S
Definition:RISCVISelLowering.h:195
llvm::RISCVISD::SHA256SUM1
@ SHA256SUM1
Definition:RISCVISelLowering.h:172
llvm::RISCVISD::VECREDUCE_OR_VL
@ VECREDUCE_OR_VL
Definition:RISCVISelLowering.h:256
llvm::RISCVISD::SF_VC_V_FVV_SE
@ SF_VC_V_FVV_SE
Definition:RISCVISelLowering.h:458
llvm::RISCVISD::VMERGE_VL
@ VMERGE_VL
Definition:RISCVISelLowering.h:378
llvm::RISCVISD::FIRST_STRICTFP_OPCODE
@ FIRST_STRICTFP_OPCODE
Definition:RISCVISelLowering.h:474
llvm::RISCVISD::UINT_TO_FP_VL
@ UINT_TO_FP_VL
Definition:RISCVISelLowering.h:326
llvm::RISCVISD::AVGFLOORS_VL
@ AVGFLOORS_VL
Definition:RISCVISelLowering.h:297
llvm::RISCVISD::SF_VC_V_XVW_SE
@ SF_VC_V_XVW_SE
Definition:RISCVISelLowering.h:459
llvm::RISCVISD::VWADD_W_VL
@ VWADD_W_VL
Definition:RISCVISelLowering.h:354
llvm::RISCVISD::VFMADD_VL
@ VFMADD_VL
Definition:RISCVISelLowering.h:333
llvm::RISCVISD::VRGATHER_VX_VL
@ VRGATHER_VX_VL
Definition:RISCVISelLowering.h:391
llvm::RISCVISD::MOPR
@ MOPR
Definition:RISCVISelLowering.h:177
llvm::RISCVISD::BITREVERSE_VL
@ BITREVERSE_VL
Definition:RISCVISelLowering.h:285
llvm::RISCVISD::UREM_VL
@ UREM_VL
Definition:RISCVISelLowering.h:278
llvm::RISCVISD::VSLIDEDOWN_VL
@ VSLIDEDOWN_VL
Definition:RISCVISelLowering.h:218
llvm::RISCVISD::VMV_S_X_VL
@ VMV_S_X_VL
Definition:RISCVISelLowering.h:197
llvm::RISCVISD::CTPOP_VL
@ CTPOP_VL
Definition:RISCVISelLowering.h:289
llvm::RISCVISD::CLZW
@ CLZW
Definition:RISCVISelLowering.h:107
llvm::RISCVISD::SINT_TO_FP_VL
@ SINT_TO_FP_VL
Definition:RISCVISelLowering.h:325
llvm::RISCVISD::BR_CC
@ BR_CC
Definition:RISCVISelLowering.h:45
llvm::RISCVISD::VID_VL
@ VID_VL
Definition:RISCVISelLowering.h:232
llvm::RISCVISD::SF_VC_V_XVV_SE
@ SF_VC_V_XVV_SE
Definition:RISCVISelLowering.h:455
llvm::RISCVISD::VMOR_VL
@ VMOR_VL
Definition:RISCVISelLowering.h:382
llvm::RISCVISD::SMAX_VL
@ SMAX_VL
Definition:RISCVISelLowering.h:281
llvm::RISCVISD::FCVT_W_RV64
@ FCVT_W_RV64
Definition:RISCVISelLowering.h:139
llvm::RISCVISD::VWADD_VL
@ VWADD_VL
Definition:RISCVISelLowering.h:350
llvm::RISCVISD::AVGCEILU_VL
@ AVGCEILU_VL
Definition:RISCVISelLowering.h:303
llvm::RISCVISD::XOR_VL
@ XOR_VL
Definition:RISCVISelLowering.h:279
llvm::RISCVISD::SRAW
@ SRAW
Definition:RISCVISelLowering.h:93
llvm::RISCVISD::SF_VC_FVW_SE
@ SF_VC_FVW_SE
Definition:RISCVISelLowering.h:448
llvm::RISCVISD::SF_VC_V_FVW_SE
@ SF_VC_V_FVW_SE
Definition:RISCVISelLowering.h:462
llvm::RISCVISD::FCVT_WU_RV64
@ FCVT_WU_RV64
Definition:RISCVISelLowering.h:140
llvm::RISCVISD::SF_VC_V_VV_SE
@ SF_VC_V_VV_SE
Definition:RISCVISelLowering.h:453
llvm::RISCVISD::SWAP_CSR
@ SWAP_CSR
Definition:RISCVISelLowering.h:423
llvm::RISCVISD::VWSUBU_W_VL
@ VWSUBU_W_VL
Definition:RISCVISelLowering.h:357
llvm::RISCVISD::SREM_VL
@ SREM_VL
Definition:RISCVISelLowering.h:271
llvm::RISCVISD::SF_VC_V_I_SE
@ SF_VC_V_I_SE
Definition:RISCVISelLowering.h:450
llvm::RISCVISD::FDIV_VL
@ FDIV_VL
Definition:RISCVISelLowering.h:310
llvm::RISCVISD::SF_VC_VVV_SE
@ SF_VC_VVV_SE
Definition:RISCVISelLowering.h:443
llvm::RISCVISD::UMAX_VL
@ UMAX_VL
Definition:RISCVISelLowering.h:283
llvm::RISCVISD::STRICT_FCVT_W_RV64
@ STRICT_FCVT_W_RV64
Definition:RISCVISelLowering.h:475
llvm::RISCVISD::VFWSUB_W_VL
@ VFWSUB_W_VL
Definition:RISCVISelLowering.h:364
llvm::RISCVISD::BuildPairF64
@ BuildPairF64
Turns a pair of i32s into an f64.
Definition:RISCVISelLowering.h:63
llvm::RISCVISD::VWMUL_VL
@ VWMUL_VL
Definition:RISCVISelLowering.h:347
llvm::RISCVISD::VMXOR_VL
@ VMXOR_VL
Definition:RISCVISelLowering.h:383
llvm::RISCVISD::VECREDUCE_FADD_VL
@ VECREDUCE_FADD_VL
Definition:RISCVISelLowering.h:258
llvm::RISCVISD::SF_VC_V_IVV_SE
@ SF_VC_V_IVV_SE
Definition:RISCVISelLowering.h:456
llvm::RISCVISD::SF_VC_V_IVW_SE
@ SF_VC_V_IVW_SE
Definition:RISCVISelLowering.h:460
llvm::RISCVISD::BuildGPRPair
@ BuildGPRPair
Turn a pair of i<xlen>s into an even-odd register pair (untyped).
Definition:RISCVISelLowering.h:51
llvm::RISCVISD::VWMACCU_VL
@ VWMACCU_VL
Definition:RISCVISelLowering.h:369
llvm::RISCVISD::CZERO_NEZ
@ CZERO_NEZ
Definition:RISCVISelLowering.h:428
llvm::RISCVISD::LLA
@ LLA
Definition:RISCVISelLowering.h:77
llvm::RISCVISD::STRICT_FSETCCS_VL
@ STRICT_FSETCCS_VL
Definition:RISCVISelLowering.h:495
llvm::RISCVISD::SHL_VL
@ SHL_VL
Definition:RISCVISelLowering.h:270
llvm::RISCVISD::STRICT_VFMADD_VL
@ STRICT_VFMADD_VL
Definition:RISCVISelLowering.h:482
llvm::RISCVISD::SHA256SIG1
@ SHA256SIG1
Definition:RISCVISelLowering.h:172
llvm::RISCVISD::FSQRT_VL
@ FSQRT_VL
Definition:RISCVISelLowering.h:317
llvm::RISCVISD::FMV_H_X
@ FMV_H_X
Definition:RISCVISelLowering.h:124
llvm::RISCVISD::SF_VC_XV_SE
@ SF_VC_XV_SE
Definition:RISCVISelLowering.h:437
llvm::RISCVISD::VFWMUL_VL
@ VFWMUL_VL
Definition:RISCVISelLowering.h:360
llvm::RISCVISD::VWMACC_VL
@ VWMACC_VL
Definition:RISCVISelLowering.h:368
llvm::RISCVISD::VFIRST_VL
@ VFIRST_VL
Definition:RISCVISelLowering.h:403
llvm::RISCVISD::VWMULSU_VL
@ VWMULSU_VL
Definition:RISCVISelLowering.h:349
llvm::RISCVISD::VWSUB_VL
@ VWSUB_VL
Definition:RISCVISelLowering.h:352
llvm::RISCVISD::VFWNMSUB_VL
@ VFWNMSUB_VL
Definition:RISCVISelLowering.h:343
llvm::RISCVISD::VFCVT_RM_XU_F_VL
@ VFCVT_RM_XU_F_VL
Definition:RISCVISelLowering.h:324
llvm::RISCVISD::VECREDUCE_SMAX_VL
@ VECREDUCE_SMAX_VL
Definition:RISCVISelLowering.h:252
llvm::RISCVISD::SRA_VL
@ SRA_VL
Definition:RISCVISelLowering.h:272
llvm::RISCVISD::TH_LWUD
@ TH_LWUD
Definition:RISCVISelLowering.h:501
llvm::RISCVISD::SM3P1
@ SM3P1
Definition:RISCVISelLowering.h:174
llvm::RISCVISD::VECREDUCE_FMAX_VL
@ VECREDUCE_FMAX_VL
Definition:RISCVISelLowering.h:261
llvm::RISCVISD::VECREDUCE_AND_VL
@ VECREDUCE_AND_VL
Definition:RISCVISelLowering.h:255
llvm::RISCVISD::VFNCVT_ROD_VL
@ VFNCVT_ROD_VL
Definition:RISCVISelLowering.h:237
llvm::RISCVISD::LAST_VL_VECTOR_OP
@ LAST_VL_VECTOR_OP
Definition:RISCVISelLowering.h:405
llvm::RISCVISD::ROTR_VL
@ ROTR_VL
Definition:RISCVISelLowering.h:275
llvm::RISCVISD::USUBSAT_VL
@ USUBSAT_VL
Definition:RISCVISelLowering.h:294
llvm::RISCVISD::STRICT_VFROUND_NOEXCEPT_VL
@ STRICT_VFROUND_NOEXCEPT_VL
Definition:RISCVISelLowering.h:496
llvm::RISCVISD::VFWMSUB_VL
@ VFWMSUB_VL
Definition:RISCVISelLowering.h:342
llvm::RISCVISD::SADDSAT_VL
@ SADDSAT_VL
Definition:RISCVISelLowering.h:291
llvm::RISCVISD::VMV_V_V_VL
@ VMV_V_V_VL
Definition:RISCVISelLowering.h:184
llvm::RISCVISD::FMAX
@ FMAX
Definition:RISCVISelLowering.h:153
llvm::RISCVISD::VSLIDE1UP_VL
@ VSLIDE1UP_VL
Definition:RISCVISelLowering.h:222
llvm::RISCVISD::VFMAX_VL
@ VFMAX_VL
Definition:RISCVISelLowering.h:312
llvm::RISCVISD::STRICT_VFNMADD_VL
@ STRICT_VFNMADD_VL
Definition:RISCVISelLowering.h:483
llvm::RISCVISD::BSWAP_VL
@ BSWAP_VL
Definition:RISCVISelLowering.h:286
llvm::RISCVISD::VFCVT_RM_X_F_VL
@ VFCVT_RM_X_F_VL
Definition:RISCVISelLowering.h:323
llvm::RISCVISD::VCPOP_VL
@ VCPOP_VL
Definition:RISCVISelLowering.h:400
llvm::RISCVISD::UDIV_VL
@ UDIV_VL
Definition:RISCVISelLowering.h:277
llvm::RISCVISD::SF_VC_FV_SE
@ SF_VC_FV_SE
Definition:RISCVISelLowering.h:440
llvm::RISCVISD::CALL
@ CALL
Definition:RISCVISelLowering.h:36
llvm::RISCVISD::READ_VLENB
@ READ_VLENB
Definition:RISCVISelLowering.h:408
llvm::RISCVISD::FCVT_X
@ FCVT_X
Definition:RISCVISelLowering.h:133
llvm::RISCVISD::READ_CSR
@ READ_CSR
Definition:RISCVISelLowering.h:413
llvm::RISCVISD::VWMACCSU_VL
@ VWMACCSU_VL
Definition:RISCVISelLowering.h:370
llvm::RISCVISD::FIRST_NUMBER
@ FIRST_NUMBER
Definition:RISCVISelLowering.h:32
llvm::RISCVISD::AND_VL
@ AND_VL
Definition:RISCVISelLowering.h:266
llvm::RISCVISD::SPLAT_VECTOR_SPLIT_I64_VL
@ SPLAT_VECTOR_SPLIT_I64_VL
Definition:RISCVISelLowering.h:203
llvm::RISCVISD::SM4KS
@ SM4KS
Definition:RISCVISelLowering.h:173
llvm::RISCVISD::SplitGPRPair
@ SplitGPRPair
Turn an even-odd register pair (untyped) into a pair of i<xlen>s.
Definition:RISCVISelLowering.h:57
llvm::RISCVISD::VFSLIDE1DOWN_VL
@ VFSLIDE1DOWN_VL
Definition:RISCVISelLowering.h:229
llvm::RISCVISD::READ_COUNTER_WIDE
@ READ_COUNTER_WIDE
Definition:RISCVISelLowering.h:161
llvm::RISCVISD::TRUNCATE_VECTOR_VL
@ TRUNCATE_VECTOR_VL
Definition:RISCVISelLowering.h:206
llvm::RISCVISD::MOPRR
@ MOPRR
Definition:RISCVISelLowering.h:177
llvm::RISCVISD::SF_VC_V_VVV_SE
@ SF_VC_V_VVV_SE
Definition:RISCVISelLowering.h:457
llvm::RISCVISD::TH_LWD
@ TH_LWD
Definition:RISCVISelLowering.h:500
llvm::RISCVISD::VZEXT_VL
@ VZEXT_VL
Definition:RISCVISelLowering.h:397
llvm::RISCVISD::ADD_TPREL
@ ADD_TPREL
Definition:RISCVISelLowering.h:80
llvm::RISCVISD::TRUNCATE_VECTOR_VL_SSAT
@ TRUNCATE_VECTOR_VL_SSAT
Definition:RISCVISelLowering.h:211
llvm::RISCVISD::STRICT_FADD_VL
@ STRICT_FADD_VL
Definition:RISCVISelLowering.h:477
llvm::RISCVISD::SF_VC_XVW_SE
@ SF_VC_XVW_SE
Definition:RISCVISelLowering.h:445
llvm::RISCVISD::SETCC_VL
@ SETCC_VL
Definition:RISCVISelLowering.h:374
llvm::RISCVISD::FIRST_VL_VECTOR_OP
@ FIRST_VL_VECTOR_OP
Definition:RISCVISelLowering.h:180
llvm::RISCVISD::UNZIP
@ UNZIP
Definition:RISCVISelLowering.h:168
llvm::RISCVISD::STRICT_VFCVT_RTZ_X_F_VL
@ STRICT_VFCVT_RTZ_X_F_VL
Definition:RISCVISelLowering.h:492
llvm::RISCVISD::FLI
@ FLI
Definition:RISCVISelLowering.h:156
llvm::RISCVISD::STRICT_FSUB_VL
@ STRICT_FSUB_VL
Definition:RISCVISelLowering.h:478
llvm::RISCVISD::STRICT_FDIV_VL
@ STRICT_FDIV_VL
Definition:RISCVISelLowering.h:480
llvm::RISCVISD::UMIN_VL
@ UMIN_VL
Definition:RISCVISelLowering.h:282
llvm::RISCVISD::FSUB_VL
@ FSUB_VL
Definition:RISCVISelLowering.h:308
llvm::RISCVISD::VFCVT_RTZ_XU_F_VL
@ VFCVT_RTZ_XU_F_VL
Definition:RISCVISelLowering.h:321
llvm::RISCVISD::FMV_X_ANYEXTH
@ FMV_X_ANYEXTH
Definition:RISCVISelLowering.h:125
llvm::RISCVISD::VFCVT_RM_F_XU_VL
@ VFCVT_RM_F_XU_VL
Definition:RISCVISelLowering.h:328
llvm::RISCVISD::STRICT_VFCVT_RM_X_F_VL
@ STRICT_VFCVT_RM_X_F_VL
Definition:RISCVISelLowering.h:491
llvm::RISCVISD::ZIP
@ ZIP
Definition:RISCVISelLowering.h:167
llvm::RISCVISD::STRICT_FSQRT_VL
@ STRICT_FSQRT_VL
Definition:RISCVISelLowering.h:481
llvm::RISCVISD::VFNMSUB_VL
@ VFNMSUB_VL
Definition:RISCVISelLowering.h:336
llvm::RISCVISD::LAST_STRICTFP_OPCODE
@ LAST_STRICTFP_OPCODE
Definition:RISCVISelLowering.h:497
llvm::RISCVISD::VFMSUB_VL
@ VFMSUB_VL
Definition:RISCVISelLowering.h:335
llvm::RISCVISD::SF_VC_VV_SE
@ SF_VC_VV_SE
Definition:RISCVISelLowering.h:439
llvm::RISCVISD::TH_SDD
@ TH_SDD
Definition:RISCVISelLowering.h:504
llvm::RISCVISD::VFWADD_VL
@ VFWADD_VL
Definition:RISCVISelLowering.h:361
llvm::RISCVISD::FIRST_MEMORY_OPCODE
@ FIRST_MEMORY_OPCODE
Definition:RISCVISelLowering.h:499
llvm::RISCVISD::SF_VC_V_IV_SE
@ SF_VC_V_IV_SE
Definition:RISCVISelLowering.h:452
llvm::RISCVISD::SF_VC_VVW_SE
@ SF_VC_VVW_SE
Definition:RISCVISelLowering.h:447
llvm::RISCVISD::SRL_VL
@ SRL_VL
Definition:RISCVISelLowering.h:273
llvm::RISCVISD::SF_VC_IVW_SE
@ SF_VC_IVW_SE
Definition:RISCVISelLowering.h:446
llvm::RISCVISD::FADD_VL
@ FADD_VL
Definition:RISCVISelLowering.h:307
llvm::RISCVISD::ROTL_VL
@ ROTL_VL
Definition:RISCVISelLowering.h:274
llvm::RISCVISD::STRICT_FP_EXTEND_VL
@ STRICT_FP_EXTEND_VL
Definition:RISCVISelLowering.h:487
llvm::RISCVISD::STRICT_FP_ROUND_VL
@ STRICT_FP_ROUND_VL
Definition:RISCVISelLowering.h:486
llvm::RISCVISD::VECREDUCE_UMIN_VL
@ VECREDUCE_UMIN_VL
Definition:RISCVISelLowering.h:253
llvm::RISCVISD::SF_VC_XVV_SE
@ SF_VC_XVV_SE
Definition:RISCVISelLowering.h:441
llvm::RISCVISD::FCOPYSIGN_VL
@ FCOPYSIGN_VL
Definition:RISCVISelLowering.h:319
llvm::RISCVISD::VRGATHER_VV_VL
@ VRGATHER_VV_VL
Definition:RISCVISelLowering.h:392
llvm::RISCVISD::DIVUW
@ DIVUW
Definition:RISCVISelLowering.h:99
llvm::RISCVISD::FMIN
@ FMIN
Definition:RISCVISelLowering.h:153
llvm::RISCVISD::VFWMADD_VL
@ VFWMADD_VL
Definition:RISCVISelLowering.h:340
llvm::RISCVISD::VRGATHEREI16_VV_VL
@ VRGATHEREI16_VV_VL
Definition:RISCVISelLowering.h:393
llvm::RISCVISD::SSUBSAT_VL
@ SSUBSAT_VL
Definition:RISCVISelLowering.h:293
llvm::RISCVISD::VWADDU_W_VL
@ VWADDU_W_VL
Definition:RISCVISelLowering.h:355
llvm::RISCVISD::STRICT_VFMSUB_VL
@ STRICT_VFMSUB_VL
Definition:RISCVISelLowering.h:484
llvm::RISCVISD::SM3P0
@ SM3P0
Definition:RISCVISelLowering.h:174
llvm::RISCVISD::VMCLR_VL
@ VMCLR_VL
Definition:RISCVISelLowering.h:386
llvm::RISCVISD::VFROUND_NOEXCEPT_VL
@ VFROUND_NOEXCEPT_VL
Definition:RISCVISelLowering.h:322
llvm::RISCVISD::MULHSU
@ MULHSU
Definition:RISCVISelLowering.h:83
llvm::RISCVISD::SF_VC_V_XV_SE
@ SF_VC_V_XV_SE
Definition:RISCVISelLowering.h:451
llvm::RISCVISD::REMUW
@ REMUW
Definition:RISCVISelLowering.h:100
llvm::RISCVISD::MRET_GLUE
@ MRET_GLUE
Definition:RISCVISelLowering.h:35
llvm::RISCVISD::SW_GUARDED_CALL
@ SW_GUARDED_CALL
Definition:RISCVISelLowering.h:434
llvm::RISCVISD::CLMULH
@ CLMULH
Definition:RISCVISelLowering.h:171
llvm::RISCVISD::SRET_GLUE
@ SRET_GLUE
Definition:RISCVISelLowering.h:34
llvm::RISCVISD::VFWSUB_VL
@ VFWSUB_VL
Definition:RISCVISelLowering.h:362
llvm::RISCVISD::ABSW
@ ABSW
Definition:RISCVISelLowering.h:111
llvm::RISCVISD::VFCVT_RTZ_X_F_VL
@ VFCVT_RTZ_X_F_VL
Definition:RISCVISelLowering.h:320
llvm::RISCVISD::ADD_VL
@ ADD_VL
Definition:RISCVISelLowering.h:265
llvm::RISCVISD::PROBED_ALLOCA
@ PROBED_ALLOCA
Definition:RISCVISelLowering.h:466
llvm::RISCVISD::VECREDUCE_SMIN_VL
@ VECREDUCE_SMIN_VL
Definition:RISCVISelLowering.h:254
llvm::RISCVISD::TUPLE_INSERT
@ TUPLE_INSERT
Definition:RISCVISelLowering.h:469
llvm::RISCVISD::VECREDUCE_FMIN_VL
@ VECREDUCE_FMIN_VL
Definition:RISCVISelLowering.h:260
llvm::RISCVISD::VFMIN_VL
@ VFMIN_VL
Definition:RISCVISelLowering.h:311
llvm::RISCVISD::SF_VC_IV_SE
@ SF_VC_IV_SE
Definition:RISCVISelLowering.h:438
llvm::RISCVISD::FCVT_XU
@ FCVT_XU
Definition:RISCVISelLowering.h:134
llvm::RISCVISD::VFNMADD_VL
@ VFNMADD_VL
Definition:RISCVISelLowering.h:334
llvm::RISCVISD::BREV8
@ BREV8
Definition:RISCVISelLowering.h:165
llvm::RISCVISD::SF_VC_FVV_SE
@ SF_VC_FVV_SE
Definition:RISCVISelLowering.h:444
llvm::RISCVISD::AVGCEILS_VL
@ AVGCEILS_VL
Definition:RISCVISelLowering.h:301
llvm::RISCVISD::VECREDUCE_SEQ_FADD_VL
@ VECREDUCE_SEQ_FADD_VL
Definition:RISCVISelLowering.h:259
llvm::RISCVISD::STRICT_FCVT_WU_RV64
@ STRICT_FCVT_WU_RV64
Definition:RISCVISelLowering.h:476
llvm::RISCVISD::SHL_ADD
@ SHL_ADD
Definition:RISCVISelLowering.h:88
llvm::RISCVISD::FMV_W_X_RV64
@ FMV_W_X_RV64
Definition:RISCVISelLowering.h:127
llvm::RISCVISD::FNEG_VL
@ FNEG_VL
Definition:RISCVISelLowering.h:315
llvm::RISCVISD::TUPLE_EXTRACT
@ TUPLE_EXTRACT
Definition:RISCVISelLowering.h:470
llvm::RISCVISD::STRICT_VFNCVT_ROD_VL
@ STRICT_VFNCVT_ROD_VL
Definition:RISCVISelLowering.h:488
llvm::RISCVISD::ADD_LO
@ ADD_LO
Definition:RISCVISelLowering.h:72
llvm::RISCVISD::VFWNMADD_VL
@ VFWNMADD_VL
Definition:RISCVISelLowering.h:341
llvm::RISCVISD::SF_VC_IVV_SE
@ SF_VC_IVV_SE
Definition:RISCVISelLowering.h:442
llvm::RISCVISD::TH_LDD
@ TH_LDD
Definition:RISCVISelLowering.h:502
llvm::RISCVISD::VFWADD_W_VL
@ VFWADD_W_VL
Definition:RISCVISelLowering.h:363
llvm::RISCVISD::FMV_X_ANYEXTW_RV64
@ FMV_X_ANYEXTW_RV64
Definition:RISCVISelLowering.h:128
llvm::RISCVISD::VSLIDEUP_VL
@ VSLIDEUP_VL
Definition:RISCVISelLowering.h:217
llvm::RISCVISD::SW_GUARDED_TAIL
@ SW_GUARDED_TAIL
Definition:RISCVISelLowering.h:435
llvm::RISCVISD::FP_ROUND_VL
@ FP_ROUND_VL
Definition:RISCVISelLowering.h:329
llvm::RISCV::RVVBitsPerBlock
static constexpr unsigned RVVBitsPerBlock
Definition:RISCVTargetParser.h:51
llvm::sampleprof::Base
@ Base
Definition:Discriminator.h:58
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:AddressRanges.h:18
llvm::Offset
@ Offset
Definition:DWP.cpp:480
llvm::Depth
@ Depth
Definition:SIMachineScheduler.h:36
llvm::AtomicOrdering
AtomicOrdering
Atomic ordering for LLVM's memory model.
Definition:AtomicOrdering.h:56
llvm::CombineLevel
CombineLevel
Definition:DAGCombine.h:15
llvm::RISCVCCAssignFn
bool RISCVCCAssignFn(unsigned ValNo, MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, CCState &State, bool IsFixed, bool IsRet, Type *OrigTy)
RISCVCCAssignFn - This target-specific function extends the default CCValAssign with additional infor...
Definition:RISCVCallingConv.h:21
N
#define N
llvm::Align
This struct is a compact representation of a valid (non-zero power of two) alignment.
Definition:Alignment.h:39
llvm::EVT
Extended Value Type.
Definition:ValueTypes.h:35
llvm::EVT::isFloatingPoint
bool isFloatingPoint() const
Return true if this is a FP or a vector FP type.
Definition:ValueTypes.h:147
llvm::EVT::isScalarInteger
bool isScalarInteger() const
Return true if this is an integer, but not a vector.
Definition:ValueTypes.h:157
llvm::EVT::isInteger
bool isInteger() const
Return true if this is an integer or a vector integer type.
Definition:ValueTypes.h:152
llvm::KnownBits
Definition:KnownBits.h:23
llvm::MemOp
Definition:TargetLowering.h:115
llvm::RISCVRegisterInfo
Definition:RISCVRegisterInfo.h:56
llvm::RISCVVIntrinsicsTable::RISCVVIntrinsicInfo
Definition:RISCVISelLowering.h:1085
llvm::RISCVVIntrinsicsTable::RISCVVIntrinsicInfo::VLOperand
uint8_t VLOperand
Definition:RISCVISelLowering.h:1088
llvm::RISCVVIntrinsicsTable::RISCVVIntrinsicInfo::ScalarOperand
uint8_t ScalarOperand
Definition:RISCVISelLowering.h:1087
llvm::RISCVVIntrinsicsTable::RISCVVIntrinsicInfo::hasVLOperand
bool hasVLOperand() const
Definition:RISCVISelLowering.h:1093
llvm::RISCVVIntrinsicsTable::RISCVVIntrinsicInfo::hasScalarOperand
bool hasScalarOperand() const
Definition:RISCVISelLowering.h:1089
llvm::RISCVVIntrinsicsTable::RISCVVIntrinsicInfo::IntrinsicID
unsigned IntrinsicID
Definition:RISCVISelLowering.h:1086
llvm::TargetLowering::CallLoweringInfo
This structure contains all information that is necessary for lowering calls.
Definition:TargetLowering.h:4529

Generated on Thu Jul 17 2025 15:27:50 for LLVM by doxygen 1.9.6
[8]ページ先頭

©2009-2025 Movatter.jp