[PATCH] D49242: [Intrinsics] define funnel shift IR intrinsics + DAG builder support
Fabian Giesen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 13 14:03:44 PDT 2018
fabiang added inline comments.
================
Comment at: lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:5678
+ SDValue ShX = DAG.getNode(ISD::SHL, sdl, VT, X, IsFSHL ? ShAmt : InvShAmt);
+ SDValue ShY = DAG.getNode(ISD::SRL, sdl, VT, Y, IsFSHL ? InvShAmt : ShAmt);
+ SDValue Res = DAG.getNode(ISD::OR, sdl, VT, ShX, ShY);
----------------
It's definitely rare and, perhaps more importantly, not nearly as commonly supported as rotates, especially for the variable-amount case.
OTOH, even if the resulting DAG is a bit weird, any backends that want to match it can do so easily _if_ it has a canonical form. It's the almost-but-not-quite-canonical cases where the general shape is clear but there are lots of equivalent minor variations that turn out to be brittle and over-specific in my experience. Plus there's always the option of adding real DAG funnel shift ops in a later patch, should the demand arise.
https://reviews.llvm.org/D49242
More information about the llvm-commits
mailing list