awarzynski added a comment.

Thanks for the updates, mostly looks good. Just a couple of extra questions 
about the test coverage.



================
Comment at: flang/lib/Frontend/FrontendActions.cpp:139-142
+  // Clang does not append all target features to the clang -cc1 invocation.
+  // Some AMDGPU features are passed implicitly by the Clang frontend.
+  // That's why we need to extract implicit AMDGPU target features and add
+  // them to the target features specified by the user
----------------
domada wrote:
> awarzynski wrote:
> > domada wrote:
> > > awarzynski wrote:
> > > > [nit] IMHO this is documenting an implementation detail that would be 
> > > > more relevant inside `getExplicitAndImplicitAMDGPUTargetFeatures`.
> > > > 
> > > > More importantly, you are suggesting that the driver is doing whatever 
> > > > it is doing "because that's what Clang does". Consistency with Clang is 
> > > > important (you could call it out in the commit message) :) However, it 
> > > > would be even nicer to understand the actual rationale behind these 
> > > > implicit features. Any idea? Perhaps there are some clues in git 
> > > > history?
> > > > 
> > > > Also, perhaps a TODO to share this code with Clang? (to make it even 
> > > > clearer that the frontend driver aims for full consistency with Clang 
> > > > here).
> > > I think that the main difference between Clang and Flang is the lack of 
> > > `TargetInfo` class.
> > > 
> > > [[ https://clang.llvm.org/doxygen/classclang_1_1TargetInfo.html | 
> > > TargetInfo classes ]] are Clang specific and they are responsible for 
> > > parsing/adding default target features. Every target performs 
> > > initialization in different way (compare for example [[ 
> > > https://clang.llvm.org/doxygen/Basic_2Targets_2AArch64_8cpp_source.html#l00960
> > >  | AArch64 ]] vs [[ 
> > > https://clang.llvm.org/doxygen/Basic_2Targets_2AMDGPU_8cpp_source.html#l00179
> > >  | AMDGPU ]] target initialization.
> > > 
> > > I don't want to make TargetInfo class Clang indendent (see discussion: 
> > > https://discourse.llvm.org/t/rfc-targetinfo-library/64342 ). I also don't 
> > > want to reimplement the whole TargetInfo class in Flang, because Flang 
> > > already uses LLVM TargetMachine class (see: 
> > > https://llvm.org/doxygen/classllvm_1_1TargetMachine.html and 
> > > https://github.com/llvm/llvm-project/blob/main/flang/lib/Frontend/FrontendActions.cpp#L614
> > >  )  which can play similar role as Clang TargetInfo IMO.
> > > 
> > > That's why I decided to implement 
> > > `getExplicitAndImplicitAMDGPUTargetFeatures` function which performs 
> > > initialization of default AMDGPU target features.
> > Thanks for this comprehensive overview! It would be helpful if this 
> > rationale was included in the summary (in the spirit of documenting things 
> > for our future selves).
> > 
> > So, there isn't anything special about AMDGPU here, is there? We will have 
> > to implement similar hooks for other targets at some point too, right? Or 
> > perhaps there's some reason to do this for AMDGPU sooner rather than later?
> > 
> > I'm not against this change, just want to better understand the wider 
> > context.
> Hi,
> I modified the comment above to be more informative.
> 
> IMO, we need to add similar hooks for other targets. For example:
> 
> ```
> clang --target=aarch64 t.c -S -emit-llvm -v 
> // I see in the logs explicit target features:
> // +neon,  +v8a ,  -fmv
> // However, generated t.ll contains 4 target features:
> "target-features"="+fp-armv8,+neon,+v8a,-fmv"
> // It looks like target feature +fp-armv8 is implicit
> ```
Thanks for checking!


================
Comment at: flang/lib/Frontend/FrontendActions.cpp:147-151
+    llvm::SMDiagnostic err;
+    err.print(errorMsg.data(), llvm::errs());
+    unsigned diagID = ci.getDiagnostics().getCustomDiagID(
+        clang::DiagnosticsEngine::Error, "Unsupported feature ID");
+    ci.getDiagnostics().Report(diagID);
----------------



================
Comment at: flang/lib/Frontend/FrontendActions.cpp:149
+    err.print(errorMsg.data(), llvm::errs());
+    unsigned diagID = ci.getDiagnostics().getCustomDiagID(
+        clang::DiagnosticsEngine::Error, "Unsupported feature ID");
----------------
Are you able to add a test that will trigger this?


================
Comment at: flang/test/Driver/target-cpu-features.f90:59
+! CHECK-AMDGPU-R600: "-fc1" "-triple" "r600-unknown-unknown"
+! CHECK-AMDGPU-R600-SAME: "-target-cpu" "cayman"
----------------
Hm, there aren't any "implicit" target features here.


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

https://reviews.llvm.org/D145579

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

Reply via email to