Skip to content

Commit 0a6e948

Browse files
committed
Switch LLVM pointer ops to Ptr dialect Ops
1 parent 3612436 commit 0a6e948

File tree

101 files changed

+1240
-1484
lines changed

Some content is hidden

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

101 files changed

+1240
-1484
lines changed

mlir/include/mlir/Dialect/LLVMIR/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ mlir_tablegen(LLVMOpsAttrDefs.cpp.inc -gen-attrdef-defs
1313
-attrdefs-dialect=llvm)
1414
add_public_tablegen_target(MLIRLLVMOpsIncGen)
1515

16+
add_dependencies(MLIRLLVMOpsIncGen MLIRPtrOpsIncGen)
17+
1618
set(LLVM_TARGET_DEFINITIONS LLVMTypes.td)
1719
mlir_tablegen(LLVMTypes.h.inc -gen-typedef-decls -typedefs-dialect=llvm)
1820
mlir_tablegen(LLVMTypes.cpp.inc -gen-typedef-defs -typedefs-dialect=llvm)

mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td

+23
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#define LLVMIR_ATTRDEFS
1111

1212
include "mlir/Dialect/LLVMIR/LLVMDialect.td"
13+
include "mlir/Dialect/Ptr/IR/MemorySpaceInterfaces.td"
1314
include "mlir/IR/AttrTypeBase.td"
1415
include "mlir/IR/CommonAttrConstraints.td"
1516

@@ -997,4 +998,26 @@ def LLVM_TargetFeaturesAttr : LLVM_Attr<"TargetFeatures", "target_features">
997998
let genVerifyDecl = 1;
998999
}
9991000

1001+
//===----------------------------------------------------------------------===//
1002+
// AddressSpaceAttr
1003+
//===----------------------------------------------------------------------===//
1004+
1005+
def AddressSpaceAttr : LLVM_Attr<"AddressSpace", "address_space", [
1006+
DeclareAttrInterfaceMethods<MemorySpaceAttrInterface, [
1007+
"getModelOwner",
1008+
"getAddressSpace",
1009+
"getDefaultMemorySpace",
1010+
"isLoadableType",
1011+
"isStorableType",
1012+
"verifyCompatibleAtomicOp",
1013+
"verifyAtomicRMW",
1014+
"verifyAtomicAtomicCmpXchg",
1015+
"verifyPtrCast",
1016+
"verifyIntCastTypes",
1017+
"removeStoreBlockingUses"]>
1018+
]> {
1019+
let parameters = (ins DefaultValuedParameter<"unsigned", "0">:$as);
1020+
let assemblyFormat = "(`<` $as^ `>`)?";
1021+
}
1022+
10001023
#endif // LLVMIR_ATTRDEFS

mlir/include/mlir/Dialect/LLVMIR/LLVMAttrs.h

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#define MLIR_DIALECT_LLVMIR_LLVMATTRS_H_
1616

1717
#include "mlir/Dialect/LLVMIR/LLVMTypes.h"
18+
#include "mlir/Dialect/Ptr/IR/MemorySpaceInterfaces.h"
1819
#include "mlir/IR/OpImplementation.h"
1920
#include <optional>
2021

mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
1919
#include "mlir/Dialect/LLVMIR/LLVMInterfaces.h"
2020
#include "mlir/Dialect/LLVMIR/LLVMTypes.h"
21+
#include "mlir/Dialect/Ptr/IR/PtrOps.h"
2122
#include "mlir/IR/BuiltinOps.h"
2223
#include "mlir/IR/Dialect.h"
2324
#include "mlir/IR/OpDefinition.h"
@@ -84,6 +85,14 @@ class GEPArg : public PointerUnion<Value, GEPConstantIndex> {
8485

8586
using BaseT::operator=;
8687
};
88+
89+
using AtomicBinOp = ::mlir::ptr::AtomicBinOp;
90+
using AtomicRMWOp = ::mlir::ptr::AtomicRMWOp;
91+
using LoadOp = ::mlir::ptr::LoadOp;
92+
using StoreOp = ::mlir::ptr::StoreOp;
93+
using AddrSpaceCastOp = ::mlir::ptr::AddrSpaceCastOp;
94+
using IntToPtrOp = ::mlir::ptr::IntToPtrOp;
95+
using PtrToIntOp = ::mlir::ptr::PtrToIntOp;
8796
} // namespace LLVM
8897
} // namespace mlir
8998

