From: Jessica Paquette Date: Thu, 19 Aug 2021 22:49:38 +0000 (-0700) Subject: [GlobalISel] Add IRTranslator support for @llvm.lround.* -> G_LROUND X-Git-Tag: upstream/15.0.7~33438 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3207ed196c75e464ad2fea2b1b7be515a619d57c;p=platform%2Fupstream%2Fllvm.git [GlobalISel] Add IRTranslator support for @llvm.lround.* -> G_LROUND Translate the `@llvm.lround.*` family to G_LROUND via `IRTranslator::translateSimpleIntrinsic`. Differential Revision: https://reviews.llvm.org/D108418 --- diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index 8663264..b60b1d3 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -1763,6 +1763,8 @@ unsigned IRTranslator::getSimpleIntrinsicOpcode(Intrinsic::ID ID) { return TargetOpcode::G_VECREDUCE_UMAX; case Intrinsic::vector_reduce_umin: return TargetOpcode::G_VECREDUCE_UMIN; + case Intrinsic::lround: + return TargetOpcode::G_LROUND; } return Intrinsic::not_intrinsic; } diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll index d8a94c4..3bf7a5c 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll +++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll @@ -2457,3 +2457,16 @@ define {i8, i32} @test_freeze_struct({ i8, i32 }* %addr) { } !0 = !{ i64 0, i64 2 } + +declare i64 @llvm.lround.i64.f32(float) nounwind readnone +define i64 @lround(float %x) { + ; CHECK-LABEL: name: lround + ; CHECK: bb.1 (%ir-block.0): + ; CHECK: liveins: $s0 + ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $s0 + ; CHECK: [[LROUND:%[0-9]+]]:_(s64) = G_LROUND [[COPY]](s32) + ; CHECK: $x0 = COPY [[LROUND]](s64) + ; CHECK: RET_ReallyLR implicit $x0 + %lround = tail call i64 @llvm.lround.i64.f32(float %x) + ret i64 %lround +}