Skip to content

Commit 6c645a1

Browse files
authored
[CIR][CIRGen][Builtin][Neon] Lower neon vaddlv_s32 (#1464)
Lower neon vaddlv_s32
1 parent 182c680 commit 6c645a1

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
@@ -2673,7 +2673,8 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
26732673
case NEON::BI__builtin_neon_vabsd_s64:
26742674
llvm_unreachable(" neon_vabsd_s64 NYI ");
26752675
case NEON::BI__builtin_neon_vaddlv_s32:
2676-
llvm_unreachable(" neon_vaddlv_s32 NYI ");
2676+
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.saddlv", resultTy,
2677+
loc);
26772678
case NEON::BI__builtin_neon_vaddlv_u32:
26782679
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.uaddlv", resultTy,
26792680
loc);

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19227,12 +19227,17 @@ uint32_t test_vaddv_u32(uint32x2_t a) {
1922719227
// LLVM: ret i32 [[VADDV_U32_I]]
1922819228
}
1922919229

19230-
// NYI-LABEL: @test_vaddlv_s32(
19231-
// NYI: [[VADDLV_S32_I:%.*]] = call i64 @llvm.aarch64.neon.saddlv.i64.v2i32(<2 x i32> %a)
19232-
// NYI: ret i64 [[VADDLV_S32_I]]
19233-
// int64_t test_vaddlv_s32(int32x2_t a) {
19234-
// return vaddlv_s32(a);
19235-
// }
19230+
int64_t test_vaddlv_s32(int32x2_t a) {
19231+
return vaddlv_s32(a);
19232+
19233+
// CIR-LABEL: vaddlv_s32
19234+
// CIR: cir.llvm.intrinsic "aarch64.neon.saddlv" {{%.*}} : (!cir.vector<!s32i x 2>) -> !s64i
19235+
19236+
// LLVM-LABEL: test_vaddlv_s32
19237+
// LLVM-SAME: (<2 x i32> [[a:%.*]])
19238+
// LLVM: [[VADDLV_S32_I:%.*]] = call i64 @llvm.aarch64.neon.saddlv.i64.v2i32(<2 x i32> [[a]])
19239+
// LLVM: ret i64 [[VADDLV_S32_I]]
19240+
}
1923619241

1923719242
uint64_t test_vaddlv_u32(uint32x2_t a) {
1923819243
return vaddlv_u32(a);

0 commit comments

Comments
 (0)