Andrew wrote off list:
"Vector reductions don't work on RDNA, as is, but they're
supposed to be disabled by the insn condition"
This patch disables "fold_left_plus_<mode>", which is about
vectorization and in the code path shown in the backtrace.
I can also confirm manually that it fixes the ICE I saw and
also the ICE for the testfile that Richard's PR shows at the
end of his backtrace. (-O3 is needed to trigger the ICE.)
OK for mainline?
Tobias
* * *
PS: We could add testcase(s) that is/are explicitly compiled with
gfx1100 and/or gfx1030 + '-O3' to ensure that this gets tested
with AMDGPU enabled, but I am not sure whether it is really worthwhile.
PPS: Running the testsuite, I see the following fails with
gfx1100 offloading:
FAIL: libgomp.c/../libgomp.c-c++-common/for-5.c (test for excess errors)
Excess errors:
/tmp/ccrsHfVQ.mkoffload.2.s:788736:27: error: value out of range
.amdhsa_next_free_vgpr 516
^~~ [Obviously, likewise forlibgomp.c++/../libgomp.c-c++-common/for-5.c]
FAIL:libgomp.c/pr104783-2.c execution test FAIL:libgomp.c/pr104783.c
execution test (The .log unfortunately does not show more details)
FAIL:libgomp.fortran/optional-map.f90 -O3 -fomit-frame-pointer
-funroll-loops -fpeel-loops -ftracer -finline-functions (test for
excess errors) FAIL:libgomp.fortran/optional-map.f90 -O3 -g (test for
excess errors) FAIL: libgomp.fortran/target1.f90 -O3
-fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer
-finline-functions (test for excess errors) FAIL:
libgomp.fortran/target1.f90 -O3 -g (test for excess errors)Same 'out
of range' as above. * * * Manual testing shows for the two execution
fails: Memory access fault by GPU node-1 (Agent handle: 0x8d1aa0) on
address (nil). Reason: Page not present or supervisor privilege.
Interestingly, it only fails with -O1 or higher, for -O0 it works. Tobias
gcn/gcn-valu.md: Disable fold_left_plus for TARGET_RDNA2_PLUS [PR113615]
gcc/ChangeLog:
PR target/113615
* config/gcn/gcn-valu.md (fold_left_plus_<mode>): Only
define for !TARGET_RDNA2_PLUS.
Signed-off-by: Tobias Burnus <tbur...@baylibre.com>
gcc/config/gcn/gcn-valu.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gcc/config/gcn/gcn-valu.md b/gcc/config/gcn/gcn-valu.md
index cd027f8b369..23b441f8e8b 100644
--- a/gcc/config/gcn/gcn-valu.md
+++ b/gcc/config/gcn/gcn-valu.md
@@ -4274,7 +4274,8 @@ (define_expand "fold_left_plus_<mode>"
[(match_operand:<SCALAR_MODE> 0 "register_operand")
(match_operand:<SCALAR_MODE> 1 "gcn_alu_operand")
(match_operand:V_FP 2 "gcn_alu_operand")]
- "can_create_pseudo_p ()
+ "!TARGET_RDNA2_PLUS
+ && can_create_pseudo_p ()
&& (flag_openacc || flag_openmp
|| flag_associative_math)"
{