On 11/13/19 7:16 PM, Segher Boessenkool wrote: > I tried this out with a kernel build (just the defconfig).
> during RTL pass: jump2 > /home/segher/src/kernel/fs/binfmt_elf.c: In function 'elf_core_dump': > /home/segher/src/kernel/fs/binfmt_elf.c:2409:1: internal compiler error: in > patch_jump_insn, at cfgrtl.c:1290 > Can you reproduce that? Yes. It's actually an issue I spotted at one point, but I thought to myself "I'll just leave it, I want to make the minimum amount of changes". Should have thought harder. The constraints for comparison patterns in m68k.md allow constants as the first operand of a comparison. They also use nonimmediate_operand. Hence, the internal error you saw when something tries to rerecognize the instruction. The following should fix it, but it's only very lightly tested so far. I'll merge it into patch 2. Bernd
* config/m68k/m68k.md (cmp1_constraints): Don't allow constants. diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index bb46e5880e2..56685db0c72 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -488,7 +488,7 @@ ;; and operand predicates. So to be safe, just don't allow the PC-rel (define_mode_attr scc0_constraints [(QI "=d,d,d") (HI "=d,d,d,d,d") (SI "=d,d,d,d,d,d")]) -(define_mode_attr cmp1_constraints [(QI "dn,dm,>") (HI "rnm,d,n,m,>") (SI "r,rKT,rKs,mr,ma,>")]) +(define_mode_attr cmp1_constraints [(QI "dn,dm,>") (HI "rnm,d,n,m,>") (SI "r,r,r,mr,ma,>")]) (define_mode_attr cmp2_constraints [(QI "dm,nd,>") (HI "d,rnm,m,n,>") (SI "mrC0,mr,ma,KTrC0,Ksr,>")]) ;; Note that operand 0 of an SCC insn is supported in the hardware as