I agree that the PIC architecture _truly_ sux. Their newer products are a little more sensible, but the older stuff (and the newer stuff that is made to be compatible with the old stuff) is horrible. I learnt micros on a Z80, and then moved to MCS51. They were both very nice architectures.
To be fair, it's impossible to do much better using small fixed width instructions.
Ideally, you'd like to be able to specify two registers (5 bits each on 12 bit PIC, 7 on 14 bit, 8 on 18 bit) or one register and a constant, one of the 10 sensible comparisons (4 bits), and a decent branch offset (9 bits on 12 bit PIC, 11 on 14 bit, 14 on 18 bit). Add those up and you get that to do that in one instruction you need 32 bit instructions like RISC-V.
With 12 bit instructions you really don't have any choice but to do...
load reg
cmp reg (or sub)
skip <cond>
jump <offset>
... which is exactly what PIC has.
I can't see that the 8051 is any better. To do what is a single instruction "BLT i,j,label" on a RISC with 32 bit opcodes you need ...
mov a,i
clr c
subb a,j
jc label
... which is still four instructions, but you only have 8 registers available, not 32-256 like on PIC, so it's quite likely you're going to need to load the values you want to compare into registers first.
The 8051 does have the luxury of both 1-byte and 2-byte instructions so you can for example subtract a constant from A with one 2-byte instruction, and the conditional jump uses a 2nd byte for the offset.
Similar for z80. Once again you only have 7 registers other than A (11 counting the very slow IX and IY halves), and you have multi-byte instructions. Also, there is a CMP that doesn't need you to fiddle with the carry first. The Z80 does allow you to load from a memory address directly into A, or load a constant into any register. But it's really not any better than the PIC.
The most useful thing on the Z80 is the 16 bit operations, though they mostlty only save code size, not cycles.