llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-codegen

Author: None (Pavithra029)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/144622.diff


1 Files Affected:

- (modified) clang/lib/CodeGen/CodeGenModule.cpp (+100) 


``````````diff
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp 
b/clang/lib/CodeGen/CodeGenModule.cpp
index c005d3322ed7a..577cb6f0abd2c 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1472,6 +1472,106 @@ void CodeGenModule::Release() {
       }
     }
   }
+  
+      // 1. Get source file name
+  /*  std::string FileName = getModule().getSourceFileName(); // like "foo.c"
+    llvm::StringRef BaseName = llvm::sys::path::filename(FileName);
+
+    // 2. Create variable name like __cli_foo_c
+    std::string VarName = "__cli_" + BaseName.str();
+    std::replace(VarName.begin(), VarName.end(), '.', '_');
+
+    // 3. Get the compilation command line from options
+    std::string CmdLineStr;
+    for (const std::string &Arg : CodeGenOpts.CommandLineArgs) {
+        CmdLineStr += Arg + " ";
+    }
+
+    // 4. Create LLVM IR string global
+    llvm::Constant *CmdStr = 
llvm::ConstantDataArray::getString(getLLVMContext(), CmdLineStr, true);
+    // 1. Prepare internal string global variable
+auto *GV = new llvm::GlobalVariable(
+    getModule(),
+    CmdStr->getType(),
+    true,
+    llvm::GlobalValue::InternalLinkage,
+    CmdStr,
+    VarName + ".data"
+);
+GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
+
+// 2. Create external pointer global pointing to internal string
+llvm::Constant *Zero = 
llvm::ConstantInt::get(llvm::Type::getInt32Ty(getLLVMContext()), 0);
+llvm::Constant *Indices[] = {Zero, Zero};
+llvm::Constant *PtrToStr = 
llvm::ConstantExpr::getGetElementPtr(CmdStr->getType(), GV, Indices);
+
+auto *ExternGV = new llvm::GlobalVariable(
+    getModule(),
+    PtrToStr->getType(),
+    true,
+    llvm::GlobalValue::ExternalLinkage,
+    PtrToStr,
+    VarName
+);
+ExternGV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
+(void)ExternGV;
+    llvm::errs() << "✅ Emitting __cli global variable!\n";
+
+  */
+  
+  // === BEGIN: Emit global __cli_<file> variable ===
+
+std::string FileName = getModule().getSourceFileName();
+llvm::StringRef BaseName = llvm::sys::path::filename(FileName);
+std::string VarName = "__cli_" + BaseName.str();
+std::replace(VarName.begin(), VarName.end(), '.', '_');
+
+// Join command line args into one string
+std::string CmdLineStr;
+for (const std::string &Arg : CodeGenOpts.CommandLineArgs) {
+    CmdLineStr += Arg + " ";
+}
+
+// Step 1: Create string constant (char[] data)
+llvm::Constant *CmdStr = llvm::ConstantDataArray::getString(getLLVMContext(), 
CmdLineStr, true);
+
+// Step 2: Emit internal variable: @__cli_foo_c.data
+auto *DataGV = new llvm::GlobalVariable(
+    getModule(),
+    CmdStr->getType(),                         // [N x i8]
+    true,                                     // constant
+    llvm::GlobalValue::InternalLinkage,
+    CmdStr,
+    VarName + ".data"
+);
+DataGV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::None);
+
+// Step 3: Pointer to string
+llvm::Constant *PtrToStr = llvm::ConstantExpr::getPointerCast(
+    DataGV, 
llvm::PointerType::getUnqual(llvm::Type::getInt8Ty(getLLVMContext()))
+);
+
+
+// Step 4: Remove dummy external if exists
+if (auto *Old = getModule().getNamedGlobal(VarName)) {
+    Old->eraseFromParent();
+}
+
+// ✅ Step 5: Emit the real global variable
+auto *FinalGV = new llvm::GlobalVariable(
+    getModule(),
+    PtrToStr->getType(),                       // i8*
+    true,                                     // constant
+    llvm::GlobalValue::ExternalLinkage,       // important: this makes it 
visible!
+    PtrToStr,
+    VarName
+);
+//FinalGV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::None);
+
+llvm::errs() << "✅ Emitting " << VarName << " global variable!\n";
+
+// === END ===
+
 }
 
 void CodeGenModule::EmitOpenCLMetadata() {

``````````

</details>


https://github.com/llvm/llvm-project/pull/144622
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to