Skip to content

Commit ceb00c0

Browse files
[mlir][acc] Clean up TypedValue builders (#126968)
When MappableType was introduced alongside PointerLikeType, the data clause operation builders were duplicated to accept a `TypedValue` of one of the two type options. However, the underlying builder takes a `Value` and this difference is not relevant for it. The only difference is that `varType` is set differently depending on the type. Having two duplicated builders can lead to clunky building since a `Value` must always be cast to one of the two options. Thus, simply clean this up - the verifier already checks that it is a type that implements one of the two interfaces.
1 parent c5a4512 commit ceb00c0

File tree

1 file changed

+32
-46
lines changed

1 file changed

+32
-46
lines changed

mlir/include/mlir/Dialect/OpenACC/OpenACCOps.td

Lines changed: 32 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -562,53 +562,33 @@ class OpenACC_DataEntryOp<string mnemonic, string clause, string extraDescriptio
562562
let hasVerifier = 1;
563563

564564
let builders = [
565-
OpBuilder<(ins "::mlir::TypedValue<::mlir::acc::PointerLikeType>":$varPtr,
566-
"bool":$structured, "bool":$implicit,
567-
CArg<"::mlir::ValueRange", "{}">:$bounds),
568-
[{
569-
build($_builder, $_state, varPtr.getType(), varPtr,
570-
/*varType=*/::mlir::TypeAttr::get(
571-
varPtr.getType().getElementType()),
572-
/*varPtrPtr=*/{}, bounds, /*asyncOperands=*/{},
573-
/*asyncOperandsDeviceType=*/nullptr,
574-
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
575-
/*structured=*/$_builder.getBoolAttr(structured),
576-
/*implicit=*/$_builder.getBoolAttr(implicit), /*name=*/nullptr);
577-
}]>,
578-
OpBuilder<(ins "::mlir::TypedValue<::mlir::acc::PointerLikeType>":$varPtr,
579-
"bool":$structured, "bool":$implicit,
580-
"const ::llvm::Twine &":$name,
581-
CArg<"::mlir::ValueRange", "{}">:$bounds),
582-
[{
583-
build($_builder, $_state, varPtr.getType(), varPtr,
584-
/*varType=*/::mlir::TypeAttr::get(
585-
varPtr.getType().getElementType()),
586-
/*varPtrPtr=*/{}, bounds, /*asyncOperands=*/{},
587-
/*asyncOperandsDeviceType=*/nullptr,
588-
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
589-
/*structured=*/$_builder.getBoolAttr(structured),
590-
/*implicit=*/$_builder.getBoolAttr(implicit),
591-
/*name=*/$_builder.getStringAttr(name));
592-
}]>,
593-
OpBuilder<(ins "::mlir::TypedValue<::mlir::acc::MappableType>":$var,
565+
OpBuilder<(ins "::mlir::Value":$var,
594566
"bool":$structured, "bool":$implicit,
595567
CArg<"::mlir::ValueRange", "{}">:$bounds),
596568
[{
569+
auto ptrLikeTy = ::mlir::dyn_cast<::mlir::acc::PointerLikeType>(
570+
var.getType());
597571
build($_builder, $_state, var.getType(), var,
598-
/*varType=*/::mlir::TypeAttr::get(var.getType()),
572+
/*varType=*/ptrLikeTy ?
573+
::mlir::TypeAttr::get(ptrLikeTy.getElementType()) :
574+
::mlir::TypeAttr::get(var.getType()),
599575
/*varPtrPtr=*/{}, bounds, /*asyncOperands=*/{},
600576
/*asyncOperandsDeviceType=*/nullptr,
601577
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
602578
/*structured=*/$_builder.getBoolAttr(structured),
603579
/*implicit=*/$_builder.getBoolAttr(implicit), /*name=*/nullptr);
604580
}]>,
605-
OpBuilder<(ins "::mlir::TypedValue<::mlir::acc::MappableType>":$var,
581+
OpBuilder<(ins "::mlir::Value":$var,
606582
"bool":$structured, "bool":$implicit,
607583
"const ::llvm::Twine &":$name,
608584
CArg<"::mlir::ValueRange", "{}">:$bounds),
609585
[{
586+
auto ptrLikeTy = ::mlir::dyn_cast<::mlir::acc::PointerLikeType>(
587+
var.getType());
610588
build($_builder, $_state, var.getType(), var,
611-
/*varType=*/::mlir::TypeAttr::get(var.getType()),
589+
/*varType=*/ptrLikeTy ?
590+
::mlir::TypeAttr::get(ptrLikeTy.getElementType()) :
591+
::mlir::TypeAttr::get(var.getType()),
612592
/*varPtrPtr=*/{}, bounds, /*asyncOperands=*/{},
613593
/*asyncOperandsDeviceType=*/nullptr,
614594
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
@@ -942,28 +922,34 @@ class OpenACC_DataExitOpWithVarPtr<string mnemonic, string clause>
942922
}];
943923

944924
let builders = [
945-
OpBuilder<(ins "::mlir::TypedValue<::mlir::acc::PointerLikeType>":$accPtr,
946-
"::mlir::TypedValue<::mlir::acc::PointerLikeType>":$varPtr,
925+
OpBuilder<(ins "::mlir::Value":$accVar,
926+
"::mlir::Value":$var,
947927
"bool":$structured, "bool":$implicit,
948928
CArg<"::mlir::ValueRange", "{}">:$bounds),
949929
[{
950-
build($_builder, $_state, accPtr, varPtr,
951-
/*varType=*/::mlir::TypeAttr::get(
952-
varPtr.getType().getElementType()),
930+
auto ptrLikeTy = ::mlir::dyn_cast<::mlir::acc::PointerLikeType>(
931+
var.getType());
932+
build($_builder, $_state, accVar, var,
933+
/*varType=*/ptrLikeTy ?
934+
::mlir::TypeAttr::get(ptrLikeTy.getElementType()) :
935+
::mlir::TypeAttr::get(var.getType()),
953936
bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
954937
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
955938
/*structured=*/$_builder.getBoolAttr(structured),
956939
/*implicit=*/$_builder.getBoolAttr(implicit), /*name=*/nullptr);
957940
}]>,
958-
OpBuilder<(ins "::mlir::TypedValue<::mlir::acc::PointerLikeType>":$accPtr,
959-
"::mlir::TypedValue<::mlir::acc::PointerLikeType>":$varPtr,
941+
OpBuilder<(ins "::mlir::Value":$accVar,
942+
"::mlir::Value":$var,
960943
"bool":$structured, "bool":$implicit,
961944
"const ::llvm::Twine &":$name,
962945
CArg<"::mlir::ValueRange", "{}">:$bounds),
963946
[{
964-
build($_builder, $_state, accPtr, varPtr,
965-
/*varType=*/::mlir::TypeAttr::get(
966-
varPtr.getType().getElementType()),
947+
auto ptrLikeTy = ::mlir::dyn_cast<::mlir::acc::PointerLikeType>(
948+
var.getType());
949+
build($_builder, $_state, accVar, var,
950+
/*varType=*/ptrLikeTy ?
951+
::mlir::TypeAttr::get(ptrLikeTy.getElementType()) :
952+
::mlir::TypeAttr::get(var.getType()),
967953
bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
968954
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
969955
/*structured=*/$_builder.getBoolAttr(structured),
@@ -996,22 +982,22 @@ class OpenACC_DataExitOpNoVarPtr<string mnemonic, string clause> :
996982
}];
997983

998984
let builders = [
999-
OpBuilder<(ins "::mlir::TypedValue<::mlir::acc::PointerLikeType>":$accPtr,
985+
OpBuilder<(ins "::mlir::Value":$accVar,
1000986
"bool":$structured, "bool":$implicit,
1001987
CArg<"::mlir::ValueRange", "{}">:$bounds),
1002988
[{
1003-
build($_builder, $_state, accPtr,
989+
build($_builder, $_state, accVar,
1004990
bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
1005991
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
1006992
/*structured=*/$_builder.getBoolAttr(structured),
1007993
/*implicit=*/$_builder.getBoolAttr(implicit), /*name=*/nullptr);
1008994
}]>,
1009-
OpBuilder<(ins "::mlir::TypedValue<::mlir::acc::PointerLikeType>":$accPtr,
995+
OpBuilder<(ins "::mlir::Value":$accVar,
1010996
"bool":$structured, "bool":$implicit,
1011997
"const ::llvm::Twine &":$name,
1012998
CArg<"::mlir::ValueRange", "{}">:$bounds),
1013999
[{
1014-
build($_builder, $_state, accPtr,
1000+
build($_builder, $_state, accVar,
10151001
bounds, /*asyncOperands=*/{}, /*asyncOperandsDeviceType=*/nullptr,
10161002
/*asyncOnly=*/nullptr, /*dataClause=*/nullptr,
10171003
/*structured=*/$_builder.getBoolAttr(structured),

0 commit comments

Comments
 (0)