On 2025/07/23 2:16, Max Filippov wrote:

Regtested for target=xtensa-linux-uclibc. Two new regressions in the
configuration
with call0 ABI:
FAIL: gcc.c-torture/execute/20000603-1.c   -O2  execution test
FAIL: gcc.c-torture/execute/20000603-1.c   -O3 -g  execution test

because the load from b->d is now scheduled before the store to a->d:
f:
        addi    sp, sp, -16
        l32r    a5, .LC2
        s32i.n  a0, sp, 12
+       mov.n   a9, a2
        movi.n  a4, 0
-       s32i.n  a4, a2, 0
-       s32i.n  a5, a2, 4
-       l32r    a9, .LC1
        l32i.n  a2, a3, 0
        l32i.n  a3, a3, 4
+       s32i.n  a4, a9, 0
+       s32i.n  a5, a9, 4
+       l32r    a9, .LC1
        callx0  a9
        l32i.n  a0, sp, 12
        addi    sp, sp, 16
        ret.n

which may be expected with -O2 and -O3 that enable -fstrict-aliasing.

This "problem" directly stems from the fact that the fifth "type" attribute
was recently added to the "movdf_internal" insn pattern, "load" which allows
for instruction scheduling that was not previously possible.

  [(set_attr "type"     "move,load,move,load,load,store")
                                             ^^^^^

The above conjecture can be further reinforced by replacing "double"s in that
source with "float"s that are also schedulable since before (i.e., SFmode) and
evaluating the results of compiling them.  IMHO adding this attribute makes
the behavior of types of the same kind more consistent.

=====
jjsuwa_sys3...@yahoo.co.jp

Reply via email to