unrecognizable insn for byte compare in private backend

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I am having with some issues in my private backend for the TMS9900 CPU that I hope somebody can give me some pointers to debug.

The original backend was developed for gcc-4.4.0.  I have managed to get this into reasonable shape now and it does create functional, though slightly suboptimal, machine code.  So I have recently migrated to gcc-13.2.0 to make sure I'm not chasing issues that have been solved by more recent versions of gcc.

One of the main changes was the cc0 migration.  The TMS9900 clobbers CC on almost every instruction so I've defined splits with condition of reload_completed to emit a compare before emitting jumps.  This is working up to a point but I'm struggling to find why I'm getting this error:

    zap.c: In function ‘test’:
    zap.c:18:1: error: unrecognizable insn:
       18 | }
          | ^
    (insn 31 30 32 (set (reg:CC 16 st)
            (compare:CC (reg:QI 1 r1 [orig:25 b.0_1 ] [25])
                (const_int -1 [0xffffffffffffffff]))) "zap.c":7:8 -1
         (nil))
    during RTL pass: split5

given that I have a byte compare insn that does exactly that:

    (define_insn "cmpqi"
      [(set (reg:CC CC_REGNUM)
            (compare:CC (match_operand:QI 0 "nonimmediate_operand" "rR,rR,Q, Q,rR,Q,r,R,Q")                         (match_operand:QI 1 "general_operand" "rR,Q, rR,Q,O, O,i,i,i")))
        (clobber (match_operand:QI 2 "register_operand" ""))]
      ""

albeit with a clobber, since I need to load the constant to a general reg to do a byte compare.  All immediate ops are 16-bit only.  But temporarily removing the clobber didn't match it either.

Many thanks in advance for any help

Mark





[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux