[clang] [flang] Reland "[Flang][Driver] Add a flag to control zero initialization" (PR #123606)

2025-01-20 Thread Kiran Chandramohan via cfe-commits

https://github.com/kiranchandramohan closed 
https://github.com/llvm/llvm-project/pull/123606
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [flang] Reland "[Flang][Driver] Add a flag to control zero initialization" (PR #123606)

2025-01-20 Thread Kiran Chandramohan via cfe-commits

https://github.com/kiranchandramohan updated 
https://github.com/llvm/llvm-project/pull/123606

>From ddb9cc530ec0667c3b4207d13bc6ec26f64241d4 Mon Sep 17 00:00:00 2001
From: Kiran Chandramohan 
Date: Mon, 20 Jan 2025 12:43:24 +
Subject: [PATCH 1/2] =?UTF-8?q?Revert=20"Revert=20"Revert=20"Revert=20"[Fl?=
 =?UTF-8?q?ang][Driver]=20Add=20a=20flag=20to=20control=20zero=20in?=
 =?UTF-8?q?=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit 8a229f595a5c0ff354cdfa05cda974a9d56674df.
---
 clang/include/clang/Driver/Options.td |  5 +
 clang/lib/Driver/ToolChains/Flang.cpp |  6 +++--
 flang/include/flang/Lower/LoweringOptions.def |  3 +++
 flang/lib/Frontend/CompilerInvocation.cpp |  8 +++
 flang/lib/Lower/ConvertVariable.cpp   |  6 -
 flang/test/Driver/fno-zero-init.f90   |  9 
 flang/test/Lower/zero_init.f90| 20 +
 flang/test/Lower/zero_init_default_init.f90   | 22 +++
 flang/tools/bbc/bbc.cpp   |  6 +
 9 files changed, 82 insertions(+), 3 deletions(-)
 create mode 100644 flang/test/Driver/fno-zero-init.f90
 create mode 100644 flang/test/Lower/zero_init.f90
 create mode 100644 flang/test/Lower/zero_init_default_init.f90

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index d38dd2b4e3cf09..c4b9743597bb2e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3505,6 +3505,11 @@ def fno_struct_path_tbaa : Flag<["-"], 
"fno-struct-path-tbaa">, Group;
 def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group;
 def fno_strict_overflow : Flag<["-"], "fno-strict-overflow">, Group,
   Visibility<[ClangOption, FlangOption]>;
+defm init_global_zero : BoolOptionWithoutMarshalling<"f", "init-global-zero",
+  PosFlag,
+  NegFlag>;
 def fno_pointer_tbaa : Flag<["-"], "fno-pointer-tbaa">, Group;
 def fno_temp_file : Flag<["-"], "fno-temp-file">, Group,
   Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>, HelpText<
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 86ed25badfa2b7..9c1fd28a3a8a26 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -155,8 +155,10 @@ void Flang::addCodegenOptions(const ArgList &Args,
options::OPT_flang_deprecated_no_hlfir,
options::OPT_fno_ppc_native_vec_elem_order,
options::OPT_fppc_native_vec_elem_order,
-   options::OPT_ftime_report, options::OPT_ftime_report_EQ,
-   options::OPT_funroll_loops, options::OPT_fno_unroll_loops});
+   options::OPT_finit_global_zero,
+   options::OPT_fno_init_global_zero, 
options::OPT_ftime_report,
+   options::OPT_ftime_report_EQ, options::OPT_funroll_loops,
+   options::OPT_fno_unroll_loops});
 }
 
 void Flang::addPicOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
diff --git a/flang/include/flang/Lower/LoweringOptions.def 
b/flang/include/flang/Lower/LoweringOptions.def
index 5a6debfdffe030..396c91948be36b 100644
--- a/flang/include/flang/Lower/LoweringOptions.def
+++ b/flang/include/flang/Lower/LoweringOptions.def
@@ -44,5 +44,8 @@ ENUM_LOWERINGOPT(IntegerWrapAround, unsigned, 1, 0)
 /// If false, assume that the shapes/types/allocation-status match.
 ENUM_LOWERINGOPT(ReallocateLHS, unsigned, 1, 1)
 
