aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <jlaw@ventanamicro.com>2024-05-14 22:50:15 -0600
committerJeff Law <jlaw@ventanamicro.com>2024-05-14 22:52:36 -0600
commite410ad74e5e4589aeb666aa298b2f933e7b5d9e7 (patch)
treefc6c6a6a62977e6f685c720404b5297bd7ebc398 /gcc
parenta71f90c5a7ae2942083921033cb23dcd63e70525 (diff)
downloadgcc-e410ad74e5e4589aeb666aa298b2f933e7b5d9e7.zip
gcc-e410ad74e5e4589aeb666aa298b2f933e7b5d9e7.tar.gz
gcc-e410ad74e5e4589aeb666aa298b2f933e7b5d9e7.tar.bz2
[committed] Fix rv32 issues with recent zicboz work
I should have double-checked the CI system before pushing Christoph's patches for memset-zero. While I thought I'd checked CI state, I must have been looking at the wrong patch from Christoph. Anyway, this fixes the rv32 ICEs and disables one of the tests for rv32. The test would need a revamp for rv32 as the expected output is all rv64 code using "sd" instructions. I'm just not vested deeply enough into rv32 to adjust the test to work in that environment though it should be fairly trivial to copy the test and provide new expected output if someone cares enough. Verified this fixes the rv32 failures in my tester: > New tests that FAIL (6 tests): > > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O1 (internal compiler error: in extract_insn, at recog.cc:2812) > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O1 (test for excess errors) > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O2 (internal compiler error: in extract_insn, at recog.cc:2812) > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O2 (test for excess errors) > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O3 -g (internal compiler error: in extract_insn, at recog.cc:2812) > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O3 -g (test for excess errors) And after the ICE is fixed, these are eliminated by only running the test for rv64: > New tests that FAIL (3 tests): > > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O1 check-function-bodies clear_buf_123 > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O2 check-function-bodies clear_buf_123 > unix/-march=rv32gcv: gcc: gcc.target/riscv/cmo-zicboz-zic64-1.c -O3 -g check-function-bodies clear_buf_123 gcc/ * config/riscv/riscv-string.cc (riscv_expand_block_clear_zicboz_zic64b): Handle rv32 correctly. gcc/testsuite * gcc.target/riscv/cmo-zicboz-zic64-1.c: Don't run on rv32.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/riscv/riscv-string.cc5
-rw-r--r--gcc/testsuite/gcc.target/riscv/cmo-zicboz-zic64-1.c3
2 files changed, 5 insertions, 3 deletions
diff --git a/gcc/config/riscv/riscv-string.cc b/gcc/config/riscv/riscv-string.cc
index 87f5fde..b515f44 100644
--- a/gcc/config/riscv/riscv-string.cc
+++ b/gcc/config/riscv/riscv-string.cc
@@ -827,7 +827,10 @@ riscv_expand_block_clear_zicboz_zic64b (rtx dest, rtx length)
{
rtx mem = adjust_address (dest, BLKmode, offset);
rtx addr = force_reg (Pmode, XEXP (mem, 0));
- emit_insn (gen_riscv_zero_di (addr));
+ if (TARGET_64BIT)
+ emit_insn (gen_riscv_zero_di (addr));
+ else
+ emit_insn (gen_riscv_zero_si (addr));
offset += cbo_bytes;
}
diff --git a/gcc/testsuite/gcc.target/riscv/cmo-zicboz-zic64-1.c b/gcc/testsuite/gcc.target/riscv/cmo-zicboz-zic64-1.c
index c2d79eb..6d45352 100644
--- a/gcc/testsuite/gcc.target/riscv/cmo-zicboz-zic64-1.c
+++ b/gcc/testsuite/gcc.target/riscv/cmo-zicboz-zic64-1.c
@@ -1,6 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-march=rv64gc_zic64b_zicboz" { target { rv64 } } } */
-/* { dg-options "-march=rv32gc_zic64b_zicboz" { target { rv32 } } } */
+/* { dg-options "-march=rv64gc_zic64b_zicboz -mabi=lp64d" } */
/* { dg-skip-if "" { *-*-* } {"-O0" "-Os" "-Og" "-Oz" "-flto" } } */
/* { dg-final { check-function-bodies "**" "" } } */
/* { dg-allow-blank-lines-in-output 1 } */