diff options
author | Jessica Paquette <jpaquette@apple.com> | 2019-01-30 21:16:04 +0000 |
---|---|---|
committer | Jessica Paquette <jpaquette@apple.com> | 2019-01-30 21:16:04 +0000 |
commit | 0154bd1385d13523fca0b57c7998603e23fdb038 (patch) | |
tree | 6642ce92d752cfde281345ff8f8c47a1946b5645 /llvm/lib/CodeGen | |
parent | 28a892b972f49a98c88e51a129872f117f305304 (diff) | |
download | bcm5719-llvm-0154bd1385d13523fca0b57c7998603e23fdb038.tar.gz bcm5719-llvm-0154bd1385d13523fca0b57c7998603e23fdb038.zip |
[GlobalISel][AArch64] Add instruction selection support for @llvm.log2
This teaches GlobalISel to emit a RTLib call for @llvm.log2 when it encounters
it.
It updates the existing floating point tests to show that we don't fall back on
the intrinsic, and select the correct instructions. It also adds a legalizer
test for G_FLOG2.
https://reviews.llvm.org/D57357
llvm-svn: 352673
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index ee9163f5c74..91100d02af1 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -138,6 +138,10 @@ static RTLIB::Libcall getRTLibDesc(unsigned Opcode, unsigned Size) { assert((Size == 32 || Size == 64 || Size == 128) && "Unsupported size"); return Size == 128 ? RTLIB::LOG_F128 : Size == 64 ? RTLIB::LOG_F64 : RTLIB::LOG_F32; + case TargetOpcode::G_FLOG2: + assert((Size == 32 || Size == 64 || Size == 128) && "Unsupported size"); + return Size == 128 ? RTLIB::LOG2_F128 + : Size == 64 ? RTLIB::LOG2_F64 : RTLIB::LOG2_F32; } llvm_unreachable("Unknown libcall function"); } @@ -233,7 +237,8 @@ LegalizerHelper::libcall(MachineInstr &MI) { case TargetOpcode::G_FCOS: case TargetOpcode::G_FSIN: case TargetOpcode::G_FLOG10: - case TargetOpcode::G_FLOG: { + case TargetOpcode::G_FLOG: + case TargetOpcode::G_FLOG2: { if (Size > 64) { LLVM_DEBUG(dbgs() << "Size " << Size << " too large to legalize.\n"); return UnableToLegalize; @@ -1197,6 +1202,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) { case TargetOpcode::G_FSIN: case TargetOpcode::G_FLOG10: case TargetOpcode::G_FLOG: + case TargetOpcode::G_FLOG2: case TargetOpcode::G_FSQRT: assert(TypeIdx == 0); Observer.changingInstr(MI); |