+/// If true, initialize globals without initialization to zero.
+/// On by default.
+ENUM_LOWERINGOPT(InitGlobalZero, unsigned, 1, 1)
 #undef LOWERINGOPT
 #undef ENUM_LOWERINGOPT
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp 
b/flang/lib/Frontend/CompilerInvocation.cpp
index 15b1e1e0a24881..3c6da4687f65d3 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1377,6 +1377,14 @@ bool CompilerInvocation::createFromArgs(
 invoc.loweringOpts.setNoPPCNativeVecElemOrder(true);
   }
 
+  // -f[no-]init-global-zero
+  if (args.hasFlag(clang::driver::options::OPT_finit_global_zero,
+   clang::driver::options::OPT_fno_init_global_zero,
+   /*default=*/true))
+invoc.loweringOpts.setInitGlobalZero(true);
+  else
+invoc.loweringOpts.setInitGlobalZero(false);
+
   // Preserve all the remark options requested, i.e. -Rpass, -Rpass-missed or
   // -Rpass-analysis. This will be used later when processing and outputting 
the
   // remarks generated by LLVM in ExecuteCompilerInvocation.cpp.
diff --git a/flang/lib/Lower/ConvertVariable.cpp 
b/flang/lib/Lower/ConvertVariable.cpp
index 9ee42d5cd88002..87236dc293ebbc 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -635,7 +635,11 @@ static fir::GlobalOp 
defineGlobal(Fortran::lower::AbstractConverter &converter,
   global.setLinkNam

[clang] [flang] Reland "[Flang][Driver] Add a flag to control zero initialization" (PR #123606)

2025-01-20 Thread Tom Eccles via cfe-commits

https://github.com/tblah approved this pull request.

LGTM. As I understand it the test failures were fixed by 
https://github.com/llvm/llvm-project/pull/123364

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


[clang] [flang] Reland "[Flang][Driver] Add a flag to control zero initialization" (PR #123606)

2025-01-20 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-flang-fir-hlfir

Author: Kiran Chandramohan (kiranchandramohan)


Changes

Reverts llvm/llvm-project#123330

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


9 Files Affected:

- (modified) clang/include/clang/Driver/Options.td (+5) 
- (modified) clang/lib/Driver/ToolChains/Flang.cpp (+4-2) 
- (modified) flang/include/flang/Lower/LoweringOptions.def (+3) 
- (modified) flang/lib/Frontend/CompilerInvocation.cpp (+8) 
- (modified) flang/lib/Lower/ConvertVariable.cpp (+5-1) 
- (added) flang/test/Driver/fno-zero-init.f90 (+9) 
- (added) flang/test/Lower/zero_init.f90 (+20) 
- (added) flang/test/Lower/zero_init_default_init.f90 (+22) 
- (modified) flang/tools/bbc/bbc.cpp (+6) 


``diff
diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index d38dd2b4e3cf09..c4b9743597bb2e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3505,6 +3505,11 @@ def fno_struct_path_tbaa : Flag<["-"], 
"fno-struct-path-tbaa">, Group;
 def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group;
 def fno_strict_overflow : Flag<["-"], "fno-strict-overflow">, Group,
   Visibility<[ClangOption, FlangOption]>;
+defm init_global_zero : BoolOptionWithoutMarshalling<"f", "init-global-zero",
+  PosFlag,
+  NegFlag>;
 def fno_pointer_tbaa : Flag<["-"], "fno-pointer-tbaa">, Group;
 def fno_temp_file : Flag<["-"], "fno-temp-file">, Group,
   Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>, HelpText<
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 86ed25badfa2b7..9c1fd28a3a8a26 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -155,8 +155,10 @@ void Flang::addCodegenOptions(const ArgList &Args,
options::OPT_flang_deprecated_no_hlfir,
options::OPT_fno_ppc_native_vec_elem_order,
options::OPT_fppc_native_vec_elem_order,
-   options::OPT_ftime_report, options::OPT_ftime_report_EQ,
-   options::OPT_funroll_loops, options::OPT_fno_unroll_loops});
+   options::OPT_finit_global_zero,
+   options::OPT_fno_init_global_zero, 
options::OPT_ftime_report,
+   options::OPT_ftime_report_EQ, options::OPT_funroll_loops,
+   options::OPT_fno_unroll_loops});
 }
 
 void Flang::addPicOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
