Integrate LLVM at llvm/llvm-project@c50faffb4eec
Updates LLVM usage to match
[c50faffb4eec](https://github.com/llvm/llvm-project/commit/c50faffb4eec)
PiperOrigin-RevId: 393825475
diff --git a/SUBMODULE_VERSIONS.txt b/SUBMODULE_VERSIONS.txt
index 8af113a..9584d61 100644
--- a/SUBMODULE_VERSIONS.txt
+++ b/SUBMODULE_VERSIONS.txt
@@ -4,7 +4,7 @@
aa533abfd4232b01f9e57041d70114d5a77e6de0 third_party/googletest
88b845dee001723c4a0db1fe5477de735b6d3bb0 third_party/liburing
acd6f6f014c25e46363e718381e0b35205df2d83 third_party/libyaml
-3383ec5fdd04be095678e0bd8bd1ce341f4f9294 third_party/llvm-project
+c50faffb4eeca004109a1591e56cd7cac2ed1083 third_party/llvm-project
21edc2e26a736871748c4ddd8acfb6bfb0da9041 third_party/mlir-hlo
3f701faace7addc75d16dea8a6cd769fa5b3f260 third_party/musl
4c7697dbe973ed01ae6fbec37d186ebd05982e1f third_party/pybind11
diff --git a/iree/compiler/Bindings/Native/Transforms/WrapEntryPoints.cpp b/iree/compiler/Bindings/Native/Transforms/WrapEntryPoints.cpp
index 586b289..3f17b8e 100644
--- a/iree/compiler/Bindings/Native/Transforms/WrapEntryPoints.cpp
+++ b/iree/compiler/Bindings/Native/Transforms/WrapEntryPoints.cpp
@@ -62,14 +62,17 @@
// name in its public definition.
auto publicName = entryFuncOp.getName().str();
auto privateName = "_" + publicName;
- entryFuncOp.setName(privateName);
+ mlir::StringAttr privateNameAttr =
+ mlir::StringAttr::get(entryFuncOp.getContext(), privateName);
+ entryFuncOp.setName(privateNameAttr);
entryFuncOp.setPrivate();
// Create the wrapper function that conforms to the IREE native ABI and
// marshals arguments/results to the original function.
auto wrapperFuncOp = createWrapperFunc(entryFuncOp);
wrapperFuncOp.setPublic();
- wrapperFuncOp.setName(publicName);
+ wrapperFuncOp.setName(
+ mlir::StringAttr::get(entryFuncOp.getContext(), publicName));
moduleOp.insert(Block::iterator(entryFuncOp), wrapperFuncOp);
wrapperFuncOp.getOperation()->setAttr("iree.abi.stub",
diff --git a/iree/compiler/Bindings/TFLite/Transforms/MaterializeShapeSupport.cpp b/iree/compiler/Bindings/TFLite/Transforms/MaterializeShapeSupport.cpp
index 3ff5296..8327bf6 100644
--- a/iree/compiler/Bindings/TFLite/Transforms/MaterializeShapeSupport.cpp
+++ b/iree/compiler/Bindings/TFLite/Transforms/MaterializeShapeSupport.cpp
@@ -181,7 +181,9 @@
IREE::Util::GlobalOp dirtyGlobalOp, OpBuilder &moduleBuilder) {
// Clone the entire entry function with all its IR.
auto calcFuncOp = cast<FuncOp>(moduleBuilder.clone(*funcOp.getOperation()));
- calcFuncOp.setName(namePrefix.str() + "_calculate_shapes");
+ mlir::StringAttr nameAttr = mlir::StringAttr::get(
+ loc.getContext(), namePrefix.str() + "_calculate_shapes");
+ calcFuncOp.setName(nameAttr);
calcFuncOp.setPrivate();
// TODO(benvanik): find a better way to strip these attributes.
calcFuncOp->removeAttr("iree.abi.stub");
diff --git a/iree/compiler/Dialect/Flow/IR/FlowOps.cpp b/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
index 1d8a835..c2440e6 100644
--- a/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
+++ b/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
@@ -647,7 +647,7 @@
}));
}
-StringRef DispatchOp::executable() { return entry_point().getRootReference(); }
+StringAttr DispatchOp::executable() { return entry_point().getRootReference(); }
FunctionType DispatchOp::getEntryPointType() {
SmallVector<Type, 8> argTypes(operand_type_range{operands()});
diff --git a/iree/compiler/Dialect/Flow/IR/FlowOps.td b/iree/compiler/Dialect/Flow/IR/FlowOps.td
index ee24714..09e1dfc 100644
--- a/iree/compiler/Dialect/Flow/IR/FlowOps.td
+++ b/iree/compiler/Dialect/Flow/IR/FlowOps.td
@@ -561,7 +561,7 @@
];
let extraClassDeclaration = [{
- StringRef executable();
+ StringAttr executable();
FunctionType getEntryPointType();
// StreamableOpInterface:
diff --git a/iree/compiler/Dialect/Flow/Transforms/InjectDispatchTracing.cpp b/iree/compiler/Dialect/Flow/Transforms/InjectDispatchTracing.cpp
index 000a0df..2e7e475 100644
--- a/iree/compiler/Dialect/Flow/Transforms/InjectDispatchTracing.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/InjectDispatchTracing.cpp
@@ -36,7 +36,7 @@
void runOnOperation() override {
for (auto dispatchOp : getOperation().getOps<DispatchOp>()) {
std::string entryPointName =
- dispatchOp.entry_point().getRootReference().str();
+ dispatchOp.entry_point().getRootReference().getValue().str();
for (FlatSymbolRefAttr nestedRef :
dispatchOp.entry_point().getNestedReferences()) {
entryPointName = (entryPointName + "::" + nestedRef.getValue()).str();
diff --git a/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertStreamOps.cpp b/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertStreamOps.cpp
index 1cca4f8..9f4331f 100644
--- a/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertStreamOps.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertStreamOps.cpp
@@ -574,7 +574,7 @@
auto tensorValue = subspanOp.result();
auto bufferValue = schedulingState.loadGlobal(
IREE::HAL::BufferType::get(rewriter.getContext()),
- subspanOp.runtime_buffer().getLeafReference(), rewriter);
+ subspanOp.runtime_buffer().getLeafReference().getValue(), rewriter);
auto runtimeRange = subspanOp.runtime_range();
auto offsetValue =
schedulingState.lookupOrCreateIndex(runtimeRange.getOffset(), rewriter);
@@ -913,7 +913,8 @@
variantOp.getBlock().getOps<IREE::HAL::ExecutableEntryPointOp>();
auto entryPointIt =
llvm::find_if(entryPointOps, [&](IREE::HAL::ExecutableEntryPointOp op) {
- return op.getName() == dispatchOp.entry_point().getLeafReference();
+ return op.getNameAttr() ==
+ dispatchOp.entry_point().getLeafReference();
});
if (entryPointIt == entryPointOps.end()) {
return variantOp.emitError()
diff --git a/iree/compiler/Dialect/HAL/Conversion/HALToHAL/ConvertConstantOps.cpp b/iree/compiler/Dialect/HAL/Conversion/HALToHAL/ConvertConstantOps.cpp
index 461af44..a4e6688 100644
--- a/iree/compiler/Dialect/HAL/Conversion/HALToHAL/ConvertConstantOps.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/HALToHAL/ConvertConstantOps.cpp
@@ -25,7 +25,7 @@
ConversionPatternRewriter &rewriter) const override {
auto bufferValue = rewriter.createOrFold<IREE::Util::GlobalLoadOp>(
op.getLoc(), IREE::HAL::BufferType::get(rewriter.getContext()),
- op.runtime_buffer().getLeafReference());
+ op.runtime_buffer().getLeafReference().getValue());
auto offsetValue = rewriter.createOrFold<mlir::ConstantIndexOp>(
op.getLoc(), op.runtime_range().getOffset());
auto lengthValue = rewriter.createOrFold<mlir::ConstantIndexOp>(
diff --git a/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertConstantOps.cpp b/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertConstantOps.cpp
index 1746f4b..a493449 100644
--- a/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertConstantOps.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertConstantOps.cpp
@@ -43,9 +43,9 @@
ConversionPatternRewriter &rewriter) const override {
// I don't like this, but I can't figure out what to do.
// Matches the logic above.
- auto rodataName =
- (op.constant().getRootReference() + op.constant().getLeafReference())
- .str();
+ auto rodataName = (op.constant().getRootReference().getValue() +
+ op.constant().getLeafReference().getValue())
+ .str();
rewriter.replaceOpWithNewOp<IREE::VM::ConstRefRodataOp>(op, rodataName);
return success();
}
diff --git a/iree/compiler/Dialect/HAL/Target/TargetBackend.cpp b/iree/compiler/Dialect/HAL/Target/TargetBackend.cpp
index 70f50b6..b0ed628 100644
--- a/iree/compiler/Dialect/HAL/Target/TargetBackend.cpp
+++ b/iree/compiler/Dialect/HAL/Target/TargetBackend.cpp
@@ -42,7 +42,7 @@
Operation *op, Operation *moduleOp,
DenseMap<StringRef, Operation *> &targetSymbolMap,
SymbolTable *optionalSymbolTable) {
- StringRef originalName = SymbolTable::getSymbolName(op);
+ StringRef originalName = SymbolTable::getSymbolName(op).getValue();
// Iteratively try suffixes until we find one that isn't used.
std::string disambiguatedName;
@@ -56,7 +56,9 @@
SymbolTableCollection symbolTable;
SymbolUserMap symbolUsers(symbolTable, moduleOp);
- symbolUsers.replaceAllUsesWith(op, disambiguatedName);
+ mlir::StringAttr nameAttr =
+ mlir::StringAttr::get(op->getContext(), disambiguatedName);
+ symbolUsers.replaceAllUsesWith(op, nameAttr);
SymbolTable::setSymbolName(op, disambiguatedName);
}
@@ -120,7 +122,7 @@
}
}
}
- targetSymbolMap[SymbolTable::getSymbolName(op)] = op;
+ targetSymbolMap[SymbolTable::getSymbolName(op).getValue()] = op;
}
if (!targetBlock.empty() &&
targetBlock.back().hasTrait<OpTrait::IsTerminator>()) {
@@ -195,8 +197,10 @@
if (!linkedInterfaceOp) {
linkedInterfaceOp = dyn_cast<IREE::HAL::InterfaceOp>(
linkedExecutableBuilder.clone(*sourceInterfaceOp));
- linkedInterfaceOp.setName(
+ mlir::StringAttr nameAttr = mlir::StringAttr::get(
+ linkedInterfaceOp.getContext(),
llvm::formatv("io_{0}", linkedInterfaceOps.size()).str());
+ linkedInterfaceOp.setName(nameAttr);
linkedInterfaceOps.push_back(linkedInterfaceOp);
}
diff --git a/iree/compiler/Dialect/HAL/Transforms/MaterializeConstantPoolBuffers.cpp b/iree/compiler/Dialect/HAL/Transforms/MaterializeConstantPoolBuffers.cpp
index 552e2e3..db42861 100644
--- a/iree/compiler/Dialect/HAL/Transforms/MaterializeConstantPoolBuffers.cpp
+++ b/iree/compiler/Dialect/HAL/Transforms/MaterializeConstantPoolBuffers.cpp
@@ -97,7 +97,8 @@
// uploading 1:1 today all the offsets are the same as their storage ones.
auto variableSymRef = SymbolRefAttr::get(context, globalOp.getName());
for (auto spanOp : poolOp.getOps<ConstantPoolSpanOp>()) {
- if (spanOp.storage_buffer().getLeafReference() != storageOp.getName()) {
+ if (spanOp.storage_buffer().getLeafReference() !=
+ storageOp.getNameAttr()) {
continue;
}
spanOp.runtime_bufferAttr(variableSymRef);
diff --git a/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp b/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
index 6847b26..ac887b9 100644
--- a/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
+++ b/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
@@ -640,8 +640,7 @@
case DispatchBinding::Type::CONSTANT_STORAGE:
attrs.push_back(IREE::HAL::ExConstantStorageAttr::get(
builder.getStringAttr(usage.bindingOp.getName()),
- builder.getStringAttr(
- usage.constant.constantBuffer.getLeafReference()),
+ usage.constant.constantBuffer.getLeafReference(),
builder.getIndexAttr(usage.constant.minimumOffset),
builder.getIndexAttr(usage.constant.maximumOffset -
usage.constant.minimumOffset + 1)));
diff --git a/iree/compiler/Dialect/HAL/Transforms/MaterializeResourceCaches.cpp b/iree/compiler/Dialect/HAL/Transforms/MaterializeResourceCaches.cpp
index 4aa0596..921be4c 100644
--- a/iree/compiler/Dialect/HAL/Transforms/MaterializeResourceCaches.cpp
+++ b/iree/compiler/Dialect/HAL/Transforms/MaterializeResourceCaches.cpp
@@ -212,7 +212,7 @@
executableVariantOp.getOps<IREE::HAL::ExecutableEntryPointOp>()) {
auto interfaceOp =
SymbolTable::lookupNearestSymbolFrom<IREE::HAL::InterfaceOp>(
- executableOp, entryPointOp.interface());
+ executableOp, entryPointOp.interfaceAttr());
assert(interfaceOp && "must have an interface available");
auto executableLayoutGlobalOp = defineExecutableLayoutOp(
executableOp.getLoc(), interfaceOp.getExecutableSetLayoutsAttr(),
@@ -226,9 +226,8 @@
auto executableValue = caseBuilder.createOrFold<ExecutableCreateOp>(
loc, ExecutableType::get(loc.getContext()), deviceValue,
SymbolRefAttr::get(
- loc.getContext(), executableOp.sym_name(),
- {SymbolRefAttr::get(loc.getContext(),
- executableVariantOp.sym_name())}),
+ executableOp.sym_nameAttr(),
+ {SymbolRefAttr::get(executableVariantOp.sym_nameAttr())}),
executableLayoutValues);
caseBuilder.create<IREE::HAL::ReturnOp>(loc, executableValue);
diff --git a/iree/compiler/Dialect/Util/IR/UtilOpFolders.cpp b/iree/compiler/Dialect/Util/IR/UtilOpFolders.cpp
index bbfae17..4e6f0f2 100644
--- a/iree/compiler/Dialect/Util/IR/UtilOpFolders.cpp
+++ b/iree/compiler/Dialect/Util/IR/UtilOpFolders.cpp
@@ -87,7 +87,7 @@
OpFoldResult GlobalLoadOp::fold(ArrayRef<Attribute> operands) {
auto globalOp =
- SymbolTable::lookupNearestSymbolFrom<GlobalOp>(*this, global());
+ SymbolTable::lookupNearestSymbolFrom<GlobalOp>(*this, globalAttr());
if (!globalOp) return {};
if (globalOp->getAttr("noinline")) {
// Inlining of the constant has been disabled.
diff --git a/iree/compiler/Dialect/Util/IR/UtilOps.cpp b/iree/compiler/Dialect/Util/IR/UtilOps.cpp
index 634ef75..7002e39 100644
--- a/iree/compiler/Dialect/Util/IR/UtilOps.cpp
+++ b/iree/compiler/Dialect/Util/IR/UtilOps.cpp
@@ -672,7 +672,7 @@
IREE::Util::GlobalOp GlobalAddressOp::getGlobalOp() {
return SymbolTable::lookupNearestSymbolFrom<IREE::Util::GlobalOp>(
- getOperation()->getParentOp(), global());
+ getOperation()->getParentOp(), globalAttr());
}
void GlobalAddressOp::getAsmResultNames(
@@ -697,7 +697,7 @@
IREE::Util::GlobalOp GlobalLoadOp::getGlobalOp() {
return SymbolTable::lookupNearestSymbolFrom<IREE::Util::GlobalOp>(
- getOperation()->getParentOp(), global());
+ getOperation()->getParentOp(), globalAttr());
}
bool GlobalLoadOp::isGlobalImmutable() { return !getGlobalOp().is_mutable(); }
@@ -712,7 +712,7 @@
// HACK: works around the lack of symbol side effects in mlir by only saying
// we have a side-effect if the variable we are loading is mutable.
auto globalOp =
- SymbolTable::lookupNearestSymbolFrom<GlobalOp>(*this, global());
+ SymbolTable::lookupNearestSymbolFrom<GlobalOp>(*this, globalAttr());
assert(globalOp);
if (globalOp.is_mutable()) {
effects.emplace_back(MemoryEffects::Read::get());
@@ -746,7 +746,7 @@
IREE::Util::GlobalOp GlobalStoreOp::getGlobalOp() {
return SymbolTable::lookupNearestSymbolFrom<IREE::Util::GlobalOp>(
- getOperation()->getParentOp(), global());
+ getOperation()->getParentOp(), globalAttr());
}
static LogicalResult verifyGlobalStoreOp(GlobalStoreOp op) {
diff --git a/iree/compiler/Dialect/VM/Conversion/ImportUtils.cpp b/iree/compiler/Dialect/VM/Conversion/ImportUtils.cpp
index 01e2177..809a13d 100644
--- a/iree/compiler/Dialect/VM/Conversion/ImportUtils.cpp
+++ b/iree/compiler/Dialect/VM/Conversion/ImportUtils.cpp
@@ -30,7 +30,9 @@
// TODO(benvanik): verify that the imports match.
if (!existingOp) {
auto clonedOp = cast<IREE::VM::ImportOp>(targetBuilder.clone(*importOp));
- clonedOp.setName(fullName);
+ mlir::StringAttr fullNameAttr =
+ mlir::StringAttr::get(clonedOp.getContext(), fullName);
+ clonedOp.setName(fullNameAttr);
clonedOp.setPrivate();
}
});
diff --git a/iree/compiler/Dialect/VM/IR/VMOps.cpp b/iree/compiler/Dialect/VM/IR/VMOps.cpp
index 532ee38..a8e47b8 100644
--- a/iree/compiler/Dialect/VM/IR/VMOps.cpp
+++ b/iree/compiler/Dialect/VM/IR/VMOps.cpp
@@ -374,7 +374,7 @@
template <typename T>
static void addMemoryEffectsForGlobal(
- Operation *op, StringRef global,
+ Operation *op, mlir::FlatSymbolRefAttr global,
SmallVectorImpl<MemoryEffects::EffectInstance> &effects) {
// HACK: works around the lack of symbol side effects in mlir by only saying
// we have a side-effect if the variable we are loading is mutable.
@@ -388,27 +388,27 @@
void GlobalLoadI32Op::getEffects(
SmallVectorImpl<MemoryEffects::EffectInstance> &effects) {
- addMemoryEffectsForGlobal<GlobalI32Op>(*this, global(), effects);
+ addMemoryEffectsForGlobal<GlobalI32Op>(*this, globalAttr(), effects);
}
void GlobalLoadI64Op::getEffects(
SmallVectorImpl<MemoryEffects::EffectInstance> &effects) {
- addMemoryEffectsForGlobal<GlobalI64Op>(*this, global(), effects);
+ addMemoryEffectsForGlobal<GlobalI64Op>(*this, globalAttr(), effects);
}
void GlobalLoadF32Op::getEffects(
SmallVectorImpl<MemoryEffects::EffectInstance> &effects) {
- addMemoryEffectsForGlobal<GlobalF32Op>(*this, global(), effects);
+ addMemoryEffectsForGlobal<GlobalF32Op>(*this, globalAttr(), effects);
}
void GlobalLoadF64Op::getEffects(
SmallVectorImpl<MemoryEffects::EffectInstance> &effects) {
- addMemoryEffectsForGlobal<GlobalF64Op>(*this, global(), effects);
+ addMemoryEffectsForGlobal<GlobalF64Op>(*this, globalAttr(), effects);
}
void GlobalLoadRefOp::getEffects(
SmallVectorImpl<MemoryEffects::EffectInstance> &effects) {
- addMemoryEffectsForGlobal<GlobalRefOp>(*this, global(), effects);
+ addMemoryEffectsForGlobal<GlobalRefOp>(*this, globalAttr(), effects);
}
static LogicalResult verifyGlobalLoadOp(Operation *op) {
diff --git a/iree/compiler/Dialect/VM/Transforms/DeduplicateRodata.cpp b/iree/compiler/Dialect/VM/Transforms/DeduplicateRodata.cpp
index 326ddbc..d2c2d58 100644
--- a/iree/compiler/Dialect/VM/Transforms/DeduplicateRodata.cpp
+++ b/iree/compiler/Dialect/VM/Transforms/DeduplicateRodata.cpp
@@ -82,7 +82,7 @@
// Point all duplicates at the base op.
for (auto duplicateOp : bucketOps) {
if (failed(symbolTable.replaceAllSymbolUses(
- duplicateOp, baseOp.getName(), moduleOp))) {
+ duplicateOp, baseOp.getNameAttr(), moduleOp))) {
duplicateOp.emitError()
<< "failed to replace duplicate rodata op with base op "
<< baseOp.getName();
diff --git a/iree/compiler/Dialect/VM/Transforms/OrdinalAllocation.cpp b/iree/compiler/Dialect/VM/Transforms/OrdinalAllocation.cpp
index 8f6f9db..2506607 100644
--- a/iree/compiler/Dialect/VM/Transforms/OrdinalAllocation.cpp
+++ b/iree/compiler/Dialect/VM/Transforms/OrdinalAllocation.cpp
@@ -104,7 +104,7 @@
// ordinals we just assigned.
SmallVector<Operation *, 32> deadOps;
getOperation().walk([&](IREE::VM::GlobalAddressOp op) {
- auto *globalOp = symbolTable.lookupNearestSymbolFrom(op, op.global());
+ auto *globalOp = symbolTable.lookupNearestSymbolFrom(op, op.globalAttr());
assert(globalOp);
auto ordinal = globalOp->getAttrOfType<IntegerAttr>("ordinal").getInt();
diff --git a/third_party/llvm-project b/third_party/llvm-project
index 3383ec5..c50faff 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit 3383ec5fdd04be095678e0bd8bd1ce341f4f9294
+Subproject commit c50faffb4eeca004109a1591e56cd7cac2ed1083