rampitec added inline comments.

================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp:62-72
+static AMDGPUSubtarget::Generation initializeGen(const Triple &TT,
+                                                 StringRef GPU) {
+  if (GPU.contains("generic")) {
+    return TT.getOS() == Triple::AMDHSA
+               ? AMDGPUSubtarget::Generation::SEA_ISLANDS
+               : AMDGPUSubtarget::Generation::SOUTHERN_ISLANDS;
+  } else {
----------------
t-tye wrote:
> I am not clear what this function is doing. It seems to be returning a 
> generation unrelated to to the actual target generation to satisfy the one 
> place it is called. If the target is not SEA_ISLANDS it seems incorrect to be 
> returning SEA_ISLANDS. If this function is doing something special for the 
> one place it is called perhaps it should be expanded there?
It is probably better just print an error if amdhsa is requested but no 
compatible -mcpu specified (e.g. when we have generic/tahiti etc).


================
Comment at: llvm/lib/Target/AMDGPU/AMDGPUSubtarget.cpp:134
+  if (isAmdHsaOS() && getGeneration() == AMDGPUSubtarget::SOUTHERN_ISLANDS) {
+    report_fatal_error("GFX6 (SI) ASICs does not support AMD HSA OS type \n",
+                       false);
----------------
pvellien wrote:
> t-tye wrote:
> > pvellien wrote:
> > > t-tye wrote:
> > > > rampitec wrote:
> > > > > "do not support". I would also drop "(SI)" from the message. Maybe 
> > > > > even better just "GFX6 does not support AMD HSA".
> > > > Make the message include the full target triple text so the user 
> > > > understands how to resolve the issue. For example:
> > > > 
> > > >   The target triple %s is not supported: the processor %s does not 
> > > > support the amdhsa OS
> > > > 
> > > > Do the r600 targets also produce a similar error message?
> > > > 
> > > > Is this really the right test? My understanding is that the issue is 
> > > > not that gfx60x does not support the amdhsa OS, but that it does not 
> > > > use the FLAT address space.
> > > > 
> > > > My understanding is that the current problem is that FLAT instructions 
> > > > are being used for the GLOBAL address space accesses. The use of FLAT 
> > > > instructions for the global address space was introduced after gfx60x 
> > > > was initially being supported on amdhsa. Originally BUFFER instructions 
> > > > that use an SRD that has a 0 base and are marked as addr64 where used 
> > > > for GLOBAL address space accesses. This was changed to use FLAT 
> > > > instructions due to later targets dropping the SRD addr64 support. I 
> > > > suspect it is that change that broke gfx60x as there were no tests to 
> > > > catch it.
> > > > 
> > > > So the real fix seems to find that change and make the code still use 
> > > > use BUFFER instructions for gfxx60x and FLAT instructions for gfx70x+. 
> > > > The tests can then be updated to test gfx60x for amdhsa but to omit the 
> > > > FLAT address space tests. The error would then indicate that the gfx60x 
> > > > does not support the FLAT address space (and that is not conditional on 
> > > > the OS). The documentation in AMDGPUUsage can state that gfx60x does 
> > > > not support the FLAT address space in the Address Space section. The 
> > > > Processor table can add a column for processor characteristics and 
> > > > mention that the gfx60x targets do not support the FLAT address space.
> > > Previously in the internal review process it mentioned that gfx60x does 
> > > not support HSA and agreed to add a diagnostic to report that GFX6 do not 
> > > support HSA OS type, @rampitec mentioned that SI ASICs cannot support HSA 
> > > because we can't able to map memory on SI as HSA requires so the user 
> > > will just have weird runtime failures. But based on your comment it seems 
> > > like we have to use MUBUF instructions for -mtriple=amdgcn-amd-amdhsa 
> > > -mcpu=gfx60x combination and use FLAT instructions for 
> > > -mtriple=amdgcn-amd-amdhsa -mcpu=gfx70x+. Is my understanding correct? If 
> > > the compiler emits the MUBUF instructions for global address space 
> > > accesses, it is still required to produce the error msg? 
> > In the early days of implementing HSA I believe we were bringing up on 
> > gfx6. It could not support all HSA features, but it did function with the 
> > parts it could support. So I was suggesting we restore the code to support 
> > what it did originally. That would mean using MUBUF for the GLOBAL address 
> > space like it used to do (is that code still present?).
> > 
> > The compiler can then report errors for the features it cannot support, 
> > which in this case is it cannot support instruction selection of the 
> > GENERIC address space on gfx6.
> > 
> > If you could find the commit that switched to using FLAT instructions to 
> > access the GLOBAL address space that will likely provide the necessary 
> > information to decide the best thing to do for this issue.
> I code to select MUBUF instructions for Global address space is still 
> present, In fact my first patch for this issue is to generate MUBUF 
> instructions instead of reporting error. But it got rejected due to SI ASICs 
> do not support HSA. 
> This is the patch [[ https://reviews.llvm.org/D15543 |  
> https://reviews.llvm.org/D15543 ]] which switched to using FLAT instructions 
> for global. 
> So whether the new approach is to off FlatForGlobal flag for 
> -mtriple=amdgcn-amd-amdhsa -mcpu=gfx60x combination and generate MUBUF 
> instructions instead. It would be very much to know what is the expectation 
> :)  whether we wait for @rampitec for a comment
> Btw, thanks a lot for your feedback. 
We can try to use MUBUF for global, but we certainly cannot support HSA and/or 
generic pointers on SI.


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

https://reviews.llvm.org/D92115

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D92115: AMDG... Stanislav Mekhanoshin via Phabricator via cfe-commits

Reply via email to