Skip to content

Commit 29bd5cb

Browse files
arcv: Fix ls_update for float loads/stores
Signed-off-by: Michiel Derhaeg <michiel@synopsys.com>
1 parent 9c40215 commit 29bd5cb

2 files changed

Lines changed: 37 additions & 1 deletion

File tree

gcc/config/riscv/arcv.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,8 @@ arcv_ls_update (rtx_insn *prev, rtx_insn *curr)
224224

225225
enum attr_type p_type = get_attr_type (prev);
226226
/*Check if the prev instruction is load or store. */
227-
if (!(p_type == TYPE_LOAD || p_type == TYPE_STORE))
227+
if (!(p_type == TYPE_LOAD || p_type == TYPE_STORE
228+
|| p_type == TYPE_FPLOAD || p_type == TYPE_FPSTORE))
228229
return false;
229230

230231
gcc_assert (prev_set && curr_set);
@@ -252,6 +253,7 @@ arcv_ls_update (rtx_insn *prev, rtx_insn *curr)
252253
switch (p_type)
253254
{
254255
case TYPE_LOAD:
256+
case TYPE_FPLOAD:
255257
{
256258
rtx p_src_addr = XEXP (SET_SRC (prev_set), 0);
257259
if (!REG_P (p_src_addr))
@@ -268,6 +270,7 @@ arcv_ls_update (rtx_insn *prev, rtx_insn *curr)
268270
}
269271

270272
case TYPE_STORE:
273+
case TYPE_FPSTORE:
271274
{
272275
rtx p_dst_addr = XEXP (SET_DEST (prev_set), 0);
273276
if (!REG_P (p_dst_addr))
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/* { dg-do compile } */
2+
/* { dg-require-effective-target rv32 } */
3+
/* { dg-skip-if "" { *-*-* } { "-g" "-flto" "-O0" "-O1" "-O3" "-Oz" "-Os" } } */
4+
/* { dg-options "-O2 -mtune=arc-v-rhx-100-series -march=rv32ifd_zfh -mabi=ilp32d -fdump-rtl-sched2" } */
5+
6+
_Float16
7+
fuse_ls_update_h (_Float16 *p, int n)
8+
{
9+
_Float16 sum = 0;
10+
for (int i = 0; i < n; i++)
11+
sum += *p++;
12+
return sum;
13+
}
14+
15+
float
16+
fuse_ls_update_f (float *p, int n)
17+
{
18+
float sum = 0;
19+
for (int i = 0; i < n; i++)
20+
sum += *p++;
21+
return sum;
22+
}
23+
24+
double
25+
fuse_ls_update_d (double *p, int n)
26+
{
27+
double sum = 0;
28+
for (int i = 0; i < n; i++)
29+
sum += *p++;
30+
return sum;
31+
}
32+
33+
/* { dg-final { scan-rtl-dump-times "ARCV_FUSE_LS_UPDATE \\(prev, curr\\)" 3 "sched2" } } */

0 commit comments

Comments
 (0)