Module Name: src
Committed By: kalvisd
Date: Sun Sep 29 12:04:04 UTC 2024
Modified Files:
src/external/gpl3/gcc/dist/gcc/config/vax: builtins.md
Log Message:
gcc: vax: tweak peephole optimisations for VAX
ffs<mode>2 requires that references to memory be addressed
in a mode-independent way (the ffs instruction uses byte
addressing). The defined peephole optimisation can undo this,
so adjust the constraints to only match mode-independent
memory references (everything else has to be loaded into a
register first)
OK rin@
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
src/external/gpl3/gcc/dist/gcc/config/vax/builtins.md
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/gpl3/gcc/dist/gcc/config/vax/builtins.md
diff -u src/external/gpl3/gcc/dist/gcc/config/vax/builtins.md:1.13 src/external/gpl3/gcc/dist/gcc/config/vax/builtins.md:1.14
--- src/external/gpl3/gcc/dist/gcc/config/vax/builtins.md:1.13 Sun Jul 30 05:51:30 2023
+++ src/external/gpl3/gcc/dist/gcc/config/vax/builtins.md Sun Sep 29 12:04:04 2024
@@ -138,6 +138,10 @@
;; This effectively combines the two peepholes above,
;; matching the sequence produced by `ffs<mode>2'.
+;;
+;; note - should really only do this for memory references
+;; without a mode dependent address, or for
+;; registers.
(define_peephole2
[(parallel
[(set (match_operand:SI 0 "register_operand")
@@ -151,7 +155,13 @@
(compare:CCZ (match_dup 0)
(const_int 0)))]
"!rtx_equal_p (operands[0], operands[2])
- && peep2_reg_dead_p (3, operands[0])"
+ && peep2_reg_dead_p (3, operands[0])
+ && (REG_P (operands[1])
+ || (MEM_P (operands[1])
+ && !mode_dependent_address_p (XEXP (operands[1], 0),
+ MEM_ADDR_SPACE (operands[1])))
+ )
+ "
[(parallel
[(set (reg:CCZ VAX_PSL_REGNUM)
(compare:CCZ (match_dup 1)