[llvm] 8885a76 - [X86] Separate imm from relocImm handling.

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 15 07:22:12 PDT 2020


On Sat, Jun 13, 2020 at 8:31 PM Craig Topper via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
>
> Author: Craig Topper
> Date: 2020-06-13T11:29:28-07:00
> New Revision: 8885a7640b824c26e9ceb92297a3b45f9b8caa8b
>
> URL: https://github.com/llvm/llvm-project/commit/8885a7640b824c26e9ceb92297a3b45f9b8caa8b
> DIFF: https://github.com/llvm/llvm-project/commit/8885a7640b824c26e9ceb92297a3b45f9b8caa8b.diff
>
> LOG: [X86] Separate imm from relocImm handling.
>
> relocImm was a complexPattern that handled both ConstantSDNode
> and X86Wrapper. But it was only applied selectively because using
> it would cause patterns to be not importable into FastISel or
> GlobalISel. So it only got applied to flag setting instructions,
> stores, RMW arithmetic instructions, and rotates.
>
> Most of the test changes are a result of making patterns available
> to GlobalISel or FastISel. The absolute-cmp.ll change is due to
> this fixing a pattern ordering issue to make an absolute symbol
> match to an 8-bit immediate before trying a 32-bit immediate.
>
> I tried to use PatFrags to reduce the repetition, but I was getting
> errors from TableGen.

We started seeing an assertion in Chromium builds that bisected to
this revision:

SelectionDAGISel.cpp:3458: (...) Assertion `RecNo <
RecordedNodes.size() && "Invalid EmitNode"' failed.

It's a ThinLTO build, so a bit of a pain to work with, but I've
extracted some IR that reproduces the problem here:
https://bugs.chromium.org/p/chromium/issues/detail?id=1094852#c2

I've reverted in the meantime: f47a7766287afa0919918093d8367316aa2c9e8e


More information about the llvm-commits mailing list