Skip to content

Commit 3164ac8

Browse files
committed
Lower neon_vabs_v and neon_vabsq_v
1 parent 7619b20 commit 3164ac8

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

clang/lib/CIR/CodeGen/CIRGenBuiltinAArch64.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2484,6 +2484,14 @@ mlir::Value CIRGenFunction::buildCommonNeonBuiltinExpr(
24842484
: "aarch64.neon.addp";
24852485
break;
24862486
}
2487+
case NEON::BI__builtin_neon_vabs_v:
2488+
case NEON::BI__builtin_neon_vabsq_v: {
2489+
intrincsName = mlir::isa<mlir::FloatType>(vTy.getEltType())
2490+
? "aarch64.neon.fabs"
2491+
: "aarch64.neon.abs";
2492+
argTypes.push_back(vTy);
2493+
break;
2494+
}
24872495
case NEON::BI__builtin_neon_vqadd_v:
24882496
case NEON::BI__builtin_neon_vqaddq_v: {
24892497
intrincsName = (intrinicId != altLLVMIntrinsic) ? "aarch64.neon.uqadd"

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -788,3 +788,29 @@ uint64x2_t test_vtstq_u64(uint64x2_t v1, uint64x2_t v2) {
788788
// LLVM: [[VTST_I:%.*]] = sext <2 x i1> [[TMP3]] to <2 x i64>
789789
// LLVM: ret <2 x i64> [[VTST_I]]
790790
}
791+
792+
int16x4_t test_vabs_s16(int16x4_t a) {
793+
return vabs_s16(a);
794+
795+
// CIR-LABEL: vabs_s16
796+
// CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.abs" {{%.*}} :
797+
// CIR-SAME: (!cir.vector<!s16i x 4>) -> !cir.vector<!s16i x 4>
798+
799+
// LLVM: {{.*}}test_vabs_s16(<4 x i16>{{.*}}[[A:%.*]])
800+
// LLVM: [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>
801+
// LLVM: [[VABS1_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.abs.v4i16(<4 x i16> [[A]])
802+
// LLVM: ret <4 x i16> [[VABS1_I]]
803+
}
804+
805+
int16x8_t test_vabsq_s16(int16x8_t a) {
806+
return vabsq_s16(a);
807+
808+
// CIR-LABEL: vabsq_s16
809+
// CIR: {{%.*}} = cir.llvm.intrinsic "aarch64.neon.abs" {{%.*}} :
810+
// CIR-SAME: (!cir.vector<!s16i x 8>) -> !cir.vector<!s16i x 8>
811+
812+
// LLVM: {{.*}}test_vabsq_s16(<8 x i16>{{.*}}[[A:%.*]])
813+
// LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>
814+
// LLVM: [[VABS1_I:%.*]] = call <8 x i16> @llvm.aarch64.neon.abs.v8i16(<8 x i16> [[A]])
815+
// LLVM: ret <8 x i16> [[VABS1_I]]
816+
}

0 commit comments

Comments
 (0)