Skip to content

Commit 6d99bda

Browse files
authored
[CIR][CIRGen][Builtin][Neon] Lower neon_vaddd_s64 and neon_vaddd_u64 (#1255)
Lowering Neon `vaddd_s64` and `vaddd_u64` - [Clang CGBuiltin Implementation](https://github.com/llvm/clangir/blob/2b1a638ea07ca10c5727ea835bfbe17b881175cc/clang/lib/CodeGen/CGBuiltin.cpp#L12460-L12462) - [vaddd_s64 Builtin definition](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddd_s64) - [vaddd_u64 Builtin definition](https://developer.arm.com/architectures/instruction-sets/intrinsics/vaddd_u64)
1 parent a477dfa commit 6d99bda

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3786,7 +3786,7 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
37863786
}
37873787
case NEON::BI__builtin_neon_vaddd_s64:
37883788
case NEON::BI__builtin_neon_vaddd_u64:
3789-
llvm_unreachable("NEON::BI__builtin_neon_vaddd_u64 NYI");
3789+
return builder.createAdd(Ops[0], emitScalarExpr(E->getArg(1)));
37903790
case NEON::BI__builtin_neon_vsubd_s64:
37913791
case NEON::BI__builtin_neon_vsubd_u64:
37923792
llvm_unreachable("NEON::BI__builtin_neon_vsubd_u64 NYI");

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

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9881,19 +9881,29 @@ poly16x8_t test_vmull_p8(poly8x8_t a, poly8x8_t b) {
98819881
// return vmull_high_p8(a, b);
98829882
// }
98839883

9884-
// NYI-LABEL: @test_vaddd_s64(
9885-
// NYI: [[VADDD_I:%.*]] = add i64 %a, %b
9886-
// NYI: ret i64 [[VADDD_I]]
9887-
// int64_t test_vaddd_s64(int64_t a, int64_t b) {
9888-
// return vaddd_s64(a, b);
9889-
// }
9884+
int64_t test_vaddd_s64(int64_t a, int64_t b) {
9885+
return vaddd_s64(a, b);
98909886

9891-
// NYI-LABEL: @test_vaddd_u64(
9892-
// NYI: [[VADDD_I:%.*]] = add i64 %a, %b
9893-
// NYI: ret i64 [[VADDD_I]]
9894-
// uint64_t test_vaddd_u64(uint64_t a, uint64_t b) {
9895-
// return vaddd_u64(a, b);
9896-
// }
9887+
// CIR-LABEL: vaddd_s64
9888+
// CIR: {{%.*}} = cir.binop(add, {{%.*}}, {{%.*}}) : !s64i
9889+
9890+
// LLVM-LABEL: @test_vaddd_s64
9891+
// LLVM-SAME: (i64 [[a:%.]], i64 [[b:%.]])
9892+
// LLVM: [[VADDD_I:%.*]] = add i64 [[a]], [[b]]
9893+
// LLVM: ret i64 [[VADDD_I]]
9894+
}
9895+
9896+
uint64_t test_vaddd_u64(uint64_t a, uint64_t b) {
9897+
return vaddd_u64(a, b);
9898+
9899+
// CIR-LABEL: vaddd_u64
9900+
// CIR: {{%.*}} = cir.binop(add, {{%.*}}, {{%.*}}) : !u64i
9901+
9902+
// LLVM-LABEL: @test_vaddd_u64
9903+
// LLVM-SAME: (i64 [[a:%.]], i64 [[b:%.]])
9904+
// LLVM: [[VADDD_I:%.*]] = add i64 [[a]], [[b]]
9905+
// LLVM: ret i64 [[VADDD_I]]
9906+
}
98979907

98989908
// NYI-LABEL: @test_vsubd_s64(
98999909
// NYI: [[VSUBD_I:%.*]] = sub i64 %a, %b

0 commit comments

Comments
 (0)