* [PATCH][AArch64] Fix ldp/stp patterns for ILP32
@ 2017-06-26 10:40 Wilco Dijkstra
2017-06-27 13:57 ` Wilco Dijkstra
0 siblings, 1 reply; 2+ messages in thread
From: Wilco Dijkstra @ 2017-06-26 10:40 UTC (permalink / raw)
To: GCC Patches, James Greenhalgh; +Cc: nd
The ldp/stp patterns call plus_constant which forces the mode to Pmode.
However in ILP32 addresses are SImode. This may result in an assert if
an ldp/stp pattern is tested with a SImode pointer. Fix this by using
the mode of the pointer rather than Pmode.
This fixes a failure in gcc.target/aarch64/reload-valid-spoff.c triggered
by https://gcc.gnu.org/ml/gcc-patches/2017-06/msg01367.html.
OK for commit?
ChangeLog:
2017-06-26 Wilco Dijkstra <wdijkstr@arm.com>
* config/aarch64/aarch64.md (load_pairsi): Avoid Pmode.
(store_pairsi): Likewise.
(load_pairdi): Likewise.
(store_pairdi): Likewise.
(load_pairsf): Likewise.
(store_pairsf): Likewise.
(load_pairdf): Likewise.
(store_pairdf): Likewise.
(load_pair_extendsidi2_aarch64): Likewise.
(load_pair_zero_extendsidi2_aarch64): Likewise.
* config/aarch64/aarch64-simd.md (load_pair<mode>): Likewise.
(store_pair<mode>): Likewise.
--
diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md
index d6e10427b324449eee90871682a59ed4c7d03b42..46816f7766d4a830536c9bc52e52f013d44bee40 100644
--- a/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc/config/aarch64/aarch64-simd.md
@@ -173,7 +173,7 @@ (define_insn "load_pair<mode>"
(match_operand:VD 3 "memory_operand" "m"))]
"TARGET_SIMD
&& rtx_equal_p (XEXP (operands[3], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[1], 0)),
XEXP (operands[1], 0),
GET_MODE_SIZE (<MODE>mode)))"
"ldp\\t%d0, %d2, %1"
@@ -187,7 +187,7 @@ (define_insn "store_pair<mode>"
(match_operand:VD 3 "register_operand" "w"))]
"TARGET_SIMD
&& rtx_equal_p (XEXP (operands[2], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[0], 0)),
XEXP (operands[0], 0),
GET_MODE_SIZE (<MODE>mode)))"
"stp\\t%d1, %d3, %0"
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 82f9f2d6af89db327eae3cb8eadcde850183dfb6..48c4c566d72c989c9d8d509866422039478f4b39 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -1185,7 +1185,7 @@ (define_insn "load_pairsi"
(set (match_operand:SI 2 "register_operand" "=r,*w")
(match_operand:SI 3 "memory_operand" "m,m"))]
"rtx_equal_p (XEXP (operands[3], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[1], 0)),
XEXP (operands[1], 0),
GET_MODE_SIZE (SImode)))"
"@
@@ -1201,7 +1201,7 @@ (define_insn "load_pairdi"
(set (match_operand:DI 2 "register_operand" "=r,*w")
(match_operand:DI 3 "memory_operand" "m,m"))]
"rtx_equal_p (XEXP (operands[3], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[1], 0)),
XEXP (operands[1], 0),
GET_MODE_SIZE (DImode)))"
"@
@@ -1220,7 +1220,7 @@ (define_insn "store_pairsi"
(set (match_operand:SI 2 "memory_operand" "=m,m")
(match_operand:SI 3 "aarch64_reg_or_zero" "rZ,*w"))]
"rtx_equal_p (XEXP (operands[2], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[0], 0)),
XEXP (operands[0], 0),
GET_MODE_SIZE (SImode)))"
"@
@@ -1236,7 +1236,7 @@ (define_insn "store_pairdi"
(set (match_operand:DI 2 "memory_operand" "=m,m")
(match_operand:DI 3 "aarch64_reg_or_zero" "rZ,*w"))]
"rtx_equal_p (XEXP (operands[2], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[0], 0)),
XEXP (operands[0], 0),
GET_MODE_SIZE (DImode)))"
"@
@@ -1254,7 +1254,7 @@ (define_insn "load_pairsf"
(set (match_operand:SF 2 "register_operand" "=w,*r")
(match_operand:SF 3 "memory_operand" "m,m"))]
"rtx_equal_p (XEXP (operands[3], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[1], 0)),
XEXP (operands[1], 0),
GET_MODE_SIZE (SFmode)))"
"@
@@ -1270,7 +1270,7 @@ (define_insn "load_pairdf"
(set (match_operand:DF 2 "register_operand" "=w,*r")
(match_operand:DF 3 "memory_operand" "m,m"))]
"rtx_equal_p (XEXP (operands[3], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[1], 0)),
XEXP (operands[1], 0),
GET_MODE_SIZE (DFmode)))"
"@
@@ -1288,7 +1288,7 @@ (define_insn "store_pairsf"
(set (match_operand:SF 2 "memory_operand" "=m,m")
(match_operand:SF 3 "aarch64_reg_or_fp_zero" "w,*rY"))]
"rtx_equal_p (XEXP (operands[2], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[0], 0)),
XEXP (operands[0], 0),
GET_MODE_SIZE (SFmode)))"
"@
@@ -1304,7 +1304,7 @@ (define_insn "store_pairdf"
(set (match_operand:DF 2 "memory_operand" "=m,m")
(match_operand:DF 3 "aarch64_reg_or_fp_zero" "w,*rY"))]
"rtx_equal_p (XEXP (operands[2], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[0], 0)),
XEXP (operands[0], 0),
GET_MODE_SIZE (DFmode)))"
"@
@@ -1406,7 +1406,7 @@ (define_insn "*load_pair_extendsidi2_aarch64"
(set (match_operand:DI 2 "register_operand" "=r")
(sign_extend:DI (match_operand:SI 3 "memory_operand" "m")))]
"rtx_equal_p (XEXP (operands[3], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[1], 0)),
XEXP (operands[1], 0),
GET_MODE_SIZE (SImode)))"
"ldpsw\\t%0, %2, %1"
@@ -1429,7 +1429,7 @@ (define_insn "*load_pair_zero_extendsidi2_aarch64"
(set (match_operand:DI 2 "register_operand" "=r")
(zero_extend:DI (match_operand:SI 3 "memory_operand" "m")))]
"rtx_equal_p (XEXP (operands[3], 0),
- plus_constant (Pmode,
+ plus_constant (GET_MODE (XEXP (operands[1], 0)),
XEXP (operands[1], 0),
GET_MODE_SIZE (SImode)))"
"ldp\\t%w0, %w2, %1"
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH][AArch64] Fix ldp/stp patterns for ILP32
2017-06-26 10:40 [PATCH][AArch64] Fix ldp/stp patterns for ILP32 Wilco Dijkstra
@ 2017-06-27 13:57 ` Wilco Dijkstra
0 siblings, 0 replies; 2+ messages in thread
From: Wilco Dijkstra @ 2017-06-27 13:57 UTC (permalink / raw)
To: GCC Patches, James Greenhalgh; +Cc: nd
Hi,
This patch has been superseded by: https://gcc.gnu.org/ml/gcc-patches/2017-06/msg02027.html
Wilco
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-06-27 13:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-26 10:40 [PATCH][AArch64] Fix ldp/stp patterns for ILP32 Wilco Dijkstra
2017-06-27 13:57 ` Wilco Dijkstra
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).