This is the mail archive of the gcc-bugs@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]
Other format: [Raw text]

[Bug target/43399] [4.5 Regression] bootstrap failure in stage1



------- Comment #7 from jakub at gcc dot gnu dot org  2010-03-18 07:16 -------
BTW, if the PRE_MODIFY representation doesn't work well, I'd say just using a
PARALLEL with what the insn really does and checking that in the match_parallel
predicate probably wouldn't clash with anything else.  If it would, you'd need
to insert one UNSPEC somewhere.
The comments say that currently the pattern looks like:
       (parallel [
           (set (mem:BLK (pre_dec:BLK (reg:SI sp)))
                (unspec:BLK [(reg:SI r4)] UNSPEC_PUSH_MULT))
           (use (reg:SI 11 fp))
           (use (reg:SI 12 ip))
           (use (reg:SI 14 lr))
           (use (reg:SI 15 pc))
        ])
with the REG_FRAME_RELATED_EXPR:
      (sequence [
           (set (reg:SI sp) (plus:SI (reg:SI sp) (const_int -20)))
           (set (mem:SI (reg:SI sp)) (reg:SI r4))
           (set (mem:SI (plus:SI (reg:SI sp) (const_int 4))) (reg:SI fp))
           (set (mem:SI (plus:SI (reg:SI sp) (const_int 8))) (reg:SI ip))
           (set (mem:SI (plus:SI (reg:SI sp) (const_int 12))) (reg:SI lr))
        ])
So, would a parallel like:
       (parallel [
           (set (mem:SI (plus:SI (reg:SI sp) (const_int -20))) (reg:SI r4))
           (set (mem:SI (plus:SI (reg:SI sp) (const_int -16))) (reg:SI fp))
           (set (mem:SI (plus:SI (reg:SI sp) (const_int -12))) (reg:SI ip))
           (set (mem:SI (plus:SI (reg:SI sp) (const_int -8))) (reg:SI lr))
           (set (mem:SI (plus:SI (reg:SI sp) (const_int -4))) (reg:SI pc))
           (set (reg:SI sp) (plus:SI (reg:SI sp) (const_int -20)))
        ])
be unique?  match_parallel would verify the form (that the first sp offset
matches the negative stack adjustment, that it is multiple of reg size, that
the
last adjustment is -word size, that the offsets are consecutive etc.
Alternatively surround the first set's RHS reg into UNSPEC. 


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43399


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