This is an archive of the discontinued LLVM Phabricator instance.

TableGen/GlobalISel: Add way for SDNodeXForm to work on timm
ClosedPublic

Authored by arsenm on Jan 8 2020, 12:23 PM.

Details

Summary

The current implementation assumes there is an instruction associated
with the transform, but this is not the case for
timm/TargetConstant/immarg values. These transforms should directly
operate on a specific MachineOperand in the source
instruction. TableGen would assert if you attempted to define an
equivalent GISDNodeXFormEquiv using timm when it failed to find the
instruction matcher.

Specially recognize SDNodeXForms on timm, and pass the operand index
to the render function.

Ideally this would be a separate render function type that looks like
void renderFoo(MachineInstrBuilder, const MachineOperand&), but this
proved to be somewhat mechanically painful. Add an optional operand
index which will only be passed if the transform should only look at
the one source operand.

Theoretically it would also be possible to only ever pass the
MachineOperand, and the existing renderers would check the parent. I
think that would be somewhat ugly for the standard usage which may
want to inspect other operands, and I also think MachineOperand should
eventually not carry a pointer to the parent instruction.

Use it in one sample pattern. This isn't a great example, since the
transform exists to satisfy DAG type constraints. This could also be
avoided by just changing the MachineInstr's arbitrary choice of
operand type from i16 to i32. Other patterns have nontrivial uses, but
this serves as the simplest example.

One flaw this still has is if you try to use an SDNodeXForm defined
for imm, but the source pattern uses timm, you still see the "Failed
to lookup instruction" assert. However, there is now a way to avoid
it.

Diff Detail

Event Timeline

arsenm created this revision.Jan 8 2020, 12:23 PM
arsenm updated this revision to Diff 236927.Jan 8 2020, 4:00 PM

Missed test update

paquette added inline comments.Jan 9 2020, 12:06 PM
llvm/test/TableGen/GlobalISelEmitter-SDNodeXForm-timm.td
25

typo: GISEUL

arsenm updated this revision to Diff 237169.Jan 9 2020, 12:50 PM

Fix check line typo

paquette accepted this revision.Jan 9 2020, 1:54 PM

LGTM

This revision is now accepted and ready to land.Jan 9 2020, 1:54 PM