Open nathanchance opened 2 years ago
Guessing this is SCEV getting more powerful again; libcalls to __umoddi3
followed by __udivdi3
which looks a bit like a mod+div similar to the https://github.com/ClangBuiltLinux/linux/issues/1666. do_mpage_readpage_block_in_file
is a 64b long long
...
I thought so too but this is reproducible with clang-13
at least:
Guessing this is SCEV getting more powerful again; libcalls to umoddi3 followed by udivdi3 which looks a bit like a mod+div similar to the https://github.com/ClangBuiltLinux/linux/issues/1666.
%n.mod.vf = urem i64 %5, 5
...
%7 = udiv i64 %6, 5
is being lowered to:
$r3 = COPY %44:gprc
$r4 = COPY %43:gprc
$r5 = COPY %42:gprc
$r6 = COPY %45:gprc
BL target-flags(ppc-plt) &__umoddi3, <regmask $cr2 $cr3 $cr4 $f14 $f15 $f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 $r14 $r15 $r16 $r17 $r18 $r19 $r20 $r21 $r22 $r23 $r24 $r25 and 18 more...>, implicit-def dead $lr, implicit $rm, implicit $r3, implicit $r4, implicit $r5, implicit $r6, implicit-def $r1, implicit-def $r3, implicit-def $r4
ADJCALLSTACKUP 8, 0, implicit-def dead $r1, implicit $r1
Fixed by:
The llvm patches have all landed. What do we need to do on the kernel side? Sounds like this is still an issue for clang-13 through clang-15? I think those llvm commits are too risky to ship in clang-15.
Just say that ppc44x_defconfig is broken with earlier versions of clang
? I am not really sure how we can work around this in the kernel sources other than selectively reverting 2255411d1d0f0661d1e5acd5f6edf4e6652a345a for earlier versions of clang
?
@nickdesaulniers The llvm patch for even divisors like 12 was broken and got reverted. I haven't re-committed it yet.
This appears resolved for me with both latest tip of tree and 16.0.0-rc4. Unfortunately, the resulting kernel does not boot in QEMU but that seems like a tangential issue to this one. I've filed https://github.com/ClangBuiltLinux/linux/issues/1814 for that, which has a workaround that would help us avoid this issue.
After commit 0d913358a816 ("powerpc/44x: Fix build failure with GCC 12 (unrecognized opcode: `wrteei')") in -next, I see the following error when building
ppc44x_defconfig
:The only change that commit has for clang is the shift from
-mcpu=powerpc
to-mcpu=440
.cvise
spits out: