Skip to content

Commit 9de5973

Browse files
ghehglanza
authored andcommitted
[CIR][CIRGen][Builtin][Neon] Lower neon_vaddlvq_u32 (#1208)
1 parent a70a37f commit 9de5973

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2646,8 +2646,11 @@ static mlir::Value emitCommonNeonSISDBuiltinExpr(
26462646
llvm_unreachable(" neon_vaddlv_u32 NYI ");
26472647
case NEON::BI__builtin_neon_vaddlvq_s32:
26482648
llvm_unreachable(" neon_vaddlvq_s32 NYI ");
2649-
case NEON::BI__builtin_neon_vaddlvq_u32:
2650-
llvm_unreachable(" neon_vaddlvq_u32 NYI ");
2649+
case NEON::BI__builtin_neon_vaddlvq_u32: {
2650+
mlir::Type argTy = cgf.convertType(expr->getArg(0)->getType());
2651+
return emitNeonCall(builder, {argTy}, ops, "aarch64.neon.uaddlv", resultTy,
2652+
loc);
2653+
}
26512654
case NEON::BI__builtin_neon_vaddv_f32:
26522655
llvm_unreachable(" neon_vaddv_f32 NYI ");
26532656
case NEON::BI__builtin_neon_vaddv_s32:

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1716,3 +1716,14 @@ uint64x2_t test_vpadalq_u32(uint64x2_t a, uint32x4_t b) {
17161716
// LLVM: [[TMP2:%.*]] = add <2 x i64> [[VPADAL1_I]], [[a]]
17171717
// LLVM: ret <2 x i64> [[TMP2]]
17181718
}
1719+
1720+
uint64_t test_vaddlvq_u32(uint32x4_t a) {
1721+
return vaddlvq_u32(a);
1722+
1723+
// CIR-LABEL: vaddlvq_u32
1724+
// CIR: = cir.llvm.intrinsic "aarch64.neon.uaddlv" {{%.*}} : (!cir.vector<!u32i x 4>) -> !u64i
1725+
1726+
// LLVM: {{.*}}@test_vaddlvq_u32(<4 x i32>{{.*}}[[A:%.*]])
1727+
// LLVM-NEXT: [[VADDLVQ_U32_I:%.*]] = call i64 @llvm.aarch64.neon.uaddlv.i64.v4i32(<4 x i32> [[A]])
1728+
// LLVM-NEXT: ret i64 [[VADDLVQ_U32_I]]
1729+
}

0 commit comments

Comments
 (0)