On Feb 19, 2021, at 5:59 AM, yao zhongxiao via llvm-dev <llvm...@lists.llvm.org> wrote:Dear LLVMer
I read the Instruction selection in LLVM recently.I find the most important two frameworks "SelectionDAG" and "GlobalISel".As far as I know, the "SelectionDAG" is the default framework and GlobalISel is ongoing now!Can someone give some detailed information about the Instruction selection frameworks?such as(including but not limited to) :1. What's the plan for "GlobalISel" to replace the "SelectionDAG"?
2. GlobalISel uses its own instruction pattern matcher,how will the target instruction description be with tablegen, especially the DAG type in tablegen?
3. "SelectionDAG" is the framework in the trunk,what's the suggestion to following the upcoming "GlobalISel" if we maintain a downstream project?
4. Can someone share some detailed docs or design paper except the following docs
https://llvm.org/docs/GlobalISel/index.html
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Hi Yao,
I'm working on a downstream target that was built from the ground
up using GlobalISel only. I can definitely confirm what Quentin
already said. For us the most challenging part was the legalizer.
You have to be careful not to introduce hidden infinite loops
through conflicting legalization actions. Also because of some
edge-cases that are not fully supported yet, it can sometimes be
difficult to come up with a set of actions that can handle
anything that is thrown at you or maybe you'll even find that the
current implementation cannot handle the edge-case your target
presents. We certainly had to commit some patches in there to make
everything work for us. That is something that will be solved the
more adopters there are for it. You could say that it is in a
working state for the existing upstream targets but if your target
is something new, then it will most certainly uncover some
edge-case that simply nobody thought of yet.
Don't let that deter you from using GISel though. The advantages
it offers over SelDAG definitely outweigh some of the pitfalls
that come with "early" adoption and the amount of testability and
flexibility you gain more than makes up for it.
As for TableGen selection support: we found that simple instructions and some of the more "straight-forward" complex ones could easily be done with TableGen. Things like memops or instructions where TableGen has difficulty to infer the correct types, also instructions with more than one definition, we had to do in C++. However none of us had worked with TableGen before and by now we have learned some more tricks that would certainly allow us to migrate more of our C++ patterns to TableGen.
Overall we are pretty happy with GlobalISel and recently I see more and more patches popping up on Phabricator for it. If you are planning to create a new backend, I can definitely recommend GlobalISel!
Cheers,
Dominik
-- ---------------------------------------------------------------------- Dominik Montada Email: dominik...@hightec-rt.com HighTec EDV-Systeme GmbH Phone: +49 681 92613 19 Europaallee 19 Fax: +49-681-92613-26 D-66113 Saarbrücken WWW: http://www.hightec-rt.com Managing Director: Vera Strothmann Register Court: Saarbrücken, HRB 10445, VAT ID: DE 138344222 This e-mail may contain confidential and/or privileged information. If you are not the intended recipient please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden. ---