[clang] [Clang] Add __builtin_(elementwise|reduce)_(max|min)imum (PR #110198)
Matt Arsenault via cfe-commits
cfe-commits at lists.llvm.org
Mon Sep 30 06:09:20 PDT 2024
================
@@ -273,6 +273,74 @@ void test_builtin_elementwise_min(int i, short s, double d, float4 v, int3 iv, u
// expected-error at -1 {{1st argument must be a vector, integer or floating point type (was '_Complex float')}}
}
+void test_builtin_elementwise_maximum(int i, short s, float f, double d, float4 v, int3 iv, unsigned3 uv, int *p) {
+ i = __builtin_elementwise_maximum(p, d);
+ // expected-error at -1 {{arguments are of different types ('int *' vs 'double')}}
+
+ struct Foo foo = __builtin_elementwise_maximum(d, d);
+ // expected-error at -1 {{initializing 'struct Foo' with an expression of incompatible type 'double'}}
+
+ i = __builtin_elementwise_maximum(i);
+ // expected-error at -1 {{too few arguments to function call, expected 2, have 1}}
+
+ i = __builtin_elementwise_maximum();
+ // expected-error at -1 {{too few arguments to function call, expected 2, have 0}}
+
+ i = __builtin_elementwise_maximum(i, i, i);
+ // expected-error at -1 {{too many arguments to function call, expected 2, have 3}}
+
+ i = __builtin_elementwise_maximum(v, iv);
+ // expected-error at -1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'int3' (vector of 3 'int' values))}}
+
+ i = __builtin_elementwise_maximum(uv, iv);
+ // expected-error at -1 {{arguments are of different types ('unsigned3' (vector of 3 'unsigned int' values) vs 'int3' (vector of 3 'int' values))}}
+
+ d = __builtin_elementwise_maximum(d, f);
+
+ v = __builtin_elementwise_maximum(v, v);
+
+ int A[10];
+ A = __builtin_elementwise_maximum(A, A);
+ // expected-error at -1 {{1st argument must be a vector, integer or floating point type (was 'int *')}}
+
+ _Complex float c1, c2;
+ c1 = __builtin_elementwise_maximum(c1, c2);
+ // expected-error at -1 {{1st argument must be a vector, integer or floating point type (was '_Complex float')}}
+}
+
+void test_builtin_elementwise_minimum(int i, short s, float f, double d, float4 v, int3 iv, unsigned3 uv, int *p) {
+ i = __builtin_elementwise_minimum(p, d);
+ // expected-error at -1 {{arguments are of different types ('int *' vs 'double')}}
+
+ struct Foo foo = __builtin_elementwise_minimum(d, d);
+ // expected-error at -1 {{initializing 'struct Foo' with an expression of incompatible type 'double'}}
+
+ i = __builtin_elementwise_minimum(i);
+ // expected-error at -1 {{too few arguments to function call, expected 2, have 1}}
+
+ i = __builtin_elementwise_minimum();
+ // expected-error at -1 {{too few arguments to function call, expected 2, have 0}}
+
+ i = __builtin_elementwise_minimum(i, i, i);
+ // expected-error at -1 {{too many arguments to function call, expected 2, have 3}}
+
+ i = __builtin_elementwise_minimum(v, iv);
+ // expected-error at -1 {{arguments are of different types ('float4' (vector of 4 'float' values) vs 'int3' (vector of 3 'int' values))}}
+
+ i = __builtin_elementwise_minimum(uv, iv);
+ // expected-error at -1 {{arguments are of different types ('unsigned3' (vector of 3 'unsigned int' values) vs 'int3' (vector of 3 'int' values))}}
+
+ d = __builtin_elementwise_minimum(f, d);
+
+ int A[10];
+ A = __builtin_elementwise_minimum(A, A);
+ // expected-error at -1 {{1st argument must be a vector, integer or floating point type (was 'int *')}}
----------------
arsenm wrote:
The codegen assumes this is only floating point, so the integer part of the message is wrong. Also missing tests using 2 arguments with only integer / vector of integer
https://github.com/llvm/llvm-project/pull/110198
More information about the cfe-commits
mailing list