fpetrogalli added inline comments.

================
Comment at: llvm/include/llvm/Analysis/TargetLibraryInfo.h:91
     Accelerate, // Use Accelerate framework.
+    LIBMVEC,    // GLIBC Vector Math library.
     MASSV,      // IBM MASS vector library.
----------------
nemanjai wrote:
> fpetrogalli wrote:
> > Can we call this LIBMVEC-X86? Libmvec itself is supposed to support other 
> > architectures, I can see list of mappings for each of the supported targets.
> > 
> > Then, the logic of selecting the correct one in the frontent clang would 
> > depend on the value of `-fvec-lib=libmvec` plus the value of `-target`.
> So if I follow correctly, we can choose the various vendor-specific libraries 
> as well as `libmvec` which itself has target-specific ports.
> 
> Would it make sense to just add an overload of `addVectorizableFunctions()` 
> that would consider the `Triple` and remove any entries from `VectorDescs` 
> that the target doesn't support? Or even more specifically, simply add the 
> `Triple` argument to `addVectorizableFunctionsFromVecLib()` and call 
> something like `removeLIBMVECEntriesForTarget(const Triple &T)` that would do 
> the job.
> 
> And of course, if the triple isn't provided and the user is targeting an 
> architecture that doesn't provide some entry, that is just user error.
The overload of the `addVectorizableFunctions()` might be feasible,  but for 
the sake of simplicity I think that having `LIBMVEC_<TARGET>` in `enum 
VectorLibrary`  for each of the <TARGET> to support would avoid having to deal 
with overload of methods. Given that these lists are static, I'd rather see 
them explicitly instead of having them filled up by add/remove methods. 

All in all, I think it is easier to add the logic for the target triple in 
clang as it is just a matter of modifying the changes in `BackendUtils.cpp` 
(warning, pseudocode ahead):

```
  case CodeGenOptions::LIBMVEC: 
    switch(Triple) {
    case X:
       
TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::LIBMVEC_X);
     break
    case Y:
       
TLII->addVectorizableFunctionsFromVecLib(TargetLibraryInfoImpl::LIBMVEC_Y);
    break;
    case ...
    }
    break;
```






CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88154/new/

https://reviews.llvm.org/D88154

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to