aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Target/RISCV/RISCVGISel.rccdesc
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-16 18:00:32 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-16 18:00:32 +0800
commit6c7422accb0964d37bb826e3fb798f2d86ca3b42 (patch)
tree357a80d93c943b2c9bc8dc20e522650afaa45c61 /backend/lib/Target/RISCV/RISCVGISel.rccdesc
parent864a29abbdce86353ec91c3587757711d3a42f10 (diff)
downloadrcc-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.rccdesc792
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 }