forked from OSchip/llvm-project
[GlobalISel] Add IR translation support for the @llvm.log10 intrinsic
This adds IR translation support for @llvm.log10 and updates relevant tests. https://reviews.llvm.org/D55392 llvm-svn: 348657
This commit is contained in:
parent
2f5fd174c9
commit
cc4b6920b3
|
@ -454,6 +454,9 @@ HANDLE_TARGET_OPCODE(G_FLOG)
|
|||
/// Floating point base-2 logarithm of a value.
|
||||
HANDLE_TARGET_OPCODE(G_FLOG2)
|
||||
|
||||
/// Floating point base-10 logarithm of a value.
|
||||
HANDLE_TARGET_OPCODE(G_FLOG10)
|
||||
|
||||
/// Generic FP negation.
|
||||
HANDLE_TARGET_OPCODE(G_FNEG)
|
||||
|
||||
|
|
|
@ -540,6 +540,13 @@ def G_FLOG2 : GenericInstruction {
|
|||
let hasSideEffects = 0;
|
||||
}
|
||||
|
||||
// Floating point base-10 logarithm of a value.
|
||||
def G_FLOG10 : GenericInstruction {
|
||||
let OutOperandList = (outs type0:$dst);
|
||||
let InOperandList = (ins type0:$src1);
|
||||
let hasSideEffects = 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Opcodes for LLVM Intrinsics
|
||||
//------------------------------------------------------------------------------
|
||||
|
|
|
@ -895,6 +895,11 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID,
|
|||
.addDef(getOrCreateVReg(CI))
|
||||
.addUse(getOrCreateVReg(*CI.getArgOperand(0)));
|
||||
return true;
|
||||
case Intrinsic::log10:
|
||||
MIRBuilder.buildInstr(TargetOpcode::G_FLOG10)
|
||||
.addDef(getOrCreateVReg(CI))
|
||||
.addUse(getOrCreateVReg(*CI.getArgOperand(0)));
|
||||
return true;
|
||||
case Intrinsic::fabs:
|
||||
MIRBuilder.buildInstr(TargetOpcode::G_FABS)
|
||||
.addDef(getOrCreateVReg(CI))
|
||||
|
|
|
@ -1396,6 +1396,16 @@ define float @test_log2_intrin(float %a) {
|
|||
ret float %res
|
||||
}
|
||||
|
||||
declare float @llvm.log10.f32(float)
|
||||
define float @test_log10_intrin(float %a) {
|
||||
; CHECK-LABEL: name: test_log10_intrin
|
||||
; CHECK: [[A:%[0-9]+]]:_(s32) = COPY $s0
|
||||
; CHECK: [[RES:%[0-9]+]]:_(s32) = G_FLOG10 [[A]]
|
||||
; CHECK: $s0 = COPY [[RES]]
|
||||
%res = call float @llvm.log10.f32(float %a)
|
||||
ret float %res
|
||||
}
|
||||
|
||||
declare float @llvm.fabs.f32(float)
|
||||
define float @test_fabs_intrin(float %a) {
|
||||
; CHECK-LABEL: name: test_fabs_intrin
|
||||
|
|
|
@ -267,6 +267,9 @@
|
|||
# DEBUG-NEXT: G_FLOG2 (opcode {{[0-9]+}}): 1 type index
|
||||
# DEBUG: .. type index coverage check SKIPPED: no rules defined
|
||||
#
|
||||
# DEBUG-NEXT: G_FLOG10 (opcode {{[0-9]+}}): 1 type index
|
||||
# DEBUG: .. type index coverage check SKIPPED: no rules defined
|
||||
#
|
||||
# DEBUG-NEXT: G_FNEG (opcode {{[0-9]+}}): 1 type index
|
||||
# DEBUG: .. type index coverage check SKIPPED: no rules defined
|
||||
#
|
||||
|
|
Loading…
Reference in New Issue