From what I know, if it was a problem with my dfa reservation assert,
it would have ICEd in riscv.cc and not riscv-v.cc. For now I reverted
the changes since I don't want to leave things possibly broken overnight
and not knowing which patch is the root cause. I kicked off another set
of test runs using our full gcc postcommit testing configurations and
should have those results in tomorrow. Hopefully it was just a missed
config target I didn't test and wasn't tested on the precommit ci.
Edwin
On 1/31/2024 9:42 PM, Edwin Lu wrote:
Hi Juzhe,
I didn't see any ICEs when I tested locally (tested on
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=8123f3ca3fd891034a8366518e756f161c4ff40d). Can you tell me what config you're using?
Edwin
On 1/31/2024 6:57 PM, juzhe.zh...@rivai.ai wrote:
Hi, all.
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=26c34b809cd1a6249027730a8b52bbf6a1c0f4a8
<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=26c34b809cd1a6249027730a8b52bbf6a1c0f4a8>
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=e56fb037d9d265682f5e7217d8a4c12a8d3fddf8
<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=e56fb037d9d265682f5e7217d8a4c12a8d3fddf8>
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=4b799a16ae59fc0f508c5931ebf1851a3446b707
<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=4b799a16ae59fc0f508c5931ebf1851a3446b707>
https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=23cd2961bd2ff63583f46e3499a07bd54491d45c
<https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=23cd2961bd2ff63583f46e3499a07bd54491d45c>
These 4 commits cause all testcases failed (ICE and dump FAILs).
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-4.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-1.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-1.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-1.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-11.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-11.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-1.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-1.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-1.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_64-4.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_64-4.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_64-4.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-2.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-2.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-2.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-8.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-8.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-8.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-3.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-3.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-9.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-9.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-3.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-3.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_32-4.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_32-4.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_32-4.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/offset_extend-1.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/offset_extend-1.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-2.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-2.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-2.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-3.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-7.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-7.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-9.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-9.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-2.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-2.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-2.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-4.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-4.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-10.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-3.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-10.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-3.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-8.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-8.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-7.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-7.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-2.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-2.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-2.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-4.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-4.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-3.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/strided_load_run-1.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/strided_load_run-1.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-10.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-10.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-2.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-2.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-2.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-4.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-2.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_run-2.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-1.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-1.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-1.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-10.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-10.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-6.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-6.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-5.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-5.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-10.c (internal compiler error: in validate_change_or_fail, at config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-10.c (test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-2.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-2.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-5.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-2.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-2.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-2.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_64-2.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-3.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-7.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-7.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_32-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_32-3.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_32-3.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-4.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-4.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-4.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-12.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_run-12.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_64-5.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_64-5.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_64-5.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-1.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-1.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-3.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-10.c (internal compiler error: in validate_change_or_fail, at config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_run-10.c (test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-4.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-1.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-4.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-1.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-4.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-3.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_32-1.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-6.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-6.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_gather_load_32-6.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-1.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-1.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_32-1.c
scan-tree-dump-times vect "vectorized 1 loops in function" 11
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-9.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/scatter_store_run-9.c
(test for excess errors)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-12.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
FAIL: gcc.target/riscv/rvv/autovec/gather-scatter/gather_load_64-12.c
(test for excess errors)
FAIL:
gcc.target/riscv/rvv/autovec/gather-scatter/mask_scatter_store_64-3.c
(internal compiler error: in validate_change_or_fail, at
config/riscv/riscv-v.cc:4972)
------------------------------------------------------------------------
juzhe.zh...@rivai.ai