diff options
author | Edwin Lu <ewlu@rivosinc.com> | 2023-09-05 10:01:26 -0700 |
---|---|---|
committer | Edwin Lu <ewlu@rivosinc.com> | 2023-09-05 10:01:26 -0700 |
commit | c85db606d46774283ca4ec037dc3051719828f41 (patch) | |
tree | 0bd596beeea141f7c7e07774a625a7f0e75c83ba | |
parent | af5cb06ec17780736749ed51cfc6dfad9397156c (diff) | |
download | gcc-c85db606d46774283ca4ec037dc3051719828f41.zip gcc-c85db606d46774283ca4ec037dc3051719828f41.tar.gz gcc-c85db606d46774283ca4ec037dc3051719828f41.tar.bz2 |
RISC-V: Add Types to Un-Typed Pic Instructions
Updates pic instructions to ensure that no instruction is left
without a type attribute.
Tested for regressions using rv32/64 multilib with newlib/linux.
gcc/Changelog:
* config/riscv/pic.md: Update types
Reviewed-by: Jeff Law <jlaw@ventanamicro.com>
Signed-off-by: Edwin Lu <ewlu@rivosinc.com>
-rw-r--r-- | gcc/config/riscv/pic.md | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/gcc/config/riscv/pic.md b/gcc/config/riscv/pic.md index da636e3..cfaa670 100644 --- a/gcc/config/riscv/pic.md +++ b/gcc/config/riscv/pic.md @@ -27,21 +27,24 @@ (mem:ANYI (match_operand 1 "absolute_symbolic_operand" "")))] "USE_LOAD_ADDRESS_MACRO (operands[1])" "<default_load>\t%0,%1" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "load") + (set (attr "length") (const_int 8))]) (define_insn "*local_pic_load_s<SUBX:mode>" [(set (match_operand:SUPERQI 0 "register_operand" "=r") (sign_extend:SUPERQI (mem:SUBX (match_operand 1 "absolute_symbolic_operand" ""))))] "USE_LOAD_ADDRESS_MACRO (operands[1])" "<SUBX:load>\t%0,%1" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "load") + (set (attr "length") (const_int 8))]) (define_insn "*local_pic_load_u<SUBX:mode>" [(set (match_operand:SUPERQI 0 "register_operand" "=r") (zero_extend:SUPERQI (mem:SUBX (match_operand 1 "absolute_symbolic_operand" ""))))] "USE_LOAD_ADDRESS_MACRO (operands[1])" "<SUBX:load>u\t%0,%1" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "load") + (set (attr "length") (const_int 8))]) ;; We can support ANYLSF loads into X register if there is no double support ;; or if the target is 64-bit. @@ -55,7 +58,8 @@ "@ <ANYLSF:load>\t%0,%1,%2 <softload>\t%0,%1" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "fpload") + (set (attr "length") (const_int 8))]) ;; ??? For a 32-bit target with double float, a DF load into a X reg isn't ;; supported. ld is not valid in that case. Punt for now. Maybe add a split @@ -68,14 +72,16 @@ "TARGET_HARD_FLOAT && USE_LOAD_ADDRESS_MACRO (operands[1]) && (TARGET_DOUBLE_FLOAT && !TARGET_64BIT)" "<ANYLSF:load>\t%0,%1,%2" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "fpload") + (set (attr "length") (const_int 8))]) (define_insn "*local_pic_load_sf<mode>" [(set (match_operand:SOFTF 0 "register_operand" "=r") (mem:SOFTF (match_operand 1 "absolute_symbolic_operand" "")))] "!TARGET_HARD_FLOAT && USE_LOAD_ADDRESS_MACRO (operands[1])" "<softload>\t%0,%1" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "fpload") + (set (attr "length") (const_int 8))]) ;; Simplify PIC stores to static variables. ;; These should go away once we figure out how to emit auipc discretely. @@ -86,7 +92,8 @@ (clobber (match_scratch:P 2 "=&r"))] "USE_LOAD_ADDRESS_MACRO (operands[0])" "<ANYI:store>\t%z1,%0,%2" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "store") + (set (attr "length") (const_int 8))]) (define_insn "*local_pic_store<ANYLSF:mode>" [(set (mem:ANYLSF (match_operand 0 "absolute_symbolic_operand" "")) @@ -97,7 +104,8 @@ "@ <ANYLSF:store>\t%1,%0,%2 <softstore>\t%1,%0,%2" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "fpstore") + (set (attr "length") (const_int 8))]) ;; ??? For a 32-bit target with double float, a DF store from a X reg isn't ;; supported. sd is not valid in that case. Punt for now. Maybe add a split @@ -110,7 +118,8 @@ "TARGET_HARD_FLOAT && USE_LOAD_ADDRESS_MACRO (operands[1]) && (TARGET_DOUBLE_FLOAT && !TARGET_64BIT)" "<ANYLSF:store>\t%1,%0,%2" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "fpstore") + (set (attr "length") (const_int 8))]) (define_insn "*local_pic_store_sf<SOFTF:mode>" [(set (mem:SOFTF (match_operand 0 "absolute_symbolic_operand" "")) @@ -118,4 +127,5 @@ (clobber (match_scratch:P 2 "=&r"))] "!TARGET_HARD_FLOAT && USE_LOAD_ADDRESS_MACRO (operands[0])" "<softstore>\t%1,%0,%2" - [(set (attr "length") (const_int 8))]) + [(set_attr "type" "fpstore") + (set (attr "length") (const_int 8))]) |