[SYCL] Fix linkage adjustment of kernels #19915
                
     Merged
            
            
          
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
This is a cherry-pick of #19771
This patch resolves #19409
Two main changes were done:
Corrected method of detection that kernel is defined as an inline function. The original code detecting this was introduced in [SYCL] Allow an inlined kernel to be called from multiple TUs. #338, but by some reason we looked into a headers-provided wrapper that calls a kernel instead of a kernel itself. Alongside with fixing this, a dedicated clang-level test was added to check this behavior
Fixed a bug introduced by incorrect conflict resolution (commit fcd95a9) with [clang] Simplify device kernel attributes llvm/llvm-project#137882. Specifically, when deciding if a function (that is expected to be a SYCL kernel) linkage should be promoted to non-discardable we used to check for OpenCL kernel attribute. That attribute is not present in SYCL headers and therefore was only generated for actual SYCL kernels emitted by front-end. However, with kernel attributes unified, we now promote linkage of non-kernel wrapper function that has
sycl_kernelattribute attached to it explicitly by SYCL headers. The fix here is to only react to the kernel attribute if it was added implicitly, to preserve original behavior.