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 testsuite/80546] [7 Regression] FAIL: gcc.target/powerpc/bool3-p[78].c scan-assembler-not


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80546

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |powerpc*-*-*
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2017-04-27
     Ever confirmed|0                           |1

--- Comment #1 from Segher Boessenkool <segher at gcc dot gnu.org> ---
This is a NOT instruction, which we usually implement with a NOR with two
identical inputs, so it should behave similar to that in LRA.

But the NOT does (in ptr4) for this insn:

            0 Non input pseudo reload: reject++
            0 Early clobber: reject++
          alt=0,overall=14,losers=2,rld_nregs=2
            0 Non input pseudo reload: reject++
            1 Matching earlyclobber alt: reject--
            1 Dying matched operand reload: reject++
          alt=1,overall=13,losers=2,rld_nregs=4
            0 Non input pseudo reload: reject++
            1 Matching earlyclobber alt: reject--
            1 Dying matched operand reload: reject++
          alt=2,overall=13,losers=2,rld_nregs=4
          alt=3,overall=12,losers=2,rld_nregs=1
            0 Non input pseudo reload: reject++
            alt=4,overall=19,losers=3 -- refuse
         Choosing alt 3 in insn 10:  (0) wt  (1) wt {*one_cmplti3_internal}

while a two-op boolean op does (ptr5):

            0 Early clobber: reject++
            0 Matched conflict early clobber reloads: reject--
          alt=0,overall=6,losers=1,rld_nregs=0
          alt=1,overall=0,losers=0,rld_nregs=0
         Choosing alt 1 in insn 14:  (0) r  (1) 0  (2) r {*boolccti3_internal2}

The constraints for the NOT are
  =&r,r,r,wt,v
    r,0,0,wt,v

while for the two-op they are
  =&r,r,r,wt,v
    r,0,r,wt,v
    r,r,0,wt,v


Hrm, the difference us that in the two-op case the output is assigned the
same reg as one of the inputs, but in the NOT case it is not (the output
is assigned a VSR there, not a GPR).

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