diff --git a/flang/include/flang/Lower/LoweringOptions.def 
b/flang/include/flang/Lower/LoweringOptions.def
index 5a6debfdffe030..396c91948be36b 100644
--- a/flang/include/flang/Lower/LoweringOptions.def
+++ b/flang/include/flang/Lower/LoweringOptions.def
@@ -44,5 +44,8 @@ ENUM_LOWERINGOPT(IntegerWrapAround, unsigned, 1, 0)
 /// If false, assume that the shapes/types/allocation-status match.
 ENUM_LOWERINGOPT(ReallocateLHS, unsigned, 1, 1)
 
+/// If true, initialize globals without initialization to zero.
+/// On by default.
+ENUM_LOWERINGOPT(InitGlobalZero, unsigned, 1, 1)
 #undef LOWERINGOPT
 #undef ENUM_LOWERINGOPT
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp 
b/flang/lib/Frontend/CompilerInvocation.cpp
index 15b1e1e0a24881..3c6da4687f65d3 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1377,6 +1377,14 @@ bool CompilerInvocation::createFromArgs(
 invoc.loweringOpts.setNoPPCNativeVecElemOrder(true);
   }
 
+  // -f[no-]init-global-zero
+  if (args.hasFlag(clang::driver::options::OPT_finit_global_zero,
+   clang::driver::options::OPT_fno_init_global_zero,
+   /*default=*/true))
+invoc.loweringOpts.setInitGlobalZero(true);
+  else
+invoc.loweringOpts.setInitGlobalZero(false);
+
   // Preserve all the remark options requested, i.e. -Rpass, -Rpass-missed or
   // -Rpass-analysis. This will be used later when processing and outputting 
the
   // remarks generated by LLVM in ExecuteCompilerInvocation.cpp.
diff --git a/flang/lib/Lower/ConvertVariable.cpp 
b/flang/lib/Lower/ConvertVariable.cpp
index 9ee42d5cd88002..87236dc293ebbc 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -635,7 +635,11 @@ static fir::GlobalOp 
defineGlobal(Fortran::lower::AbstractConverter &converter,
   global.setLinkName(builder.createCommonLinkage());
 Fortran::lower::createGlobalInitialization(
 builder, global, [&](fir::FirOpBuilder &builder) {
-  mlir::Value initValue = builder.create(loc, symTy);
+  mlir::Value initValue;
+  if (converter.getLoweringOptions().getInitGlobalZero())
+initValue = builder.create(loc, symTy);
+  else
+initValue = builder.create(loc, symTy);
   builder.create(loc, initValue);
 });
   }
diff --git a/flang/test/Driver/fno-zero-init.f90 
b/flang/test/Driver/fno-zero-init.f

