diff options
| author | Jessica Paquette <jpaquette@apple.com> | 2019-01-24 22:00:41 +0000 |
|---|---|---|
| committer | Jessica Paquette <jpaquette@apple.com> | 2019-01-24 22:00:41 +0000 |
| commit | 245047dfe8b4abcdce02b7f16f464ed1d86ccbee (patch) | |
| tree | 3ac054f59a0d0eee97a5d3ddc481b550116b1bae /llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | |
| parent | 38ebaf7d5d25ef3113a6ab4bf19ed4e1869373ab (diff) | |
| download | bcm5719-llvm-245047dfe8b4abcdce02b7f16f464ed1d86ccbee.tar.gz bcm5719-llvm-245047dfe8b4abcdce02b7f16f464ed1d86ccbee.zip | |
[GlobalISel][AArch64] Add isel support for FP16 vector @llvm.ceil
This patch adds support for vector @llvm.ceil intrinsics when full 16 bit
floating point support isn't available.
To do this, this patch...
- Implements basic isel for G_UNMERGE_VALUES
- Teaches the legalizer about 16 bit floats
- Teaches AArch64RegisterBankInfo to respect floating point registers on
G_BUILD_VECTOR and G_UNMERGE_VALUES
- Teaches selectCopy about 16-bit floating point vectors
It also adds
- A legalizer test for the 16-bit vector ceil which verifies that we create a
G_UNMERGE_VALUES and G_BUILD_VECTOR when full fp16 isn't supported
- An instruction selection test which makes sure we lower to G_FCEIL when
full fp16 is supported
- A test for selecting G_UNMERGE_VALUES
And also updates arm64-vfloatintrinsics.ll to show that the new ceiling types
work as expected.
https://reviews.llvm.org/D56682
llvm-svn: 352113
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index 7e98a9b7a3d..3da0d846f19 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -1289,7 +1289,8 @@ LegalizerHelper::fewerElementsVector(MachineInstr &MI, unsigned TypeIdx, case TargetOpcode::G_FABS: case TargetOpcode::G_FDIV: case TargetOpcode::G_FREM: - case TargetOpcode::G_FMA: { + case TargetOpcode::G_FMA: + case TargetOpcode::G_FCEIL: { unsigned NarrowSize = NarrowTy.getSizeInBits(); unsigned DstReg = MI.getOperand(0).getReg(); unsigned Flags = MI.getFlags(); |

