[PATCH] D140972: [flang] Add -fstack-arrays flag
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGbf81ba372628: [flang] add -fstack-arrays flag (authored by tblah). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Flang.cpp flang/docs/FlangDriver.md flang/include/flang/Frontend/CodeGenOptions.def flang/include/flang/Tools/CLOptions.inc flang/lib/Frontend/CompilerInvocation.cpp flang/lib/Frontend/FrontendActions.cpp flang/test/Driver/driver-help-hidden.f90 flang/test/Driver/driver-help.f90 flang/test/Driver/fast_math.f90 flang/test/Transforms/stack-arrays.f90 Index: flang/test/Transforms/stack-arrays.f90 === --- flang/test/Transforms/stack-arrays.f90 +++ flang/test/Transforms/stack-arrays.f90 @@ -1,5 +1,10 @@ ! RUN: %flang_fc1 -emit-fir %s -o - | fir-opt --array-value-copy | fir-opt --stack-arrays | FileCheck %s +! In order to verify the whole MLIR pipeline, make the driver generate LLVM IR. +! This is only to check that -fstack-arrays enables the stack-arrays pass so +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=LLVM-IR %s + ! check simple array value copy case subroutine array_value_copy_simple(arr) integer, intent(inout) :: arr(4) @@ -14,6 +19,15 @@ ! CHECK: return ! CHECK-NEXT: } +! LLVM-IR: array_value_copy_simple +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: alloca [4 x i32] +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: ret void +! LLVM-IR-NEXT: } + ! check complex array value copy case module stuff type DerivedWithAllocatable Index: flang/test/Driver/fast_math.f90 === --- flang/test/Driver/fast_math.f90 +++ flang/test/Driver/fast_math.f90 @@ -1,25 +1,35 @@ ! Test for correct forwarding of fast-math flags from the compiler driver to the ! frontend driver -! -Ofast => -ffast-math -O3 +! -Ofast => -ffast-math -O3 -fstack-arrays ! RUN: %flang -Ofast -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST %s ! CHECK-OFAST: -fc1 ! CHECK-OFAST-SAME: -ffast-math +! CHECK-OFAST-SAME: -fstack-arrays ! CHECK-OFAST-SAME: -O3 -! TODO: update once -fstack-arays is added -! RUN: %flang -fstack-arrays -fsyntax-only %s -o %t 2>&1 \ +! RUN: %flang -fstack-arrays -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-STACK-ARRAYS %s -! CHECK-STACK-ARRAYS: warning: argument unused during compilation: '-fstack-arrays' +! CHECK-STACK-ARRAYS: -fc1 +! CHECK-STACK-ARRAYS-SAME: -fstack-arrays -! -Ofast -fno-fast-math => -O3 +! -Ofast -fno-fast-math => -O3 -fstack-arrays ! RUN: %flang -Ofast -fno-fast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-FAST %s ! CHECK-OFAST-NO-FAST: -fc1 ! CHECK-OFAST-NO-FAST-NOT: -ffast-math +! CHECK-OFAST-NO-FAST-SAME: -fstack-arrays ! CHECK-OFAST-NO-FAST-SAME: -O3 +! -Ofast -fno-stack-arrays -> -O3 -ffast-math +! RUN: %flang -Ofast -fno-stack-arrays -fsyntax-only -### %s -o %t 2>&1 \ +! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-SA %s +! CHECK-OFAST-NO-SA: -fc1 +! CHECK-OFAST-NO-SA-SAME: -ffast-math +! CHECK-OFAST-NO-SA-NOT: -fstack-arrays +! CHECK-OFAST-NO-SA-SAME: -O3 + ! -ffast-math => -ffast-math ! RUN: %flang -ffast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-FFAST %s Index: flang/test/Driver/driver-help.f90 === --- flang/test/Driver/driver-help.f90 +++ flang/test/Driver/driver-help.f90 @@ -45,10 +45,12 @@ ! HELP-NEXT: -fno-color-diagnostics Disable colors in diagnostics ! HELP-NEXT: -fno-integrated-as Disable the integrated assembler ! HELP-NEXT: -fno-signed-zeros Allow optimizations that ignore the sign of floating point zeros +! HELP-NEXT: -fno-stack-arrays Allocate array temporaries on the heap (default) ! HELP-NEXT: -fopenacc Enable OpenACC ! HELP-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code. ! HELP-NEXT: -fpass-plugin= Load pass plugin from a dynamic shared object file (only with new pass manager). ! HELP-NEXT: -freciprocal-math Allow division operations to be reassociated +! HELP-NEXT: -fstack-arrays Attempt to allocate array temporaries on the stack, no matter their size ! HELP-NEXT: -fsyntax-only Run the preprocessor, parser and semantic analysis stages ! HELP-NEXT: -fxor-operator Enable .XOR. as a synonym of .NEQV. ! HELP-NEXT: -help Display available options @@ -133,10 +135,12 @@ ! HELP-FC1-NEXT: -fno-debug-pass-manager Disables debug printing for the new pass manager
[PATCH] D140972: [flang] Add -fstack-arrays flag
awarzynski accepted this revision. awarzynski added a comment. Thanks for the updates, LGTM! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140972: [flang] Add -fstack-arrays flag
tblah updated this revision to Diff 491267. tblah added a comment. - Rename option macro to make it clear that it doesn't do marshalling Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Flang.cpp flang/docs/FlangDriver.md flang/include/flang/Frontend/CodeGenOptions.def flang/include/flang/Tools/CLOptions.inc flang/lib/Frontend/CompilerInvocation.cpp flang/lib/Frontend/FrontendActions.cpp flang/test/Driver/driver-help-hidden.f90 flang/test/Driver/driver-help.f90 flang/test/Driver/fast_math.f90 flang/test/Transforms/stack-arrays.f90 Index: flang/test/Transforms/stack-arrays.f90 === --- flang/test/Transforms/stack-arrays.f90 +++ flang/test/Transforms/stack-arrays.f90 @@ -1,5 +1,10 @@ ! RUN: %flang_fc1 -emit-fir %s -o - | fir-opt --array-value-copy | fir-opt --stack-arrays | FileCheck %s +! In order to verify the whole MLIR pipeline, make the driver generate LLVM IR. +! This is only to check that -fstack-arrays enables the stack-arrays pass so +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=LLVM-IR %s + ! check simple array value copy case subroutine array_value_copy_simple(arr) integer, intent(inout) :: arr(4) @@ -14,6 +19,15 @@ ! CHECK: return ! CHECK-NEXT: } +! LLVM-IR: array_value_copy_simple +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: alloca [4 x i32] +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: ret void +! LLVM-IR-NEXT: } + ! check complex array value copy case module stuff type DerivedWithAllocatable Index: flang/test/Driver/fast_math.f90 === --- flang/test/Driver/fast_math.f90 +++ flang/test/Driver/fast_math.f90 @@ -1,25 +1,35 @@ ! Test for correct forwarding of fast-math flags from the compiler driver to the ! frontend driver -! -Ofast => -ffast-math -O3 +! -Ofast => -ffast-math -O3 -fstack-arrays ! RUN: %flang -Ofast -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST %s ! CHECK-OFAST: -fc1 ! CHECK-OFAST-SAME: -ffast-math +! CHECK-OFAST-SAME: -fstack-arrays ! CHECK-OFAST-SAME: -O3 -! TODO: update once -fstack-arays is added -! RUN: %flang -fstack-arrays -fsyntax-only %s -o %t 2>&1 \ +! RUN: %flang -fstack-arrays -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-STACK-ARRAYS %s -! CHECK-STACK-ARRAYS: warning: argument unused during compilation: '-fstack-arrays' +! CHECK-STACK-ARRAYS: -fc1 +! CHECK-STACK-ARRAYS-SAME: -fstack-arrays -! -Ofast -fno-fast-math => -O3 +! -Ofast -fno-fast-math => -O3 -fstack-arrays ! RUN: %flang -Ofast -fno-fast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-FAST %s ! CHECK-OFAST-NO-FAST: -fc1 ! CHECK-OFAST-NO-FAST-NOT: -ffast-math +! CHECK-OFAST-NO-FAST-SAME: -fstack-arrays ! CHECK-OFAST-NO-FAST-SAME: -O3 +! -Ofast -fno-stack-arrays -> -O3 -ffast-math +! RUN: %flang -Ofast -fno-stack-arrays -fsyntax-only -### %s -o %t 2>&1 \ +! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-SA %s +! CHECK-OFAST-NO-SA: -fc1 +! CHECK-OFAST-NO-SA-SAME: -ffast-math +! CHECK-OFAST-NO-SA-NOT: -fstack-arrays +! CHECK-OFAST-NO-SA-SAME: -O3 + ! -ffast-math => -ffast-math ! RUN: %flang -ffast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-FFAST %s Index: flang/test/Driver/driver-help.f90 === --- flang/test/Driver/driver-help.f90 +++ flang/test/Driver/driver-help.f90 @@ -45,10 +45,12 @@ ! HELP-NEXT: -fno-color-diagnostics Disable colors in diagnostics ! HELP-NEXT: -fno-integrated-as Disable the integrated assembler ! HELP-NEXT: -fno-signed-zeros Allow optimizations that ignore the sign of floating point zeros +! HELP-NEXT: -fno-stack-arrays Allocate array temporaries on the heap (default) ! HELP-NEXT: -fopenacc Enable OpenACC ! HELP-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code. ! HELP-NEXT: -fpass-plugin= Load pass plugin from a dynamic shared object file (only with new pass manager). ! HELP-NEXT: -freciprocal-math Allow division operations to be reassociated +! HELP-NEXT: -fstack-arrays Attempt to allocate array temporaries on the stack, no matter their size ! HELP-NEXT: -fsyntax-only Run the preprocessor, parser and semantic analysis stages ! HELP-NEXT: -fxor-operator Enable .XOR. as a synonym of .NEQV. ! HELP-NEXT: -help Display available options @@ -130,10 +132,12 @@ ! HELP-FC1-NEXT: -fno-debug-pass-manager Disables debug printing for the new pass manager ! HELP-FC1-NEXT: -fno-reformat Dump the cooked character stream in -E
[PATCH] D140972: [flang] Add -fstack-arrays flag
awarzynski added inline comments. Comment at: clang/include/clang/Driver/Options.td:485-486 +// Works like BoolOption except without specifying a KeyPathAndMacro, as these +// would refer to non-existant members of clang data structures +multiclass BoolFlangOnlyOptionhttps://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140972: [flang] Add -fstack-arrays flag
tblah updated this revision to Diff 490801. tblah added a comment. Update to ensure that generated code for Options.td does not try to reference clang::CodegenOpts::StackArrays. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Flang.cpp flang/docs/FlangDriver.md flang/include/flang/Frontend/CodeGenOptions.def flang/include/flang/Tools/CLOptions.inc flang/lib/Frontend/CompilerInvocation.cpp flang/lib/Frontend/FrontendActions.cpp flang/test/Driver/driver-help-hidden.f90 flang/test/Driver/driver-help.f90 flang/test/Driver/fast_math.f90 flang/test/Transforms/stack-arrays.f90 Index: flang/test/Transforms/stack-arrays.f90 === --- flang/test/Transforms/stack-arrays.f90 +++ flang/test/Transforms/stack-arrays.f90 @@ -1,5 +1,10 @@ ! RUN: %flang_fc1 -emit-fir %s -o - | fir-opt --array-value-copy | fir-opt --stack-arrays | FileCheck %s +! In order to verify the whole MLIR pipeline, make the driver generate LLVM IR. +! This is only to check that -fstack-arrays enables the stack-arrays pass so +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=LLVM-IR %s + ! check simple array value copy case subroutine array_value_copy_simple(arr) integer, intent(inout) :: arr(4) @@ -14,6 +19,15 @@ ! CHECK: return ! CHECK-NEXT: } +! LLVM-IR: array_value_copy_simple +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: alloca [4 x i32] +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: ret void +! LLVM-IR-NEXT: } + ! check complex array value copy case module stuff type DerivedWithAllocatable Index: flang/test/Driver/fast_math.f90 === --- flang/test/Driver/fast_math.f90 +++ flang/test/Driver/fast_math.f90 @@ -1,25 +1,35 @@ ! Test for correct forwarding of fast-math flags from the compiler driver to the ! frontend driver -! -Ofast => -ffast-math -O3 +! -Ofast => -ffast-math -O3 -fstack-arrays ! RUN: %flang -Ofast -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST %s ! CHECK-OFAST: -fc1 ! CHECK-OFAST-SAME: -ffast-math +! CHECK-OFAST-SAME: -fstack-arrays ! CHECK-OFAST-SAME: -O3 -! TODO: update once -fstack-arays is added -! RUN: %flang -fstack-arrays -fsyntax-only %s -o %t 2>&1 \ +! RUN: %flang -fstack-arrays -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-STACK-ARRAYS %s -! CHECK-STACK-ARRAYS: warning: argument unused during compilation: '-fstack-arrays' +! CHECK-STACK-ARRAYS: -fc1 +! CHECK-STACK-ARRAYS-SAME: -fstack-arrays -! -Ofast -fno-fast-math => -O3 +! -Ofast -fno-fast-math => -O3 -fstack-arrays ! RUN: %flang -Ofast -fno-fast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-FAST %s ! CHECK-OFAST-NO-FAST: -fc1 ! CHECK-OFAST-NO-FAST-NOT: -ffast-math +! CHECK-OFAST-NO-FAST-SAME: -fstack-arrays ! CHECK-OFAST-NO-FAST-SAME: -O3 +! -Ofast -fno-stack-arrays -> -O3 -ffast-math +! RUN: %flang -Ofast -fno-stack-arrays -fsyntax-only -### %s -o %t 2>&1 \ +! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-SA %s +! CHECK-OFAST-NO-SA: -fc1 +! CHECK-OFAST-NO-SA-SAME: -ffast-math +! CHECK-OFAST-NO-SA-NOT: -fstack-arrays +! CHECK-OFAST-NO-SA-SAME: -O3 + ! -ffast-math => -ffast-math ! RUN: %flang -ffast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-FFAST %s Index: flang/test/Driver/driver-help.f90 === --- flang/test/Driver/driver-help.f90 +++ flang/test/Driver/driver-help.f90 @@ -45,10 +45,12 @@ ! HELP-NEXT: -fno-color-diagnostics Disable colors in diagnostics ! HELP-NEXT: -fno-integrated-as Disable the integrated assembler ! HELP-NEXT: -fno-signed-zeros Allow optimizations that ignore the sign of floating point zeros +! HELP-NEXT: -fno-stack-arrays Allocate array temporaries on the heap (default) ! HELP-NEXT: -fopenacc Enable OpenACC ! HELP-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code. ! HELP-NEXT: -fpass-plugin= Load pass plugin from a dynamic shared object file (only with new pass manager). ! HELP-NEXT: -freciprocal-math Allow division operations to be reassociated +! HELP-NEXT: -fstack-arrays Attempt to allocate array temporaries on the stack, no matter their size ! HELP-NEXT: -fsyntax-only Run the preprocessor, parser and semantic analysis stages ! HELP-NEXT: -fxor-operator Enable .XOR. as a synonym of .NEQV. ! HELP-NEXT: -help Display available options @@ -130,10 +132,12 @@ ! HELP-FC1-NEXT: -fno-debug-pass-manager Disables debug printing for the new pass manager ! HELP-FC1-NEXT: -fno-reformat
[PATCH] D140972: [flang] Add -fstack-arrays flag
awarzynski accepted this revision. awarzynski added a comment. This revision is now accepted and ready to land. LGTM, thanks! Comment at: flang/test/Transforms/stack-arrays.f90:22-29 +! LLVM-IR: array_value_copy_simple +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: alloca [4 x i32] +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: ret void Hopefully I got this right, it's been a while :) https://llvm.org/docs/CommandGuide/FileCheck.html#the-check-dag-directive Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140972: [flang] Add -fstack-arrays flag
tblah updated this revision to Diff 490100. tblah marked 4 inline comments as done. tblah added a comment. Clarified a comment in stack-arrays.f90 and clarified the choice of FileCheck prefix. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Flang.cpp flang/docs/FlangDriver.md flang/include/flang/Frontend/CodeGenOptions.def flang/include/flang/Tools/CLOptions.inc flang/lib/Frontend/CompilerInvocation.cpp flang/lib/Frontend/FrontendActions.cpp flang/test/Driver/driver-help-hidden.f90 flang/test/Driver/driver-help.f90 flang/test/Driver/fast_math.f90 flang/test/Transforms/stack-arrays.f90 Index: flang/test/Transforms/stack-arrays.f90 === --- flang/test/Transforms/stack-arrays.f90 +++ flang/test/Transforms/stack-arrays.f90 @@ -1,5 +1,10 @@ ! RUN: %flang_fc1 -emit-fir %s -o - | fir-opt --array-value-copy | fir-opt --stack-arrays | FileCheck %s +! In order to verify the whole MLIR pipeline, make the driver generate LLVM IR. +! This is only to check that -fstack-arrays enables the stack-arrays pass so +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=LLVM-IR %s + ! check simple array value copy case subroutine array_value_copy_simple(arr) integer, intent(inout) :: arr(4) @@ -14,6 +19,15 @@ ! CHECK: return ! CHECK-NEXT: } +! LLVM-IR: array_value_copy_simple +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: alloca [4 x i32] +! LLVM-IR-NOT: malloc +! LLVM-IR-NOT: free +! LLVM-IR: ret void +! LLVM-IR-NEXT: } + ! check complex array value copy case module stuff type DerivedWithAllocatable Index: flang/test/Driver/fast_math.f90 === --- flang/test/Driver/fast_math.f90 +++ flang/test/Driver/fast_math.f90 @@ -1,25 +1,35 @@ ! Test for correct forwarding of fast-math flags from the compiler driver to the ! frontend driver -! -Ofast => -ffast-math -O3 +! -Ofast => -ffast-math -O3 -fstack-arrays ! RUN: %flang -Ofast -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST %s ! CHECK-OFAST: -fc1 ! CHECK-OFAST-SAME: -ffast-math +! CHECK-OFAST-SAME: -fstack-arrays ! CHECK-OFAST-SAME: -O3 -! TODO: update once -fstack-arays is added -! RUN: %flang -fstack-arrays -fsyntax-only %s -o %t 2>&1 \ +! RUN: %flang -fstack-arrays -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-STACK-ARRAYS %s -! CHECK-STACK-ARRAYS: warning: argument unused during compilation: '-fstack-arrays' +! CHECK-STACK-ARRAYS: -fc1 +! CHECK-STACK-ARRAYS-SAME: -fstack-arrays -! -Ofast -fno-fast-math => -O3 +! -Ofast -fno-fast-math => -O3 -fstack-arrays ! RUN: %flang -Ofast -fno-fast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-FAST %s ! CHECK-OFAST-NO-FAST: -fc1 ! CHECK-OFAST-NO-FAST-NOT: -ffast-math +! CHECK-OFAST-NO-FAST-SAME: -fstack-arrays ! CHECK-OFAST-NO-FAST-SAME: -O3 +! -Ofast -fno-stack-arrays -> -O3 -ffast-math +! RUN: %flang -Ofast -fno-stack-arrays -fsyntax-only -### %s -o %t 2>&1 \ +! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-SA %s +! CHECK-OFAST-NO-SA: -fc1 +! CHECK-OFAST-NO-SA-SAME: -ffast-math +! CHECK-OFAST-NO-SA-NOT: -fstack-arrays +! CHECK-OFAST-NO-SA-SAME: -O3 + ! -ffast-math => -ffast-math ! RUN: %flang -ffast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-FFAST %s Index: flang/test/Driver/driver-help.f90 === --- flang/test/Driver/driver-help.f90 +++ flang/test/Driver/driver-help.f90 @@ -45,10 +45,12 @@ ! HELP-NEXT: -fno-color-diagnostics Disable colors in diagnostics ! HELP-NEXT: -fno-integrated-as Disable the integrated assembler ! HELP-NEXT: -fno-signed-zeros Allow optimizations that ignore the sign of floating point zeros +! HELP-NEXT: -fno-stack-arrays Allocate array temporaries on the heap (default) ! HELP-NEXT: -fopenacc Enable OpenACC ! HELP-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code. ! HELP-NEXT: -fpass-plugin= Load pass plugin from a dynamic shared object file (only with new pass manager). ! HELP-NEXT: -freciprocal-math Allow division operations to be reassociated +! HELP-NEXT: -fstack-arrays Attempt to allocate array temporaries on the stack, no matter their size ! HELP-NEXT: -fsyntax-only Run the preprocessor, parser and semantic analysis stages ! HELP-NEXT: -fxor-operator Enable .XOR. as a synonym of .NEQV. ! HELP-NEXT: -help Display available options @@ -130,10 +132,12 @@ ! HELP-FC1-NEXT: -fno-debug-pass-manager Disables debug printing for the new pass manager ! HELP-FC1-NEXT:
[PATCH] D140972: [flang] Add -fstack-arrays flag
awarzynski added inline comments. Comment at: flang/include/flang/Tools/CLOptions.inc:159 inline void createDefaultFIROptimizerPassPipeline( -mlir::PassManager , llvm::OptimizationLevel optLevel = defaultOptLevel) { +mlir::PassManager , bool stackArrays = false, llvm::OptimizationLevel optLevel = defaultOptLevel) { // simplify the IR tblah wrote: > awarzynski wrote: > > CLANG-FORMAT-ME :) Same for other long lines here. > It seems clang-format is not run on this file. I have fixed the lines changed > in my patch. Should I clang-format the whole file in a separate patch? +1 Comment at: flang/test/Transforms/stack-arrays.f90:3 +! We have to check llvm ir here to force flang to run the whole mlir pipeline +! this is just to check that -fstack-arrays enables the stack-arrays pass so tblah wrote: > awarzynski wrote: > > Also, I don't quite follow this comment: > > > > > We have to check llvm ir here to force flang to run the whole mlir > > > pipeline > > > > Why is checking LLVM IR going to force Flang to run anything? > Just running `flang-new -fc1 -emit-fir` outputs the FIR before all of the > transformation passes run (which is why I have to pipe the result through > `fir-opt` to run the array value copy and stack arrays passes on the first > line). > > Outputting LLVM IR requires all of the MLIR transformation passes to be run > to transform all of the higher level dialects into the LLVM dialect. Stack > arrays is run as part of that same pipeline > (`fir::createMLIRToLLVMPassPipeline`). I want to test that `-fstack-arrays` > does cause the stack arrays pass to run as part of that pipeline, which is > why I am checking the LLVM-IR. > > One alternative would be to print out which passes have run and check that, > but I felt this way fits more with the spirit of the other tests. Thanks for the explanation. So you want to verify this functionality by investigating two pipelines: * source --> FIR * source --> LLVM IR You could convey that by using `CHECK-FIR` and `CHECK-LLVM-IR` (or just `FIR` and `LLVM-IR`). I "complained", because this is unclear: > We have to check llvm ir here to force flang to run the whole mlir pipeline Perhaps: > In order to verify the whole MLIR pipeline, make the driver generate LLVM IR. Comment at: flang/test/Transforms/stack-arrays.f90:6 +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=CHECK-LLVM %s + tblah wrote: > awarzynski wrote: > > > Lots of other tests do not follow this convention. It would change the > FileCheck comments to look like `! LLVM: array_value_copy_simple`. > > I think it is good to require `CHECK-FEATURE:` so that any mention of > `FEATURE` in comments does not confuse FileCheck. Especially for a name like > LLVM which is likely to be written in capitals. > Lots of other tests do not follow this convention. I think that we would easily find examples for either approach. > I think it is good to require CHECK-FEATURE: Well, `LLVM` is not a feature ;-) Also, most folks working with LLVM are familiar with the LIT syntax - the presence of `CHECK` in `CHECK-FEATURE` is just unnecessary noise to me. But I am happy either way. But I would appreciate replacing with `LLVM` with something a bit more meaningful - perhaps `LLVM-IR`? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140972: [flang] Add -fstack-arrays flag
tblah added inline comments. Comment at: flang/include/flang/Tools/CLOptions.inc:159 inline void createDefaultFIROptimizerPassPipeline( -mlir::PassManager , llvm::OptimizationLevel optLevel = defaultOptLevel) { +mlir::PassManager , bool stackArrays = false, llvm::OptimizationLevel optLevel = defaultOptLevel) { // simplify the IR awarzynski wrote: > CLANG-FORMAT-ME :) Same for other long lines here. It seems clang-format is not run on this file. I have fixed the lines changed in my patch. Should I clang-format the whole file in a separate patch? Comment at: flang/test/Transforms/stack-arrays.f90:3 +! We have to check llvm ir here to force flang to run the whole mlir pipeline +! this is just to check that -fstack-arrays enables the stack-arrays pass so awarzynski wrote: > Also, I don't quite follow this comment: > > > We have to check llvm ir here to force flang to run the whole mlir pipeline > > Why is checking LLVM IR going to force Flang to run anything? Just running `flang-new -fc1 -emit-fir` outputs the FIR before all of the transformation passes run (which is why I have to pipe the result through `fir-opt` to run the array value copy and stack arrays passes on the first line). Outputting LLVM IR requires all of the MLIR transformation passes to be run to transform all of the higher level dialects into the LLVM dialect. Stack arrays is run as part of that same pipeline (`fir::createMLIRToLLVMPassPipeline`). I want to test that `-fstack-arrays` does cause the stack arrays pass to run as part of that pipeline, which is why I am checking the LLVM-IR. One alternative would be to print out which passes have run and check that, but I felt this way fits more with the spirit of the other tests. Comment at: flang/test/Transforms/stack-arrays.f90:6 +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=CHECK-LLVM %s + awarzynski wrote: > Lots of other tests do not follow this convention. It would change the FileCheck comments to look like `! LLVM: array_value_copy_simple`. I think it is good to require `CHECK-FEATURE:` so that any mention of `FEATURE` in comments does not confuse FileCheck. Especially for a name like LLVM which is likely to be written in capitals. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140972: [flang] Add -fstack-arrays flag
tblah updated this revision to Diff 489484. tblah marked 6 inline comments as done. tblah added a comment. Update to address review comments Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Flang.cpp flang/docs/FlangDriver.md flang/include/flang/Frontend/CodeGenOptions.def flang/include/flang/Tools/CLOptions.inc flang/lib/Frontend/CompilerInvocation.cpp flang/lib/Frontend/FrontendActions.cpp flang/test/Driver/driver-help-hidden.f90 flang/test/Driver/driver-help.f90 flang/test/Driver/fast_math.f90 flang/test/Transforms/stack-arrays.f90 Index: flang/test/Transforms/stack-arrays.f90 === --- flang/test/Transforms/stack-arrays.f90 +++ flang/test/Transforms/stack-arrays.f90 @@ -1,5 +1,10 @@ ! RUN: %flang_fc1 -emit-fir %s -o - | fir-opt --array-value-copy | fir-opt --stack-arrays | FileCheck %s +! We have to check llvm ir here to force flang to run the whole mlir pipeline +! this is just to check that -fstack-arrays enables the stack-arrays pass so +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=CHECK-LLVM %s + ! check simple array value copy case subroutine array_value_copy_simple(arr) integer, intent(inout) :: arr(4) @@ -14,6 +19,15 @@ ! CHECK: return ! CHECK-NEXT: } +! CHECK-LLVM: array_value_copy_simple +! CHECK-LLVM-NOT: malloc +! CHECK-LLVM-NOT: free +! CHECK-LLVM: alloca [4 x i32] +! CHECK-LLVM-NOT: malloc +! CHECK-LLVM-NOT: free +! CHECK-LLVM: ret void +! CHECK-LLVM-NEXT: } + ! check complex array value copy case module stuff type DerivedWithAllocatable Index: flang/test/Driver/fast_math.f90 === --- flang/test/Driver/fast_math.f90 +++ flang/test/Driver/fast_math.f90 @@ -1,25 +1,35 @@ ! Test for correct forwarding of fast-math flags from the compiler driver to the ! frontend driver -! -Ofast => -ffast-math -O3 +! -Ofast => -ffast-math -O3 -fstack-arrays ! RUN: %flang -Ofast -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST %s ! CHECK-OFAST: -fc1 ! CHECK-OFAST-SAME: -ffast-math +! CHECK-OFAST-SAME: -fstack-arrays ! CHECK-OFAST-SAME: -O3 -! TODO: update once -fstack-arays is added -! RUN: %flang -fstack-arrays -fsyntax-only %s -o %t 2>&1 \ +! RUN: %flang -fstack-arrays -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-STACK-ARRAYS %s -! CHECK-STACK-ARRAYS: warning: argument unused during compilation: '-fstack-arrays' +! CHECK-STACK-ARRAYS: -fc1 +! CHECK-STACK-ARRAYS-SAME: -fstack-arrays -! -Ofast -fno-fast-math => -O3 +! -Ofast -fno-fast-math => -O3 -fstack-arrays ! RUN: %flang -Ofast -fno-fast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-FAST %s ! CHECK-OFAST-NO-FAST: -fc1 ! CHECK-OFAST-NO-FAST-NOT: -ffast-math +! CHECK-OFAST-NO-FAST-SAME: -fstack-arrays ! CHECK-OFAST-NO-FAST-SAME: -O3 +! -Ofast -fno-stack-arrays -> -O3 -ffast-math +! RUN: %flang -Ofast -fno-stack-arrays -fsyntax-only -### %s -o %t 2>&1 \ +! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-SA %s +! CHECK-OFAST-NO-SA: -fc1 +! CHECK-OFAST-NO-SA-SAME: -ffast-math +! CHECK-OFAST-NO-SA-NOT: -fstack-arrays +! CHECK-OFAST-NO-SA-SAME: -O3 + ! -ffast-math => -ffast-math ! RUN: %flang -ffast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-FFAST %s Index: flang/test/Driver/driver-help.f90 === --- flang/test/Driver/driver-help.f90 +++ flang/test/Driver/driver-help.f90 @@ -45,10 +45,12 @@ ! HELP-NEXT: -fno-color-diagnostics Disable colors in diagnostics ! HELP-NEXT: -fno-integrated-as Disable the integrated assembler ! HELP-NEXT: -fno-signed-zeros Allow optimizations that ignore the sign of floating point zeros +! HELP-NEXT: -fno-stack-arrays Allocate array temporaries on the heap (default) ! HELP-NEXT: -fopenacc Enable OpenACC ! HELP-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code. ! HELP-NEXT: -fpass-plugin= Load pass plugin from a dynamic shared object file (only with new pass manager). ! HELP-NEXT: -freciprocal-math Allow division operations to be reassociated +! HELP-NEXT: -fstack-arrays Attempt to allocate array temporaries on the stack, no matter their size ! HELP-NEXT: -fsyntax-only Run the preprocessor, parser and semantic analysis stages ! HELP-NEXT: -fxor-operator Enable .XOR. as a synonym of .NEQV. ! HELP-NEXT: -help Display available options @@ -130,10 +132,12 @@ ! HELP-FC1-NEXT: -fno-debug-pass-manager Disables debug printing for the new pass manager ! HELP-FC1-NEXT: -fno-reformat Dump the
[PATCH] D140972: [flang] Add -fstack-arrays flag
awarzynski added inline comments. Herald added a subscriber: sunshaoce. Comment at: clang/include/clang/Driver/Options.td:5056-5060 +def fstack_arrays : Flag<["-"], "fstack-arrays">, Group, + HelpText<"Attempt to allocate array temporaries on the stack, no matter their size">; +def fno_stack_arrays : Flag<["-"], "fno-stack-arrays">, Group, + HelpText<"Allocate array temporaries on the heap (default)">; + We should avoid duplicating options like this and use multiclasses instead. For example, see how [[ https://github.com/llvm/llvm-project/blob/b6ceadf3b663427f3cc233bbfdb5e35017cabd9e/clang/include/clang/Driver/Options.td#L6464-L6467 | debug_pass_manager ]] is defined. Comment at: flang/docs/FlangDriver.md:573 +`-O3 -ffast-math -fstack-arrays -fno-semantic-interposition`. `-fno-semantic-interposition` is not used because clang does not enable this as part of `-Ofast` as the default behaviour is similar. [nit] "Clang" is a sub-project. It's not clear what "clang" would be - also a sub-project or the binary? Comment at: flang/include/flang/Tools/CLOptions.inc:159 inline void createDefaultFIROptimizerPassPipeline( -mlir::PassManager , llvm::OptimizationLevel optLevel = defaultOptLevel) { +mlir::PassManager , bool stackArrays = false, llvm::OptimizationLevel optLevel = defaultOptLevel) { // simplify the IR CLANG-FORMAT-ME :) Same for other long lines here. Comment at: flang/include/flang/Tools/CLOptions.inc:216 inline void createMLIRToLLVMPassPipeline( -mlir::PassManager , llvm::OptimizationLevel optLevel = defaultOptLevel) { +mlir::PassManager , bool stackArrays = false, llvm::OptimizationLevel optLevel = defaultOptLevel) { // Add default optimizer pass pipeline. [nit] To me, it would make more sense to put `stackArrays` at the end. `optLevel`is a more powerful flag. Comment at: flang/test/Transforms/stack-arrays.f90:3 +! We have to check llvm ir here to force flang to run the whole mlir pipeline +! this is just to check that -fstack-arrays enables the stack-arrays pass so Also, I don't quite follow this comment: > We have to check llvm ir here to force flang to run the whole mlir pipeline Why is checking LLVM IR going to force Flang to run anything? Comment at: flang/test/Transforms/stack-arrays.f90:6 +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=CHECK-LLVM %s + Comment at: flang/tools/bbc/bbc.cpp:276 // Add O2 optimizer pass pipeline. -fir::createDefaultFIROptimizerPassPipeline(pm, llvm::OptimizationLevel::O2); +fir::createDefaultFIROptimizerPassPipeline(pm, false, + llvm::OptimizationLevel::O2); Similar suggestion below. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D140972: [flang] Add -fstack-arrays flag
tblah updated this revision to Diff 488686. tblah added a comment. Herald added projects: clang, Flang. Herald added a subscriber: cfe-commits. Updated to construct StackArrays as a ModuleOp pass Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140972/new/ https://reviews.llvm.org/D140972 Files: clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Flang.cpp flang/docs/FlangDriver.md flang/include/flang/Frontend/CodeGenOptions.def flang/include/flang/Tools/CLOptions.inc flang/lib/Frontend/CompilerInvocation.cpp flang/lib/Frontend/FrontendActions.cpp flang/test/Driver/driver-help-hidden.f90 flang/test/Driver/driver-help.f90 flang/test/Driver/fast_math.f90 flang/test/Transforms/stack-arrays.f90 flang/tools/bbc/bbc.cpp flang/tools/tco/tco.cpp Index: flang/tools/tco/tco.cpp === --- flang/tools/tco/tco.cpp +++ flang/tools/tco/tco.cpp @@ -122,7 +122,7 @@ fir::createDefaultFIRCodeGenPassPipeline(pm); } else { // Run tco with O2 by default. - fir::createMLIRToLLVMPassPipeline(pm, llvm::OptimizationLevel::O2); + fir::createMLIRToLLVMPassPipeline(pm, false, llvm::OptimizationLevel::O2); } fir::addLLVMDialectToLLVMPass(pm, out.os()); } Index: flang/tools/bbc/bbc.cpp === --- flang/tools/bbc/bbc.cpp +++ flang/tools/bbc/bbc.cpp @@ -273,7 +273,8 @@ pm.addPass(std::make_unique()); // Add O2 optimizer pass pipeline. -fir::createDefaultFIROptimizerPassPipeline(pm, llvm::OptimizationLevel::O2); +fir::createDefaultFIROptimizerPassPipeline(pm, false, + llvm::OptimizationLevel::O2); } if (mlir::succeeded(pm.run(mlirModule))) { Index: flang/test/Transforms/stack-arrays.f90 === --- flang/test/Transforms/stack-arrays.f90 +++ flang/test/Transforms/stack-arrays.f90 @@ -1,5 +1,10 @@ ! RUN: %flang_fc1 -emit-fir %s -o - | fir-opt --array-value-copy | fir-opt --stack-arrays | FileCheck %s +! We have to check llvm ir here to force flang to run the whole mlir pipeline +! this is just to check that -fstack-arrays enables the stack-arrays pass so +! only check the first example +! RUN: %flang_fc1 -emit-llvm -o - -fstack-arrays %s | FileCheck --check-prefix=CHECK-LLVM %s + ! check simple array value copy case subroutine array_value_copy_simple(arr) integer, intent(inout) :: arr(4) @@ -14,6 +19,15 @@ ! CHECK: return ! CHECK-NEXT: } +! CHECK-LLVM: array_value_copy_simple +! CHECK-LLVM-NOT: malloc +! CHECK-LLVM-NOT: free +! CHECK-LLVM: alloca [4 x i32] +! CHECK-LLVM-NOT: malloc +! CHECK-LLVM-NOT: free +! CHECK-LLVM: ret void +! CHECK-LLVM-NEXT: } + ! check complex array value copy case module stuff type DerivedWithAllocatable Index: flang/test/Driver/fast_math.f90 === --- flang/test/Driver/fast_math.f90 +++ flang/test/Driver/fast_math.f90 @@ -1,25 +1,35 @@ ! Test for correct forwarding of fast-math flags from the compiler driver to the ! frontend driver -! -Ofast => -ffast-math -O3 +! -Ofast => -ffast-math -O3 -fstack-arrays ! RUN: %flang -Ofast -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST %s ! CHECK-OFAST: -fc1 ! CHECK-OFAST-SAME: -ffast-math +! CHECK-OFAST-SAME: -fstack-arrays ! CHECK-OFAST-SAME: -O3 -! TODO: update once -fstack-arays is added -! RUN: %flang -fstack-arrays -fsyntax-only %s -o %t 2>&1 \ +! RUN: %flang -fstack-arrays -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-STACK-ARRAYS %s -! CHECK-STACK-ARRAYS: warning: argument unused during compilation: '-fstack-arrays' +! CHECK-STACK-ARRAYS: -fc1 +! CHECK-STACK-ARRAYS-SAME: -fstack-arrays -! -Ofast -fno-fast-math => -O3 +! -Ofast -fno-fast-math => -O3 -fstack-arrays ! RUN: %flang -Ofast -fno-fast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-FAST %s ! CHECK-OFAST-NO-FAST: -fc1 ! CHECK-OFAST-NO-FAST-NOT: -ffast-math +! CHECK-OFAST-NO-FAST-SAME: -fstack-arrays ! CHECK-OFAST-NO-FAST-SAME: -O3 +! -Ofast -fno-stack-arrays -> -O3 -ffast-math +! RUN: %flang -Ofast -fno-stack-arrays -fsyntax-only -### %s -o %t 2>&1 \ +! RUN: | FileCheck --check-prefix=CHECK-OFAST-NO-SA %s +! CHECK-OFAST-NO-SA: -fc1 +! CHECK-OFAST-NO-SA-SAME: -ffast-math +! CHECK-OFAST-NO-SA-NOT: -fstack-arrays +! CHECK-OFAST-NO-SA-SAME: -O3 + ! -ffast-math => -ffast-math ! RUN: %flang -ffast-math -fsyntax-only -### %s -o %t 2>&1 \ ! RUN: | FileCheck --check-prefix=CHECK-FFAST %s Index: flang/test/Driver/driver-help.f90 === --- flang/test/Driver/driver-help.f90 +++ flang/test/Driver/driver-help.f90 @@ -45,10 +45,12 @@ ! HELP-NEXT: