DAG: Handle expanding strict_fsub into fneg and strict_fadd
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Wed, 27 May 2020 13:36:42 +0000 (09:36 -0400)
committerMatt Arsenault <arsenm2@gmail.com>
Tue, 21 Jul 2020 20:17:10 +0000 (16:17 -0400)
commit2fe0ea8261cf40d9c1ccdb9af633328290dd925e
tree77955cf4609c335911126734c341071d4943cba8
parent303a7f7a26e2aae1cb85f49dccbc0b5d14e0b2e0
DAG: Handle expanding strict_fsub into fneg and strict_fadd

The AMDGPU handling of f16 vectors is terrible still since it gets
scalarized even when the vector operation is legal.

The code is is essentially duplicated between the non-strict and
strict case. Apparently no other expansions are currently trying to do
this. This is mostly because I found the behavior of
getStrictFPOperationAction to be confusing. In the ARM case, it would
expand strict_fsub even though it shouldn't due to the later check. At
that point, the logic required to check for legality was more complex
than just duplicating the 2 instruction expansion.
llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
llvm/lib/Target/AMDGPU/VOP2Instructions.td
llvm/test/CodeGen/AMDGPU/strict_fsub.f16.ll [new file with mode: 0644]
llvm/test/CodeGen/AMDGPU/strict_fsub.f32.ll [new file with mode: 0644]
llvm/test/CodeGen/AMDGPU/strict_fsub.f64.ll [new file with mode: 0644]