[llvm-dev] RFC: Interface user provided vector functions with the vectorizer.
Tian, Xinmin via llvm-dev
llvm-dev at lists.llvm.org
Mon Jun 24 09:11:24 PDT 2019
Thanks Francesco!
-----Original Message-----
From: Francesco Petrogalli [mailto:Francesco.Petrogalli at arm.com]
Sent: Monday, June 24, 2019 9:06 AM
To: Tian, Xinmin <xinmin.tian at intel.com>
Cc: Doerfert, Johannes <jdoerfert at anl.gov>; Saito, Hideki <hideki.saito at intel.com>; Simon Moll <moll at cs.uni-saarland.de>; LLVM Development List <llvm-dev at lists.llvm.org>; Clang Dev <cfe-dev at lists.llvm.org>; Renato Golin <rengolin at gmail.com>; Finkel, Hal J. <hfinkel at anl.gov>; Andrea Bocci <andrea.bocci at cern.ch>; Elovikov, Andrei <andrei.elovikov at intel.com>; Alexey Bataev <a.bataev at hotmail.com>; nd <nd at arm.com>; Roman Lebedev <lebedev.ri at gmail.com>; Philip Reames <listmail at philipreames.com>; Shawn Landden <slandden at gmail.com>
Subject: Re: RFC: Interface user provided vector functions with the vectorizer.
> On Jun 24, 2019, at 10:53 AM, Tian, Xinmin <xinmin.tian at intel.com> wrote:
>
> To me, it is also an issue related to SIMD signature matching when the vectorizer kicks in. Losing info from FE to BE is not good in general.
>
Yes, we cannot loose such information. In particular, the three examples I reported are all generating i64 in the scalar function signature:
// Type 1
typedef _Complex int S;
// Type 2
typedef struct x{
int a;
int b;
} S;
// Type 3
typedef uint64_t S;
S foo(S a, S b) {
return ...;
}
On AArch64, the correspondent vector function signature in the three cases would be (for 2-lane unmasked vectorization):
// Type 1:
<4 x int> vectorized_foo(<4 x int>, <4 x int>)
// Type 2:
%a = type struct {I 32, i32}
<2 x %a* > vectorized_foo(<2 x %a*> , <2 x %a*>)
// Type 3:
<2 x i64> vectorized_foo(<2 x i64>, <2 x i64)
To make sure that the vectorizer knows how to map the scalar function parameters to the vector ones, we have to make sure that the original signature information is stored somewhere.
I will work on this, and provide examples.
Suggestions are welcome.
Thank you
Francesco
More information about the llvm-dev
mailing list