Skip to content

Commit c691555

Browse files
authored
Merge branch 'main' into x86-ptest-no-fpu
2 parents 70c5bba + c8187f6 commit c691555

File tree

203 files changed

+19357
-2334
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

203 files changed

+19357
-2334
lines changed

clang-tools-extra/test/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,7 @@ add_lit_testsuite(check-clang-extra "Running clang-tools-extra/test"
8787

8888
add_lit_testsuites(CLANG-EXTRA ${CMAKE_CURRENT_SOURCE_DIR}
8989
DEPENDS ${CLANG_TOOLS_TEST_DEPS}
90+
SKIP "^clang-doc"
9091
)
92+
93+
add_subdirectory(clang-doc)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Specialize the clang-doc target to avoid building other projects
2+
add_lit_testsuite(check-clang-extra-clang-doc "Running clang-doc tests"
3+
${CMAKE_CURRENT_BINARY_DIR}
4+
EXCLUDE_FROM_CHECK_ALL
5+
DEPENDS clang-doc
6+
DEPENDS ${LLVM_UTILS_DEPS}
7+
)

flang/include/flang/Optimizer/Dialect/FIROps.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
2121
#include "mlir/Interfaces/LoopLikeInterface.h"
2222
#include "mlir/Interfaces/SideEffectInterfaces.h"
23+
#include "mlir/Interfaces/ViewLikeInterface.h"
2324

2425
namespace fir {
2526

flang/include/flang/Optimizer/Dialect/FIROps.td

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
include "mlir/Dialect/Arith/IR/ArithBase.td"
1818
include "mlir/Dialect/Arith/IR/ArithOpsInterfaces.td"
1919
include "mlir/Dialect/LLVMIR/LLVMAttrDefs.td"
20+
include "mlir/Interfaces/ViewLikeInterface.td"
2021
include "flang/Optimizer/Dialect/CUF/Attributes/CUFAttr.td"
2122
include "flang/Optimizer/Dialect/FIRDialect.td"
2223
include "flang/Optimizer/Dialect/FIRTypes.td"
@@ -2828,7 +2829,8 @@ def fir_VolatileCastOp : fir_SimpleOneResultOp<"volatile_cast", [Pure]> {
28282829
let hasFolder = 1;
28292830
}
28302831

2831-
def fir_ConvertOp : fir_SimpleOneResultOp<"convert", [NoMemoryEffect]> {
2832+
def fir_ConvertOp
2833+
: fir_SimpleOneResultOp<"convert", [NoMemoryEffect, ViewLikeOpInterface]> {
28322834
let summary = "encapsulates all Fortran entity type conversions";
28332835

28342836
let description = [{
@@ -2866,6 +2868,7 @@ def fir_ConvertOp : fir_SimpleOneResultOp<"convert", [NoMemoryEffect]> {
28662868
static bool isPointerCompatible(mlir::Type ty);
28672869
static bool canBeConverted(mlir::Type inType, mlir::Type outType);
28682870
static bool areVectorsCompatible(mlir::Type inTy, mlir::Type outTy);
2871+
mlir::Value getViewSource() { return getValue(); }
28692872
}];
28702873
let hasCanonicalizer = 1;
28712874
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//===- FIROpenACCOpsInterfaces.h --------------------------------*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// This file contains external operation interfaces for FIR.
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
#ifndef FLANG_OPTIMIZER_OPENACC_FIROPENACC_OPS_INTERFACES_H_
14+
#define FLANG_OPTIMIZER_OPENACC_FIROPENACC_OPS_INTERFACES_H_
15+
16+
#include "mlir/Dialect/OpenACC/OpenACC.h"
17+
18+
namespace fir {
19+
class DeclareOp;
20+
} // namespace fir
21+
22+
namespace hlfir {
23+
class DeclareOp;
24+
class DesignateOp;
25+
} // namespace hlfir
26+
27+
namespace fir::acc {
28+
29+
template <typename Op>
30+
struct PartialEntityAccessModel
31+
: public mlir::acc::PartialEntityAccessOpInterface::ExternalModel<
32+
PartialEntityAccessModel<Op>, Op> {
33+
mlir::Value getBaseEntity(mlir::Operation *op) const;
34+
35+
// Default implementation - returns false (partial view)
36+
bool isCompleteView(mlir::Operation *op) const { return false; }
37+
};
38+
39+
// Full specializations for declare operations
40+
template <>
41+
struct PartialEntityAccessModel<fir::DeclareOp>
42+
: public mlir::acc::PartialEntityAccessOpInterface::ExternalModel<
43+
PartialEntityAccessModel<fir::DeclareOp>, fir::DeclareOp> {
44+
mlir::Value getBaseEntity(mlir::Operation *op) const;
45+
bool isCompleteView(mlir::Operation *op) const;
46+
};
47+
48+
template <>
49+
struct PartialEntityAccessModel<hlfir::DeclareOp>
50+
: public mlir::acc::PartialEntityAccessOpInterface::ExternalModel<
51+
PartialEntityAccessModel<hlfir::DeclareOp>, hlfir::DeclareOp> {
52+
mlir::Value getBaseEntity(mlir::Operation *op) const;
53+
bool isCompleteView(mlir::Operation *op) const;
54+
};
55+
56+
} // namespace fir::acc
57+
58+
#endif // FLANG_OPTIMIZER_OPENACC_FIROPENACC_OPS_INTERFACES_H_

flang/lib/Optimizer/Builder/TemporaryStorage.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -258,13 +258,9 @@ void fir::factory::AnyVariableStack::pushValue(mlir::Location loc,
258258
fir::FirOpBuilder &builder,
259259
mlir::Value variable) {
260260
hlfir::Entity entity{variable};
261-
mlir::Type storageElementType =
262-
hlfir::getFortranElementType(retValueBox.getType());
263-
auto [box, maybeCleanUp] =
264-
hlfir::convertToBox(loc, builder, entity, storageElementType);
261+
mlir::Value box =
262+
hlfir::genVariableBox(loc, builder, entity, entity.getBoxType());
265263
fir::runtime::genPushDescriptor(loc, builder, opaquePtr, fir::getBase(box));
266-
if (maybeCleanUp)
267-
(*maybeCleanUp)();
268264
}
269265

270266
void fir::factory::AnyVariableStack::resetFetchPosition(

flang/lib/Optimizer/OpenACC/Support/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS)
22

33
add_flang_library(FIROpenACCSupport
44
FIROpenACCAttributes.cpp
5+
FIROpenACCOpsInterfaces.cpp
56
FIROpenACCTypeInterfaces.cpp
67
RegisterOpenACCExtensions.cpp
78

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
//===-- FIROpenACCOpsInterfaces.cpp ---------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// Implementation of external operation interfaces for FIR.
10+
//
11+
//===----------------------------------------------------------------------===//
12+
13+
#include "flang/Optimizer/OpenACC/Support/FIROpenACCOpsInterfaces.h"
14+
15+
#include "flang/Optimizer/Dialect/FIROps.h"
16+
#include "flang/Optimizer/HLFIR/HLFIROps.h"
17+
18+
namespace fir::acc {
19+
20+
template <>
21+
mlir::Value PartialEntityAccessModel<fir::ArrayCoorOp>::getBaseEntity(
22+
mlir::Operation *op) const {
23+
return mlir::cast<fir::ArrayCoorOp>(op).getMemref();
24+
}
25+
26+
template <>
27+
mlir::Value PartialEntityAccessModel<fir::CoordinateOp>::getBaseEntity(
28+
mlir::Operation *op) const {
29+
return mlir::cast<fir::CoordinateOp>(op).getRef();
30+
}
31+
32+
template <>
33+
mlir::Value PartialEntityAccessModel<hlfir::DesignateOp>::getBaseEntity(
34+
mlir::Operation *op) const {
35+
return mlir::cast<hlfir::DesignateOp>(op).getMemref();
36+
}
37+
38+
mlir::Value PartialEntityAccessModel<fir::DeclareOp>::getBaseEntity(
39+
mlir::Operation *op) const {
40+
return mlir::cast<fir::DeclareOp>(op).getStorage();
41+
}
42+
43+
bool PartialEntityAccessModel<fir::DeclareOp>::isCompleteView(
44+
mlir::Operation *op) const {
45+
// Return false (partial view) only if storage is present
46+
// Return true (complete view) if storage is absent
47+
return !getBaseEntity(op);
48+
}
49+
50+
mlir::Value PartialEntityAccessModel<hlfir::DeclareOp>::getBaseEntity(
51+
mlir::Operation *op) const {
52+
return mlir::cast<hlfir::DeclareOp>(op).getStorage();
53+
}
54+
55+
bool PartialEntityAccessModel<hlfir::DeclareOp>::isCompleteView(
56+
mlir::Operation *op) const {
57+
// Return false (partial view) only if storage is present
58+
// Return true (complete view) if storage is absent
59+
return !getBaseEntity(op);
60+
}
61+
62+
} // namespace fir::acc

flang/lib/Optimizer/OpenACC/Support/RegisterOpenACCExtensions.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111
//===----------------------------------------------------------------------===//
1212

1313
#include "flang/Optimizer/OpenACC/Support/RegisterOpenACCExtensions.h"
14+
1415
#include "flang/Optimizer/Dialect/FIRDialect.h"
16+
#include "flang/Optimizer/Dialect/FIROps.h"
1517
#include "flang/Optimizer/Dialect/FIRType.h"
18+
#include "flang/Optimizer/HLFIR/HLFIRDialect.h"
19+
#include "flang/Optimizer/HLFIR/HLFIROps.h"
20+
#include "flang/Optimizer/OpenACC/Support/FIROpenACCOpsInterfaces.h"
1621
#include "flang/Optimizer/OpenACC/Support/FIROpenACCTypeInterfaces.h"
1722

1823
namespace fir::acc {
@@ -37,7 +42,24 @@ void registerOpenACCExtensions(mlir::DialectRegistry &registry) {
3742

3843
fir::LLVMPointerType::attachInterface<
3944
OpenACCPointerLikeModel<fir::LLVMPointerType>>(*ctx);
45+
46+
fir::ArrayCoorOp::attachInterface<
47+
PartialEntityAccessModel<fir::ArrayCoorOp>>(*ctx);
48+
fir::CoordinateOp::attachInterface<
49+
PartialEntityAccessModel<fir::CoordinateOp>>(*ctx);
50+
fir::DeclareOp::attachInterface<PartialEntityAccessModel<fir::DeclareOp>>(
51+
*ctx);
4052
});
53+
54+
// Register HLFIR operation interfaces
55+
registry.addExtension(
56+
+[](mlir::MLIRContext *ctx, hlfir::hlfirDialect *dialect) {
57+
hlfir::DesignateOp::attachInterface<
58+
PartialEntityAccessModel<hlfir::DesignateOp>>(*ctx);
59+
hlfir::DeclareOp::attachInterface<
60+
PartialEntityAccessModel<hlfir::DeclareOp>>(*ctx);
61+
});
62+
4163
registerAttrsExtensions(registry);
4264
}
4365

flang/test/HLFIR/order_assignments/forall-pointer-assignment-codegen.fir

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,8 @@ func.func @test_need_to_save_rhs(%n: i64, %arg1: !fir.box<!fir.array<?x!ptr_wrap
9191
// CHECK: %[[VAL_21:.*]] = hlfir.designate %[[VAL_6]]#0 (%[[VAL_20]]) : (!fir.box<!fir.array<?x!fir.type<ptr_wrapper{p:!fir.box<!fir.ptr<!fir.type<t{i:i64}>>>}>>>, i64) -> !fir.ref<!fir.type<ptr_wrapper{p:!fir.box<!fir.ptr<!fir.type<t{i:i64}>>>}>>
9292
// CHECK: %[[VAL_22:.*]] = hlfir.designate %[[VAL_21]]{"p"} {fortran_attrs = #fir.var_attrs<pointer>} : (!fir.ref<!fir.type<ptr_wrapper{p:!fir.box<!fir.ptr<!fir.type<t{i:i64}>>>}>>) -> !fir.ref<!fir.box<!fir.ptr<!fir.type<t{i:i64}>>>>
9393
// CHECK: %[[VAL_23:.*]] = fir.load %[[VAL_22]] : !fir.ref<!fir.box<!fir.ptr<!fir.type<t{i:i64}>>>>
94-
// CHECK: %[[VAL_24:.*]] = fir.box_addr %[[VAL_23]] : (!fir.box<!fir.ptr<!fir.type<t{i:i64}>>>) -> !fir.ptr<!fir.type<t{i:i64}>>
95-
// CHECK: %[[VAL_25:.*]] = fir.embox %[[VAL_24]] : (!fir.ptr<!fir.type<t{i:i64}>>) -> !fir.box<!fir.type<t{i:i64}>>
96-
// CHECK: %[[VAL_26:.*]] = fir.convert %[[VAL_25]] : (!fir.box<!fir.type<t{i:i64}>>) -> !fir.box<none>
97-
// CHECK: fir.call @_FortranAPushDescriptor(%[[VAL_16]], %[[VAL_26]]) : (!fir.llvm_ptr<i8>, !fir.box<none>) -> ()
94+
// CHECK: %[[VAL_24:.*]] = fir.convert %[[VAL_23]] : (!fir.box<!fir.ptr<!fir.type<t{i:i64}>>>) -> !fir.box<none>
95+
// CHECK: fir.call @_FortranAPushDescriptor(%[[VAL_16]], %[[VAL_24]]) : (!fir.llvm_ptr<i8>, !fir.box<none>) -> ()
9896
// CHECK: }
9997
// CHECK: %[[VAL_27:.*]] = fir.convert %[[VAL_4]] : (i64) -> index
10098
// CHECK: %[[VAL_28:.*]] = fir.convert %[[VAL_0]] : (i64) -> index

0 commit comments

Comments
 (0)