@@ -232,7 +241,6 @@ template <typename IntT = int64_t>
232241
SmallVector<IntT> convertArrayToIndices(ArrayAttr attrs) {
233242
return convertArrayToIndices<IntT>(attrs.getValue());
234243
}
235-
236244
} // namespace LLVM
237245
} // namespace mlir
238246

mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td

+3
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ def LLVM_Dialect : Dialect {
9696
/// Register the attributes of this dialect.
9797
void registerAttributes();
9898
}];
99+
let dependentDialects = [
100+
"ptr::PtrDialect"
101+
];
99102
}
100103

101104
#endif // LLVMIR_DIALECT

mlir/include/mlir/Dialect/LLVMIR/LLVMEnums.td

-36
Original file line numberDiff line numberDiff line change
@@ -87,42 +87,6 @@ def AsmATTOrIntel : LLVM_EnumAttr<
8787
// Atomic Operations
8888
//===----------------------------------------------------------------------===//
8989

90-
def AtomicBinOpXchg : LLVM_EnumAttrCase<"xchg", "xchg", "Xchg", 0>;
91-
def AtomicBinOpAdd : LLVM_EnumAttrCase<"add", "add", "Add", 1>;
92-
def AtomicBinOpSub : LLVM_EnumAttrCase<"sub", "sub", "Sub", 2>;
93-
def AtomicBinOpAnd : LLVM_EnumAttrCase<"_and", "_and", "And", 3>;
94-
def AtomicBinOpNand : LLVM_EnumAttrCase<"nand", "nand", "Nand", 4>;
95-
def AtomicBinOpOr : LLVM_EnumAttrCase<"_or", "_or", "Or", 5>;
96-
def AtomicBinOpXor : LLVM_EnumAttrCase<"_xor", "_xor", "Xor", 6>;
97-
def AtomicBinOpMax : LLVM_EnumAttrCase<"max", "max", "Max", 7>;
98-
def AtomicBinOpMin : LLVM_EnumAttrCase<"min", "min", "Min", 8>;
99-
def AtomicBinOpUMax : LLVM_EnumAttrCase<"umax", "umax", "UMax", 9>;
100-
def AtomicBinOpUMin : LLVM_EnumAttrCase<"umin", "umin", "UMin", 10>;
101-
def AtomicBinOpFAdd : LLVM_EnumAttrCase<"fadd", "fadd", "FAdd", 11>;
102-
def AtomicBinOpFSub : LLVM_EnumAttrCase<"fsub", "fsub", "FSub", 12>;
103-
def AtomicBinOpFMax : LLVM_EnumAttrCase<"fmax", "fmax", "FMax", 13>;
104-
def AtomicBinOpFMin : LLVM_EnumAttrCase<"fmin", "fmin", "FMin", 14>;
105-
def AtomicBinOpUIncWrap : LLVM_EnumAttrCase<"uinc_wrap",
106-
"uinc_wrap", "UIncWrap", 15>;
107-
def AtomicBinOpUDecWrap : LLVM_EnumAttrCase<"udec_wrap",
108-
"udec_wrap", "UDecWrap", 16>;
109-
110-
// A sentinel value that has no MLIR counterpart.
111-
def AtomicBadBinOp : LLVM_EnumAttrCase<"", "", "BAD_BINOP", 0>;
112-
113-
def AtomicBinOp : LLVM_EnumAttr<
114-
"AtomicBinOp",
115-
"::llvm::AtomicRMWInst::BinOp",
116-
"llvm.atomicrmw binary operations",
117-
[AtomicBinOpXchg, AtomicBinOpAdd, AtomicBinOpSub, AtomicBinOpAnd,
118-
AtomicBinOpNand, AtomicBinOpOr, AtomicBinOpXor, AtomicBinOpMax,
119-
AtomicBinOpMin, AtomicBinOpUMax, AtomicBinOpUMin, AtomicBinOpFAdd,
120-
AtomicBinOpFSub, AtomicBinOpFMax, AtomicBinOpFMin, AtomicBinOpUIncWrap,
121-
AtomicBinOpUDecWrap],
122-
[AtomicBadBinOp]> {
123-
let cppNamespace = "::mlir::LLVM";
124-
}
125-
12690
def AtomicOrderingNotAtomic : LLVM_EnumAttrCase<"not_atomic",
12791
"not_atomic", "NotAtomic", 0>;
12892
def AtomicOrderingUnordered : LLVM_EnumAttrCase<"unordered",

