[LLVMdev] Matching addsub

Dan Gohman gohman at apple.com
Mon Oct 17 17:33:21 PDT 2011

On Oct 17, 2011, at 3:40 PM, Hal Finkel wrote:

> How should I go about matching floating-point addsub-like vector
> instructions? My first inclination is to write something which matches
> build_vector 1.0, -1.0, and then use that in combination with a match on
> fadd, but that does not seem to work. I think this is because
> BUILD_VECTOR cannot ever be "Legal", and so it is always turned into a
> constant load before instruction selection.

Trying to keep a vector producer this naive about the target instruction
set is awkward. If the vector producer doesn't know whether the target
has an addsub or subadd instruction, how is it to know the best way to
expand complex multiplication? It's likely to get suboptimal code in many

On the other hand, a producer that knows that the target has certain
instructions could pretty easily just use appropriate intrinsics that can
be mapped directly to the desired instructions. This way, there's no need
for it to play pictionary with the backend, drawing out its desired
semantics in terms of primitive operations and expecting codegen to
rediscover what was meant by pattern-matching.


More information about the llvm-dev mailing list