Skip to content

Commit f5eebe3

Browse files
SusanTanIanWood1
authored andcommitted
[mlir][acc] Remove declare attribute verification (llvm#137676)
The part that verifies the declare attributes are preserved in the verifier can fail easily during the FIR lowering pipeline. For example, during FIR lowering to FIRCG, fir.declare can be removed. Thus, any fir.declare that has acc.declare attributes will cause a verifier failure. Since the declare attribute only existed to simplify the effort of locating acc declare enter and exit points, which can be easily replaced by a def-use chain traversal, we are considering removing the verification of declare attributes in this MR. Example: ``` %1 = fir.alloca !fir.array<10xf32> {bindc_name = "arr", uniq_name = "_QMmmFsubEarr"} %2 = fir.shape %c10 : (index) -> !fir.shape<1> %3 = fir.declare %1(%2) {acc.declare = #acc.declare<dataClause = acc_create>, uniq_name = "_QMmmFsubEarr"} : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> !fir.ref<!fir.array<10xf32>> %4 = acc.create varPtr(%3 : !fir.ref<!fir.array<10xf32>>) -> !fir.ref<!fir.array<10xf32>> {name = "arr"} %5 = acc.declare_enter dataOperands(%4 : !fir.ref<!fir.array<10xf32>>) ``` the acc.declare_enter itself is enough to identify when the data region starts.
1 parent 76c1655 commit f5eebe3

File tree

1 file changed

+0
-26
lines changed

1 file changed

+0
-26
lines changed

mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp

-26
Original file line numberDiff line numberDiff line change
@@ -2910,32 +2910,6 @@ checkDeclareOperands(Op &op, const mlir::ValueRange &operands,
29102910
assert(dataClauseOptional.has_value() &&
29112911
"declare operands can only be data entry operations which must have "
29122912
"dataClause");
2913-
2914-
// If varPtr has no defining op - there is nothing to check further.
2915-
if (!var.getDefiningOp())
2916-
continue;
2917-
2918-
// Check that the varPtr has a declare attribute.
2919-
auto declareAttribute{
2920-
var.getDefiningOp()->getAttr(mlir::acc::getDeclareAttrName())};
2921-
if (!declareAttribute)
2922-
return op.emitError(
2923-
"expect declare attribute on variable in declare operation");
2924-
2925-
auto declAttr = mlir::cast<mlir::acc::DeclareAttr>(declareAttribute);
2926-
if (declAttr.getDataClause().getValue() != dataClauseOptional.value())
2927-
return op.emitError(
2928-
"expect matching declare attribute on variable in declare operation");
2929-
2930-
// If the variable is marked with implicit attribute, the matching declare
2931-
// data action must also be marked implicit. The reverse is not checked
2932-
// since implicit data action may be inserted to do actions like updating
2933-
// device copy, in which case the variable is not necessarily implicitly
2934-
// declare'd.
2935-
if (declAttr.getImplicit() &&
2936-
declAttr.getImplicit() != acc::getImplicitFlag(operand.getDefiningOp()))
2937-
return op.emitError(
2938-
"implicitness must match between declare op and flag on variable");
29392913
}
29402914

29412915
return success();

0 commit comments

Comments
 (0)