Skip to content

Commit 8367ba9

Browse files
AmrDeveloperlanza
authored andcommitted
[CIR][CIRGen][Builtin][Neon] Lower neon_vsubd_s64 and neon_vsubd_u64 (llvm#1256)
Lowering `neon_vsubd_s64` and `neon_vsubd_u64` - [Clang CGBuiltin Implementation](https://github.com/llvm/clangir/blob/2b1a638ea07ca10c5727ea835bfbe17b881175cc/clang/lib/CodeGen/CGBuiltin.cpp#L12463-L12465) - [vaddd_s64 Builtin definition](https://developer.arm.com/architectures/instruction-sets/intrinsics/vsubd_s64) - [vaddd_u64 Builtin definition](https://developer.arm.com/architectures/instruction-sets/intrinsics/vsubd_u64)
1 parent ac4b426 commit 8367ba9

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
@@ -3790,7 +3790,7 @@ CIRGenFunction::emitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E,
37903790
return builder.createAdd(Ops[0], emitScalarExpr(E->getArg(1)));
37913791
case NEON::BI__builtin_neon_vsubd_s64:
37923792
case NEON::BI__builtin_neon_vsubd_u64:
3793-
llvm_unreachable("NEON::BI__builtin_neon_vsubd_u64 NYI");
3793+
return builder.createSub(Ops[0], emitScalarExpr(E->getArg(1)));
37943794
case NEON::BI__builtin_neon_vqdmlalh_s16:
37953795
case NEON::BI__builtin_neon_vqdmlslh_s16: {
37963796
llvm_unreachable("NEON::BI__builtin_neon_vqdmlslh_s16 NYI");

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

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9906,19 +9906,29 @@ uint64_t test_vaddd_u64(uint64_t a, uint64_t b) {
99069906
// LLVM: ret i64 [[VADDD_I]]
99079907
}
99089908

9909-
// NYI-LABEL: @test_vsubd_s64(
9910-
// NYI: [[VSUBD_I:%.*]] = sub i64 %a, %b
9911-
// NYI: ret i64 [[VSUBD_I]]
9912-
// int64_t test_vsubd_s64(int64_t a, int64_t b) {
9913-
// return vsubd_s64(a, b);
9914-
// }
9909+
int64_t test_vsubd_s64(int64_t a, int64_t b) {
9910+
return vsubd_s64(a, b);
99159911

9916-
// NYI-LABEL: @test_vsubd_u64(
9917-
// NYI: [[VSUBD_I:%.*]] = sub i64 %a, %b
9918-
// NYI: ret i64 [[VSUBD_I]]
9919-
// uint64_t test_vsubd_u64(uint64_t a, uint64_t b) {
9920-
// return vsubd_u64(a, b);
9921-
// }
9912+
// CIR-LABEL: vsubd_s64
9913+
// CIR: {{%.*}} = cir.binop(sub, {{%.*}}, {{%.*}}) : !s64i
9914+
9915+
// LLVM-LABEL: @test_vsubd_s64
9916+
// LLVM-SAME: (i64 [[a:%.]], i64 [[b:%.]])
9917+
// LLVM: [[VSUBD_I:%.*]] = sub i64 [[a]], [[b]]
9918+
// LLVM: ret i64 [[VSUBD_I]]
9919+
}
9920+
9921+
uint64_t test_vsubd_u64(uint64_t a, uint64_t b) {
9922+
return vsubd_u64(a, b);
9923+
9924+
// CIR-LABEL: vsubd_u64
9925+
// CIR: {{%.*}} = cir.binop(sub, {{%.*}}, {{%.*}}) : !u64i
9926+
9927+
// LLVM-LABEL: @test_vsubd_u64
9928+
// LLVM-SAME: (i64 [[a:%.]], i64 [[b:%.]])
9929+
// LLVM: [[VSUBD_I:%.*]] = sub i64 [[a]], [[b]]
9930+
// LLVM: ret i64 [[VSUBD_I]]
9931+
}
99229932

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

0 commit comments

Comments
 (0)