[clang] [flang] Reland "[Flang][Driver] Add a flag to control zero initialization" (PR #123606)

2025-01-20 Thread via cfe-commits

llvmbot wrote:



@llvm/pr-subscribers-clang-driver

@llvm/pr-subscribers-clang

Author: Kiran Chandramohan (kiranchandramohan)


Changes

Reverts llvm/llvm-project#123330

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


9 Files Affected:

- (modified) clang/include/clang/Driver/Options.td (+5) 
- (modified) clang/lib/Driver/ToolChains/Flang.cpp (+4-2) 
- (modified) flang/include/flang/Lower/LoweringOptions.def (+3) 
- (modified) flang/lib/Frontend/CompilerInvocation.cpp (+8) 
- (modified) flang/lib/Lower/ConvertVariable.cpp (+5-1) 
- (added) flang/test/Driver/fno-zero-init.f90 (+9) 
- (added) flang/test/Lower/zero_init.f90 (+20) 
- (added) flang/test/Lower/zero_init_default_init.f90 (+22) 
- (modified) flang/tools/bbc/bbc.cpp (+6) 


``diff
diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index d38dd2b4e3cf09..c4b9743597bb2e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3505,6 +3505,11 @@ def fno_struct_path_tbaa : Flag<["-"], 
"fno-struct-path-tbaa">, Group;
 def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group;
 def fno_strict_overflow : Flag<["-"], "fno-strict-overflow">, Group,
   Visibility<[ClangOption, FlangOption]>;
+defm init_global_zero : BoolOptionWithoutMarshalling<"f", "init-global-zero",
+  PosFlag,
+  NegFlag>;
 def fno_pointer_tbaa : Flag<["-"], "fno-pointer-tbaa">, Group;
 def fno_temp_file : Flag<["-"], "fno-temp-file">, Group,
   Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>, HelpText<
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 86ed25badfa2b7..9c1fd28a3a8a26 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -155,8 +155,10 @@ void Flang::addCodegenOptions(const ArgList &Args,
options::OPT_flang_deprecated_no_hlfir,
options::OPT_fno_ppc_native_vec_elem_order,
options::OPT_fppc_native_vec_elem_order,
-   options::OPT_ftime_report, options::OPT_ftime_report_EQ,
-   options::OPT_funroll_loops, options::OPT_fno_unroll_loops});
+   options::OPT_finit_global_zero,
+   options::OPT_fno_init_global_zero, 
options::OPT_ftime_report,
+   options::OPT_ftime_report_EQ, options::OPT_funroll_loops,
+   options::OPT_fno_unroll_loops});
 }
 
 void Flang::addPicOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
diff --git a/flang/include/flang/Lower/LoweringOptions.def 
b/flang/include/flang/Lower/LoweringOptions.def
index 5a6debfdffe030..396c91948be36b 100644
--- a/flang/include/flang/Lower/LoweringOptions.def
+++ b/flang/include/flang/Lower/LoweringOptions.def
@@ -44,5 +44,8 @@ ENUM_LOWERINGOPT(IntegerWrapAround, unsigned, 1, 0)
 /// If false, assume that the shapes/types/allocation-status match.
 ENUM_LOWERINGOPT(ReallocateLHS, unsigned, 1, 1)
 
+/// If true, initialize globals without initialization to zero.
+/// On by default.
+ENUM_LOWERINGOPT(InitGlobalZero, unsigned, 1, 1)
 #undef LOWERINGOPT
 #undef ENUM_LOWERINGOPT
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp 
b/flang/lib/Frontend/CompilerInvocation.cpp
index 15b1e1e0a24881..3c6da4687f65d3 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1377,6 +1377,14 @@ bool CompilerInvocation::createFromArgs(
 invoc.loweringOpts.setNoPPCNativeVecElemOrder(true);
   }
 
+  // -f[no-]init-global-zero
+  if (args.hasFlag(clang::driver::options::OPT_finit_global_zero,
+   clang::driver::options::OPT_fno_init_global_zero,
+   /*default=*/true))
+invoc.loweringOpts.setInitGlobalZero(true);
+  else
+invoc.loweringOpts.setInitGlobalZero(false);
+
   // Preserve all the remark options requested, i.e. -Rpass, -Rpass-missed or
   // -Rpass-analysis. This will be used later when processing and outputting 
the
   // remarks generated by LLVM in ExecuteCompilerInvocation.cpp.
