This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: ssa bootstrap problem on x86 (cmpstrsi_1 pattern)


>>>>> "Geoff" == Geoff Keating <geoffk@cygnus.com> writes:

    Geoff> I also don't understand when you say "you don't have to do
    Geoff> dataflow analysis".  It is still not valid to turn

I should have been more clear.  You don't have to dataflow analysis to
do lots of operations.  Of course you have to worry about moving loads
before stores, but you don't have to worry about lots of other things.

    Geoff> How can they be orthogonal?  They are causing the bug
    Geoff> together.

Hmm?  Lots of times conincidental situations cause problems.

There are two issues:

  - Do we want clobbers in SSA form?

  - Do we want match_dup or match_scratch in these patterns?

We could choose not to have clobbers, but choose either match_dup or
match_scratch.  We would simply have to introduce the clobbers later
in the game.

    Geoff> I am concerned you don't quite understand.  CLOBBERs can
    Geoff> carry information.  Deleting them deletes information.
    Geoff> Sometimes that information can be deduced from the rest of
    Geoff> the RTL, but sometimes it cannot.

I fully understand all of that.  I am not questioning the utility of
clobbers.  I am questioning the utility of having clobbers *until
later* in the compiler.

The only reason clobbers appear this early in the compiler is that GCC
generates machine-specific code very early.  There is no operation
that I know of in any language that maps onto a clobber; those
clobbers are appearing because of low-level details in particular
machines.  (For example, that string comparison messes with registers
on the x86.)  The existence of clobbers so early means that things are
more complicated.  I am suggesting that they would be less complicated
if they happenned later.

I think you are taking it as axiomatic that GCC's method of generating
RTL which immediately a) contains hard registers and b) contains
associated machine-specific artifacts is the only way to go.  I am
not.  I would prefer to generate RTL that says, slightly more
abstractly, what is happenning for a little longer.  That's all.

--
Mark Mitchell                   mark@codesourcery.com
CodeSourcery, LLC               http://www.codesourcery.com

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]