diff --git a/compiler/src/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertAllocatorOps.cpp b/compiler/src/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertAllocatorOps.cpp
index 649b370..b4880a9 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertAllocatorOps.cpp
+++ b/compiler/src/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertAllocatorOps.cpp
@@ -13,19 +13,20 @@
 namespace iree_compiler {
 namespace {
 
-class AllocatorMapOpConversion
-    : public OpConversionPattern<IREE::HAL::AllocatorMapOp> {
+class AllocatorAllocateInitializedOpConversion
+    : public OpConversionPattern<IREE::HAL::AllocatorAllocateInitializedOp> {
  public:
-  AllocatorMapOpConversion(TypeConverter &typeConverter, MLIRContext *context,
-                           SymbolTable &importSymbols)
+  AllocatorAllocateInitializedOpConversion(TypeConverter &typeConverter,
+                                           MLIRContext *context,
+                                           SymbolTable &importSymbols)
       : OpConversionPattern(typeConverter, context) {
     importOp = importSymbols.lookup<IREE::VM::ImportOp>(
-        "hal.allocator.wrap.byte_buffer");
+        "hal.allocator.allocate.initialized");
     assert(importOp);
   }
 
   LogicalResult matchAndRewrite(
-      IREE::HAL::AllocatorMapOp op, OpAdaptor adaptor,
+      IREE::HAL::AllocatorAllocateInitializedOp op, OpAdaptor adaptor,
       ConversionPatternRewriter &rewriter) const override {
     auto callOp = rewriter.replaceOpWithNewOp<IREE::VM::CallOp>(
         op, importOp.getName(),
@@ -100,8 +101,8 @@
                                       RewritePatternSet &patterns) {
   patterns.insert<VMImportOpConversion<IREE::HAL::AllocatorAllocateOp>>(
       context, importSymbols, typeConverter, "hal.allocator.allocate");
-  patterns.insert<AllocatorMapOpConversion>(typeConverter, context,
-                                            importSymbols);
+  patterns.insert<AllocatorAllocateInitializedOpConversion>(
+      typeConverter, context, importSymbols);
   patterns.insert<AllocatorTryMapOpConversion>(typeConverter, context,
                                                importSymbols);
 }
diff --git a/compiler/src/iree/compiler/Dialect/HAL/Conversion/HALToVM/test/allocator_ops.mlir b/compiler/src/iree/compiler/Dialect/HAL/Conversion/HALToVM/test/allocator_ops.mlir
index ad99805..1de221d 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/Conversion/HALToVM/test/allocator_ops.mlir
+++ b/compiler/src/iree/compiler/Dialect/HAL/Conversion/HALToVM/test/allocator_ops.mlir
@@ -17,7 +17,7 @@
   %offset = arith.constant 128 : index
   // CHECK-DAG: %[[LENGTH:.+]] = vm.const.i64 256
   %length = arith.constant 256 : index
-  // CHECK: = vm.call @hal.allocator.wrap.byte_buffer(%arg0, %c6, %c3, %arg1, %[[OFFSET]], %[[LENGTH]]) : (!vm.ref<!hal.allocator>, i32, i32, !vm.buffer, i64, i64) -> !vm.ref<!hal.buffer>
-  %buffer = hal.allocator.map<%arg0 : !hal.allocator> source(%arg1 : !util.byte_buffer)[%offset, %length] type("HostVisible|HostCoherent") usage("Transfer") : !hal.buffer
+  // CHECK: = vm.call @hal.allocator.allocate.initialized(%arg0, %c6, %c3, %arg1, %[[OFFSET]], %[[LENGTH]]) : (!vm.ref<!hal.allocator>, i32, i32, !vm.buffer, i64, i64) -> !vm.ref<!hal.buffer>
+  %buffer = hal.allocator.allocate.initialized<%arg0 : !hal.allocator> source(%arg1 : !util.byte_buffer)[%offset, %length] type("HostVisible|HostCoherent") usage("Transfer") : !hal.buffer
   return %buffer : !hal.buffer
 }
diff --git a/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/ConvertStreamToHAL.cpp b/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/ConvertStreamToHAL.cpp
index 220afd1..d08f88e 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/ConvertStreamToHAL.cpp
+++ b/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/ConvertStreamToHAL.cpp
@@ -318,7 +318,7 @@
     auto bufferUsage = IREE::HAL::BufferUsageBitfield::Mapping |
                        IREE::HAL::BufferUsageBitfield::Transfer;
 
-    rewriter.replaceOpWithNewOp<IREE::HAL::AllocatorMapOp>(
+    rewriter.replaceOpWithNewOp<IREE::HAL::AllocatorAllocateInitializedOp>(
         mapOp, bufferType, allocator, memoryTypes, bufferUsage,
         adaptor.source(), adaptor.source_offset(), adaptor.result_size());
     return success();
diff --git a/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/test/resource_ops.mlir b/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/test/resource_ops.mlir
index cf5a6bd..c7ffb72 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/test/resource_ops.mlir
+++ b/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/test/resource_ops.mlir
@@ -87,7 +87,7 @@
 func.func @resourceMap(%arg0: !util.byte_buffer) -> !stream.resource<staging> {
   %c0 = arith.constant 0 : index
   %c128 = arith.constant 128 : index
-  // CHECK: %[[MAPPING:.+]] = hal.allocator.map
+  // CHECK: %[[MAPPING:.+]] = hal.allocator.allocate.initialized
   // CHECK-SAME: source(%arg0 : !util.byte_buffer)[%c0, %c128]
   // CHECK-SAME: type("HostVisible|HostCoherent|HostLocal|DeviceVisible")
   // CHECK-SAME: usage("{{.+}}Transfer{{.+}}Mapping{{.+}}") : !hal.buffer
diff --git a/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.cpp b/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.cpp
index be166c5..5091c3f 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.cpp
+++ b/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.cpp
@@ -318,17 +318,21 @@
 Value AllocatorAllocateOp::getResultSize(unsigned idx) { return result_size(); }
 
 //===----------------------------------------------------------------------===//
-// hal.allocator.map
+// hal.allocator.allocate.initialized
 //===----------------------------------------------------------------------===//
 
-void AllocatorMapOp::getAsmResultNames(
+void AllocatorAllocateInitializedOp::getAsmResultNames(
     function_ref<void(Value, StringRef)> setNameFn) {
   setNameFn(result(), "mapped");
 }
 
-Value AllocatorMapOp::getOperandSize(unsigned idx) { return {}; }
+Value AllocatorAllocateInitializedOp::getOperandSize(unsigned idx) {
+  return {};
+}
 
-Value AllocatorMapOp::getResultSize(unsigned idx) { return length(); }
+Value AllocatorAllocateInitializedOp::getResultSize(unsigned idx) {
+  return length();
+}
 
 //===----------------------------------------------------------------------===//
 // hal.allocator.try_map
diff --git a/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.td b/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.td
index 2c520fa..34b251b 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.td
+++ b/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.td
@@ -215,7 +215,7 @@
   }];
 }
 
-def HAL_AllocatorMapOp : HAL_Op<"allocator.map", [
+def HAL_AllocatorAllocateInitializedOp : HAL_Op<"allocator.allocate.initialized", [
     DeclareOpInterfaceMethods<OpAsmOpInterface, ["getAsmResultNames"]>,
     DeclareOpInterfaceMethods<Util_SizeAwareOp>,
   ]> {
diff --git a/compiler/src/iree/compiler/Dialect/HAL/IR/test/allocator_ops.mlir b/compiler/src/iree/compiler/Dialect/HAL/IR/test/allocator_ops.mlir
index a734225..01407e4 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/IR/test/allocator_ops.mlir
+++ b/compiler/src/iree/compiler/Dialect/HAL/IR/test/allocator_ops.mlir
@@ -23,12 +23,12 @@
   %offset = arith.constant 100 : index
   // CHECK-DAG: %[[LENGTH:.+]] = arith.constant 200
   %length = arith.constant 200 : index
-  //      CHECK: = hal.allocator.map<%[[ALLOCATOR]] : !hal.allocator>
+  //      CHECK: = hal.allocator.allocate.initialized<%[[ALLOCATOR]] : !hal.allocator>
   // CHECK-SAME:   source(%arg1 : !util.byte_buffer)[%[[OFFSET]], %[[LENGTH]]]
   // CHECK-SAME:   type("DeviceVisible|DeviceLocal")
   // CHECK-SAME:   usage("TransferSource|TransferTarget|Transfer")
   // CHECK-SAME:   : !hal.buffer
-  %ref = hal.allocator.map<%allocator : !hal.allocator>
+  %ref = hal.allocator.allocate.initialized<%allocator : !hal.allocator>
                     source(%arg1 : !util.byte_buffer)[%offset, %length]
                     type(DeviceLocal) usage(Transfer) : !hal.buffer
   return
diff --git a/compiler/src/iree/compiler/Dialect/HAL/hal.imports.mlir b/compiler/src/iree/compiler/Dialect/HAL/hal.imports.mlir
index 3162b13..eb4e580 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/hal.imports.mlir
+++ b/compiler/src/iree/compiler/Dialect/HAL/hal.imports.mlir
@@ -28,12 +28,10 @@
   %allocation_size : i64
 ) -> !vm.ref<!hal.buffer>
 
-// Maps a host byte buffer into a device buffer.
-// If try!=0 then returns null if the given memory type cannot be mapped.
-// Host-local+constant requests will always succeed.
-vm.import @allocator.map.byte_buffer(
+// Allocates a buffer from the allocator with an initial value provided by a
+// VM byte buffer.
+vm.import @allocator.allocate.initialized(
   %allocator : !vm.ref<!hal.allocator>,
-  %try : i32,
   %memory_types : i32,
   %buffer_usage : i32,
   %source : !vm.buffer,
@@ -41,11 +39,12 @@
   %length : i64
 ) -> !vm.ref<!hal.buffer>
 
-// TODO(benvanik): remove wrap.
-// Wraps a subrange of a read-only host memory buffer.
-// Host mapping must be supported by the allocator.
-vm.import @allocator.wrap.byte_buffer(
+// Maps a host byte buffer into a device buffer.
+// If try!=0 then returns null if the given memory type cannot be mapped.
+// Host-local+constant requests will always succeed.
+vm.import @allocator.map.byte_buffer(
   %allocator : !vm.ref<!hal.allocator>,
+  %try : i32,
   %memory_types : i32,
   %buffer_usage : i32,
   %source : !vm.buffer,
diff --git a/runtime/src/iree/modules/hal/exports.inl b/runtime/src/iree/modules/hal/exports.inl
index 27803a0..83f905f 100644
--- a/runtime/src/iree/modules/hal/exports.inl
+++ b/runtime/src/iree/modules/hal/exports.inl
@@ -25,8 +25,8 @@
 // clang-format off
 
 EXPORT_FN("allocator.allocate", iree_hal_module_allocator_allocate, riiI, r)
+EXPORT_FN("allocator.allocate.initialized", iree_hal_module_allocator_allocate_initialized, riirII, r)
 EXPORT_FN("allocator.map.byte_buffer", iree_hal_module_allocator_map_byte_buffer, riiirII, r)
-EXPORT_FN("allocator.wrap.byte_buffer", iree_hal_module_allocator_wrap_byte_buffer, riirII, r)
 
 EXPORT_FN("buffer.assert", iree_hal_module_buffer_assert, rrrIii, v)
 EXPORT_FN("buffer.length", iree_hal_module_buffer_length, r, I)
diff --git a/runtime/src/iree/modules/hal/module.c b/runtime/src/iree/modules/hal/module.c
index 41f244d..3e4fb9e 100644
--- a/runtime/src/iree/modules/hal/module.c
+++ b/runtime/src/iree/modules/hal/module.c
@@ -285,6 +285,46 @@
   return iree_ok_status();
 }
 
+IREE_VM_ABI_EXPORT(iree_hal_module_allocator_allocate_initialized,  //
+                   iree_hal_module_state_t,                         //
+                   riirII, r) {
+  iree_hal_allocator_t* allocator = NULL;
+  IREE_RETURN_IF_ERROR(iree_hal_allocator_check_deref(args->r0, &allocator));
+  iree_hal_memory_type_t memory_types = (iree_hal_memory_type_t)args->i1;
+  iree_hal_buffer_usage_t buffer_usage = (iree_hal_buffer_usage_t)args->i2;
+  iree_vm_buffer_t* source = NULL;
+  IREE_RETURN_IF_ERROR(iree_vm_buffer_check_deref(args->r3, &source));
+  iree_device_size_t offset = iree_hal_cast_device_size(args->i4);
+  iree_device_size_t length = iree_hal_cast_device_size(args->i5);
+
+  iree_host_size_t buffer_length = source->data.data_length;
+  if (length == -1) {
+    length = buffer_length;
+  }
+  if (length < 0 || offset < 0 || offset > buffer_length ||
+      offset + length > buffer_length) {
+    return iree_make_status(IREE_STATUS_INVALID_ARGUMENT,
+                            "byte range out of bounds (requested %" PRIdsz
+                            "-%" PRIdsz " of available %" PRIhsz ")",
+                            offset, (offset + length - 1), buffer_length);
+  }
+
+  const iree_hal_buffer_params_t params = {
+      .type = memory_types,
+      .usage = buffer_usage,
+  };
+  iree_hal_buffer_t* buffer = NULL;
+  IREE_RETURN_IF_ERROR(
+      iree_hal_allocator_allocate_buffer(
+          allocator, params, length,
+          iree_make_const_byte_span(source->data.data + offset, length),
+          &buffer),
+      "failed to allocate buffer of length %" PRIdsz, length);
+
+  rets->r0 = iree_hal_buffer_move_ref(buffer);
+  return iree_ok_status();
+}
+
 static void iree_hal_module_mapped_buffer_release(void* user_data,
                                                   iree_hal_buffer_t* buffer) {
   iree_vm_buffer_t* backing_buffer = (iree_vm_buffer_t*)user_data;
@@ -377,47 +417,6 @@
   return status;
 }
 
-// TODO(#7277): drop this method (use map instead) with streams.
-IREE_VM_ABI_EXPORT(iree_hal_module_allocator_wrap_byte_buffer,  //
-                   iree_hal_module_state_t,                     //
-                   riirII, r) {
-  iree_hal_allocator_t* allocator = NULL;
-  IREE_RETURN_IF_ERROR(iree_hal_allocator_check_deref(args->r0, &allocator));
-  iree_hal_memory_type_t memory_types = (iree_hal_memory_type_t)args->i1;
-  iree_hal_buffer_usage_t buffer_usage = (iree_hal_buffer_usage_t)args->i2;
-  iree_vm_buffer_t* source = NULL;
-  IREE_RETURN_IF_ERROR(iree_vm_buffer_check_deref(args->r3, &source));
-  iree_device_size_t offset = iree_hal_cast_device_size(args->i4);
-  iree_device_size_t length = iree_hal_cast_device_size(args->i5);
-
-  iree_host_size_t buffer_length = source->data.data_length;
-  if (length == -1) {
-    length = buffer_length;
-  }
-  if (length < 0 || offset < 0 || offset > buffer_length ||
-      offset + length > buffer_length) {
-    return iree_make_status(IREE_STATUS_INVALID_ARGUMENT,
-                            "byte range out of bounds (requested %" PRIdsz
-                            "-%" PRIdsz " of available %" PRIhsz ")",
-                            offset, (offset + length - 1), buffer_length);
-  }
-
-  const iree_hal_buffer_params_t params = {
-      .type = memory_types,
-      .usage = buffer_usage,
-  };
-  iree_hal_buffer_t* buffer = NULL;
-  IREE_RETURN_IF_ERROR(
-      iree_hal_allocator_allocate_buffer(
-          allocator, params, length,
-          iree_make_const_byte_span(source->data.data + offset, length),
-          &buffer),
-      "failed to allocate buffer of length %" PRIdsz, length);
-
-  rets->r0 = iree_hal_buffer_move_ref(buffer);
-  return iree_ok_status();
-}
-
 //===----------------------------------------------------------------------===//
 // iree_hal_buffer_t
 //===----------------------------------------------------------------------===//
