Skip to content

Commit

Permalink
arm: Fix general issues with patterns for VLLDM and VLSTM
Browse files Browse the repository at this point in the history
Both lazy_store_multiple_insn and lazy_load_multiple_insn contain
invalid RTL (eg they contain a post_inc statement outside of a mem).
What's more, the instructions concerned do not modify their input
address register.  We probably got away with this because they are
generated so late in the compilation that no subsequent pass needed to
understand them.  Nevertheless, this could cause problems someday, so
fixed to use a simple legal unspec.

gcc:
	* config/arm/vfp.md (lazy_store_multiple_insn): Rewrite as valid RTL.
	(lazy_load_multiple_insn): Likewise.
  • Loading branch information
Richard Earnshaw committed Aug 24, 2021
1 parent 8da9b4f commit 4702d3c
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions gcc/config/arm/vfp.md
Original file line number Diff line number Diff line change
Expand Up @@ -1703,24 +1703,25 @@
(set_attr "type" "mov_reg")]
)
;; Both this and the next instruction are treated by GCC in the same
;; way as a blockage pattern. That's perhaps stronger than it needs
;; to be, but we do not want accesses to the VFP register bank to be
;; moved across either instruction.
(define_insn "lazy_store_multiple_insn"
[(set (match_operand:SI 0 "s_register_operand" "+&rk")
(post_dec:SI (match_dup 0)))
(unspec_volatile [(const_int 0)
(mem:SI (post_dec:SI (match_dup 0)))]
VUNSPEC_VLSTM)]
[(unspec_volatile
[(mem:BLK (match_operand:SI 0 "s_register_operand" "rk"))]
VUNSPEC_VLSTM)]
"use_cmse && reload_completed"
"vlstm%?\\t%0"
[(set_attr "predicable" "yes")
(set_attr "type" "store_4")]
)
(define_insn "lazy_load_multiple_insn"
[(set (match_operand:SI 0 "s_register_operand" "+&rk")
(post_inc:SI (match_dup 0)))
(unspec_volatile:SI [(const_int 0)
(mem:SI (match_dup 0))]
VUNSPEC_VLLDM)]
[(unspec_volatile
[(mem:BLK (match_operand:SI 0 "s_register_operand" "rk"))]
VUNSPEC_VLLDM)]
"use_cmse && reload_completed"
"vlldm%?\\t%0"
[(set_attr "predicable" "yes")
Expand Down

0 comments on commit 4702d3c

Please sign in to comment.