Related Discussion:
https://inbox.sourceware.org/gcc-patches/[email protected]/
This patch updates the bitmanip instructions to ensure that no insn is left
without a type attribute. Updates a total of 8 insns to have type "bitmanip"
Tested for regressions using rv32/64 multilib with newlib/linux.
gcc/Changelog:
* config/riscv/bitmanip.md: Added bitmanip type to insns
that are missing types
Signed-off-by: Edwin Lu <[email protected]>
---
gcc/config/riscv/bitmanip.md | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md
index c42e7b890db..0c99152ffc8 100644
--- a/gcc/config/riscv/bitmanip.md
+++ b/gcc/config/riscv/bitmanip.md
@@ -103,7 +103,8 @@ (define_insn_and_split "*andi_add.uw"
(match_dup 4)))]
{
operands[3] = GEN_INT (INTVAL (operands[3]) >> INTVAL (operands[2]));
-})
+}
+[(set_attr "type" "bitmanip")])
(define_insn "*shNadduw"
[(set (match_operand:DI 0 "register_operand" "=r")
@@ -533,7 +534,9 @@ (define_insn_and_split "*minmax"
"&& reload_completed"
[(set (match_dup 3) (sign_extend:DI (match_dup 1)))
(set (match_dup 4) (match_dup 2))
- (set (match_dup 0) (<minmax_optab>:DI (match_dup 3) (match_dup 4)))])
+ (set (match_dup 0) (<minmax_optab>:DI (match_dup 3) (match_dup 4)))]
+ ""
+ [(set_attr "type" "bitmanip")])
;; ZBS extension.
@@ -628,7 +631,8 @@ (define_insn_and_split "*bclri<mode>_nottwobits"
operands[3] = GEN_INT (~bits | topbit);
operands[4] = GEN_INT (~topbit);
-})
+}
+[(set_attr "type" "bitmanip")])
;; In case of a paradoxical subreg, the sign bit and the high bits are
;; not allowed to be changed
@@ -648,7 +652,8 @@ (define_insn_and_split "*bclridisi_nottwobits"
operands[3] = GEN_INT (~bits | topbit);
operands[4] = GEN_INT (~topbit);
-})
+}
+[(set_attr "type" "bitmanip")])
(define_insn "*binv<mode>"
[(set (match_operand:X 0 "register_operand" "=r")
@@ -743,7 +748,8 @@ (define_insn_and_split "*<or_optab>i<mode>_extrabit"
operands[3] = GEN_INT (bits &~ topbit);
operands[4] = GEN_INT (topbit);
-})
+}
+[(set_attr "type" "bitmanip")])
;; Same to use blcri + andi and blcri + bclri
(define_insn_and_split "*andi<mode>_extrabit"
@@ -761,7 +767,8 @@ (define_insn_and_split "*andi<mode>_extrabit"
operands[3] = GEN_INT (bits | topbit);
operands[4] = GEN_INT (~topbit);
-})
+}
+[(set_attr "type" "bitmanip")])
;; IF_THEN_ELSE: test for 2 bits of opposite polarity
(define_insn_and_split "*branch<X:mode>_mask_twobits_equals_singlebit"
@@ -803,7 +810,8 @@ (define_insn_and_split
"*branch<X:mode>_mask_twobits_equals_singlebit"
operands[8] = GEN_INT (setbit);
operands[9] = GEN_INT (clearbit);
-})
+}
+[(set_attr "type" "bitmanip")])
;; IF_THEN_ELSE: test for (a & (1 << BIT_NO))
(define_insn_and_split "*branch<X:mode>_bext"
@@ -826,7 +834,9 @@ (define_insn_and_split "*branch<X:mode>_bext"
(zero_extend:X (match_dup 3))))
(set (pc) (if_then_else (match_op_dup 1 [(match_dup 4) (const_int 0)])
(label_ref (match_dup 0))
- (pc)))])
+ (pc)))]
+ ""
+ [(set_attr "type" "bitmanip")])
;; ZBKC or ZBC extension
(define_insn "riscv_clmul_<mode>"
--
2.41.0