[llvm-branch-commits] [flang] 6986167 - [flang] Submodules
Author: V Donaldson Date: 2022-12-05T13:46:36-08:00 New Revision: 6986167ea3116fce7281a6ce1c1be88ef9b0be27 URL: https://github.com/llvm/llvm-project/commit/6986167ea3116fce7281a6ce1c1be88ef9b0be27 DIFF: https://github.com/llvm/llvm-project/commit/6986167ea3116fce7281a6ce1c1be88ef9b0be27.diff LOG: [flang] Submodules A submodule is a program unit that may contain the implementions of procedures declared in a parent module or an intermediate ancestor submodule. Processing for the equivalence groups and variables declared in a submodule scope is similar to existing processing for the equivalence groups and variables in module and procedure scopes. However, module and procedure scopes are tied directly to code in the Pre-FIR Tree (PFT), whereas processing for a submodule must have access to a module scope that, while guaranteed to be present in a .mod file, is not guaranteed to be in the PFT. This difference is accommodated by tying all scope processing to a front end scope, independent of the PFT. Function scopes that can be processed on the fly are done that way; the resulting variable information is never stored. Module and submodule scopes whose symbol information may be needed during lowering of any number of module procedures are instead cached on first use, and reused as needed. These changes are a direct extension of current code. All module and submodule variables in scope are processed, whether referenced or not. A possible alternative would be to instead process symbols only when first used. While this could ultimately be beneficial, such an approach must account for the presence of equivalence groups. That information is not currently available for on-the-fly variable processing. Some additional changes are needed to include submodules in places where modules must be considered, and to include separate module procedures in places where other subprogram variants are considered. There are also some incidental bug fixes, such as for variables in equivalence groups used in namelist groups, which have a loose association with scope processing code. Added: flang/test/Lower/submodule.f90 Modified: flang/include/flang/Lower/ConvertVariable.h flang/include/flang/Lower/PFTBuilder.h flang/lib/Lower/Bridge.cpp flang/lib/Lower/ConvertVariable.cpp flang/lib/Lower/IO.cpp flang/lib/Lower/Mangler.cpp flang/lib/Lower/PFTBuilder.cpp flang/test/Lower/pre-fir-tree01.f90 flang/test/Lower/pre-fir-tree02.f90 flang/test/Lower/pre-fir-tree06.f90 flang/test/Lower/pre-fir-tree07.f90 Removed: diff --git a/flang/include/flang/Lower/ConvertVariable.h b/flang/include/flang/Lower/ConvertVariable.h index a715d546e682a..ee8ef168a07d0 100644 --- a/flang/include/flang/Lower/ConvertVariable.h +++ b/flang/include/flang/Lower/ConvertVariable.h @@ -50,6 +50,11 @@ using AggregateStoreMap = llvm::DenseMap; void instantiateVariable(AbstractConverter &, const pft::Variable &var, SymMap &symMap, AggregateStoreMap &storeMap); +/// Return the compiler-generated name of a static namelist variable descriptor. +std::string +globalNamelistDescriptorName(Fortran::lower::AbstractConverter &converter, + const Fortran::semantics::Symbol &sym); + /// Create a fir::GlobalOp given a module variable definition. This is intended /// to be used when lowering a module definition, not when lowering variables /// used from a module. For used variables instantiateVariable must directly be diff --git a/flang/include/flang/Lower/PFTBuilder.h b/flang/include/flang/Lower/PFTBuilder.h index 933d50a0c015b..be3f9f3b10593 100644 --- a/flang/include/flang/Lower/PFTBuilder.h +++ b/flang/include/flang/Lower/PFTBuilder.h @@ -37,7 +37,6 @@ struct ModuleLikeUnit; struct FunctionLikeUnit; using EvaluationList = std::list; -using LabelEvalMap = llvm::DenseMap; /// Provide a variant like container that can hold references. It can hold /// constant or mutable references. It is used in the other classes to provide @@ -445,7 +444,7 @@ struct Variable { const semantics::Symbol *namingSymbol; /// Compiler generated symbol with the aggregate initial value if any. const semantics::Symbol *initialValueSymbol = nullptr; -/// Is this a global aggregate ? +/// Is this a global aggregate? bool isGlobalAggregate; }; @@ -485,10 +484,10 @@ struct Variable { return std::visit([](const auto &x) { return x.isGlobal(); }, var); } - /// Is this a module variable ? - bool isModuleVariable() const { + /// Is this a module or submodule variable? + bool isModuleOrSubmodule() const { const semantics::Scope *scope = getOwningScope(); -return scope && scope->IsModule(); +return scope && scope->kind() == Fortran::semantics::Scope::Kind::Module; } const Fortran::semantics::Scope *getOwningScope() const { @@ -522,7 +521,7
[llvm-branch-commits] [clang] a3490e3 - add floor library function
Author: Joshua Batista Date: 2022-12-01T12:36:14-08:00 New Revision: a3490e31eb3a56cef42c8179caecfe031f0432d1 URL: https://github.com/llvm/llvm-project/commit/a3490e31eb3a56cef42c8179caecfe031f0432d1 DIFF: https://github.com/llvm/llvm-project/commit/a3490e31eb3a56cef42c8179caecfe031f0432d1.diff LOG: add floor library function This change exposes the floor library function for HLSL, excluding long, int, and long long doubles. Floor is supported for all scalar, vector, and matrix types. Long and long long double support is missing in this patch because those types don't exist in HLSL. Int is missing because the floor function only works on floating type arguments. The full documentation of the HLSL floor function is available here: https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-floor Differential Revision: https://reviews.llvm.org/D139137 Added: clang/test/CodeGenHLSL/builtins/floor.hlsl Modified: clang/lib/Headers/hlsl/hlsl_intrinsics.h Removed: diff --git a/clang/lib/Headers/hlsl/hlsl_intrinsics.h b/clang/lib/Headers/hlsl/hlsl_intrinsics.h index 35891d80d5953..d48f12b472054 100644 --- a/clang/lib/Headers/hlsl/hlsl_intrinsics.h +++ b/clang/lib/Headers/hlsl/hlsl_intrinsics.h @@ -101,6 +101,35 @@ double3 ceil(double3); __attribute__((clang_builtin_alias(__builtin_elementwise_ceil))) double4 ceil(double4); +// floor builtins +#ifdef __HLSL_ENABLE_16_BIT +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) half floor(half); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +half2 floor(half2); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +half3 floor(half3); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +half4 floor(half4); +#endif + +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) float +floor(float); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +float2 floor(float2); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +float3 floor(float3); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +float4 floor(float4); + +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) double +floor(double); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +double2 floor(double2); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +double3 floor(double3); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +double4 floor(double4); + // cos builtins #ifdef __HLSL_ENABLE_16_BIT __attribute__((clang_builtin_alias(__builtin_elementwise_cos))) half cos(half); diff --git a/clang/test/CodeGenHLSL/builtins/floor.hlsl b/clang/test/CodeGenHLSL/builtins/floor.hlsl new file mode 100644 index 0..38834a146206f --- /dev/null +++ b/clang/test/CodeGenHLSL/builtins/floor.hlsl @@ -0,0 +1,79 @@ +// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ +// RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ +// RUN: -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s +// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ +// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ +// RUN: -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF + +using hlsl::floor; + +// CHECK: define noundef half @ +// CHECK: call half @llvm.floor.f16( +// NO_HALF: define noundef float @"?test_floor_half@@YA$halff@$halff@@Z"( +// NO_HALF: call float @llvm.floor.f32(float %0) +half test_floor_half ( half p0 ) { + return floor ( p0 ); +} +// CHECK: define noundef <2 x half> @ +// CHECK: call <2 x half> @llvm.floor.v2f16( +// NO_HALF: define noundef <2 x float> @"?test_floor_half2@@YAT?$__vector@$halff@$01@__clang@@T12@@Z"( +// NO_HALF: call <2 x float> @llvm.floor.v2f32( +half2 test_floor_half2 ( half2 p0 ) { + return floor ( p0 ); +} +// CHECK: define noundef <3 x half> @ +// CHECK: call <3 x half> @llvm.floor.v3f16( +// NO_HALF: define noundef <3 x float> @"?test_floor_half3@@YAT?$__vector@$halff@$02@__clang@@T12@@Z"( +// NO_HALF: call <3 x float> @llvm.floor.v3f32( +half3 test_floor_half3 ( half3 p0 ) { + return floor ( p0 ); +} +// CHECK: define noundef <4 x half> @ +// CHECK: call <4 x half> @llvm.floor.v4f16( +// NO_HALF: define noundef <4 x float> @"?test_floor_half4@@YAT?$__vector@$halff@$03@__clang@@T12@@Z"( +// NO_HALF: call <4 x float> @llvm.floor.v4f32( +half4 test_floor_half4 ( half4 p0 ) { + return floor ( p0 ); +} + +// CHECK: define noundef float @ +// CHECK: call float @llvm.floor.f32( +float test_floor_float ( float p0 ) { + return floor ( p0 ); +} +// CHECK: define noundef <2 x float> @ +// CHECK: call <2 x float> @llvm.floor.v2f32( +float2 test_floor_float2 ( float2 p0 ) { + return floor ( p0 ); +} +// CHECK: define noundef <3 x float> @ +// CHECK: call <3 x float> @llvm.floor.v3f32(
[llvm-branch-commits] [clang] d1d10c0 - update with clang format
Author: Joshua Batista Date: 2022-12-05T13:06:18-08:00 New Revision: d1d10c03116766fcd983d42f8d1275b0bc4b8508 URL: https://github.com/llvm/llvm-project/commit/d1d10c03116766fcd983d42f8d1275b0bc4b8508 DIFF: https://github.com/llvm/llvm-project/commit/d1d10c03116766fcd983d42f8d1275b0bc4b8508.diff LOG: update with clang format Added: Modified: clang/lib/Headers/hlsl/hlsl_intrinsics.h Removed: diff --git a/clang/lib/Headers/hlsl/hlsl_intrinsics.h b/clang/lib/Headers/hlsl/hlsl_intrinsics.h index d48f12b472054..e5a6869e625ab 100644 --- a/clang/lib/Headers/hlsl/hlsl_intrinsics.h +++ b/clang/lib/Headers/hlsl/hlsl_intrinsics.h @@ -103,7 +103,8 @@ double4 ceil(double4); // floor builtins #ifdef __HLSL_ENABLE_16_BIT -__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) half floor(half); +__attribute__((clang_builtin_alias(__builtin_elementwise_floor))) +half floor(half); __attribute__((clang_builtin_alias(__builtin_elementwise_floor))) half2 floor(half2); __attribute__((clang_builtin_alias(__builtin_elementwise_floor))) ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits