Author: abataev Date: Fri Dec 29 09:36:15 2017 New Revision: 321558 URL: http://llvm.org/viewvc/llvm-project?rev=321558&view=rev Log: [OPENMP] Initial support for `-fopenmp-simd` option.
Added basic support for `-fopenmp-simd` options. Modified: cfe/trunk/include/clang/Basic/LangOptions.def cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Driver/ToolChains/Clang.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/lib/Frontend/InitPreprocessor.cpp cfe/trunk/test/OpenMP/driver.c cfe/trunk/test/OpenMP/linking.c cfe/trunk/test/OpenMP/predefined_macro.c Modified: cfe/trunk/include/clang/Basic/LangOptions.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.def?rev=321558&r1=321557&r2=321558&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/LangOptions.def (original) +++ cfe/trunk/include/clang/Basic/LangOptions.def Fri Dec 29 09:36:15 2017 @@ -194,6 +194,7 @@ LANGOPT(NativeHalfArgsAndReturns, 1, 0, LANGOPT(HalfArgsAndReturns, 1, 0, "half args and returns") LANGOPT(CUDA , 1, 0, "CUDA") LANGOPT(OpenMP , 32, 0, "OpenMP support and version of OpenMP (31, 40 or 45)") +LANGOPT(OpenMPSimd , 1, 0, "Use SIMD only OpenMP support.") LANGOPT(OpenMPUseTLS , 1, 0, "Use TLS for threadprivates or runtime calls") LANGOPT(OpenMPIsDevice , 1, 0, "Generate code only for OpenMP target device") LANGOPT(RenderScript , 1, 0, "RenderScript") Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=321558&r1=321557&r2=321558&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Fri Dec 29 09:36:15 2017 @@ -1369,12 +1369,16 @@ def fopenmp_use_tls : Flag<["-"], "fopen def fnoopenmp_use_tls : Flag<["-"], "fnoopenmp-use-tls">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>; def fopenmp_targets_EQ : CommaJoined<["-"], "fopenmp-targets=">, Flags<[DriverOption, CC1Option]>, HelpText<"Specify comma-separated list of triples OpenMP offloading targets to be supported">; -def fopenmp_dump_offload_linker_script : Flag<["-"], "fopenmp-dump-offload-linker-script">, Group<f_Group>, +def fopenmp_dump_offload_linker_script : Flag<["-"], "fopenmp-dump-offload-linker-script">, Group<f_Group>, Flags<[NoArgumentUnused]>; def fopenmp_relocatable_target : Flag<["-"], "fopenmp-relocatable-target">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>, HelpText<"OpenMP target code is compiled as relocatable using the -c flag. For OpenMP targets the code is relocatable by default.">; def fnoopenmp_relocatable_target : Flag<["-"], "fnoopenmp-relocatable-target">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>, HelpText<"Do not compile OpenMP target code as relocatable.">; +def fopenmp_simd : Flag<["-"], "fopenmp-simd">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>, + HelpText<"Emit OpenMP code only for SIMD-based constructs.">; +def fno_openmp_simd : Flag<["-"], "fno-openmp-simd">, Group<f_Group>, Flags<[CC1Option, NoArgumentUnused]>, + HelpText<"Disable OpenMP code for SIMD-based constructs.">; def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Group<f_Group>; def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group<f_Group>; def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">; Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=321558&r1=321557&r2=321558&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Fri Dec 29 09:36:15 2017 @@ -3901,6 +3901,10 @@ void Clang::ConstructJob(Compilation &C, // semantic analysis, etc. break; } + } else { + Args.AddLastArg(CmdArgs, options::OPT_fopenmp_simd, + options::OPT_fno_openmp_simd); + Args.AddAllArgs(CmdArgs, options::OPT_fopenmp_version_EQ); } const SanitizerArgs &Sanitize = getToolChain().getSanitizerArgs(); Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=321558&r1=321557&r2=321558&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Dec 29 09:36:15 2017 @@ -2407,16 +2407,22 @@ static void ParseLangArgs(LangOptions &O // Check if -fopenmp is specified. Opts.OpenMP = Args.hasArg(options::OPT_fopenmp) ? 1 : 0; + // Check if -fopenmp-simd is specified. + Opts.OpenMPSimd = !Opts.OpenMP && Args.hasFlag(options::OPT_fopenmp_simd, + options::OPT_fno_openmp_simd, + /*Default=*/false); Opts.OpenMPUseTLS = Opts.OpenMP && !Args.hasArg(options::OPT_fnoopenmp_use_tls); Opts.OpenMPIsDevice = Opts.OpenMP && Args.hasArg(options::OPT_fopenmp_is_device); - if (Opts.OpenMP) { - int Version = - getLastArgIntValue(Args, OPT_fopenmp_version_EQ, Opts.OpenMP, Diags); - if (Version != 0) + if (Opts.OpenMP || Opts.OpenMPSimd) { + if (int Version = + getLastArgIntValue(Args, OPT_fopenmp_version_EQ, + Opts.OpenMPSimd ? 45 : Opts.OpenMP, Diags)) Opts.OpenMP = Version; + else if (Opts.OpenMPSimd) + Opts.OpenMP = 45; // Provide diagnostic when a given target is not expected to be an OpenMP // device or host. if (!Opts.OpenMPIsDevice) { Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=321558&r1=321557&r2=321558&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original) +++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Fri Dec 29 09:36:15 2017 @@ -1021,8 +1021,8 @@ static void InitializePredefinedMacros(c Builder.defineMacro("_OPENMP", "201511"); break; default: - // Default version is OpenMP 3.1 - Builder.defineMacro("_OPENMP", "201107"); + // Default version is OpenMP 3.1, in Simd only mode - 4.5 + Builder.defineMacro("_OPENMP", LangOpts.OpenMPSimd ? "201511" : "201107"); break; } Modified: cfe/trunk/test/OpenMP/driver.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/driver.c?rev=321558&r1=321557&r2=321558&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/driver.c (original) +++ cfe/trunk/test/OpenMP/driver.c Fri Dec 29 09:36:15 2017 @@ -15,15 +15,26 @@ // RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=31 | FileCheck --check-prefix=CHECK-DEFAULT-VERSION %s // CHECK-DEFAULT-VERSION: #define _OPENMP 201107 +// RUN: %clang %s -c -E -dM -fopenmp-simd | FileCheck --check-prefix=CHECK-SIMD-DEFAULT-VERSION %s +// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=1 | FileCheck --check-prefix=CHECK-SIMD-DEFAULT-VERSION %s +// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=0 | FileCheck --check-prefix=CHECK-SIMD-DEFAULT-VERSION %s +// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=100 | FileCheck --check-prefix=CHECK-SIMD-DEFAULT-VERSION %s +// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=31 | FileCheck --check-prefix=CHECK-SIMD-DEFAULT-VERSION %s +// CHECK-SIMD-DEFAULT-VERSION: #define _OPENMP 201511 + // RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=40 | FileCheck --check-prefix=CHECK-40-VERSION %s +// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=40 | FileCheck --check-prefix=CHECK-40-VERSION %s // CHECK-40-VERSION: #define _OPENMP 201307 // RUN: %clang %s -c -E -dM -fopenmp=libomp -fopenmp-version=45 | FileCheck --check-prefix=CHECK-45-VERSION %s +// RUN: %clang %s -c -E -dM -fopenmp-simd -fopenmp-version=45 | FileCheck --check-prefix=CHECK-45-VERSION %s // CHECK-45-VERSION: #define _OPENMP 201511 // RUN: %clang %s -c -E -dM -fopenmp-version=1 | FileCheck --check-prefix=CHECK-VERSION %s // RUN: %clang %s -c -E -dM -fopenmp-version=31 | FileCheck --check-prefix=CHECK-VERSION %s // RUN: %clang %s -c -E -dM -fopenmp-version=40 | FileCheck --check-prefix=CHECK-VERSION %s // RUN: %clang %s -c -E -dM -fopenmp-version=45 | FileCheck --check-prefix=CHECK-VERSION %s +// RUN: %clang %s -c -E -dM -fopenmp-version=45 | FileCheck --check-prefix=CHECK-VERSION %s +// RUN: %clang %s -c -E -dM -fopenmp-simd -fno-openmp-simd -fopenmp-version=45 | FileCheck --check-prefix=CHECK-VERSION %s // CHECK-VERSION-NOT: #define _OPENMP Modified: cfe/trunk/test/OpenMP/linking.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/linking.c?rev=321558&r1=321557&r2=321558&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/linking.c (original) +++ cfe/trunk/test/OpenMP/linking.c Fri Dec 29 09:36:15 2017 @@ -23,6 +23,11 @@ // CHECK-GOMP-LD-32: "{{.*}}ld{{(.exe)?}}" // CHECK-GOMP-LD-32: "-lgomp" "-lrt" // CHECK-GOMP-LD-32: "-lpthread" "-lc" + +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 -fopenmp-simd -target i386-unknown-linux -rtlib=platform | FileCheck --check-prefix SIMD-ONLY2 %s +// SIMD-ONLY2-NOT: lgomp +// SIMD-ONLY2-NOT: lomp +// SIMD-ONLY2-NOT: liomp // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -fopenmp=libgomp -target x86_64-unknown-linux -rtlib=platform \ @@ -79,6 +84,11 @@ // CHECK-MSVC-LINK-64-SAME: -nodefaultlib:vcompd.lib // CHECK-MSVC-LINK-64-SAME: -libpath:{{.+}}/../lib // CHECK-MSVC-LINK-64-SAME: -defaultlib:libomp.lib + +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 -fopenmp-simd -target x86_64-msvc-win32 -rtlib=platform | FileCheck --check-prefix SIMD-ONLY11 %s +// SIMD-ONLY11-NOT: libiomp +// SIMD-ONLY11-NOT: libomp +// SIMD-ONLY11-NOT: libgomp // // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ // RUN: -fopenmp=libiomp5 -target x86_64-msvc-win32 -rtlib=platform \ Modified: cfe/trunk/test/OpenMP/predefined_macro.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/predefined_macro.c?rev=321558&r1=321557&r2=321558&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/predefined_macro.c (original) +++ cfe/trunk/test/OpenMP/predefined_macro.c Fri Dec 29 09:36:15 2017 @@ -1,5 +1,8 @@ // RUN: %clang_cc1 -fopenmp -verify -DFOPENMP -o - %s // RUN: %clang_cc1 -verify -o - %s + +// RUN: %clang_cc1 -fopenmp-simd -verify -DFOPENMP -o - %s +// RUN: %clang_cc1 -verify -o - %s // expected-no-diagnostics #ifdef FOPENMP // -fopenmp option is specified _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits