[llvm] [AMDGPU] Fix DynLDS causing crash when LowerLDS is run at fullLTO pipeline (PR #96038)

Pierre van Houtryve via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 19 01:12:20 PDT 2024


================
@@ -207,16 +207,21 @@ LDSUsesInfoTy getTransitiveUsesOfLDS(const CallGraph &CG, Module &M) {
   }
 
   // Verify that we fall into one of 2 cases:
-  //    - All variables are absolute: this is a re-run of the pass
+  //    - All variables are either absolute 
+  //      or direct mapped dynamic LDS that is not lowered.
+  //      this is a re-run of the pass
   //      so we don't have anything to do.
   //    - No variables are absolute.
   std::optional<bool> HasAbsoluteGVs;
   for (auto &Map : {DirectMapKernel, IndirectMapKernel}) {
     for (auto &[Fn, GVs] : Map) {
       for (auto *GV : GVs) {
         bool IsAbsolute = GV->isAbsoluteSymbolRef();
+        bool IsDirectMapDynLDSGV = AMDGPU::isDynamicLDS(*GV) && DirectMapKernel.contains(Fn);
         if (HasAbsoluteGVs.has_value()) {
-          if (*HasAbsoluteGVs != IsAbsolute) {
+          if (*HasAbsoluteGVs != IsAbsolute ) {
+            if(IsDirectMapDynLDSGV)
----------------
Pierre-vh wrote:

I think you should just `continue` on these at the start of the loop, otherwise I assume `IsAbsolute` could be set the first time by a dynlds variable, then trigger a similar scenario ?

https://github.com/llvm/llvm-project/pull/96038


More information about the llvm-commits mailing list