diff --git a/flang/lib/Lower/ConvertVariable.cpp 
b/flang/lib/Lower/ConvertVariable.cpp
index 9ee42d5cd88002..87236dc293ebbc 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -635,7 +635,11 @@ static fir::GlobalOp 
defineGlobal(Fortran::lower::AbstractConverter &converter,
   global.setLinkName(builder.createCommonLinkage());
 Fortran::lower::createGlobalInitialization(
 builder, global, [&](fir::FirOpBuilder &builder) {
-  mlir::Value initValue = builder.create(loc, symTy);
+  mlir::Value initValue;
+  if (converter.getLoweringOptions().getInitGlobalZero())
+initValue = builder.create(loc, symTy);
+  else
+initValue = builder.create(loc, symTy);
   builder.create(loc, initValue);
 });
   }
diff --git a/flang/test/Driver/fno-zero-init.f90 
b/flang/tes

[clang] [flang] Reland "[Flang][Driver] Add a flag to control zero initialization" (PR #123606)

2025-01-20 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-flang-driver

Author: Kiran Chandramohan (kiranchandramohan)


Changes

Reverts llvm/llvm-project#123330

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


9 Files Affected:

- (modified) clang/include/clang/Driver/Options.td (+5) 
- (modified) clang/lib/Driver/ToolChains/Flang.cpp (+4-2) 
- (modified) flang/include/flang/Lower/LoweringOptions.def (+3) 
- (modified) flang/lib/Frontend/CompilerInvocation.cpp (+8) 
- (modified) flang/lib/Lower/ConvertVariable.cpp (+5-1) 
- (added) flang/test/Driver/fno-zero-init.f90 (+9) 
- (added) flang/test/Lower/zero_init.f90 (+20) 
- (added) flang/test/Lower/zero_init_default_init.f90 (+22) 
- (modified) flang/tools/bbc/bbc.cpp (+6) 


``diff
diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index d38dd2b4e3cf09..c4b9743597bb2e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3505,6 +3505,11 @@ def fno_struct_path_tbaa : Flag<["-"], 
"fno-struct-path-tbaa">, Group;
 def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group;
 def fno_strict_overflow : Flag<["-"], "fno-strict-overflow">, Group,
   Visibility<[ClangOption, FlangOption]>;
+defm init_global_zero : BoolOptionWithoutMarshalling<"f", "init-global-zero",
+  PosFlag,
+  NegFlag>;
 def fno_pointer_tbaa : Flag<["-"], "fno-pointer-tbaa">, Group;
 def fno_temp_file : Flag<["-"], "fno-temp-file">, Group,
   Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>, HelpText<
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 86ed25badfa2b7..9c1fd28a3a8a26 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -155,8 +155,10 @@ void Flang::addCodegenOptions(const ArgList &Args,
options::OPT_flang_deprecated_no_hlfir,
options::OPT_fno_ppc_native_vec_elem_order,
options::OPT_fppc_native_vec_elem_order,
-   options::OPT_ftime_report, options::OPT_ftime_report_EQ,
-   options::OPT_funroll_loops, options::OPT_fno_unroll_loops});
+   options::OPT_finit_global_zero,
+   options::OPT_fno_init_global_zero, 
options::OPT_ftime_report,
+   options::OPT_ftime_report_EQ, options::OPT_funroll_loops,
+   options::OPT_fno_unroll_loops});
 }
 
 void Flang::addPicOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
diff --git a/flang/include/flang/Lower/LoweringOptions.def 
b/flang/include/flang/Lower/LoweringOptions.def
index 5a6debfdffe030..396c91948be36b 100644
--- a/flang/include/flang/Lower/LoweringOptions.def
+++ b/flang/include/flang/Lower/LoweringOptions.def
@@ -44,5 +44,8 @@ ENUM_LOWERINGOPT(IntegerWrapAround, unsigned, 1, 0)
 /// If false, assume that the shapes/types/allocation-status match.
 ENUM_LOWERINGOPT(ReallocateLHS, unsigned, 1, 1)
 