mlir/include/mlir/Dialect/LLVMIR/LLVMInterfaces.td

+29-17
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ def AccessGroupOpInterface : OpInterface<"AccessGroupOpInterface"> {
160160
/*args=*/ (ins),
161161
/*methodBody=*/ [{}],
162162
/*defaultImpl=*/ [{
163-
auto op = cast<ConcreteOp>(this->getOperation());
164-
return op.getAccessGroupsAttr();
163+
return mlir::dyn_cast_or_null<ArrayAttr>(
164+
$_op->getAttr("access_groups"));
165165
}]
166166
>,
167167
InterfaceMethod<
@@ -171,8 +171,10 @@ def AccessGroupOpInterface : OpInterface<"AccessGroupOpInterface"> {
171171
/*args=*/ (ins "const ArrayAttr":$attr),
172172
/*methodBody=*/ [{}],
173173
/*defaultImpl=*/ [{
174-
auto op = cast<ConcreteOp>(this->getOperation());
175-
op.setAccessGroupsAttr(attr);
174+
if (attr)
175+
$_op->setAttr("access_groups", attr);
176+
else
177+
$_op->removeAttr("access_groups");
176178
}]
177179
>
178180
];
@@ -198,8 +200,8 @@ def AliasAnalysisOpInterface : OpInterface<"AliasAnalysisOpInterface"> {
198200
/*args=*/ (ins),
199201
/*methodBody=*/ [{}],
200202
/*defaultImpl=*/ [{
201-
auto op = cast<ConcreteOp>(this->getOperation());
202-
return op.getAliasScopesAttr();
203+
return mlir::dyn_cast_or_null<ArrayAttr>(
204+
$_op->getAttr("alias_scopes"));
203205
}]
204206
>,
205207
InterfaceMethod<
@@ -209,8 +211,10 @@ def AliasAnalysisOpInterface : OpInterface<"AliasAnalysisOpInterface"> {
209211
/*args=*/ (ins "const ArrayAttr":$attr),
210212
/*methodBody=*/ [{}],
211213
/*defaultImpl=*/ [{
212-
auto op = cast<ConcreteOp>(this->getOperation());
213-
op.setAliasScopesAttr(attr);
214+
if (attr)
215+
$_op->setAttr("alias_scopes", attr);
216+
else
217+
$_op->removeAttr("alias_scopes");
214218
}]
215219
>,
216220
InterfaceMethod<
@@ -220,8 +224,8 @@ def AliasAnalysisOpInterface : OpInterface<"AliasAnalysisOpInterface"> {
220224
/*args=*/ (ins),
221225
/*methodBody=*/ [{}],
222226
/*defaultImpl=*/ [{
223-
auto op = cast<ConcreteOp>(this->getOperation());
224-
return op.getNoaliasScopesAttr();
227+
return mlir::dyn_cast_or_null<ArrayAttr>(
228+
$_op->getAttr("noalias_scopes"));
225229
}]
226230
>,
227231
InterfaceMethod<
@@ -231,8 +235,10 @@ def AliasAnalysisOpInterface : OpInterface<"AliasAnalysisOpInterface"> {
231235
/*args=*/ (ins "const ArrayAttr":$attr),
232236
/*methodBody=*/ [{}],
233237
/*defaultImpl=*/ [{
234-
auto op = cast<ConcreteOp>(this->getOperation());
235-
op.setNoaliasScopesAttr(attr);
238+
if (attr)
239+
$_op->setAttr("noalias_scopes", attr);
240+
else
241+
$_op->removeAttr("noalias_scopes");
236242
}]
237243
>,
238244
InterfaceMethod<
@@ -242,8 +248,8 @@ def AliasAnalysisOpInterface : OpInterface<"AliasAnalysisOpInterface"> {
242248
/*args=*/ (ins),
243249
/*methodBody=*/ [{}],
244250
/*defaultImpl=*/ [{
245-
auto op = cast<ConcreteOp>(this->getOperation());
246-
return op.getTbaaAttr();
251+
return mlir::dyn_cast_or_null<ArrayAttr>(
252+
$_op->getAttr("tbaa"));
247253
}]
248254
>,
249255
InterfaceMethod<
@@ -253,16 +259,22 @@ def AliasAnalysisOpInterface : OpInterface<"AliasAnalysisOpInterface"> {
253259
/*args=*/ (ins "const ArrayAttr":$attr),
254260
/*methodBody=*/ [{}],
255261
/*defaultImpl=*/ [{
256-
auto op = cast<ConcreteOp>(this->getOperation());
257-
op.setTbaaAttr(attr);
262+
if (attr)
263+
$_op->setAttr("tbaa", attr);
264+
else
265+
$_op->removeAttr("tbaa");
258266
}]
259267
>,
260268
InterfaceMethod<
261269
/*desc=*/ "Returns a list of all pointer operands accessed by the "
262270
"operation",
263271
/*returnType=*/ "::llvm::SmallVector<::mlir::Value>",
264272
/*methodName=*/ "getAccessedOperands",
265-
/*args=*/ (ins)
273+
/*args=*/ (ins),
274+
/*methodBody=*/ [{}],
275+
/*defaultImpl=*/ [{
276+
return {};
277+
}]
266278
>
267279
];
268280
}

mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td

+2-2
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ class LLVM_Op<string mnemonic, list<Trait> traits = []> :
250250
class LLVM_MemAccessOpBase<string mnemonic, list<Trait> traits = []> :
251251
LLVM_Op<mnemonic, !listconcat([
252252
DeclareOpInterfaceMethods<AccessGroupOpInterface>,
253-
DeclareOpInterfaceMethods<AliasAnalysisOpInterface>], traits)>,
253+
DeclareOpInterfaceMethods<AliasAnalysisOpInterface, ["getAccessedOperands"]>], traits)>,
254254
LLVM_MemOpPatterns {
255255
dag aliasAttrs = (ins OptionalAttr<LLVM_AccessGroupArrayAttr>:$access_groups,
256256
OptionalAttr<LLVM_AliasScopeArrayAttr>:$alias_scopes,
@@ -294,7 +294,7 @@ class LLVM_IntrOpBase<Dialect dialect, string opName, string enumName,
294294
!if(!gt(requiresAccessGroup, 0),
295295
[DeclareOpInterfaceMethods<AccessGroupOpInterface>], []),
296296
!if(!gt(requiresAliasAnalysis, 0),
297-
[DeclareOpInterfaceMethods<AliasAnalysisOpInterface>], []),
297+
[DeclareOpInterfaceMethods<AliasAnalysisOpInterface, ["getAccessedOperands"]>], []),
298298
!if(!gt(requiresFastmath, 0),
299299
[DeclareOpInterfaceMethods<FastmathFlagsInterface>], []),
300300
traits)>,

0 commit comments

Comments
 (0)