Skip to content

Commit d299a4b

Browse files
author
git apple-llvm automerger
committed
Merge commit 'b28a296cdfb6' from llvm.org/main into next
2 parents 874d73f + b28a296 commit d299a4b

File tree

12 files changed

+57
-559
lines changed

12 files changed

+57
-559
lines changed

mlir/include/mlir/Conversion/LLVMCommon/MemRefBuilder.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,6 @@ class MemRefDescriptor : public StructBuilder {
120120
static unsigned getNumUnpackedValues(MemRefType type);
121121

122122
private:
123-
bool useOpaquePointers();
124-
125123
// Cached index type.
126124
Type indexType;
127125
};

mlir/include/mlir/Conversion/Passes.td

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -746,10 +746,7 @@ def FinalizeMemRefToLLVMConversionPass :
746746
"bool",
747747
/*default=*/"false",
748748
"Use generic allocation and deallocation functions instead of the "
749-
"classic 'malloc', 'aligned_alloc' and 'free' functions">,
750-
Option<"useOpaquePointers", "use-opaque-pointers", "bool",
751-
/*default=*/"true", "Generate LLVM IR using opaque pointers "
752-
"instead of typed pointers">
749+
"classic 'malloc', 'aligned_alloc' and 'free' functions">
753750
];
754751
}
755752

mlir/include/mlir/Dialect/LLVMIR/FunctionCallUtils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ LLVM::LLVMFuncOp lookupOrCreateGenericAlignedAllocFn(ModuleOp moduleOp,
6161
Type indexType,
6262
bool opaquePointers);
6363
LLVM::LLVMFuncOp lookupOrCreateGenericFreeFn(ModuleOp moduleOp,
64-
bool opaquePointers);
64+
bool opaquePointers = true);
6565
LLVM::LLVMFuncOp lookupOrCreateMemRefCopyFn(ModuleOp moduleOp, Type indexType,
6666
Type unrankedDescriptorType);
6767

mlir/lib/Conversion/LLVMCommon/MemRefBuilder.cpp

