amyk created this revision.
amyk added reviewers: power-llvm-team, PowerPC, Conanap, saghir, nemanjai, lei.
amyk added projects: LLVM, clang, PowerPC.
Herald added a subscriber: shchenz.
This patch aims to add the following function prototypes:
vector signed int vec_mod (vector signed int a, vector signed int b);
vector unsigned int vec_mod (vector unsigned int a, vector unsigned int b);
vector signed long long vec_mod (vector signed long long a, vector signed
long long b);
vector unsigned long long vec_mod (vector unsigned long long a, vector
unsigned long long b);
Along with adding the front-end tests for `vec_mul`, `vec_div` and `vec_mod`
for `v4i32` and `v2i64`.
The `vec_mul` and `vec_div` functions have already been previously implemented,
but these functions
can use the Power10 instructions introduced in D82510
<https://reviews.llvm.org/D82510>.
Depends on D82510 <https://reviews.llvm.org/D82510>.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D82576
Files:
clang/lib/Headers/altivec.h
clang/test/CodeGen/builtins-ppc-p10vector.c
Index: clang/test/CodeGen/builtins-ppc-p10vector.c
===================================================================
--- clang/test/CodeGen/builtins-ppc-p10vector.c
+++ clang/test/CodeGen/builtins-ppc-p10vector.c
@@ -8,10 +8,72 @@
vector signed char vsca;
vector unsigned char vuca;
vector unsigned short vusa;
-vector unsigned int vuia;
+vector signed int vsia, vsib;
+vector unsigned int vuia, vuib;
+vector signed long long vslla, vsllb;
vector unsigned long long vulla, vullb;
unsigned int uia;
+vector signed long long test_vec_mul_sll(void) {
+ // CHECK: mul <2 x i64>
+ // CHECK-NEXT: ret <2 x i64>
+ return vec_mul(vslla, vsllb);
+}
+
+vector unsigned long long test_vec_mul_ull(void) {
+ // CHECK: mul <2 x i64>
+ // CHECK-NEXT: ret <2 x i64>
+ return vec_mul(vulla, vullb);
+}
+
+vector signed int test_vec_div_si(void) {
+ // CHECK: sdiv <4 x i32>
+ // CHECK-NEXT: ret <4 x i32>
+ return vec_div(vsia, vsib);
+}
+
+vector unsigned int test_vec_div_ui(void) {
+ // CHECK: udiv <4 x i32>
+ // CHECK-NEXT: ret <4 x i32>
+ return vec_div(vuia, vuib);
+}
+
+vector signed long long test_vec_div_sll(void) {
+ // CHECK: sdiv <2 x i64>
+ // CHECK-NEXT: ret <2 x i64>
+ return vec_div(vslla, vsllb);
+}
+
+vector unsigned long long test_vec_div_ull(void) {
+ // CHECK: udiv <2 x i64>
+ // CHECK-NEXT: ret <2 x i64>
+ return vec_div(vulla, vullb);
+}
+
+vector signed int test_vec_mod_si(void) {
+ // CHECK: srem <4 x i32>
+ // CHECK-NEXT: ret <4 x i32>
+ return vec_mod(vsia, vsib);
+}
+
+vector unsigned int test_vec_mod_ui(void) {
+ // CHECK: urem <4 x i32>
+ // CHECK-NEXT: ret <4 x i32>
+ return vec_mod(vuia, vuib);
+}
+
+vector signed long long test_vec_mod_sll(void) {
+ // CHECK: srem <2 x i64>
+ // CHECK-NEXT: ret <2 x i64>
+ return vec_mod(vslla, vsllb);
+}
+
+vector unsigned long long test_vec_mod_ull(void) {
+ // CHECK: urem <2 x i64>
+ // CHECK-NEXT: ret <2 x i64>
+ return vec_mod(vulla, vullb);
+}
+
vector unsigned long long test_vpdepd(void) {
// CHECK: @llvm.ppc.altivec.vpdepd(<2 x i64>
// CHECK-NEXT: ret <2 x i64>
Index: clang/lib/Headers/altivec.h
===================================================================
--- clang/lib/Headers/altivec.h
+++ clang/lib/Headers/altivec.h
@@ -16845,6 +16845,28 @@
return __builtin_altivec_vctzdm(__a, __b);
}
+/* vec_mod */
+
+static __inline__ vector signed int __ATTRS_o_ai
+vec_mod(vector signed int __a, vector signed int __b) {
+ return __a % __b;
+}
+
+static __inline__ vector unsigned int __ATTRS_o_ai
+vec_mod(vector unsigned int __a, vector unsigned int __b) {
+ return __a % __b;
+}
+
+static __inline__ vector signed long long __ATTRS_o_ai
+vec_mod(vector signed long long __a, vector signed long long __b) {
+ return __a % __b;
+}
+
+static __inline__ vector unsigned long long __ATTRS_o_ai
+vec_mod(vector unsigned long long __a, vector unsigned long long __b) {
+ return __a % __b;
+}
+
#endif /* __POWER10_VECTOR__ */
#undef __ATTRS_o_ai
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits