Skip to content

Commit 52fd4a2

Browse files
authored
[CIR][CIRGen][Builtin][Neon] Lower neon vaddlv_u32 (#1451)
Lower neon vaddlv_u32
1 parent 8607c74 commit 52fd4a2

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -2675,7 +2675,8 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
26752675
case NEON::BI__builtin_neon_vaddlv_s32:
26762676
llvm_unreachable(" neon_vaddlv_s32 NYI ");
26772677
case NEON::BI__builtin_neon_vaddlv_u32:
2678-
llvm_unreachable(" neon_vaddlv_u32 NYI ");
2678+
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.uaddlv", resultTy,
2679+
loc);
26792680
case NEON::BI__builtin_neon_vaddlvq_s32:
26802681
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.saddlv", resultTy,
26812682
loc);

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

+11-6
Original file line numberDiff line numberDiff line change
@@ -19225,12 +19225,17 @@ uint32_t test_vaddv_u32(uint32x2_t a) {
1922519225
// return vaddlv_s32(a);
1922619226
// }
1922719227

19228-
// NYI-LABEL: @test_vaddlv_u32(
19229-
// NYI: [[VADDLV_U32_I:%.*]] = call i64 @llvm.aarch64.neon.uaddlv.i64.v2i32(<2 x i32> %a)
19230-
// NYI: ret i64 [[VADDLV_U32_I]]
19231-
// uint64_t test_vaddlv_u32(uint32x2_t a) {
19232-
// return vaddlv_u32(a);
19233-
// }
19228+
uint64_t test_vaddlv_u32(uint32x2_t a) {
19229+
return vaddlv_u32(a);
19230+
19231+
// CIR-LABEL: vaddlv_u32
19232+
// CIR: cir.llvm.intrinsic "aarch64.neon.uaddlv" {{%.*}} : (!cir.vector<!u32i x 2>) -> !u64i
19233+
19234+
// LLVM-LABEL: test_vaddlv_u32
19235+
// LLVM-SAME: (<2 x i32> [[a:%.*]])
19236+
// LLVM: [[VADDLV_U32_I:%.*]] = call i64 @llvm.aarch64.neon.uaddlv.i64.v2i32(<2 x i32> [[a]])
19237+
// LLVM: ret i64 [[VADDLV_U32_I]]
19238+
}
1923419239

1923519240
uint8x8_t test_vmovn_u16(uint16x8_t a) {
1923619241
return vmovn_u16(a);

0 commit comments

Comments
 (0)