This is an archive of the discontinued LLVM Phabricator instance.

TableGen/GlobalISel: Fix pattern matching of immarg literals
ClosedPublic

Authored by arsenm on Jan 8 2020, 3:52 PM.

Details

Summary

For arguments that are not expected to be materialized with
G_CONSTANT, this was emitting predicates which could never match. It
was first adding a meaningless LLT check, which would always fail due
to the operand not being a register.

Infer the cases where a literal should check for an immediate operand,
instead of a register This avoids needing to invent a special way of
representing timm literal values.

Also handle immediate arguments in GIM_CheckLiteralInt. The comments
stated it handled isImm() and isCImm(), but that wasn't really true.

This unblocks work on the selection of all of the complicated AMDGPU
intrinsics in future commits.

Diff Detail

Event Timeline

arsenm created this revision.Jan 8 2020, 3:52 PM
Herald added a project: Restricted Project. · View Herald TranscriptJan 8 2020, 3:52 PM
paquette added inline comments.Jan 9 2020, 12:00 PM
llvm/utils/TableGen/CodeGenInstruction.cpp
522–530

Can we reduce the nesting here a bit by returning false early?

arsenm updated this revision to Diff 237168.Jan 9 2020, 12:49 PM

Early return and merge with isOperandAPointer

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

LGTM

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