Lines changed: 13 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ MemRefDescriptor MemRefDescriptor::fromStaticShape(
5353

5454
// Extract all strides and offsets and verify they are static.
5555
auto [strides, offset] = getStridesAndOffset(type);
56-
assert(!ShapedType::isDynamic(offset) &&
57-
"expected static offset");
56+
assert(!ShapedType::isDynamic(offset) && "expected static offset");
5857
assert(!llvm::any_of(strides, ShapedType::isDynamic) &&
5958
"expected static strides");
6059

@@ -134,27 +133,19 @@ Value MemRefDescriptor::size(OpBuilder &builder, Location loc, Value pos,
134133
int64_t rank) {
135134
auto arrayTy = LLVM::LLVMArrayType::get(indexType, rank);
136135

137-
LLVM::LLVMPointerType indexPtrTy;
138-
LLVM::LLVMPointerType arrayPtrTy;
139-
140-
if (useOpaquePointers()) {
141-
arrayPtrTy = indexPtrTy = LLVM::LLVMPointerType::get(builder.getContext());
142-
} else {
143-
indexPtrTy = LLVM::LLVMPointerType::get(indexType);
144-
arrayPtrTy = LLVM::LLVMPointerType::get(arrayTy);
145-
}
136+
auto ptrTy = LLVM::LLVMPointerType::get(builder.getContext());
146137

147138
// Copy size values to stack-allocated memory.
148139
auto one = createIndexAttrConstant(builder, loc, indexType, 1);
149140
auto sizes = builder.create<LLVM::ExtractValueOp>(
150141
loc, value, llvm::ArrayRef<int64_t>({kSizePosInMemRefDescriptor}));
151-
auto sizesPtr = builder.create<LLVM::AllocaOp>(loc, arrayPtrTy, arrayTy, one,
142+
auto sizesPtr = builder.create<LLVM::AllocaOp>(loc, ptrTy, arrayTy, one,
152143
/*alignment=*/0);
153144
builder.create<LLVM::StoreOp>(loc, sizes, sizesPtr);
154145

155146
// Load an return size value of interest.
156-
auto resultPtr = builder.create<LLVM::GEPOp>(
157-
loc, indexPtrTy, arrayTy, sizesPtr, ArrayRef<LLVM::GEPArg>{0, pos});
147+
auto resultPtr = builder.create<LLVM::GEPOp>(loc, ptrTy, arrayTy, sizesPtr,
148+
ArrayRef<LLVM::GEPArg>{0, pos});
158149
return builder.create<LLVM::LoadOp>(loc, indexType, resultPtr);
159150
}
160151

@@ -273,10 +264,6 @@ unsigned MemRefDescriptor::getNumUnpackedValues(MemRefType type) {
273264
return 3 + 2 * type.getRank();
274265
}
275266

276-
bool MemRefDescriptor::useOpaquePointers() {
277-
return getElementPtrType().isOpaque();
278-
}
279-
280267
//===----------------------------------------------------------------------===//
281268
// MemRefDescriptorView implementation.
282269
//===----------------------------------------------------------------------===//
@@ -413,44 +400,20 @@ void UnrankedMemRefDescriptor::computeSizes(
413400
Value UnrankedMemRefDescriptor::allocatedPtr(
414401
OpBuilder &builder, Location loc, Value memRefDescPtr,
415402
LLVM::LLVMPointerType elemPtrType) {
416-
417-
Value elementPtrPtr;
418-
if (elemPtrType.isOpaque())
419-
elementPtrPtr = memRefDescPtr;
420-
else
421-
elementPtrPtr = builder.create<LLVM::BitcastOp>(
422-
loc, LLVM::LLVMPointerType::get(elemPtrType), memRefDescPtr);
423-
424-
return builder.create<LLVM::LoadOp>(loc, elemPtrType, elementPtrPtr);
403+
return builder.create<LLVM::LoadOp>(loc, elemPtrType, memRefDescPtr);
425404
}
426405

427406
void UnrankedMemRefDescriptor::setAllocatedPtr(
428407
OpBuilder &builder, Location loc, Value memRefDescPtr,
429408
LLVM::LLVMPointerType elemPtrType, Value allocatedPtr) {
430-
Value elementPtrPtr;
431-
if (elemPtrType.isOpaque())
432-
elementPtrPtr = memRefDescPtr;
433-
else
434-
elementPtrPtr = builder.create<LLVM::BitcastOp>(
435-
loc, LLVM::LLVMPointerType::get(elemPtrType), memRefDescPtr);
436-
437-
builder.create<LLVM::StoreOp>(loc, allocatedPtr, elementPtrPtr);
409+
builder.create<LLVM::StoreOp>(loc, allocatedPtr, memRefDescPtr);
438410
}
439411

440412
static std::pair<Value, Type>
441413
castToElemPtrPtr(OpBuilder &builder, Location loc, Value memRefDescPtr,
442414
LLVM::LLVMPointerType elemPtrType) {
443-
Value elementPtrPtr;
444-
Type elemPtrPtrType;
445-
if (elemPtrType.isOpaque()) {
446-
elementPtrPtr = memRefDescPtr;
447-
elemPtrPtrType = LLVM::LLVMPointerType::get(builder.getContext());
448-
} else {
449-
elemPtrPtrType = LLVM::LLVMPointerType::get(elemPtrType);
450-
elementPtrPtr =
451-
builder.create<LLVM::BitcastOp>(loc, elemPtrPtrType, memRefDescPtr);
452-
}
453-
return {elementPtrPtr, elemPtrPtrType};
415+
auto elemPtrPtrType = LLVM::LLVMPointerType::get(builder.getContext());
416+
return {memRefDescPtr, elemPtrPtrType};
454417
}
455418

456419
Value UnrankedMemRefDescriptor::alignedPtr(
@@ -483,16 +446,8 @@ Value UnrankedMemRefDescriptor::offsetBasePtr(
483446
auto [elementPtrPtr, elemPtrPtrType] =
484447
castToElemPtrPtr(builder, loc, memRefDescPtr, elemPtrType);
485448

486-
Value offsetGep =
487-
builder.create<LLVM::GEPOp>(loc, elemPtrPtrType, elemPtrType,
488-
elementPtrPtr, ArrayRef<LLVM::GEPArg>{2});
489-
490-
if (!elemPtrType.isOpaque()) {
491-
offsetGep = builder.create<LLVM::BitcastOp>(
492-
loc, LLVM::LLVMPointerType::get(typeConverter.getIndexType()),
493-
offsetGep);
494-
}
495-
return offsetGep;
449+
return builder.create<LLVM::GEPOp>(loc, elemPtrPtrType, elemPtrType,
450+
elementPtrPtr, ArrayRef<LLVM::GEPArg>{2});
496451
}
497452

498453
Value UnrankedMemRefDescriptor::offset(OpBuilder &builder, Location loc,
@@ -521,19 +476,8 @@ Value UnrankedMemRefDescriptor::sizeBasePtr(
521476
Type indexTy = typeConverter.getIndexType();
522477
Type structTy = LLVM::LLVMStructType::getLiteral(
523478
indexTy.getContext(), {elemPtrType, elemPtrType, indexTy, indexTy});
524-
Value structPtr;
525-
if (elemPtrType.isOpaque()) {
526-
structPtr = memRefDescPtr;
527-
} else {
528-
Type structPtrTy = LLVM::LLVMPointerType::get(structTy);
529-
structPtr =
530-
builder.create<LLVM::BitcastOp>(loc, structPtrTy, memRefDescPtr);
531-
}
532-
533-
auto resultType = elemPtrType.isOpaque()
534-
? LLVM::LLVMPointerType::get(indexTy.getContext())
535-
: LLVM::LLVMPointerType::get(indexTy);
536-
return builder.create<LLVM::GEPOp>(loc, resultType, structTy, structPtr,
479+
auto resultType = LLVM::LLVMPointerType::get(builder.getContext());
480+
return builder.create<LLVM::GEPOp>(loc, resultType, structTy, memRefDescPtr,
537481
ArrayRef<LLVM::GEPArg>{0, 3});
538482
}
539483

0 commit comments

Comments
 (0)