[llvm-branch-commits] [flang] 6986167 - [flang] Submodules

2022-12-05 Thread V Donaldson via llvm-branch-commits

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

2022-12-05 Thread Joshua Batista via llvm-branch-commits

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

2022-12-05 Thread Joshua Batista via llvm-branch-commits

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