Skip to content

Commit 8cb8395

Browse files
authored
[CIR][CIRGen][Builtin][Neon] Lower neon vabsd_s64 (#1489)
Lower neon vabsd_s64
1 parent 908424a commit 8cb8395

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2671,7 +2671,8 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
26712671
case NEON::BI__builtin_neon_vabds_f32:
26722672
llvm_unreachable(" neon_vabds_f32 NYI ");
26732673
case NEON::BI__builtin_neon_vabsd_s64:
2674-
llvm_unreachable(" neon_vabsd_s64 NYI ");
2674+
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.abs", resultTy,
2675+
loc);
26752676
case NEON::BI__builtin_neon_vaddlv_s32:
26762677
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.saddlv", resultTy,
26772678
loc);

clang/test/CIR/CodeGen/AArch64/neon.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14660,12 +14660,17 @@ void test_vst1q_s64(int64_t *a, int64x2_t b) {
1466014660
// return (uint64_t)vtstd_u64(a, b);
1466114661
// }
1466214662

14663-
// NYI-LABEL: @test_vabsd_s64(
14664-
// NYI: [[VABSD_S64_I:%.*]] = call i64 @llvm.aarch64.neon.abs.i64(i64 %a)
14665-
// NYI: ret i64 [[VABSD_S64_I]]
14666-
// int64_t test_vabsd_s64(int64_t a) {
14667-
// return (int64_t)vabsd_s64(a);
14668-
// }
14663+
int64_t test_vabsd_s64(int64_t a) {
14664+
return (int64_t)vabsd_s64(a);
14665+
14666+
// CIR-LABEL: vabsd_s64
14667+
// CIR: cir.llvm.intrinsic "aarch64.neon.abs" {{%.*}} : (!s64i) -> !s64i
14668+
14669+
// LLVM-LABEL: @test_vabsd_s64
14670+
// LLVM-SAME: (i64 [[a:%.*]])
14671+
// LLVM: [[VABSD_S64_I:%.*]] = call i64 @llvm.aarch64.neon.abs.i64(i64 [[a]])
14672+
// LLVM: ret i64 [[VABSD_S64_I]]
14673+
}
1466914674

1467014675
// NYI-LABEL: @test_vqabsb_s8(
1467114676
// NYI: [[TMP0:%.*]] = insertelement <8 x i8> poison, i8 %a, i64 0

0 commit comments

Comments
 (0)