================
@@ -0,0 +1,69 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "clc/utils.h"
----------------
wenju-he wrote:

perhaps this one is shorter because the first argument is probably has the same 
type as return type.
```
#include <clc/utils.h>

#if __CLC_VECSIZE_OR_1 >= 2

#ifdef __CLC_ARG2_IS_INTN
#define __CLC_ARG2_SCALAR_GENTYPE int
#else
#define __CLC_ARG2_SCALAR_GENTYPE __CLC_SCALAR_GENTYPE
#endif

#define __CLC_ARG2_GENTYPE                                                     \
  __CLC_XCONCAT(__CLC_ARG2_SCALAR_GENTYPE, __CLC_VECSIZE)

#ifndef __CLC_IMPL_FUNCTION
#define __CLC_IMPL_FUNCTION __CLC_FUNCTION
#endif

_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE x,
                                                    __CLC_ARG2_GENTYPE y) {
  union {
    __CLC_GENTYPE vec;
    __CLC_SCALAR_GENTYPE arr[__CLC_VECSIZE_OR_1];
  } u_x, u_result;
  union {
    __CLC_ARG2_GENTYPE vec;
    __CLC_ARG2_SCALAR_GENTYPE arr[__CLC_VECSIZE_OR_1];
  } u_y;
  u_x.vec = x;
  u_y.vec = y;
  for (int i = 0; i < __CLC_VECSIZE_OR_1; ++i)
    u_result.arr[i] = __CLC_IMPL_FUNCTION(u_x.arr[i], u_y.arr[i]);
  return u_result.vec;
}

#undef __CLC_ARG2_SCALAR_GENTYPE
#undef __CLC_ARG2_GENTYPE

#endif // __CLC_VECSIZE_OR_1 >= 2
```

https://github.com/llvm/llvm-project/pull/186890
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to