diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-16 18:00:32 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-16 18:00:32 +0800 |
| commit | 6c7422accb0964d37bb826e3fb798f2d86ca3b42 (patch) | |
| tree | 357a80d93c943b2c9bc8dc20e522650afaa45c61 /backend/lib/Target/RISCV/RISCVGISel.rccdesc | |
| parent | 864a29abbdce86353ec91c3587757711d3a42f10 (diff) | |
| download | rcc-project-6c7422accb0964d37bb826e3fb798f2d86ca3b42.tar.gz rcc-project-6c7422accb0964d37bb826e3fb798f2d86ca3b42.tar.xz | |
[RISCV][GlobalISel] Generate floating-point selections
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVGISel.rccdesc')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVGISel.rccdesc | 792 |
1 files changed, 0 insertions, 792 deletions
diff --git a/backend/lib/Target/RISCV/RISCVGISel.rccdesc b/backend/lib/Target/RISCV/RISCVGISel.rccdesc deleted file mode 100644 index d8b0a42..0000000 --- a/backend/lib/Target/RISCV/RISCVGISel.rccdesc +++ /dev/null @@ -1,792 +0,0 @@ -selection_rules: - - - id: select_g_sllw - priority: 100 - match: - opcode: G_SLLW - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: GPR } - - { index: 2, bank: GPR } - apply: - instructions: - - opcode: SLLW - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_sraw - priority: 100 - match: - opcode: G_SRAW - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: GPR } - - { index: 2, bank: GPR } - apply: - instructions: - - opcode: SRAW - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_srlw - priority: 100 - match: - opcode: G_SRLW - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: GPR } - - { index: 2, bank: GPR } - apply: - instructions: - - opcode: SRLW - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_divw - priority: 100 - match: - opcode: G_DIVW - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: GPR } - - { index: 2, bank: GPR } - apply: - instructions: - - opcode: DIVW - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_divuw - priority: 100 - match: - opcode: G_DIVUW - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: GPR } - - { index: 2, bank: GPR } - apply: - instructions: - - opcode: DIVUW - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_remuw - priority: 100 - match: - opcode: G_REMUW - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: GPR } - - { index: 2, bank: GPR } - apply: - instructions: - - opcode: REMUW - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_fcvt_w_rv64_s32 - priority: 100 - match: - opcode: G_FCVT_W_RV64 - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 32 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: FPR } - apply: - instructions: - - opcode: FCVT_W_S - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_fcvt_w_rv64_s64 - priority: 100 - match: - opcode: G_FCVT_W_RV64 - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: FPR } - apply: - instructions: - - opcode: FCVT_W_D - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_fcvt_wu_rv64_s32 - priority: 100 - match: - opcode: G_FCVT_WU_RV64 - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 32 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: FPR } - apply: - instructions: - - opcode: FCVT_WU_S - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_fcvt_wu_rv64_s64 - priority: 100 - match: - opcode: G_FCVT_WU_RV64 - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: FPR } - apply: - instructions: - - opcode: FCVT_WU_D - root: true - operands: [{ operand: 0 }, { operand: 1 }, { operand: 2 }] - - - id: select_g_fclass_s32 - priority: 100 - match: - opcode: G_FCLASS - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 32 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: FPR } - apply: - instructions: - - opcode: FCLASS_S - root: true - operands: [{ operand: 0 }, { operand: 1 }] - - - id: select_g_fclass_s64 - priority: 100 - match: - opcode: G_FCLASS - result_type: { kind: scalar, bits: 64 } - operand_types: - - { index: 1, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 1, bank: FPR } - apply: - instructions: - - opcode: FCLASS_D - root: true - operands: [{ operand: 0 }, { operand: 1 }] - - - id: select_g_icmp_eq_zero - priority: 500 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: eq } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: [{ min: 0, max: 0 }] - apply: - instructions: - - opcode: SLTIU - root: true - operands: [{ operand: 0 }, { operand: 2 }, { immediate: 1 }] - erase_operand_definitions: [3] - - - id: select_g_icmp_ne_zero - priority: 500 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ne } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: [{ min: 0, max: 0 }] - apply: - instructions: - - opcode: SLTU - root: true - operands: - - { operand: 0 } - - { physical_register: X0, flags: [use] } - - { operand: 2 } - erase_operand_definitions: [3] - - - id: select_g_icmp_ult_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ult } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: [{ min: -2048, max: 2047 }] - apply: - instructions: - - opcode: SLTIU - root: true - operands: - - { operand: 0 } - - { operand: 2 } - - { captured_immediate: 3 } - erase_operand_definitions: [3] - - - id: select_g_icmp_slt_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: slt } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: [{ min: -2048, max: 2047 }] - apply: - instructions: - - opcode: SLTI - root: true - operands: - - { operand: 0 } - - { operand: 2 } - - { captured_immediate: 3 } - erase_operand_definitions: [3] - - - id: select_g_icmp_ugt_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ugt } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: - - { min: -2049, max: -2 } - - { min: 1, max: 2046 } - apply: - temporaries: - - { id: compare, type_from_operand: 2 } - instructions: - - opcode: SLTIU - root: true - operands: - - { temporary: compare, flags: [define] } - - { operand: 2 } - - { captured_immediate: 3, transform: plus_one } - - opcode: XORI - root: false - operands: - - { operand: 0 } - - { temporary: compare, flags: [use] } - - { immediate: 1 } - erase_operand_definitions: [3] - - - id: select_g_icmp_sgt_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: sgt } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: - - { min: -2049, max: -1 } - - { min: 1, max: 2046 } - apply: - temporaries: - - { id: compare, type_from_operand: 2 } - instructions: - - opcode: SLTI - root: true - operands: - - { temporary: compare, flags: [define] } - - { operand: 2 } - - { captured_immediate: 3, transform: plus_one } - - opcode: XORI - root: false - operands: - - { operand: 0 } - - { temporary: compare, flags: [use] } - - { immediate: 1 } - erase_operand_definitions: [3] - - - id: select_g_icmp_eq_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: eq } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: [{ min: -2047, max: 2048 }] - apply: - temporaries: - - { id: difference, type_from_operand: 2 } - instructions: - - opcode: ADDI - root: true - operands: - - { temporary: difference, flags: [define] } - - { operand: 2 } - - { captured_immediate: 3, transform: negate } - - opcode: SLTIU - root: false - operands: - - { operand: 0 } - - { temporary: difference, flags: [use] } - - { immediate: 1 } - erase_operand_definitions: [3] - - - id: select_g_icmp_ne_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ne } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: [{ min: -2047, max: 2048 }] - apply: - temporaries: - - { id: difference, type_from_operand: 2 } - instructions: - - opcode: ADDI - root: true - operands: - - { temporary: difference, flags: [define] } - - { operand: 2 } - - { captured_immediate: 3, transform: negate } - - opcode: SLTU - root: false - operands: - - { operand: 0 } - - { physical_register: X0, flags: [use] } - - { temporary: difference, flags: [use] } - erase_operand_definitions: [3] - - - id: select_g_icmp_ule_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ule } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: - - { min: -2049, max: -2 } - - { min: 1, max: 2046 } - apply: - instructions: - - opcode: SLTIU - root: true - operands: - - { operand: 0 } - - { operand: 2 } - - { captured_immediate: 3, transform: plus_one } - erase_operand_definitions: [3] - - - id: select_g_icmp_sle_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: sle } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: - - { min: -2049, max: -1 } - - { min: 1, max: 2046 } - apply: - instructions: - - opcode: SLTI - root: true - operands: - - { operand: 0 } - - { operand: 2 } - - { captured_immediate: 3, transform: plus_one } - erase_operand_definitions: [3] - - - id: select_g_icmp_uge_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: uge } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: [{ min: -2048, max: 2047 }] - apply: - temporaries: - - { id: compare, type_from_operand: 2 } - instructions: - - opcode: SLTIU - root: true - operands: - - { temporary: compare, flags: [define] } - - { operand: 2 } - - { captured_immediate: 3 } - - opcode: XORI - root: false - operands: - - { operand: 0 } - - { temporary: compare, flags: [use] } - - { immediate: 1 } - erase_operand_definitions: [3] - - - id: select_g_icmp_sge_immediate - priority: 400 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: sge } - operand_types: - - { index: 2, kind: scalar, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - operand_def_constants: - - index: 3 - ranges: [{ min: -2048, max: 2047 }] - apply: - temporaries: - - { id: compare, type_from_operand: 2 } - instructions: - - opcode: SLTI - root: true - operands: - - { temporary: compare, flags: [define] } - - { operand: 2 } - - { captured_immediate: 3 } - - opcode: XORI - root: false - operands: - - { operand: 0 } - - { temporary: compare, flags: [use] } - - { immediate: 1 } - erase_operand_definitions: [3] - - - id: select_g_icmp_ult_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ult } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - instructions: - - opcode: SLTU - root: true - operands: [{ operand: 0 }, { operand: 2 }, { operand: 3 }] - - - id: select_g_icmp_slt_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: slt } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - instructions: - - opcode: SLT - root: true - operands: [{ operand: 0 }, { operand: 2 }, { operand: 3 }] - - - id: select_g_icmp_ugt_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ugt } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - instructions: - - opcode: SLTU - root: true - operands: [{ operand: 0 }, { operand: 3 }, { operand: 2 }] - - - id: select_g_icmp_sgt_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: sgt } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - instructions: - - opcode: SLT - root: true - operands: [{ operand: 0 }, { operand: 3 }, { operand: 2 }] - - - id: select_g_icmp_eq_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: eq } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - temporaries: - - { id: difference, type_from_operand: 2 } - instructions: - - opcode: XOR - root: true - operands: - - { temporary: difference, flags: [define] } - - { operand: 2 } - - { operand: 3 } - - opcode: SLTIU - root: false - operands: - - { operand: 0 } - - { temporary: difference, flags: [use] } - - { immediate: 1 } - - - id: select_g_icmp_ne_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ne } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - temporaries: - - { id: difference, type_from_operand: 2 } - instructions: - - opcode: XOR - root: true - operands: - - { temporary: difference, flags: [define] } - - { operand: 2 } - - { operand: 3 } - - opcode: SLTU - root: false - operands: - - { operand: 0 } - - { physical_register: X0, flags: [use] } - - { temporary: difference, flags: [use] } - - - id: select_g_icmp_ule_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: ule } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - temporaries: - - { id: compare, type_from_operand: 2 } - instructions: - - opcode: SLTU - root: true - operands: - - { temporary: compare, flags: [define] } - - { operand: 3 } - - { operand: 2 } - - opcode: XORI - root: false - operands: - - { operand: 0 } - - { temporary: compare, flags: [use] } - - { immediate: 1 } - - - id: select_g_icmp_sle_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: sle } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - temporaries: - - { id: compare, type_from_operand: 2 } - instructions: - - opcode: SLT - root: true - operands: - - { temporary: compare, flags: [define] } - - { operand: 3 } - - { operand: 2 } - - opcode: XORI - root: false - operands: - - { operand: 0 } - - { temporary: compare, flags: [use] } - - { immediate: 1 } - - - id: select_g_icmp_uge_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: uge } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - temporaries: - - { id: compare, type_from_operand: 2 } - instructions: - - opcode: SLTU - root: true - operands: - - { temporary: compare, flags: [define] } - - { operand: 2 } - - { operand: 3 } - - opcode: XORI - root: false - operands: - - { operand: 0 } - - { temporary: compare, flags: [use] } - - { immediate: 1 } - - - id: select_g_icmp_sge_register - priority: 100 - match: - opcode: G_ICMP - result_type: { kind: scalar, bits: 64 } - integer_predicate: { index: 1, value: sge } - operand_types: - - { index: 2, kind: any, bits: 64 } - operand_banks: - - { index: 0, bank: GPR } - - { index: 2, bank: GPR } - - { index: 3, bank: GPR } - apply: - temporaries: - - { id: compare, type_from_operand: 2 } - instructions: - - opcode: SLT - root: true - operands: - - { temporary: compare, flags: [define] } - - { operand: 2 } - - { operand: 3 } - - opcode: XORI - root: false - operands: - - { operand: 0 } - - { temporary: compare, flags: [use] } - - { immediate: 1 } |