+/// If true, initialize globals without initialization to zero.
+/// On by default.
+ENUM_LOWERINGOPT(InitGlobalZero, unsigned, 1, 1)
 #undef LOWERINGOPT
 #undef ENUM_LOWERINGOPT
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp 
b/flang/lib/Frontend/CompilerInvocation.cpp
index 15b1e1e0a24881..3c6da4687f65d3 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1377,6 +1377,14 @@ bool CompilerInvocation::createFromArgs(
 invoc.loweringOpts.setNoPPCNativeVecElemOrder(true);
   }
 
+  // -f[no-]init-global-zero
+  if (args.hasFlag(clang::driver::options::OPT_finit_global_zero,
+   clang::driver::options::OPT_fno_init_global_zero,
+   /*default=*/true))
+invoc.loweringOpts.setInitGlobalZero(true);
+  else
+invoc.loweringOpts.setInitGlobalZero(false);
+
   // Preserve all the remark options requested, i.e. -Rpass, -Rpass-missed or
   // -Rpass-analysis. This will be used later when processing and outputting 
the
   // remarks generated by LLVM in ExecuteCompilerInvocation.cpp.
diff --git a/flang/lib/Lower/ConvertVariable.cpp 
b/flang/lib/Lower/ConvertVariable.cpp
index 9ee42d5cd88002..87236dc293ebbc 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -635,7 +635,11 @@ static fir::GlobalOp 
defineGlobal(Fortran::lower::AbstractConverter &converter,
   global.setLinkName(builder.createCommonLinkage());
 Fortran::lower::createGlobalInitialization(
 builder, global, [&](fir::FirOpBuilder &builder) {
-  mlir::Value initValue = builder.create(loc, symTy);
+  mlir::Value initValue;
+  if (converter.getLoweringOptions().getInitGlobalZero())
+initValue = builder.create(loc, symTy);
+  else
+initValue = builder.create(loc, symTy);
   builder.create(loc, initValue);
 });
   }
diff --git a/flang/test/Driver/fno-zero-init.f90 
b/flang/test/Driver/fno-zero-init.f90

[clang] [flang] Reland "[Flang][Driver] Add a flag to control zero initialization" (PR #123606)

2025-01-20 Thread Kiran Chandramohan via cfe-commits

https://github.com/kiranchandramohan created 
https://github.com/llvm/llvm-project/pull/123606

Reverts llvm/llvm-project#123330

>From ddb9cc530ec0667c3b4207d13bc6ec26f64241d4 Mon Sep 17 00:00:00 2001
From: Kiran Chandramohan 
Date: Mon, 20 Jan 2025 12:43:24 +
Subject: [PATCH] =?UTF-8?q?Revert=20"Revert=20"Revert=20"Revert=20"[Flang]?=
 =?UTF-8?q?[Driver]=20Add=20a=20flag=20to=20control=20zero=20in=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit 8a229f595a5c0ff354cdfa05cda974a9d56674df.
---
 clang/include/clang/Driver/Options.td |  5 +
 clang/lib/Driver/ToolChains/Flang.cpp |  6 +++--
 flang/include/flang/Lower/LoweringOptions.def |  3 +++
 flang/lib/Frontend/CompilerInvocation.cpp |  8 +++
 flang/lib/Lower/ConvertVariable.cpp   |  6 -
 flang/test/Driver/fno-zero-init.f90   |  9 
 flang/test/Lower/zero_init.f90| 20 +
 flang/test/Lower/zero_init_default_init.f90   | 22 +++
 flang/tools/bbc/bbc.cpp   |  6 +
 9 files changed, 82 insertions(+), 3 deletions(-)
 create mode 100644 flang/test/Driver/fno-zero-init.f90
 create mode 100644 flang/test/Lower/zero_init.f90
 create mode 100644 flang/test/Lower/zero_init_default_init.f90

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index d38dd2b4e3cf09..c4b9743597bb2e 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3505,6 +3505,11 @@ def fno_struct_path_tbaa : Flag<["-"], 
"fno-struct-path-tbaa">, Group;
 def fno_strict_enums : Flag<["-"], "fno-strict-enums">, Group;
 def fno_strict_overflow : Flag<["-"], "fno-strict-overflow">, Group,
   Visibility<[ClangOption, FlangOption]>;
+defm init_global_zero : BoolOptionWithoutMarshalling<"f", "init-global-zero",
+  PosFlag,
+  NegFlag>;
 def fno_pointer_tbaa : Flag<["-"], "fno-pointer-tbaa">, Group;
 def fno_temp_file : Flag<["-"], "fno-temp-file">, Group,
   Visibility<[ClangOption, CC1Option, CLOption, DXCOption]>, HelpText<
diff --git a/clang/lib/Driver/ToolChains/Flang.cpp 
b/clang/lib/Driver/ToolChains/Flang.cpp
index 86ed25badfa2b7..9c1fd28a3a8a26 100644
--- a/clang/lib/Driver/ToolChains/Flang.cpp
+++ b/clang/lib/Driver/ToolChains/Flang.cpp
@@ -155,8 +155,10 @@ void Flang::addCodegenOptions(const ArgList &Args,
options::OPT_flang_deprecated_no_hlfir,
options::OPT_fno_ppc_native_vec_elem_order,
options::OPT_fppc_native_vec_elem_order,
-   options::OPT_ftime_report, options::OPT_ftime_report_EQ,
-   options::OPT_funroll_loops, options::OPT_fno_unroll_loops});
+   options::OPT_finit_global_zero,
+   options::OPT_fno_init_global_zero, 
options::OPT_ftime_report,
+   options::OPT_ftime_report_EQ, options::OPT_funroll_loops,
+   options::OPT_fno_unroll_loops});
 }
 
 void Flang::addPicOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
