[llvm-dev] [RFC] Backend for Motorola 6800 series CPU (M68k)

Min-Yih Hsu via llvm-dev llvm-dev at lists.llvm.org
Mon Jan 25 21:37:57 PST 2021

Hi All,

After nearly a year of efforts trying to bring the M68k LLVM backend upstream. I’m glad to see the goal is within our reach now :-)

Currently there are only two open patches: D88390 and D88391. They only received minor styling feedbacks in the past few days and I’ve already fixed them. I think they’re in good shape. After the `release/12.x` branch is cut (which is just couple of hours away) and all the patches are approved, I will commit all 9 patches to the ToT at once.

So I think this is good time to talk about some future plan about bringing M68k into an official target.

First of all, I would like to use bugzilla to track all the milestones in M68k target, in replacement of the Github Project (https://github.com/M680x0/M680x0-mono-repo/projects <https://github.com/M680x0/M680x0-mono-repo/projects> ) using now. In order to be more centralized and make it easier to notify people in this community for any updates. Currently there is an umbrella bug (Bug 48791 <https://bugs.llvm.org/show_bug.cgi?id=48791>) as the blocker of graduating M68k from experimental target. Any milestones will be depended by this bug. Feel free to link to this umbrella bug too if you feel a bug is crucial for M68k being a mature backend.

Second, I will collect more M68k toolchain use cases. On one hand they’re precious (compiler) test cases; on the other hand, we can get to know what are the most wanted features nowadays, in addition to those that are already in our mind.
Currently we already had connections with the M68k retro-computing community (m68k.info <http://m68k.info/>), Clang Built Linux (https://clangbuiltlinux.github.io/ <https://clangbuiltlinux.github.io/> ), and the project to bring Rust compiler — which uses LLVM under the hood — to M68k. Please spread the words if you know anyone that is interested in this topic!

These are basically my thoughts on the future plan. Last but not the least, this backend will never go this far without the helps from this community.

I especially want to shout out to people CC-ed in this email, they spent time reviewing the patches and discussing with us on how to make the backend better. Thank you very much!


> On Jan 8, 2021, at 10:03 AM, Min-Yih Hsu <minyihh at uci.edu> wrote:
> Hi All,
> Happy New Year!
> This is another update on the M68k backend.
> Currently we still have 3 patches to review:
> 1. (1/8) TableGen changes https://reviews.llvm.org/D88385 <https://reviews.llvm.org/D88385> 
> 2. (4/8) MC layer changes https://reviews.llvm.org/D88390 <https://reviews.llvm.org/D88390> 
> 3. (5/8) Target Lowering https://reviews.llvm.org/D88391 <https://reviews.llvm.org/D88391> 
> 4th (D88390) and 5th (D88391) patches only have minor formatting issues. 
> The biggest challenge now is in the first patch, D88385. Currently the patch proposed to add a new TableGen backend (CodeBeads) to generate auxiliary data structures for variable length encoding as well as complex addressing mode encodings. This is equivalent to X86’s usage of `MCInstrDesc::TSFlags` to carry their instruction encoding. However, TSFlags only has 64 bits, where M68k’s current design needs at least 24 bytes to encode all the instructions. While we might able to find an optimal way to fit M68k’s info into 64 bits in the future, the refactoring efforts to do it now is huge, especially on changing instructions definitions in TG files.
> Jessica, who is listed in the blocker list of this patch, raised concerns about the necessity of this specialized TG backend, and proposed to re-use X86’s way to handle this problem. That is, put the M68k’s encoding info into MCInstrDesc with modifications in the InstrInfoEmitter TG backend.
> Simon thought special handling in the InstrInfoEmitter/MCInstrDesc for M68k doesn’t have a huge difference with adding a specialized CodeBeads backend like the patch is doing now.
> Renado preferred to keep the CodeBeads backend since it works well for M68k and later refactoring, if there is any, will probably only affect M68k. He also thought “where” to put this implementation - whether a TableGen or MCInstrDesc change - should come before asking “why” doing this change.
> Personally, I also prefer to keep the current CodeBeads implementation and optimize it in the future. Since:
> 1. CodeBeads is an optional TG backend. It will not affect any existing Target. 
> 2. As mentioned earlier, it works well on M68k now. And if there is any changes on it or even removal on this TG backend in the future, the refactoring cost is pretty low.
> 3. We don’t have many resources to conduct large scale fixes in a short time (the longer this patch series diverged from upstream, the higher the rebasing cost for other parts of M68k backend) on this issue right now.
> I would happy to hear if there is any suggestion on solving this challenge.
> Thank you for the all the reviewing efforts!
> Best,
> -Min
>> On Dec 17, 2020, at 11:42 PM, John Paul Adrian Glaubitz <glaubitz at physik.fu-berlin.de <mailto:glaubitz at physik.fu-berlin.de>> wrote:
>> Hi Min!
>> On 12/18/20 1:21 AM, Min-Yih Hsu wrote:
>>> Another update on this topic: Currently three patches have been approved, thanks for all reviewers’ time and efforts :-)
>> I've read the reviews. Awesome progress.
>>> Here are the remaining patches:
>>> - Patch 1/8 D88385: Got one LGTM, however I believe Jessica Clarke (jrtc27) (CC-ed here) is listed as blocker.
>>     Does anyone here know the best way to contact Jessica? Since the patch has been blocked for quite a long time
>>     and pinging @jrtc27 on Phab didn’t seem to work
>> I pinged jrtc27 on IRC (OFTC) and will keep pinging until we get an answer.
>>> - Patch 3/8 D88389   (Basic .td files)
>>> - Patch 4/8 D88390   (MC layer)
>>> - Patch 5/8 D88391   (Target lowering)
>>> - Patch 6/8 D88392   (IR Tests)
>>> Except Patch 6, which only has minor formatting issues to fix, I didn’t see any major
>>> objections or concerns on other patches at this time point.
>> Sounds great.
>>> In addition to the patch review, tomorrow Dec 18th 19:00 CET (10:00 AM PST), Nick Desaulniers
>>> is going to give a talk on compiling Linux Kernel for M68k using LLVM.
>>> Please checkout http://m68k.info/ <http://m68k.info/> <http://m68k.info/ <http://m68k.info/>> for more info about the live stream
>> Yep. I'm very exciting for this talk! And we're planning to put it on Youtube later.
>> Adrian
>> -- 
>> .''`.  John Paul Adrian Glaubitz
>> : :' :  Debian Developer - glaubitz at debian.org <mailto:glaubitz at debian.org>
>> `. `'   Freie Universitaet Berlin - glaubitz at physik.fu-berlin.de <mailto:glaubitz at physik.fu-berlin.de>
>>  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210125/1123d25d/attachment.html>

More information about the llvm-dev mailing list