[PATCH] D57716: [CUDA][HIP] Check calling convention based on function target
    Artem Belevich via Phabricator via cfe-commits 
    cfe-commits at lists.llvm.org
       
    Tue Feb  5 13:44:48 PST 2019
    
    
  
tra added inline comments.
================
Comment at: lib/Sema/SemaDeclAttr.cpp:4621-4638
+    auto CUDATarget = IdentifyCUDATarget(FD);
+    if (CUDATarget == CFT_HostDevice) {
+      A = TI.checkCallingConvention(CC);
+      if (A == TargetInfo::CCCR_OK && Aux)
+        A = Aux->checkCallingConvention(CC);
+    } else if (LangOpts.CUDAIsDevice) {
+      if (CUDATarget == CFT_Device || CUDATarget == CFT_Global) {
----------------
This is rather convoluted.
Perhaps it would be easier to understand if the code is restructured. along these lines:
```
// Returns a tuple indicating whether we need to check TargetInfo on host/device side of the compilation
bool CheckHost = false, CheckDevice=false;
switch (CudaTarget) { 
    case CFT_HostDevice: 
      CheckHost = true; CheckDevice=true; break;
    case CFT_Host: 
      CheckHost = true; break;
    case CFG_Device: 
    case CFG_Global: 
      CheckDevice=true; break;
  }
} ();
TargetInfo *HostTI = CudaIsDevice ? Aux : &TI;
TargetInfo * DeviceTI = CudaIsDevice ? &TI : Aux;
if (CheckHost && HostTI)
  HostTI->checkCallingConvention(CC);
if (CheckDevice && DeviceTI)
    DeviceTI->checkCallingConvention(CC);
```
================
Comment at: test/SemaCUDA/amdgpu-windows-vectorcall.cu:3
+
+// expected-no-diagnostics
+template<class _Ty>
----------------
It may be good to add a check where we *would* expect to see the diagnostics.
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D57716/new/
https://reviews.llvm.org/D57716
    
    
More information about the cfe-commits
mailing list