diff --git a/flang/include/flang/Lower/LoweringOptions.def 
b/flang/include/flang/Lower/LoweringOptions.def
index 5a6debfdffe030..396c91948be36b 100644
--- a/flang/include/flang/Lower/LoweringOptions.def
+++ b/flang/include/flang/Lower/LoweringOptions.def
@@ -44,5 +44,8 @@ ENUM_LOWERINGOPT(IntegerWrapAround, unsigned, 1, 0)
 /// If false, assume that the shapes/types/allocation-status match.
 ENUM_LOWERINGOPT(ReallocateLHS, unsigned, 1, 1)
 
+/// If true, initialize globals without initialization to zero.
+/// On by default.
+ENUM_LOWERINGOPT(InitGlobalZero, unsigned, 1, 1)
 #undef LOWERINGOPT
 #undef ENUM_LOWERINGOPT
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp 
b/flang/lib/Frontend/CompilerInvocation.cpp
index 15b1e1e0a24881..3c6da4687f65d3 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1377,6 +1377,14 @@ bool CompilerInvocation::createFromArgs(
 invoc.loweringOpts.setNoPPCNativeVecElemOrder(true);
   }
 
+  // -f[no-]init-global-zero
+  if (args.hasFlag(clang::driver::options::OPT_finit_global_zero,
+   clang::driver::options::OPT_fno_init_global_zero,
+   /*default=*/true))
+invoc.loweringOpts.setInitGlobalZero(true);
+  else
+invoc.loweringOpts.setInitGlobalZero(false);
+
   // Preserve all the remark options requested, i.e. -Rpass, -Rpass-missed or
   // -Rpass-analysis. This will be used later when processing and outputting 
the
   // remarks generated by LLVM in ExecuteCompilerInvocation.cpp.
diff --git a/flang/lib/Lower/ConvertVariable.cpp 
b/flang/lib/Lower/ConvertVariable.cpp
index 9ee42d5cd88002..87236dc293ebbc 100644
--- a/flang/lib/Lower/ConvertVariable.cpp
+++ b/flang/lib/Lower/ConvertVariable.cpp
@@ -635,7 +635,11 @@ static fir::GlobalOp 
defineGlobal(Fortran::lower::AbstractConverter &converter,
   g