-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[mlir][acc] Remove declare attribute verification #137676
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-mlir-openacc @llvm/pr-subscribers-openacc Author: Susan Tan (ス-ザン タン) (SusanTan) ChangesThe 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:
|
@llvm/pr-subscribers-mlir Author: Susan Tan (ス-ザン タン) (SusanTan) ChangesThe 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:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense to me. When I added this verification code - the attribute primarily served as a way to simplify looking up the information about acc declare
without scanning the IR. However, the verifier is too strict in this regard.
Your change seems reasonable to me.
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.
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.
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.
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.
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.
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:
the acc.declare_enter itself is enough to identify when the data region starts.