Skip to content

Commit 4639ebb

Browse files
checkpoint
1 parent e27bb5b commit 4639ebb

File tree

5 files changed

+15
-27
lines changed

5 files changed

+15
-27
lines changed

flang/include/flang/Optimizer/Dialect/FIRTypes.td

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -366,23 +366,20 @@ def fir_ReferenceType : FIR_Type<"Reference", "ref"> {
366366

367367
let parameters = (ins
368368
"mlir::Type":$eleTy,
369-
DefaultValuedParameter<"bool", "false">:$isVol,
370-
DefaultValuedParameter<"bool", "false">:$isAsync);
369+
DefaultValuedParameter<"bool", "false">:$isVol);
371370

372371
let skipDefaultBuilders = 1;
373372

374373
let builders = [
375-
TypeBuilderWithInferredContext<(ins "mlir::Type":$elementType, CArg<"bool", "false">:$isVol, CArg<"bool", "false">:$isAsync), [{
376-
return Base::get(elementType.getContext(), elementType, isVol, isAsync);
374+
TypeBuilderWithInferredContext<(ins "mlir::Type":$elementType, CArg<"bool", "false">:$isVol), [{
375+
return Base::get(elementType.getContext(), elementType, isVol);
377376
}]>,
378377
];
379378

380379
let extraClassDeclaration = [{
381380
mlir::Type getElementType() const { return getEleTy(); }
382381
bool isVolatile() const { return (bool)getIsVol(); }
383-
bool isAsync() const { return (bool)getIsAsync(); }
384382
static llvm::StringRef getVolatileKeyword() { return "volatile"; }
385-
static llvm::StringRef getAsyncKeyword() { return "async"; }
386383
}];
387384

388385
let genVerifyDecl = 1;

flang/lib/Lower/CallInterface.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1112,7 +1112,6 @@ class Fortran::lower::CallInterfaceImpl {
11121112
if (obj.attrs.test(Attrs::Value))
11131113
isValueAttr = true; // TODO: do we want an mlir::Attribute as well?
11141114
if (obj.attrs.test(Attrs::Volatile)) {
1115-
// TODO(loc, "VOLATILE in procedure interface");
11161115
addMLIRAttr(fir::getVolatileAttrName());
11171116
}
11181117
// obj.attrs.test(Attrs::Asynchronous) does not impact the way the argument

flang/lib/Lower/ConvertExprToHLFIR.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,7 @@ class HlfirDesignatorBuilder {
224224
/*namedConstantSectionsAreAlwaysContiguous=*/false))
225225
return fir::BoxType::get(resultValueType);
226226

227-
// TODO: handle async references
228-
bool isVolatile = false, isAsync = false;
227+
bool isVolatile = false;
229228

230229
// Check if the base type is volatile
231230
if (partInfo.base.has_value()) {
@@ -247,13 +246,13 @@ class HlfirDesignatorBuilder {
247246
if (isVolatileSymbol(designatorNode.GetLastSymbol()))
248247
isVolatile = true;
249248
}
250-
249+
251250
// If it's a reference to a ref, account for it
252251
if (auto refTy = mlir::dyn_cast<fir::ReferenceType>(resultValueType))
253252
resultValueType = refTy.getEleTy();
254253

255254
// Other designators can be handled as raw addresses.
256-
return fir::ReferenceType::get(resultValueType, isVolatile, isAsync);
255+
return fir::ReferenceType::get(resultValueType, isVolatile);
257256
}
258257

259258
template <typename T>
@@ -298,7 +297,6 @@ class HlfirDesignatorBuilder {
298297
partInfo.componentName, partInfo.componentShape, partInfo.subscripts,
299298
partInfo.substring, partInfo.complexPart, partInfo.resultShape,
300299
partInfo.typeParams, attributes);
301-
llvm::dbgs() << __FILE__ << ":" << __LINE__ << "\n" << designate << "\n" << designatorType << "\n";
302300
if (auto elementalAddrOp = getVectorSubscriptElementAddrOp())
303301
builder.setInsertionPoint(*elementalAddrOp);
304302
return mlir::cast<fir::FortranVariableOpInterface>(
@@ -1829,7 +1827,6 @@ class HlfirBuilder {
18291827
/*complexPart=*/std::nullopt,
18301828
/*shape=*/mlir::Value{}, /*typeParams=*/mlir::ValueRange{},
18311829
fir::FortranVariableFlagsAttr{});
1832-
llvm::dbgs() << __LINE__ << " " << newParent << "\n";
18331830
currentParent = hlfir::EntityWithAttributes{newParent};
18341831
}
18351832
valuesAndParents.emplace_back(
@@ -1853,6 +1850,7 @@ class HlfirBuilder {
18531850
assert(compType && "failed to retrieve component type");
18541851
mlir::Value compShape =
18551852
designatorBuilder.genComponentShape(sym, compType);
1853+
mlir::Type designatorType = builder.getRefType(compType, isVolatile);
18561854

18571855
mlir::Type fieldElemType = hlfir::getFortranElementType(compType);
18581856
llvm::SmallVector<mlir::Value, 1> typeParams;
@@ -1873,7 +1871,6 @@ class HlfirBuilder {
18731871
// Convert component symbol attributes to variable attributes.
18741872
fir::FortranVariableFlagsAttr attrs =
18751873
Fortran::lower::translateSymbolAttributes(builder.getContext(), sym);
1876-
mlir::Type designatorType = builder.getRefType(compType, isVolatile);
18771874

18781875
// Get the component designator.
18791876
auto lhs = builder.create<hlfir::DesignateOp>(
@@ -1882,7 +1879,6 @@ class HlfirBuilder {
18821879
/*substring=*/mlir::ValueRange{},
18831880
/*complexPart=*/std::nullopt,
18841881
/*shape=*/compShape, typeParams, attrs);
1885-
llvm::dbgs() << __LINE__ << " " << lhs << "\n";
18861882

18871883
if (attrs && bitEnumContainsAny(attrs.getFlags(),
18881884
fir::FortranVariableFlagsEnum::pointer)) {

flang/lib/Optimizer/Builder/HLFIRTools.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -810,9 +810,7 @@ mlir::Type hlfir::getVariableElementType(hlfir::Entity variable) {
810810
return fir::BoxType::get(eleTy);
811811
}
812812
const bool isVolatile = fir::isa_volatile_ref_type(variable.getType());
813-
auto newty = fir::ReferenceType::get(eleTy, isVolatile);
814-
llvm::dbgs() << __FILE__ << ":" << __LINE__ << "\n" << variable << " " << variable.getType() << " newty:" << newty << " isvol:" << isVolatile << "\n";
815-
return newty;
813+
return fir::ReferenceType::get(eleTy, isVolatile);
816814
}
817815

818816
mlir::Type hlfir::getEntityElementType(hlfir::Entity entity) {

flang/lib/Optimizer/Dialect/FIRType.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,41 +1057,39 @@ unsigned fir::RecordType::getFieldIndex(llvm::StringRef ident) {
10571057
// ReferenceType
10581058
//===----------------------------------------------------------------------===//
10591059

1060-
// `ref` `<` type (, volatile)? (, async)? `>`
1060+
// `ref` `<` type (`, volatile` $volatile^)? (`, async` $async^)? `>`
10611061
mlir::Type fir::ReferenceType::parse(mlir::AsmParser &parser) {
10621062
if (parser.parseLess())
10631063
return {};
1064+
10641065
mlir::Type eleTy;
10651066
if (parser.parseType(eleTy))
10661067
return {};
1068+
10671069
bool isVolatile = false;
1068-
bool isAsync = false;
1069-
while (parser.parseOptionalComma()) {
1070+
if (parser.parseOptionalComma()) {
10701071
if (parser.parseOptionalKeyword(getVolatileKeyword())) {
10711072
isVolatile = true;
1072-
} else if (parser.parseOptionalKeyword(getAsyncKeyword())) {
1073-
isAsync = true;
10741073
} else {
10751074
return {};
10761075
}
10771076
}
1077+
10781078
if (parser.parseGreater())
10791079
return {};
1080-
return ReferenceType::get(eleTy, isVolatile, isAsync);
1080+
return ReferenceType::get(eleTy, isVolatile);
10811081
}
10821082

10831083
void fir::ReferenceType::print(mlir::AsmPrinter &printer) const {
10841084
printer << "<" << getEleTy();
10851085
if (isVolatile())
10861086
printer << ", volatile";
1087-
if (isAsync())
1088-
printer << ", async";
10891087
printer << '>';
10901088
}
10911089

10921090
llvm::LogicalResult fir::ReferenceType::verify(
10931091
llvm::function_ref<mlir::InFlightDiagnostic()> emitError,
1094-
mlir::Type eleTy, bool isVolatile, bool isAsync) {
1092+
mlir::Type eleTy, bool isVolatile) {
10951093
if (mlir::isa<ShapeType, ShapeShiftType, SliceType, FieldType, LenType,
10961094
ReferenceType, TypeDescType>(eleTy))
10971095
return emitError() << "cannot build a reference to type: " << eleTy << '\n';

0 commit comments

Comments
 (0)