Removing FromApiStatus and unifying IREE_RETURN_IF_ERROR macros.
diff --git a/bindings/java/com/google/iree/native/context_wrapper.cc b/bindings/java/com/google/iree/native/context_wrapper.cc
index 2e2f8a2..14bc39c 100644
--- a/bindings/java/com/google/iree/native/context_wrapper.cc
+++ b/bindings/java/com/google/iree/native/context_wrapper.cc
@@ -34,16 +34,13 @@
 }  // namespace
 
 Status ContextWrapper::Create(const InstanceWrapper& instance_wrapper) {
-  RETURN_IF_ERROR(
-      FromApiStatus(iree_vm_context_create(instance_wrapper.instance(),
-                                           iree_allocator_system(), &context_),
-                    IREE_LOC));
+  RETURN_IF_ERROR(iree_vm_context_create(instance_wrapper.instance(),
+                                         iree_allocator_system(), &context_));
   RETURN_IF_ERROR(CreateDefaultModules());
   std::vector<iree_vm_module_t*> default_modules = {hal_module_};
-  return FromApiStatus(
-      iree_vm_context_register_modules(context_, default_modules.data(),
-                                       default_modules.size()),
-      IREE_LOC);
+  RETURN_IF_ERROR(iree_vm_context_register_modules(
+      context_, default_modules.data(), default_modules.size()));
+  return OkStatus();
 }
 
 Status ContextWrapper::CreateWithModules(
@@ -56,25 +53,24 @@
   // beginning of the vector.
   modules.insert(modules.begin(), hal_module_);
 
-  return FromApiStatus(iree_vm_context_create_with_modules(
-                           instance_wrapper.instance(), modules.data(),
-                           modules.size(), iree_allocator_system(), &context_),
-                       IREE_LOC);
+  RETURN_IF_ERROR(iree_vm_context_create_with_modules(
+      instance_wrapper.instance(), modules.data(), modules.size(),
+      iree_allocator_system(), &context_));
+  return OkStatus();
 }
 
 Status ContextWrapper::RegisterModules(
     const std::vector<ModuleWrapper*>& module_wrappers) {
   auto modules = GetModulesFromModuleWrappers(module_wrappers);
-  return FromApiStatus(iree_vm_context_register_modules(
-                           context_, modules.data(), modules.size()),
-                       IREE_LOC);
+  RETURN_IF_ERROR(iree_vm_context_register_modules(context_, modules.data(),
+                                                   modules.size()));
+  return OkStatus();
 }
 
 Status ContextWrapper::ResolveFunction(const FunctionWrapper& function_wrapper,
                                        iree_string_view_t name) {
-  return FromApiStatus(iree_vm_context_resolve_function(
-                           context_, name, function_wrapper.function()),
-                       IREE_LOC);
+  return iree_vm_context_resolve_function(context_, name,
+                                          function_wrapper.function());
 }
 
 int ContextWrapper::id() const { return iree_vm_context_id(context_); }
@@ -88,16 +84,13 @@
 
 // TODO(jennik): Also create default string and tensorlist modules.
 Status ContextWrapper::CreateDefaultModules() {
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_hal_driver_registry_create_driver(iree_make_cstring_view("vmla"),
-                                             iree_allocator_system(), &driver_),
-      IREE_LOC));
-  RETURN_IF_ERROR(FromApiStatus(iree_hal_driver_create_default_device(
-                                    driver_, iree_allocator_system(), &device_),
-                                IREE_LOC));
-  return FromApiStatus(
-      iree_hal_module_create(device_, iree_allocator_system(), &hal_module_),
-      IREE_LOC);
+  RETURN_IF_ERROR(iree_hal_driver_registry_create_driver(
+      iree_make_cstring_view("vmla"), iree_allocator_system(), &driver_));
+  RETURN_IF_ERROR(iree_hal_driver_create_default_device(
+      driver_, iree_allocator_system(), &device_));
+  RETURN_IF_ERROR(
+      iree_hal_module_create(device_, iree_allocator_system(), &hal_module_));
+  return OkStatus();
 }
 
 }  // namespace java
diff --git a/bindings/java/com/google/iree/native/instance_wrapper.cc b/bindings/java/com/google/iree/native/instance_wrapper.cc
index afceac9..f35d7e3 100644
--- a/bindings/java/com/google/iree/native/instance_wrapper.cc
+++ b/bindings/java/com/google/iree/native/instance_wrapper.cc
@@ -45,8 +45,7 @@
   static std::once_flag setup_vm_once;
   std::call_once(setup_vm_once, [] { SetupVm(); });
 
-  return FromApiStatus(
-      iree_vm_instance_create(iree_allocator_system(), &instance_), IREE_LOC);
+  return iree_vm_instance_create(iree_allocator_system(), &instance_);
 }
 
 iree_vm_instance_t* InstanceWrapper::instance() const { return instance_; }
diff --git a/bindings/java/com/google/iree/native/module_wrapper.cc b/bindings/java/com/google/iree/native/module_wrapper.cc
index 813c0c9..69794b7 100644
--- a/bindings/java/com/google/iree/native/module_wrapper.cc
+++ b/bindings/java/com/google/iree/native/module_wrapper.cc
@@ -21,11 +21,9 @@
 
 Status ModuleWrapper::Create(const uint8_t* flatbuffer_data,
                              iree_host_size_t length) {
-  return FromApiStatus(
-      iree_vm_bytecode_module_create(
-          iree_const_byte_span_t{flatbuffer_data, length},
-          iree_allocator_null(), iree_allocator_system(), &module_),
-      IREE_LOC);
+  return iree_vm_bytecode_module_create(
+      iree_const_byte_span_t{flatbuffer_data, length}, iree_allocator_null(),
+      iree_allocator_system(), &module_);
 }
 
 iree_vm_module_t* ModuleWrapper::module() const { return module_; }
diff --git a/iree/base/BUILD b/iree/base/BUILD
index 55e82b8..0bf238d 100644
--- a/iree/base/BUILD
+++ b/iree/base/BUILD
@@ -381,7 +381,9 @@
 cc_library(
     name = "status",
     hdrs = ["status.h"],
-    deps = platform_trampoline_deps("status"),
+    deps = [
+        "//iree/base/internal:status",
+    ],
 )
 
 cc_test(
diff --git a/iree/base/api_util.h b/iree/base/api_util.h
index 04e70b6..fd97c7a 100644
--- a/iree/base/api_util.h
+++ b/iree/base/api_util.h
@@ -30,11 +30,6 @@
   return iree_make_status(static_cast<iree_status_code_t>(status.code()));
 }
 
-inline StatusBuilder FromApiStatus(iree_status_t status_code,
-                                   SourceLocation loc) {
-  return StatusBuilder(static_cast<StatusCode>(status_code), loc);
-}
-
 // Internal helper for concatenating macro values.
 #define IREE_API_STATUS_MACROS_IMPL_CONCAT_INNER_(x, y) x##y
 #define IREE_API_STATUS_MACROS_IMPL_CONCAT_(x, y) \
diff --git a/iree/base/internal/status.cc b/iree/base/internal/status.cc
index b8008d9..03747af 100644
--- a/iree/base/internal/status.cc
+++ b/iree/base/internal/status.cc
@@ -26,6 +26,16 @@
   return os;
 }
 
+Status::Status(iree_status_t status) {
+  // TODO(#265): just store status.
+  if (!iree_status_is_ok(status)) {
+    state_ = std::make_unique<State>();
+    state_->code = static_cast<StatusCode>(iree_status_code(status));
+    state_->message = std::string("TODO");
+    iree_status_ignore(status);
+  }
+}
+
 Status::Status(StatusCode code, absl::string_view message) {
   if (code != StatusCode::kOk) {
     state_ = std::make_unique<State>();
diff --git a/iree/base/internal/status.h b/iree/base/internal/status.h
index 30404b8..4ded715 100644
--- a/iree/base/internal/status.h
+++ b/iree/base/internal/status.h
@@ -89,6 +89,8 @@
   // Creates an OK status with no message.
   Status() = default;
 
+  Status(iree_status_t status);
+
   // Creates a status with the specified code and error message.
   // If `code` is kOk, `message` is ignored.
   Status(StatusCode code, absl::string_view message);
@@ -155,6 +157,14 @@
 // has been augmented by adding `msg` to the end of the original message.
 Status Annotate(const Status& s, absl::string_view msg);
 
+ABSL_MUST_USE_RESULT static inline bool IsOk(const Status& status) {
+  return status.code() == StatusCode::kOk;
+}
+
+ABSL_MUST_USE_RESULT static inline bool IsOk(iree_status_t status) {
+  return iree_status_is_ok(status);
+}
+
 ABSL_MUST_USE_RESULT static inline bool IsAborted(const Status& status) {
   return status.code() == StatusCode::kAborted;
 }
diff --git a/iree/base/internal/status_builder.h b/iree/base/internal/status_builder.h
index 738fbf6..240556a 100644
--- a/iree/base/internal/status_builder.h
+++ b/iree/base/internal/status_builder.h
@@ -35,6 +35,10 @@
   // current location.
   explicit StatusBuilder(StatusCode code, SourceLocation location);
 
+  explicit StatusBuilder(iree_status_t status, SourceLocation location)
+      : status_(static_cast<StatusCode>(iree_status_code(status)), ""),
+        loc_(location) {}
+
   StatusBuilder(const StatusBuilder& sb);
   StatusBuilder& operator=(const StatusBuilder& sb);
   StatusBuilder(StatusBuilder&&) = default;
@@ -59,6 +63,13 @@
   operator Status() const&;
   operator Status() &&;
 
+  // TODO(#265): toll-free result.
+  operator iree_status_t() && {
+    return iree_status_allocate(static_cast<iree_status_code_t>(status_.code()),
+                                loc_.file_name(), loc_.line(),
+                                iree_string_view_empty());
+  }
+
   friend bool operator==(const StatusBuilder& lhs, const StatusCode& rhs) {
     return lhs.code() == rhs;
   }
@@ -171,7 +182,10 @@
 
 #define IREE_STATUS_MACROS_IMPL_RETURN_IF_ERROR_(var, expr) \
   auto var = (expr);                                        \
-  if (IREE_UNLIKELY(!var.ok()))                             \
+  if (IREE_UNLIKELY(!::iree::IsOk(var)))                    \
   return ::iree::StatusBuilder(std::move(var), IREE_LOC)
 
+#undef IREE_RETURN_IF_ERROR
+#define IREE_RETURN_IF_ERROR(expr, ...) RETURN_IF_ERROR(expr)
+
 #endif  // IREE_BASE_INTERNAL_STATUS_BUILDER_H_
diff --git a/iree/base/status.h b/iree/base/status.h
index 97c3716..e553d1b 100644
--- a/iree/base/status.h
+++ b/iree/base/status.h
@@ -15,13 +15,8 @@
 #ifndef IREE_BASE_STATUS_H_
 #define IREE_BASE_STATUS_H_
 
-#if defined(IREE_CONFIG_GOOGLE_INTERNAL) && IREE_CONFIG_GOOGLE_INTERNAL
-#include "iree/base/google_internal/source_location_google.h"
-#include "iree/base/google_internal/status_google.h"
-#else
 #include "iree/base/internal/status.h"
 #include "iree/base/internal/status_builder.h"
 #include "iree/base/internal/statusor.h"
-#endif  // IREE_CONFIG_GOOGLE_INTERNAL
 
 #endif  // IREE_BASE_STATUS_H_
diff --git a/iree/hal/api.cc b/iree/hal/api.cc
index 099c343..9e14caf 100644
--- a/iree/hal/api.cc
+++ b/iree/hal/api.cc
@@ -2073,7 +2073,7 @@
   IREE_TRACE_SCOPE0("iree_hal_semaphore_fail");
   IREE_ASSERT_ARGUMENT(semaphore);
   auto* handle = reinterpret_cast<Semaphore*>(semaphore);
-  handle->Fail(FromApiStatus(status, IREE_LOC));
+  handle->Fail(std::move(status));
 }
 
 IREE_API_EXPORT iree_status_t IREE_API_CALL
diff --git a/iree/hal/api_string_util_test.cc b/iree/hal/api_string_util_test.cc
index 2275db5..c900898 100644
--- a/iree/hal/api_string_util_test.cc
+++ b/iree/hal/api_string_util_test.cc
@@ -17,9 +17,9 @@
 #include "iree/base/api_util.h"
 #include "iree/base/memory.h"
 #include "iree/base/status.h"
-#include "iree/testing/status_matchers.h"
 #include "iree/hal/api.h"
 #include "iree/testing/gtest.h"
+#include "iree/testing/status_matchers.h"
 
 namespace iree {
 namespace hal {
@@ -45,10 +45,7 @@
                              shape.size(), shape.data(), &actual_rank);
     shape.resize(actual_rank);
   } while (iree_status_is_out_of_range(status));
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC)
-           << "Failed to parse shape '" << value << "'";
-  }
+  RETURN_IF_ERROR(std::move(status));
   return std::move(shape);
 }
 
@@ -63,9 +60,7 @@
                               &buffer[0], &actual_length);
     buffer.resize(actual_length);
   } while (iree_status_is_out_of_range(status));
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC);
-  }
+  RETURN_IF_ERROR(std::move(status));
   return std::move(buffer);
 }
 
@@ -75,10 +70,8 @@
   iree_hal_element_type_t element_type = IREE_HAL_ELEMENT_TYPE_NONE;
   iree_status_t status = iree_hal_parse_element_type(
       iree_string_view_t{value.data(), value.size()}, &element_type);
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC)
-           << "Failed to parse element type '" << value << "'";
-  }
+  RETURN_IF_ERROR(std::move(status))
+      << "Failed to parse element type '" << value << "'";
   return element_type;
 }
 
@@ -93,9 +86,7 @@
                                           &actual_length);
     buffer.resize(actual_length);
   } while (iree_status_is_out_of_range(status));
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC);
-  }
+  RETURN_IF_ERROR(std::move(status));
   return std::move(buffer);
 }
 
@@ -111,10 +102,8 @@
       iree_string_view_t{value.data(), value.size()}, element_type,
       iree_byte_span_t{reinterpret_cast<uint8_t*>(buffer.data()),
                        buffer.size() * sizeof(T)});
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC)
-           << "Failed to parse element '" << value << "'";
-  }
+  RETURN_IF_ERROR(std::move(status))
+      << "Failed to parse element '" << value << "'";
   return OkStatus();
 }
 
@@ -132,10 +121,8 @@
         element_type, result.size() + 1, &result[0], &actual_length);
     result.resize(actual_length);
   } while (iree_status_is_out_of_range(status));
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC)
-           << "Failed to format buffer element '" << value << "'";
-  }
+  RETURN_IF_ERROR(std::move(status))
+      << "Failed to format buffer element '" << value << "'";
   return std::move(result);
 }
 
@@ -148,14 +135,11 @@
 Status ParseBufferElements(absl::string_view value,
                            iree_hal_element_type_t element_type,
                            absl::Span<T> buffer) {
-  iree_status_t status = iree_hal_parse_buffer_elements(
+  RETURN_IF_ERROR(iree_hal_parse_buffer_elements(
       iree_string_view_t{value.data(), value.size()}, element_type,
       iree_byte_span_t{reinterpret_cast<uint8_t*>(buffer.data()),
-                       buffer.size() * sizeof(T)});
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC)
-           << "Failed to parse buffer elements '" << value << "'";
-  }
+                       buffer.size() * sizeof(T)}))
+      << "Failed to parse buffer elements '" << value << "'";
   return OkStatus();
 }
 
@@ -181,9 +165,7 @@
         result.size() + 1, &result[0], &actual_length);
     result.resize(actual_length);
   } while (iree_status_is_out_of_range(status));
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC);
-  }
+  RETURN_IF_ERROR(std::move(status));
   return std::move(result);
 }
 
@@ -411,9 +393,7 @@
     Allocator allocator;
     iree_status_t status = iree_hal_allocator_create_host_local(
         iree_allocator_system(), &allocator);
-    if (!iree_status_is_ok(status)) {
-      return FromApiStatus(status, IREE_LOC);
-    }
+    RETURN_IF_ERROR(std::move(status));
     return std::move(allocator);
   }
 };
@@ -436,9 +416,7 @@
     std::vector<T> result(total_byte_length / sizeof(T));
     iree_status_t status =
         iree_hal_buffer_read_data(get(), 0, result.data(), total_byte_length);
-    if (!iree_status_is_ok(status)) {
-      return FromApiStatus(status, IREE_LOC);
-    }
+    RETURN_IF_ERROR(std::move(status));
     return std::move(result);
   }
 };
@@ -457,9 +435,7 @@
     iree_status_t status = iree_hal_buffer_view_create(
         buffer, shape.data(), shape.size(), element_type,
         iree_allocator_system(), &buffer_view);
-    if (!iree_status_is_ok(status)) {
-      return FromApiStatus(status, IREE_LOC);
-    }
+    RETURN_IF_ERROR(std::move(status));
     return std::move(buffer_view);
   }
 
@@ -510,9 +486,7 @@
     iree_status_t status = iree_hal_buffer_view_parse(
         iree_string_view_t{value.data(), value.size()}, allocator,
         iree_allocator_system(), &buffer_view);
-    if (!iree_status_is_ok(status)) {
-      return FromApiStatus(status, IREE_LOC);
-    }
+    RETURN_IF_ERROR(std::move(status));
     return std::move(buffer_view);
   }
 
@@ -532,9 +506,7 @@
                                            &actual_length);
       result.resize(actual_length);
     } while (iree_status_is_out_of_range(status));
-    if (!iree_status_is_ok(status)) {
-      return FromApiStatus(status, IREE_LOC);
-    }
+    RETURN_IF_ERROR(std::move(status));
     return std::move(result);
   }
 };
diff --git a/iree/hal/vmla/vmla_driver.cc b/iree/hal/vmla/vmla_driver.cc
index 717d470..096eed6 100644
--- a/iree/hal/vmla/vmla_driver.cc
+++ b/iree/hal/vmla/vmla_driver.cc
@@ -50,8 +50,7 @@
   // NOTE: we could use our own allocator here to hide these from any default
   // tracing we have.
   iree_vm_instance_t* instance = nullptr;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_instance_create(iree_allocator_system(), &instance), IREE_LOC));
+  RETURN_IF_ERROR(iree_vm_instance_create(iree_allocator_system(), &instance));
 
   // TODO(benvanik): move to instance-based registration.
   RETURN_IF_ERROR(ModuleRegisterTypes()) << "VMLA type registration failed";
diff --git a/iree/hal/vmla/vmla_executable.cc b/iree/hal/vmla/vmla_executable.cc
index 23d50d4..c4786d9 100644
--- a/iree/hal/vmla/vmla_executable.cc
+++ b/iree/hal/vmla/vmla_executable.cc
@@ -80,29 +80,25 @@
 
   // Load bytecode module from the executable spec.
   iree_vm_module_t* bytecode_module = nullptr;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_bytecode_module_create(
-          iree_const_byte_span_t{reinterpret_cast<const uint8_t*>(
-                                     executable_def->bytecode_module()->data()),
-                                 executable_def->bytecode_module()->size()},
-          iree_allocator_null(), iree_allocator_system(), &bytecode_module),
-      IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_bytecode_module_create(
+      iree_const_byte_span_t{reinterpret_cast<const uint8_t*>(
+                                 executable_def->bytecode_module()->data()),
+                             executable_def->bytecode_module()->size()},
+      iree_allocator_null(), iree_allocator_system(), &bytecode_module))
       << "Failed to load executable bytecode module";
 
   entry_functions_.resize(
       iree_vm_module_signature(bytecode_module).export_function_count);
   for (int i = 0; i < entry_functions_.size(); ++i) {
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_vm_module_lookup_function_by_ordinal(
-                          bytecode_module, IREE_VM_FUNCTION_LINKAGE_EXPORT, i,
-                          &entry_functions_[i], nullptr),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_vm_module_lookup_function_by_ordinal(
+        bytecode_module, IREE_VM_FUNCTION_LINKAGE_EXPORT, i,
+        &entry_functions_[i], nullptr));
   }
 
   // Create context and initialize shared state. Note that each executable here
   // has its own context (and thus its own vmla.interface instance).
   std::array<iree_vm_module_t*, 2> modules = {vmla_module, bytecode_module};
-  auto result = FromApiStatus(iree_vm_context_create_with_modules(
+  auto result = StatusBuilder(iree_vm_context_create_with_modules(
                                   instance, modules.data(), modules.size(),
                                   iree_allocator_system(), &context_),
                               IREE_LOC)
@@ -165,24 +161,20 @@
 
   auto* input_list_storage = alloca(dispatch_state->input_list_size);
   iree_vm_list_t* input_list = nullptr;
-  RETURN_IF_ERROR(
-      FromApiStatus(iree_vm_list_initialize(
-                        iree_make_byte_span(input_list_storage,
-                                            dispatch_state->input_list_size),
-                        /*element_type=*/nullptr,
-                        /*interface*/ 1 + /*workgroup_xyz[3]*/ 3, &input_list),
-                    IREE_LOC));
+  RETURN_IF_ERROR(iree_vm_list_initialize(
+      iree_make_byte_span(input_list_storage, dispatch_state->input_list_size),
+      /*element_type=*/nullptr,
+      /*interface*/ 1 + /*workgroup_xyz[3]*/ 3, &input_list));
   iree_vm_list_push_ref_retain(input_list, &dispatch_state->interface_ref);
   for (int i = 0; i < workgroup_xyz.size(); ++i) {
     iree_vm_value_t value = iree_vm_value_make_i32(workgroup_xyz[i]);
     iree_vm_list_push_value(input_list, &value);
   }
 
-  auto status = FromApiStatus(
-      iree_vm_invoke(context(), dispatch_state->function,
-                     /*policy=*/nullptr, input_list,
-                     /*outputs=*/nullptr, iree_allocator_system()),
-      IREE_LOC);
+  auto status =
+      Status(iree_vm_invoke(context(), dispatch_state->function,
+                            /*policy=*/nullptr, input_list,
+                            /*outputs=*/nullptr, iree_allocator_system()));
 
   iree_vm_list_deinitialize(input_list);
 
diff --git a/iree/hal/vmla/vmla_module.cc b/iree/hal/vmla/vmla_module.cc
index d577a7e..1cb3bc8 100644
--- a/iree/hal/vmla/vmla_module.cc
+++ b/iree/hal/vmla/vmla_module.cc
@@ -31,12 +31,11 @@
 IREE_VM_DEFINE_TYPE_ADAPTERS(Buffer, iree::hal::vmla::Buffer);
 IREE_VM_DEFINE_TYPE_ADAPTERS(Interface, iree::hal::vmla::Interface);
 
-#define IREE_VMLA_REGISTER_CC_TYPE(type, name, descriptor)             \
-  descriptor.type_name = iree_make_cstring_view(name);                 \
-  descriptor.offsetof_counter = type::offsetof_counter();              \
-  descriptor.destroy = type::DirectDestroy;                            \
-  RETURN_IF_ERROR(                                                     \
-      FromApiStatus(iree_vm_ref_register_type(&descriptor), IREE_LOC)) \
+#define IREE_VMLA_REGISTER_CC_TYPE(type, name, descriptor) \
+  descriptor.type_name = iree_make_cstring_view(name);     \
+  descriptor.offsetof_counter = type::offsetof_counter();  \
+  descriptor.destroy = type::DirectDestroy;                \
+  RETURN_IF_ERROR(iree_vm_ref_register_type(&descriptor))  \
       << "Failed to register type " << name;
 
 namespace iree {
@@ -62,8 +61,7 @@
 StatusOr<vm::ref<Buffer>> Buffer::Allocate(size_t byte_length,
                                            iree_allocator_t allocator) {
   void* data = nullptr;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_allocator_malloc(allocator, byte_length, &data), IREE_LOC))
+  RETURN_IF_ERROR(iree_allocator_malloc(allocator, byte_length, &data))
       << "Failed to allocate buffer of size " << byte_length;
 
   auto buffer = vm::assign_ref(new Buffer());
diff --git a/iree/modules/check/check_module_main.cc b/iree/modules/check/check_module_main.cc
index 3e1f218..3929e30 100644
--- a/iree/modules/check/check_module_main.cc
+++ b/iree/modules/check/check_module_main.cc
@@ -82,11 +82,9 @@
 StatusOr<int> Run(std::string input_file_path) {
   IREE_TRACE_SCOPE0("iree-check-module");
 
-  RETURN_IF_ERROR(FromApiStatus(iree_hal_module_register_types(), IREE_LOC))
-      << "registering HAL types";
+  RETURN_IF_ERROR(iree_hal_module_register_types()) << "registering HAL types";
   iree_vm_instance_t* instance = nullptr;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_instance_create(iree_allocator_system(), &instance), IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_instance_create(iree_allocator_system(), &instance))
       << "creating instance";
 
   std::string module_data;
@@ -114,11 +112,9 @@
        ++ordinal) {
     iree_vm_function_t function;
     iree_string_view_t export_name_sv;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_vm_module_lookup_function_by_ordinal(
-                          input_module, IREE_VM_FUNCTION_LINKAGE_EXPORT,
-                          ordinal, &function, &export_name_sv),
-                      IREE_LOC))
+    RETURN_IF_ERROR(iree_vm_module_lookup_function_by_ordinal(
+        input_module, IREE_VM_FUNCTION_LINKAGE_EXPORT, ordinal, &function,
+        &export_name_sv))
         << "Looking up function export " << ordinal;
 
     // TODO(gcmn): Implicit conversion from iree to absl string view.
diff --git a/iree/modules/check/check_test.cc b/iree/modules/check/check_test.cc
index 146b2e5..7b5b998 100644
--- a/iree/modules/check/check_test.cc
+++ b/iree/modules/check/check_test.cc
@@ -20,11 +20,11 @@
 #include "iree/base/api_util.h"
 #include "iree/base/logging.h"
 #include "iree/base/status.h"
-#include "iree/testing/status_matchers.h"
 #include "iree/hal/api.h"
 #include "iree/modules/check/native_module.h"
 #include "iree/modules/hal/hal_module.h"
 #include "iree/testing/gtest.h"
+#include "iree/testing/status_matchers.h"
 #include "iree/vm/api.h"
 #include "iree/vm/bytecode_module.h"
 #include "iree/vm/ref_cc.h"
@@ -47,7 +47,8 @@
         iree_hal_module_create(device_, iree_allocator_system(), &hal_module_));
     iree_hal_driver_release(hal_driver);
 
-    IREE_ASSERT_OK(iree_vm_instance_create(iree_allocator_system(), &instance_));
+    IREE_ASSERT_OK(
+        iree_vm_instance_create(iree_allocator_system(), &instance_));
 
     IREE_ASSERT_OK(
         check_native_module_create(iree_allocator_system(), &check_module_))
@@ -125,10 +126,10 @@
            static_cast<const void*>(contents.data()),
            mapped_memory.contents.data_length);
     IREE_ASSERT_OK(iree_hal_buffer_unmap(buffer.get(), &mapped_memory));
-    IREE_ASSERT_OK(
-        iree_hal_buffer_view_create(buffer.get(), shape.data(), shape.size(),
-                                    IREE_HAL_ELEMENT_TYPE_FLOAT_32,
-                                    iree_allocator_system(), &*out_buffer_view));
+    IREE_ASSERT_OK(iree_hal_buffer_view_create(
+        buffer.get(), shape.data(), shape.size(),
+        IREE_HAL_ELEMENT_TYPE_FLOAT_32, iree_allocator_system(),
+        &*out_buffer_view));
   }
 
   void CreateFloat64BufferView(absl::Span<const double> contents,
@@ -154,52 +155,42 @@
            static_cast<const void*>(contents.data()),
            mapped_memory.contents.data_length);
     IREE_ASSERT_OK(iree_hal_buffer_unmap(buffer.get(), &mapped_memory));
-    IREE_ASSERT_OK(
-        iree_hal_buffer_view_create(buffer.get(), shape.data(), shape.size(),
-                                    IREE_HAL_ELEMENT_TYPE_FLOAT_64,
-                                    iree_allocator_system(), &*out_buffer_view));
+    IREE_ASSERT_OK(iree_hal_buffer_view_create(
+        buffer.get(), shape.data(), shape.size(),
+        IREE_HAL_ELEMENT_TYPE_FLOAT_64, iree_allocator_system(),
+        &*out_buffer_view));
   }
 
   Status Invoke(absl::string_view function_name) {
     iree_vm_function_t function;
-    RETURN_IF_ERROR(FromApiStatus(
-        check_module_->lookup_function(
-            check_module_->self, IREE_VM_FUNCTION_LINKAGE_EXPORT,
-            iree_string_view_t{function_name.data(), function_name.size()},
-            &function),
-        IREE_LOC))
+    RETURN_IF_ERROR(check_module_->lookup_function(
+        check_module_->self, IREE_VM_FUNCTION_LINKAGE_EXPORT,
+        iree_string_view_t{function_name.data(), function_name.size()},
+        &function))
         << "Exported function '" << function_name << "' not found";
     // TODO(#2075): don't directly invoke native functions like this.
-    return FromApiStatus(
-        iree_vm_invoke(context_, function,
-                       /*policy=*/nullptr, inputs_.get(),
-                       /*outputs=*/nullptr, iree_allocator_system()),
-        IREE_LOC);
+    return iree_vm_invoke(context_, function,
+                          /*policy=*/nullptr, inputs_.get(),
+                          /*outputs=*/nullptr, iree_allocator_system());
   }
 
   Status Invoke(absl::string_view function_name,
                 std::vector<iree_vm_value> args) {
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_vm_list_create(/*element_type=*/nullptr, args.size(),
-                                          iree_allocator_system(), &inputs_),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_vm_list_create(/*element_type=*/nullptr, args.size(),
+                                        iree_allocator_system(), &inputs_));
     for (iree_vm_value& arg : args) {
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_vm_list_push_value(inputs_.get(), &arg), IREE_LOC));
+      RETURN_IF_ERROR(iree_vm_list_push_value(inputs_.get(), &arg));
     }
     return Invoke(function_name);
   }
 
   Status Invoke(absl::string_view function_name,
                 std::vector<vm::ref<iree_hal_buffer_view_t>> args) {
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_vm_list_create(/*element_type=*/nullptr, args.size(),
-                                          iree_allocator_system(), &inputs_),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_vm_list_create(/*element_type=*/nullptr, args.size(),
+                                        iree_allocator_system(), &inputs_));
     for (auto& arg : args) {
       iree_vm_ref_t arg_ref = iree_hal_buffer_view_move_ref(arg.get());
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_vm_list_push_ref_retain(inputs_.get(), &arg_ref), IREE_LOC));
+      RETURN_IF_ERROR(iree_vm_list_push_ref_retain(inputs_.get(), &arg_ref));
     }
     return Invoke(function_name);
   }
diff --git a/iree/modules/check/native_module.cc b/iree/modules/check/native_module.cc
index 5e7bb09..665b281 100644
--- a/iree/modules/check/native_module.cc
+++ b/iree/modules/check/native_module.cc
@@ -56,9 +56,7 @@
         &result_str[0], &actual_length);
     result_str.resize(actual_length);
   } while (iree_status_is_out_of_range(status));
-  if (!iree_status_is_ok(status)) {
-    return FromApiStatus(status, IREE_LOC);
-  }
+  RETURN_IF_ERROR(std::move(status));
   return std::move(result_str);
 }
 
@@ -113,10 +111,8 @@
     }
   }
   char element_type_str[16];
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_hal_format_element_type(element_type, sizeof(element_type_str),
-                                   element_type_str, nullptr),
-      IREE_LOC));
+  RETURN_IF_ERROR(iree_hal_format_element_type(
+      element_type, sizeof(element_type_str), element_type_str, nullptr));
   return InvalidArgumentErrorBuilder(IREE_LOC)
          << "Unsupported element type " << element_type_str;
 }
@@ -154,10 +150,8 @@
     }
   }
   char element_type_str[16];
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_hal_format_element_type(element_type, sizeof(element_type_str),
-                                   element_type_str, nullptr),
-      IREE_LOC));
+  RETURN_IF_ERROR(iree_hal_format_element_type(
+      element_type, sizeof(element_type_str), element_type_str, nullptr));
   return InvalidArgumentErrorBuilder(IREE_LOC)
          << "Unsupported element type " << element_type_str;
 }
@@ -190,10 +184,9 @@
         iree_hal_buffer_view_element_type(view);
     iree_hal_buffer_t* buf = iree_hal_buffer_view_buffer(view);
     iree_hal_mapped_memory_t mapped_memory;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_map(buf, IREE_HAL_MEMORY_ACCESS_READ, /*byte_offset=*/0,
-                            IREE_WHOLE_BUFFER, &mapped_memory),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_map(buf, IREE_HAL_MEMORY_ACCESS_READ,
+                                        /*byte_offset=*/0, IREE_WHOLE_BUFFER,
+                                        &mapped_memory));
     RETURN_IF_ERROR(
         ::iree::ExpectAllTrue(mapped_memory.contents, element_type));
     iree_hal_buffer_unmap(buf, &mapped_memory);
@@ -206,15 +199,13 @@
     auto* rhs = rhs_ref.get();
     size_t lhs_rank = iree_hal_buffer_view_shape_rank(lhs);
     absl::InlinedVector<int32_t, 6> lhs_shape(lhs_rank);
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_shape(lhs, lhs_rank, lhs_shape.data(), nullptr),
-        IREE_LOC));
+    RETURN_IF_ERROR(
+        iree_hal_buffer_view_shape(lhs, lhs_rank, lhs_shape.data(), nullptr));
 
     size_t rhs_rank = iree_hal_buffer_view_shape_rank(rhs);
     absl::InlinedVector<int32_t, 6> rhs_shape(rhs_rank);
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_shape(rhs, rhs_rank, rhs_shape.data(), nullptr),
-        IREE_LOC));
+    RETURN_IF_ERROR(
+        iree_hal_buffer_view_shape(rhs, rhs_rank, rhs_shape.data(), nullptr));
 
     iree_hal_element_type_t lhs_element_type =
         iree_hal_buffer_view_element_type(lhs);
@@ -223,18 +214,14 @@
 
     iree_hal_buffer_t* lhs_buf = iree_hal_buffer_view_buffer(lhs);
     iree_hal_mapped_memory_t lhs_mapped_memory;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_map(lhs_buf, IREE_HAL_MEMORY_ACCESS_READ,
-                                          /*byte_offset=*/0, IREE_WHOLE_BUFFER,
-                                          &lhs_mapped_memory),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_map(lhs_buf, IREE_HAL_MEMORY_ACCESS_READ,
+                                        /*byte_offset=*/0, IREE_WHOLE_BUFFER,
+                                        &lhs_mapped_memory));
     iree_hal_buffer_t* rhs_buf = iree_hal_buffer_view_buffer(rhs);
     iree_hal_mapped_memory_t rhs_mapped_memory;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_map(rhs_buf, IREE_HAL_MEMORY_ACCESS_READ,
-                                          /*byte_offset=*/0, IREE_WHOLE_BUFFER,
-                                          &rhs_mapped_memory),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_map(rhs_buf, IREE_HAL_MEMORY_ACCESS_READ,
+                                        /*byte_offset=*/0, IREE_WHOLE_BUFFER,
+                                        &rhs_mapped_memory));
 
     bool element_types_eq = lhs_element_type == rhs_element_type;
     bool shape_eq = lhs_shape == rhs_shape;
@@ -281,15 +268,13 @@
     auto* rhs = rhs_ref.get();
     size_t lhs_rank = iree_hal_buffer_view_shape_rank(lhs);
     absl::InlinedVector<int32_t, 6> lhs_shape(lhs_rank);
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_shape(lhs, lhs_rank, lhs_shape.data(), nullptr),
-        IREE_LOC));
+    RETURN_IF_ERROR(
+        iree_hal_buffer_view_shape(lhs, lhs_rank, lhs_shape.data(), nullptr));
 
     size_t rhs_rank = iree_hal_buffer_view_shape_rank(rhs);
     absl::InlinedVector<int32_t, 6> rhs_shape(rhs_rank);
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_shape(rhs, rhs_rank, rhs_shape.data(), nullptr),
-        IREE_LOC));
+    RETURN_IF_ERROR(
+        iree_hal_buffer_view_shape(rhs, rhs_rank, rhs_shape.data(), nullptr));
 
     iree_hal_element_type_t lhs_element_type =
         iree_hal_buffer_view_element_type(lhs);
@@ -298,18 +283,14 @@
 
     iree_hal_buffer_t* lhs_buf = iree_hal_buffer_view_buffer(lhs);
     iree_hal_mapped_memory_t lhs_mapped_memory;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_map(lhs_buf, IREE_HAL_MEMORY_ACCESS_READ,
-                                          /*byte_offset=*/0, IREE_WHOLE_BUFFER,
-                                          &lhs_mapped_memory),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_map(lhs_buf, IREE_HAL_MEMORY_ACCESS_READ,
+                                        /*byte_offset=*/0, IREE_WHOLE_BUFFER,
+                                        &lhs_mapped_memory));
     iree_hal_buffer_t* rhs_buf = iree_hal_buffer_view_buffer(rhs);
     iree_hal_mapped_memory_t rhs_mapped_memory;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_map(rhs_buf, IREE_HAL_MEMORY_ACCESS_READ,
-                                          /*byte_offset=*/0, IREE_WHOLE_BUFFER,
-                                          &rhs_mapped_memory),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_map(rhs_buf, IREE_HAL_MEMORY_ACCESS_READ,
+                                        /*byte_offset=*/0, IREE_WHOLE_BUFFER,
+                                        &rhs_mapped_memory));
 
     bool element_types_eq = lhs_element_type == rhs_element_type;
     bool shape_eq = lhs_shape == rhs_shape;
diff --git a/iree/modules/hal/hal_module.cc b/iree/modules/hal/hal_module.cc
index 4c99b95..b296e5a 100644
--- a/iree/modules/hal/hal_module.cc
+++ b/iree/modules/hal/hal_module.cc
@@ -139,10 +139,8 @@
     IREE_TRACE_SCOPE0("HALModuleState::ExSubmitAndWait");
 
     vm::ref<iree_hal_semaphore_t> semaphore;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_semaphore_create(device.get(), 0ull, iree_allocator_system(),
-                                  &semaphore),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_semaphore_create(
+        device.get(), 0ull, iree_allocator_system(), &semaphore));
 
     iree_hal_submission_batch_t batch;
     memset(&batch, 0, sizeof(batch));
@@ -154,15 +152,11 @@
     batch.signal_semaphores.semaphores = semaphore_ptrs;
     uint64_t signal_value = 1ull;
     batch.signal_semaphores.payload_values = &signal_value;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_device_queue_submit(
-            device.get(), IREE_HAL_COMMAND_CATEGORY_ANY, 0, 1, &batch),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_device_queue_submit(
+        device.get(), IREE_HAL_COMMAND_CATEGORY_ANY, 0, 1, &batch));
 
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_semaphore_wait_with_deadline(
-                          semaphore.get(), 1ull, IREE_TIME_INFINITE_FUTURE),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_semaphore_wait_with_deadline(
+        semaphore.get(), 1ull, IREE_TIME_INFINITE_FUTURE));
 
     for (auto& ref : deferred_releases_) {
       iree_vm_ref_release(&ref);
@@ -180,11 +174,9 @@
       vm::ref<iree_hal_allocator_t> allocator, absl::Span<const int32_t> shape,
       iree_hal_element_type_t element_type) {
     iree_device_size_t allocation_size = 0;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_allocator_compute_size(allocator.get(), shape.data(),
-                                        shape.size(), element_type,
-                                        &allocation_size),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_allocator_compute_size(
+        allocator.get(), shape.data(), shape.size(), element_type,
+        &allocation_size));
     return static_cast<int32_t>(allocation_size);
   }
 
@@ -192,11 +184,9 @@
       vm::ref<iree_hal_allocator_t> allocator, absl::Span<const int32_t> shape,
       iree_hal_element_type_t element_type, absl::Span<const int32_t> indices) {
     iree_device_size_t offset = 0;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_allocator_compute_offset(
-            allocator.get(), shape.data(), shape.size(), element_type,
-            indices.data(), indices.size(), &offset),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_allocator_compute_offset(
+        allocator.get(), shape.data(), shape.size(), element_type,
+        indices.data(), indices.size(), &offset));
     return static_cast<int32_t>(offset);
   }
 
@@ -207,12 +197,10 @@
       absl::Span<const int32_t> lengths) {
     iree_device_size_t offset = 0;
     iree_device_size_t length = 0;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_allocator_compute_range(
-            allocator.get(), shape.data(), shape.size(), element_type,
-            start_indices.data(), start_indices.size(), lengths.data(),
-            lengths.size(), &offset, &length),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_allocator_compute_range(
+        allocator.get(), shape.data(), shape.size(), element_type,
+        start_indices.data(), start_indices.size(), lengths.data(),
+        lengths.size(), &offset, &length));
     return std::make_tuple(static_cast<int32_t>(offset),
                            static_cast<int32_t>(length));
   }
@@ -223,10 +211,8 @@
       int32_t allocation_size) {
     IREE_TRACE_SCOPE0("HALModuleState::AllocatorAllocate");
     vm::ref<iree_hal_buffer_t> buffer;
-    RETURN_IF_ERROR(FromApiStatus(iree_hal_allocator_allocate_buffer(
-                                      allocator.get(), memory_types,
-                                      buffer_usage, allocation_size, &buffer),
-                                  IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_allocator_allocate_buffer(
+        allocator.get(), memory_types, buffer_usage, allocation_size, &buffer));
     return std::move(buffer);
   }
 
@@ -238,27 +224,21 @@
     IREE_TRACE_SCOPE0("HALModuleState::AllocatorAllocateConst");
 
     iree_device_size_t allocation_size = 0;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_allocator_compute_size(allocator.get(), shape.data(),
-                                        shape.size(), element_type,
-                                        &allocation_size),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_allocator_compute_size(
+        allocator.get(), shape.data(), shape.size(), element_type,
+        &allocation_size));
     if (allocation_size < value->data.data_length) {
       return InvalidArgumentErrorBuilder(IREE_LOC)
              << "Constant data is too large for the minimum allocation size";
     }
 
     vm::ref<iree_hal_buffer_t> buffer;
-    RETURN_IF_ERROR(FromApiStatus(iree_hal_allocator_allocate_buffer(
-                                      allocator.get(), memory_types,
-                                      buffer_usage, allocation_size, &buffer),
-                                  IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_allocator_allocate_buffer(
+        allocator.get(), memory_types, buffer_usage, allocation_size, &buffer))
         << "Failed to allocate buffer";
 
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_write_data(buffer.get(), 0, value->data.data,
-                                   value->data.data_length),
-        IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_buffer_write_data(
+        buffer.get(), 0, value->data.data, value->data.data_length))
         << "Writing constant data";
 
     return buffer;
@@ -320,10 +300,8 @@
              << "Length " << length << " exceeds max";
     }
 
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_read_data(source_buffer.get(), source_offset,
-                                  &target_buffer, length),
-        IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_buffer_read_data(
+        source_buffer.get(), source_offset, &target_buffer, length))
         << "Read failed";
     return target_buffer;
   }
@@ -340,10 +318,8 @@
              << "Length " << length << " exceeds max";
     }
 
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_write_data(target_buffer.get(),
-                                                 target_offset, &value, length),
-                      IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_buffer_write_data(target_buffer.get(),
+                                               target_offset, &value, length))
         << "Write failed";
     return OkStatus();
   }
@@ -356,10 +332,9 @@
       vm::ref<iree_hal_buffer_t> buffer, absl::Span<const int32_t> shape,
       iree_hal_element_type_t element_type) {
     vm::ref<iree_hal_buffer_view_t> buffer_view;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_create(buffer.get(), shape.data(), shape.size(),
-                                    element_type, allocator_, &buffer_view),
-        IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_buffer_view_create(buffer.get(), shape.data(),
+                                                shape.size(), element_type,
+                                                allocator_, &buffer_view))
         << "Failed to create buffer view";
     return std::move(buffer_view);
   }
@@ -368,11 +343,9 @@
       vm::ref<iree_hal_buffer_view_t> buffer_view,
       absl::Span<const int32_t> indices, absl::Span<const int32_t> lengths) {
     vm::ref<iree_hal_buffer_view_t> new_buffer_view;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_subview(
-            buffer_view.get(), indices.data(), indices.size(), lengths.data(),
-            lengths.size(), allocator_, &new_buffer_view),
-        IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_buffer_view_subview(
+        buffer_view.get(), indices.data(), indices.size(), lengths.data(),
+        lengths.size(), allocator_, &new_buffer_view))
         << "Failed to create subview";
     return std::move(new_buffer_view);
   }
@@ -391,10 +364,8 @@
       vm::ref<iree_hal_buffer_view_t> buffer_view,
       absl::Span<const int32_t> indices) {
     iree_device_size_t offset = 0;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_compute_offset(buffer_view.get(), indices.data(),
-                                            indices.size(), &offset),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_view_compute_offset(
+        buffer_view.get(), indices.data(), indices.size(), &offset));
     return offset;
   }
 
@@ -404,11 +375,9 @@
       absl::Span<const int32_t> lengths) {
     iree_device_size_t start_offset = 0;
     iree_device_size_t subspan_length = 0;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_compute_range(
-            buffer_view.get(), start_indices.data(), start_indices.size(),
-            lengths.data(), lengths.size(), &start_offset, &subspan_length),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_view_compute_range(
+        buffer_view.get(), start_indices.data(), start_indices.size(),
+        lengths.data(), lengths.size(), &start_offset, &subspan_length));
     return std::make_tuple<int32_t, int32_t>(
         static_cast<int32_t>(start_offset),
         static_cast<int32_t>(subspan_length));
@@ -431,9 +400,8 @@
       vm::ref<iree_hal_buffer_view_t> buffer_view) {
     std::array<int32_t, N> value;
     iree_host_size_t rank = 0;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_shape(buffer_view.get(), N, value.data(), &rank),
-        IREE_LOC));
+    RETURN_IF_ERROR(
+        iree_hal_buffer_view_shape(buffer_view.get(), N, value.data(), &rank));
     return value;
   }
 
@@ -472,9 +440,7 @@
             &result_str[0], &actual_length);
         result_str.resize(actual_length);
       } while (iree_status_is_out_of_range(status));
-      if (!iree_status_is_ok(status)) {
-        return FromApiStatus(status, IREE_LOC);
-      }
+      RETURN_IF_ERROR(std::move(status));
       fprintf(stderr, "%s\n", result_str.c_str());
     }
     fprintf(stderr, "\n");
@@ -491,26 +457,23 @@
     IREE_TRACE_SCOPE0("HALModuleState::CommandBufferCreate");
 
     vm::ref<iree_hal_command_buffer_t> command_buffer;
-    RETURN_IF_ERROR(FromApiStatus(iree_hal_command_buffer_create(
-                                      device.get(), modes, command_categories,
-                                      iree_allocator_system(), &command_buffer),
-                                  IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_command_buffer_create(
+        device.get(), modes, command_categories, iree_allocator_system(),
+        &command_buffer))
         << "Failed to create command buffer";
     return command_buffer;
   }
 
   Status CommandBufferBegin(vm::ref<iree_hal_command_buffer_t> command_buffer) {
     IREE_TRACE_SCOPE0("HALModuleState::CommandBufferBegin");
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_command_buffer_begin(command_buffer.get()), IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_command_buffer_begin(command_buffer.get()))
         << "Failed to begin command buffer recording";
     return OkStatus();
   }
 
   Status CommandBufferEnd(vm::ref<iree_hal_command_buffer_t> command_buffer) {
     IREE_TRACE_SCOPE0("HALModuleState::CommandBufferEnd");
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_command_buffer_end(command_buffer.get()), IREE_LOC))
+    RETURN_IF_ERROR(iree_hal_command_buffer_end(command_buffer.get()))
         << "Failed to end command buffer recording";
     return OkStatus();
   }
@@ -527,11 +490,9 @@
     iree_hal_memory_barrier_t global_barrier;
     global_barrier.source_scope = IREE_HAL_ACCESS_SCOPE_DISPATCH_WRITE;
     global_barrier.target_scope = IREE_HAL_ACCESS_SCOPE_DISPATCH_READ;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_command_buffer_execution_barrier(
-                          command_buffer.get(), source_stage_mask,
-                          target_stage_mask, 1, &global_barrier, 0, nullptr),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_command_buffer_execution_barrier(
+        command_buffer.get(), source_stage_mask, target_stage_mask, 1,
+        &global_barrier, 0, nullptr));
     return OkStatus();
   }
 
@@ -540,11 +501,9 @@
       vm::ref<iree_hal_buffer_t> target_buffer, int32_t target_offset,
       int32_t length, uint32_t pattern) {
     IREE_TRACE_SCOPE0("HALModuleState::CommandBufferFillBuffer");
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_command_buffer_fill_buffer(command_buffer.get(),
-                                            target_buffer.get(), target_offset,
-                                            length, &pattern, sizeof(pattern)),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_command_buffer_fill_buffer(
+        command_buffer.get(), target_buffer.get(), target_offset, length,
+        &pattern, sizeof(pattern)));
     return OkStatus();
   }
 
@@ -554,11 +513,9 @@
       vm::ref<iree_hal_buffer_t> target_buffer, int32_t target_offset,
       int32_t length) {
     IREE_TRACE_SCOPE0("HALModuleState::CommandBufferCopyBuffer");
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_command_buffer_copy_buffer(
-            command_buffer.get(), source_buffer.get(), source_offset,
-            target_buffer.get(), target_offset, length),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_command_buffer_copy_buffer(
+        command_buffer.get(), source_buffer.get(), source_offset,
+        target_buffer.get(), target_offset, length));
     return OkStatus();
   }
 
@@ -567,11 +524,9 @@
       vm::ref<iree_hal_executable_layout_t> executable_layout, uint32_t offset,
       absl::Span<const uint32_t> values) {
     IREE_TRACE_SCOPE0("HALModuleState::CommandBufferPushConstants");
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_command_buffer_push_constants(
-                          command_buffer.get(), executable_layout.get(), offset,
-                          values.data(), values.size() * sizeof(uint32_t)),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_command_buffer_push_constants(
+        command_buffer.get(), executable_layout.get(), offset, values.data(),
+        values.size() * sizeof(uint32_t)));
     return OkStatus();
   }
 
@@ -593,11 +548,9 @@
       deferred_releases_.push_back(
           iree_hal_buffer_retain_ref(binding_buffers[i].get()));
     }
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_command_buffer_push_descriptor_set(
-                          command_buffer.get(), executable_layout.get(), set,
-                          binding_structs.size(), binding_structs.data()),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_command_buffer_push_descriptor_set(
+        command_buffer.get(), executable_layout.get(), set,
+        binding_structs.size(), binding_structs.data()));
     return OkStatus();
   }
 
@@ -613,12 +566,10 @@
       dynamic_offset_values[i] =
           static_cast<iree_device_size_t>(dynamic_offsets[i]);
     }
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_command_buffer_bind_descriptor_set(
-                          command_buffer.get(), executable_layout.get(), set,
-                          descriptor_set.get(), dynamic_offset_values.size(),
-                          dynamic_offset_values.data()),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_command_buffer_bind_descriptor_set(
+        command_buffer.get(), executable_layout.get(), set,
+        descriptor_set.get(), dynamic_offset_values.size(),
+        dynamic_offset_values.data()));
     return OkStatus();
   }
 
@@ -627,11 +578,9 @@
       vm::ref<iree_hal_executable_t> executable, int32_t entry_point,
       uint32_t workgroup_x, uint32_t workgroup_y, uint32_t workgroup_z) {
     IREE_TRACE_SCOPE0("HALModuleState::CommandBufferDispatch");
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_command_buffer_dispatch(command_buffer.get(), executable.get(),
-                                         entry_point, workgroup_x, workgroup_y,
-                                         workgroup_z),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_command_buffer_dispatch(
+        command_buffer.get(), executable.get(), entry_point, workgroup_x,
+        workgroup_y, workgroup_z));
     return OkStatus();
   }
 
@@ -640,11 +589,9 @@
       vm::ref<iree_hal_executable_t> executable, int32_t entry_point,
       vm::ref<iree_hal_buffer_t> workgroups_buffer, int32_t workgroups_offset) {
     IREE_TRACE_SCOPE0("HALModuleState::CommandBufferDispatchIndirect");
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_command_buffer_dispatch_indirect(
-                          command_buffer.get(), executable.get(), entry_point,
-                          workgroups_buffer.get(), workgroups_offset),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_command_buffer_dispatch_indirect(
+        command_buffer.get(), executable.get(), entry_point,
+        workgroups_buffer.get(), workgroups_offset));
     return OkStatus();
   }
 
@@ -670,11 +617,9 @@
           static_cast<iree_device_size_t>(binding_lengths[i])};  // length
     }
     vm::ref<iree_hal_descriptor_set_t> descriptor_set;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_descriptor_set_create(
-            device.get(), set_layout.get(), binding_structs.size(),
-            binding_structs.data(), allocator_, &descriptor_set),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_descriptor_set_create(
+        device.get(), set_layout.get(), binding_structs.size(),
+        binding_structs.data(), allocator_, &descriptor_set));
     return std::move(descriptor_set);
   }
 
@@ -697,11 +642,9 @@
                             std::get<2>(bindings[i])};
     }
     vm::ref<iree_hal_descriptor_set_layout_t> descriptor_set_layout;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_descriptor_set_layout_create(
-            device.get(), usage_type, binding_structs.size(),
-            binding_structs.data(), allocator_, &descriptor_set_layout),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_descriptor_set_layout_create(
+        device.get(), usage_type, binding_structs.size(),
+        binding_structs.data(), allocator_, &descriptor_set_layout));
     return std::move(descriptor_set_layout);
   }
 
@@ -731,12 +674,9 @@
       vm::ref<iree_hal_device_t> device, absl::string_view identifier) {
     IREE_TRACE_SCOPE0("HALModuleState::ExecutableCacheCreate");
     vm::ref<iree_hal_executable_cache_t> executable_cache;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_executable_cache_create(
-            device.get(),
-            iree_string_view_t{identifier.data(), identifier.size()},
-            allocator_, &executable_cache),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_executable_cache_create(
+        device.get(), iree_string_view_t{identifier.data(), identifier.size()},
+        allocator_, &executable_cache));
     return std::move(executable_cache);
   }
 
@@ -760,11 +700,9 @@
       vm::ref<iree_vm_ro_byte_buffer_t> executable_data) {
     IREE_TRACE_SCOPE0("HALModuleState::ExecutableCachePrepare");
     vm::ref<iree_hal_executable_t> executable;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_executable_cache_prepare_executable(
-            executable_cache.get(), executable_layout.get(), caching_mode,
-            executable_data->data, allocator_, &executable),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_executable_cache_prepare_executable(
+        executable_cache.get(), executable_layout.get(), caching_mode,
+        executable_data->data, allocator_, &executable));
     return std::move(executable);
   }
 
@@ -778,14 +716,12 @@
       int32_t push_constants) {
     IREE_TRACE_SCOPE0("HALModuleState::ExecutableLayoutCreate");
     vm::ref<iree_hal_executable_layout_t> executable_layout;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_executable_layout_create(
-            device.get(), set_layouts.size(),
-            reinterpret_cast<iree_hal_descriptor_set_layout_t**>(
-                const_cast<vm::ref<iree_hal_descriptor_set_layout_t>*>(
-                    set_layouts.data())),
-            push_constants, allocator_, &executable_layout),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_executable_layout_create(
+        device.get(), set_layouts.size(),
+        reinterpret_cast<iree_hal_descriptor_set_layout_t**>(
+            const_cast<vm::ref<iree_hal_descriptor_set_layout_t>*>(
+                set_layouts.data())),
+        push_constants, allocator_, &executable_layout));
     return std::move(executable_layout);
   }
 
@@ -797,10 +733,8 @@
       vm::ref<iree_hal_device_t> device, uint32_t initial_value) {
     IREE_TRACE_SCOPE0("HALModuleState::SemaphoreCreate");
     vm::ref<iree_hal_semaphore_t> semaphore;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_semaphore_create(device.get(), initial_value,
-                                                allocator_, &semaphore),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_semaphore_create(device.get(), initial_value,
+                                              allocator_, &semaphore));
     return std::move(semaphore);
   }
 
@@ -816,8 +750,7 @@
   Status SemaphoreSignal(vm::ref<iree_hal_semaphore_t> semaphore,
                          uint32_t new_value) {
     IREE_TRACE_SCOPE0("HALModuleState::SemaphoreSignal");
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_semaphore_signal(semaphore.get(), new_value), IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_semaphore_signal(semaphore.get(), new_value));
     return OkStatus();
   }
 
@@ -833,12 +766,11 @@
   StatusOr<int32_t> SemaphoreAwait(vm::ref<iree_hal_semaphore_t> semaphore,
                                    uint32_t new_value) {
     IREE_TRACE_SCOPE0("HALModuleState::SemaphoreAwait");
-    iree_status_t wait_status = iree_hal_semaphore_wait_with_deadline(
-        semaphore.get(), new_value, IREE_TIME_INFINITE_FUTURE);
     // TODO(benvanik): allow for deadline exceeded returns? We don't allow
     // setting deadlines now (and when we do in the future it'll be the fiber
     // manager that  handles them), so any failure indicates total failure.
-    return FromApiStatus(wait_status, IREE_LOC);
+    return iree_hal_semaphore_wait_with_deadline(semaphore.get(), new_value,
+                                                 IREE_TIME_INFINITE_FUTURE);
   }
 
  private:
diff --git a/iree/modules/strings/strings_module.cc b/iree/modules/strings/strings_module.cc
index 0578c08..5cff78f 100644
--- a/iree/modules/strings/strings_module.cc
+++ b/iree/modules/strings/strings_module.cc
@@ -58,10 +58,8 @@
   StatusOr<vm::ref<strings_string_t>> I32ToString(int32_t value) {
     vm::ref<strings_string_t> new_string;
     std::string str = std::to_string(value);
-    RETURN_IF_ERROR(
-        FromApiStatus(strings_string_create(iree_make_cstring_view(str.c_str()),
-                                            allocator_, &new_string),
-                      IREE_LOC));
+    RETURN_IF_ERROR(strings_string_create(iree_make_cstring_view(str.c_str()),
+                                          allocator_, &new_string));
     return new_string;
   }
 
@@ -117,10 +115,8 @@
     StringTensorToStringHelper(str_tensor->values, str_tensor->shape,
                                str_tensor->rank, &str);
 
-    RETURN_IF_ERROR(
-        FromApiStatus(strings_string_create(iree_make_cstring_view(str.c_str()),
-                                            allocator_, &new_string),
-                      IREE_LOC));
+    RETURN_IF_ERROR(strings_string_create(iree_make_cstring_view(str.c_str()),
+                                          allocator_, &new_string));
     return new_string;
   }
 
@@ -129,10 +125,8 @@
       vm::ref<iree_hal_buffer_view_t> hal_buffer_view) {
     const size_t rank = iree_hal_buffer_view_shape_rank(hal_buffer_view.get());
     absl::InlinedVector<int32_t, 6> shape(rank);
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_view_shape(hal_buffer_view.get(), rank,
-                                                 shape.data(), nullptr),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_view_shape(hal_buffer_view.get(), rank,
+                                               shape.data(), nullptr));
 
     size_t num_elements = 1;
     for (auto val : shape) {
@@ -146,10 +140,9 @@
     iree_hal_buffer_t* hal_buffer =
         iree_hal_buffer_view_buffer(hal_buffer_view.get());
     iree_hal_mapped_memory_t tensor_mapping;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_map(hal_buffer, IREE_HAL_MEMORY_ACCESS_READ,
-                            /*byte_offset=*/0, tensor_size, &tensor_mapping),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_map(hal_buffer, IREE_HAL_MEMORY_ACCESS_READ,
+                                        /*byte_offset=*/0, tensor_size,
+                                        &tensor_mapping));
 
     iree_hal_element_type_t type =
         iree_hal_buffer_view_element_type(hal_buffer_view.get());
@@ -199,13 +192,11 @@
         break;
 
       default:
-        return FromApiStatus(iree_make_status(IREE_STATUS_UNIMPLEMENTED),
-                             IREE_LOC);
+        return UnimplementedErrorBuilder(IREE_LOC);
     }
 
     // Unmap used buffer.
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_unmap(hal_buffer, &tensor_mapping), IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_unmap(hal_buffer, &tensor_mapping));
 
     // Place into iree_string_views.
     std::vector<iree_string_view_t> string_views;
@@ -216,11 +207,9 @@
     }
 
     strings_string_tensor_t* string_tensor;
-    RETURN_IF_ERROR(FromApiStatus(
-        strings_string_tensor_create(allocator_, string_views.data(),
-                                     string_views.size(), shape.data(), rank,
-                                     &string_tensor),
-        IREE_LOC));
+    RETURN_IF_ERROR(strings_string_tensor_create(
+        allocator_, string_views.data(), string_views.size(), shape.data(),
+        rank, &string_tensor));
 
     return string_tensor;
   }
@@ -232,15 +221,13 @@
     // The dict must be a simple list, and the indices must be integers.
     if (dict->rank != 1 || iree_hal_buffer_view_element_type(ids.get()) !=
                                IREE_HAL_ELEMENT_TYPE_SINT_32) {
-      return FromApiStatus(iree_make_status(IREE_STATUS_INVALID_ARGUMENT),
-                           IREE_LOC);
+      return InvalidArgumentErrorBuilder(IREE_LOC);
     }
 
     const size_t rank = iree_hal_buffer_view_shape_rank(ids.get());
     absl::InlinedVector<int32_t, 6> shape(rank);
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_shape(ids.get(), rank, shape.data(), nullptr),
-        IREE_LOC));
+    RETURN_IF_ERROR(
+        iree_hal_buffer_view_shape(ids.get(), rank, shape.data(), nullptr));
 
     size_t num_elements = 1;
     for (auto val : shape) {
@@ -252,10 +239,9 @@
     size_t tensor_size = element_size * num_elements;
     iree_hal_buffer_t* hal_buffer = iree_hal_buffer_view_buffer(ids.get());
     iree_hal_mapped_memory_t tensor_mapping;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_map(hal_buffer, IREE_HAL_MEMORY_ACCESS_READ,
-                            /*byte_offset=*/0, tensor_size, &tensor_mapping),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_map(hal_buffer, IREE_HAL_MEMORY_ACCESS_READ,
+                                        /*byte_offset=*/0, tensor_size,
+                                        &tensor_mapping));
     iree_string_view_t str;
     const auto& contents = tensor_mapping.contents;
     std::vector<iree_string_view_t> string_views;
@@ -264,21 +250,18 @@
     for (int32_t *p = (int32_t*)contents.data,
                  *s = (int32_t*)(contents.data + contents.data_length);
          p < s; p++) {
-      RETURN_IF_ERROR(FromApiStatus(
-          strings_string_tensor_get_element(dict.get(), p, 1, &str), IREE_LOC));
+      RETURN_IF_ERROR(
+          strings_string_tensor_get_element(dict.get(), p, 1, &str));
       string_views.push_back(str);
     }
 
     // Unmap used buffer.
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_unmap(hal_buffer, &tensor_mapping), IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_unmap(hal_buffer, &tensor_mapping));
 
     strings_string_tensor_t* string_tensor;
-    RETURN_IF_ERROR(FromApiStatus(
-        strings_string_tensor_create(allocator_, string_views.data(),
-                                     string_views.size(), shape.data(), rank,
-                                     &string_tensor),
-        IREE_LOC));
+    RETURN_IF_ERROR(strings_string_tensor_create(
+        allocator_, string_views.data(), string_views.size(), shape.data(),
+        rank, &string_tensor));
     return string_tensor;
   }
 
@@ -315,11 +298,9 @@
     }
 
     strings_string_tensor_t* string_tensor;
-    RETURN_IF_ERROR(FromApiStatus(
-        strings_string_tensor_create(allocator_, string_views.data(),
-                                     string_views.size(), shape, new_rank,
-                                     &string_tensor),
-        IREE_LOC));
+    RETURN_IF_ERROR(strings_string_tensor_create(
+        allocator_, string_views.data(), string_views.size(), shape, new_rank,
+        &string_tensor));
     return string_tensor;
   }
 
diff --git a/iree/modules/tensorlist/native_module.cc b/iree/modules/tensorlist/native_module.cc
index f11f511..6e43986 100644
--- a/iree/modules/tensorlist/native_module.cc
+++ b/iree/modules/tensorlist/native_module.cc
@@ -73,9 +73,8 @@
              << "expected rank > 0 buffer view";
     }
     absl::InlinedVector<int32_t, 6> shape(rank);
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_shape(tensor.get(), rank, shape.data(), nullptr),
-        IREE_LOC));
+    RETURN_IF_ERROR(
+        iree_hal_buffer_view_shape(tensor.get(), rank, shape.data(), nullptr));
 
     TensorList* list = new TensorList;
     list->Resize(shape[0]);
@@ -89,25 +88,19 @@
       start_indices[0] = i;
       iree_device_size_t start_offset = 0;
       iree_device_size_t subview_length = 0;
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_buffer_view_compute_range(
-              tensor.get(), start_indices.data(), start_indices.size(),
-              lengths.data(), lengths.size(), &start_offset, &subview_length),
-          IREE_LOC));
+      RETURN_IF_ERROR(iree_hal_buffer_view_compute_range(
+          tensor.get(), start_indices.data(), start_indices.size(),
+          lengths.data(), lengths.size(), &start_offset, &subview_length));
       vm::ref<iree_hal_buffer_t> subview_buffer;
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_buffer_subspan(iree_hal_buffer_view_buffer(tensor.get()),
-                                  start_offset, subview_length,
-                                  iree_allocator_system(), &subview_buffer),
-          IREE_LOC));
+      RETURN_IF_ERROR(iree_hal_buffer_subspan(
+          iree_hal_buffer_view_buffer(tensor.get()), start_offset,
+          subview_length, iree_allocator_system(), &subview_buffer));
 
       iree_hal_buffer_view_t* slice = nullptr;
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_buffer_view_create(
-              subview_buffer.get(), shape.data() + 1, shape.size() - 1,
-              iree_hal_buffer_view_element_type(tensor.get()),
-              iree_allocator_system(), &slice),
-          IREE_LOC));
+      RETURN_IF_ERROR(iree_hal_buffer_view_create(
+          subview_buffer.get(), shape.data() + 1, shape.size() - 1,
+          iree_hal_buffer_view_element_type(tensor.get()),
+          iree_allocator_system(), &slice));
       list->SetItem(i, slice);
     }
     return list;
@@ -129,17 +122,13 @@
     iree_hal_element_type_t type =
         iree_hal_buffer_view_element_type(GetItem(0).get());
     absl::InlinedVector<int32_t, 6> shape(rank);
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_view_shape(GetItem(0).get(), rank,
-                                                 shape.data(), nullptr),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_view_shape(GetItem(0).get(), rank,
+                                               shape.data(), nullptr));
     for (size_t i = 0; i < num_tensors; i++) {
       size_t element_rank = iree_hal_buffer_view_shape_rank(GetItem(i).get());
       absl::InlinedVector<int32_t, 6> element_shape(element_rank);
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_buffer_view_shape(GetItem(i).get(), element_rank,
-                                     element_shape.data(), nullptr),
-          IREE_LOC));
+      RETURN_IF_ERROR(iree_hal_buffer_view_shape(
+          GetItem(i).get(), element_rank, element_shape.data(), nullptr));
       if (absl::MakeSpan(shape) != absl::MakeSpan(element_shape) ||
           iree_hal_buffer_view_element_type(GetItem(i).get()) != type) {
         return InvalidArgumentErrorBuilder(IREE_LOC)
@@ -159,17 +148,14 @@
     size_t result_byte_size = num_result_elements * element_size;
     iree_hal_allocator_t* hal_allocator = iree_hal_buffer_allocator(
         iree_hal_buffer_view_buffer(GetItem(0).get()));
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_allocator_allocate_buffer(
-            hal_allocator,
-            static_cast<iree_hal_memory_type_t>(
-                IREE_HAL_MEMORY_TYPE_HOST_LOCAL |
-                IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE),
-            IREE_HAL_BUFFER_USAGE_ALL, result_byte_size, &result_buffer),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_allocator_allocate_buffer(
+        hal_allocator,
+        static_cast<iree_hal_memory_type_t>(
+            IREE_HAL_MEMORY_TYPE_HOST_LOCAL |
+            IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE),
+        IREE_HAL_BUFFER_USAGE_ALL, result_byte_size, &result_buffer));
 
-    RETURN_IF_ERROR(
-        FromApiStatus(CopyTensorBytes(result_buffer.get()), IREE_LOC));
+    RETURN_IF_ERROR(CopyTensorBytes(result_buffer.get()));
 
     absl::InlinedVector<int32_t, 4> result_shape;
     result_shape.push_back(Size());
@@ -177,11 +163,9 @@
       result_shape.push_back(dim);
     }
     vm::ref<iree_hal_buffer_view_t> result_view;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_create(result_buffer.get(), result_shape.data(),
-                                    result_shape.size(), type,
-                                    iree_allocator_system(), &result_view),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_view_create(
+        result_buffer.get(), result_shape.data(), result_shape.size(), type,
+        iree_allocator_system(), &result_view));
     return std::move(result_view);
   }
 
@@ -201,10 +185,8 @@
     iree_hal_element_type_t type =
         iree_hal_buffer_view_element_type(GetItem(0).get());
     absl::InlinedVector<int32_t, 6> shape(rank);
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_buffer_view_shape(GetItem(0).get(), rank,
-                                                 shape.data(), nullptr),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_view_shape(GetItem(0).get(), rank,
+                                               shape.data(), nullptr));
     size_t num_rows = 0;
     for (size_t i = 0; i < num_tensors; i++) {
       size_t element_rank = iree_hal_buffer_view_shape_rank(GetItem(i).get());
@@ -214,10 +196,8 @@
       }
 
       absl::InlinedVector<int32_t, 6> element_shape(element_rank);
-      RETURN_IF_ERROR(FromApiStatus(
-          iree_hal_buffer_view_shape(GetItem(i).get(), element_rank,
-                                     element_shape.data(), nullptr),
-          IREE_LOC));
+      RETURN_IF_ERROR(iree_hal_buffer_view_shape(
+          GetItem(i).get(), element_rank, element_shape.data(), nullptr));
       num_rows += element_shape.front();
 
       if (absl::MakeSpan(shape).subspan(1) !=
@@ -240,17 +220,14 @@
     size_t result_byte_size = num_result_elements * element_size;
     iree_hal_allocator_t* hal_allocator = iree_hal_buffer_allocator(
         iree_hal_buffer_view_buffer(GetItem(0).get()));
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_allocator_allocate_buffer(
-            hal_allocator,
-            static_cast<iree_hal_memory_type_t>(
-                IREE_HAL_MEMORY_TYPE_HOST_LOCAL |
-                IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE),
-            IREE_HAL_BUFFER_USAGE_ALL, result_byte_size, &result_buffer),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_allocator_allocate_buffer(
+        hal_allocator,
+        static_cast<iree_hal_memory_type_t>(
+            IREE_HAL_MEMORY_TYPE_HOST_LOCAL |
+            IREE_HAL_MEMORY_TYPE_DEVICE_VISIBLE),
+        IREE_HAL_BUFFER_USAGE_ALL, result_byte_size, &result_buffer));
 
-    RETURN_IF_ERROR(
-        FromApiStatus(CopyTensorBytes(result_buffer.get()), IREE_LOC));
+    RETURN_IF_ERROR(CopyTensorBytes(result_buffer.get()));
 
     absl::InlinedVector<int32_t, 4> result_shape;
     result_shape.push_back(num_rows);
@@ -258,11 +235,9 @@
       result_shape.push_back(dim);
     }
     vm::ref<iree_hal_buffer_view_t> result_view;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_hal_buffer_view_create(result_buffer.get(), result_shape.data(),
-                                    result_shape.size(), type,
-                                    iree_allocator_system(), &result_view),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_buffer_view_create(
+        result_buffer.get(), result_shape.data(), result_shape.size(), type,
+        iree_allocator_system(), &result_view));
 
     return std::move(result_view);
   }
@@ -359,13 +334,10 @@
   }
   iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(buffer_view);
   iree_hal_mapped_memory_t mapped_memory;
-  RETURN_IF_ERROR(
-      FromApiStatus(iree_hal_buffer_map(buffer, IREE_HAL_MEMORY_ACCESS_READ, 0,
-                                        4, &mapped_memory),
-                    IREE_LOC));
+  RETURN_IF_ERROR(iree_hal_buffer_map(buffer, IREE_HAL_MEMORY_ACCESS_READ, 0, 4,
+                                      &mapped_memory));
   int32_t scalar = *reinterpret_cast<int32_t*>(mapped_memory.contents.data);
-  RETURN_IF_ERROR(
-      FromApiStatus(iree_hal_buffer_unmap(buffer, &mapped_memory), IREE_LOC));
+  RETURN_IF_ERROR(iree_hal_buffer_unmap(buffer, &mapped_memory));
   return scalar;
 }
 
diff --git a/iree/samples/custom_modules/native_module.cc b/iree/samples/custom_modules/native_module.cc
index cc570da..1f1d052 100644
--- a/iree/samples/custom_modules/native_module.cc
+++ b/iree/samples/custom_modules/native_module.cc
@@ -135,16 +135,14 @@
   Status Initialize(int32_t unique_id) {
     // Allocate a unique ID to demonstrate per-context state.
     auto str_buffer = "ctx_" + std::to_string(unique_id);
-    RETURN_IF_ERROR(FromApiStatus(
+    RETURN_IF_ERROR(
         iree_custom_message_create(iree_make_cstring_view(str_buffer.c_str()),
-                                   allocator_, &unique_message_),
-        IREE_LOC));
+                                   allocator_, &unique_message_));
 
     // Setup a host-local allocator we can use because this sample doesn't have
     // a real device allocator.
-    RETURN_IF_ERROR(FromApiStatus(iree_hal_allocator_create_host_local(
-                                      allocator_, &host_local_allocator_),
-                                  IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_allocator_create_host_local(
+        allocator_, &host_local_allocator_));
 
     return OkStatus();
   }
@@ -162,17 +160,13 @@
           string_value.size() + 1, &string_value[0], &actual_length);
       string_value.resize(actual_length);
     } while (iree_status_is_out_of_range(status));
-    if (!iree_status_is_ok(status)) {
-      return FromApiStatus(status, IREE_LOC);
-    }
+    RETURN_IF_ERROR(std::move(status));
 
     // Pack the string contents into a message.
     vm::ref<iree_custom_message_t> message;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_custom_message_create(
-            iree_string_view_t{string_value.data(), string_value.size()},
-            iree_allocator_system(), &message),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_custom_message_create(
+        iree_string_view_t{string_value.data(), string_value.size()},
+        iree_allocator_system(), &message));
     return std::move(message);
   }
 
@@ -183,13 +177,10 @@
     auto input_string =
         absl::string_view(message->value.data, message->value.size);
     vm::ref<iree_hal_buffer_view_t> buffer_view;
-    iree_status_t status = iree_hal_buffer_view_parse(
+    RETURN_IF_ERROR(iree_hal_buffer_view_parse(
         iree_string_view_t{input_string.data(), input_string.size()},
-        host_local_allocator_.get(), allocator_, &buffer_view);
-    if (!iree_status_is_ok(status)) {
-      return FromApiStatus(status, IREE_LOC)
-             << "Parsing value '" << input_string << "'";
-    }
+        host_local_allocator_.get(), allocator_, &buffer_view))
+        << "Parsing value '" << input_string << "'";
     return std::move(buffer_view);
   }
 
@@ -207,10 +198,8 @@
   StatusOr<vm::ref<iree_custom_message_t>> Reverse(
       vm::ref<iree_custom_message_t> message) {
     vm::ref<iree_custom_message_t> reversed_message;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_custom_message_create(message->value, message->allocator,
-                                   &reversed_message),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_custom_message_create(
+        message->value, message->allocator, &reversed_message));
     char* str_ptr = const_cast<char*>(reversed_message->value.data);
     for (int low = 0, high = reversed_message->value.size - 1; low < high;
          ++low, --high) {
diff --git a/iree/tools/benchmark_module_main.cc b/iree/tools/benchmark_module_main.cc
index fd59ed9..c100367 100644
--- a/iree/tools/benchmark_module_main.cc
+++ b/iree/tools/benchmark_module_main.cc
@@ -69,11 +69,9 @@
 Status Run(::benchmark::State& state) {
   IREE_TRACE_SCOPE0("iree-benchmark-module");
 
-  RETURN_IF_ERROR(FromApiStatus(iree_hal_module_register_types(), IREE_LOC))
-      << "registering HAL types";
+  RETURN_IF_ERROR(iree_hal_module_register_types()) << "registering HAL types";
   iree_vm_instance_t* instance = nullptr;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_instance_create(iree_allocator_system(), &instance), IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_instance_create(iree_allocator_system(), &instance))
       << "creating instance";
 
   ASSIGN_OR_RETURN(auto module_data, GetModuleContentsFromFlags());
@@ -88,20 +86,17 @@
   iree_vm_context_t* context = nullptr;
   // Order matters. The input module will likely be dependent on the hal module.
   std::array<iree_vm_module_t*, 2> modules = {hal_module, input_module};
-  RETURN_IF_ERROR(FromApiStatus(iree_vm_context_create_with_modules(
-                                    instance, modules.data(), modules.size(),
-                                    iree_allocator_system(), &context),
-                                IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_context_create_with_modules(
+      instance, modules.data(), modules.size(), iree_allocator_system(),
+      &context))
       << "creating context";
 
   std::string function_name = absl::GetFlag(FLAGS_entry_function);
   iree_vm_function_t function;
-  RETURN_IF_ERROR(FromApiStatus(
-      input_module->lookup_function(
-          input_module->self, IREE_VM_FUNCTION_LINKAGE_EXPORT,
-          iree_string_view_t{function_name.data(), function_name.size()},
-          &function),
-      IREE_LOC))
+  RETURN_IF_ERROR(input_module->lookup_function(
+      input_module->self, IREE_VM_FUNCTION_LINKAGE_EXPORT,
+      iree_string_view_t{function_name.data(), function_name.size()},
+      &function))
       << "looking up function '" << function_name << "'";
 
   RETURN_IF_ERROR(ValidateFunctionAbi(function));
@@ -129,14 +124,12 @@
   // future debugging.
   {
     vm::ref<iree_vm_list_t> outputs;
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_vm_list_create(/*element_type=*/nullptr, output_descs.size(),
-                            iree_allocator_system(), &outputs),
-        IREE_LOC));
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_vm_invoke(context, function, /*policy=*/nullptr, inputs.get(),
-                       outputs.get(), iree_allocator_system()),
-        IREE_LOC));
+    RETURN_IF_ERROR(iree_vm_list_create(/*element_type=*/nullptr,
+                                        output_descs.size(),
+                                        iree_allocator_system(), &outputs));
+    RETURN_IF_ERROR(iree_vm_invoke(context, function, /*policy=*/nullptr,
+                                   inputs.get(), outputs.get(),
+                                   iree_allocator_system()));
   }
 
   for (auto _ : state) {
diff --git a/iree/tools/run_mlir_main.cc b/iree/tools/run_mlir_main.cc
index 1b45aa9..17db785 100644
--- a/iree/tools/run_mlir_main.cc
+++ b/iree/tools/run_mlir_main.cc
@@ -160,10 +160,8 @@
   if (target_backends.empty()) {
     iree_string_view_t* driver_names = nullptr;
     iree_host_size_t driver_count = 0;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_hal_driver_registry_query_available_drivers(
-                          iree_allocator_system(), &driver_names, &driver_count),
-                      IREE_LOC));
+    RETURN_IF_ERROR(iree_hal_driver_registry_query_available_drivers(
+        iree_allocator_system(), &driver_names, &driver_count));
     for (int i = 0; i < driver_count; ++i) {
       target_backends.push_back(
           std::string(driver_names[i].data, driver_names[i].size));
@@ -296,16 +294,14 @@
   ASSIGN_OR_RETURN(auto output_descs, ParseOutputSignature(function));
   // Prepare outputs list to accept the results from the invocation.
   vm::ref<iree_vm_list_t> outputs;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_list_create(/*element_type=*/nullptr, output_descs.size(),
-                          iree_allocator_system(), &outputs),
-      IREE_LOC));
+  RETURN_IF_ERROR(iree_vm_list_create(/*element_type=*/nullptr,
+                                      output_descs.size(),
+                                      iree_allocator_system(), &outputs));
 
   // Synchronously invoke the function.
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_invoke(context, function, /*policy=*/nullptr, inputs.get(),
-                     outputs.get(), iree_allocator_system()),
-      IREE_LOC));
+  RETURN_IF_ERROR(iree_vm_invoke(context, function, /*policy=*/nullptr,
+                                 inputs.get(), outputs.get(),
+                                 iree_allocator_system()));
 
   // Print outputs.
   RETURN_IF_ERROR(PrintVariantList(output_descs, outputs.get()));
@@ -343,11 +339,9 @@
   auto run_function = [&](int ordinal) -> Status {
     iree_vm_function_t function;
     iree_string_view_t export_name_isv;
-    RETURN_IF_ERROR(
-        FromApiStatus(iree_vm_module_lookup_function_by_ordinal(
-                          bytecode_module, IREE_VM_FUNCTION_LINKAGE_EXPORT,
-                          ordinal, &function, &export_name_isv),
-                      IREE_LOC))
+    RETURN_IF_ERROR(iree_vm_module_lookup_function_by_ordinal(
+        bytecode_module, IREE_VM_FUNCTION_LINKAGE_EXPORT, ordinal, &function,
+        &export_name_isv))
         << "Looking up function export " << ordinal;
     absl::string_view export_name(export_name_isv.data, export_name_isv.size);
     if (absl::StartsWith(export_name, "__") ||
@@ -362,10 +356,9 @@
     // runner).
     iree_vm_context_t* context = nullptr;
     std::vector<iree_vm_module_t*> modules = {hal_module, bytecode_module};
-    RETURN_IF_ERROR(FromApiStatus(iree_vm_context_create_with_modules(
-                                      instance, modules.data(), modules.size(),
-                                      iree_allocator_system(), &context),
-                                  IREE_LOC))
+    RETURN_IF_ERROR(iree_vm_context_create_with_modules(
+        instance, modules.data(), modules.size(), iree_allocator_system(),
+        &context))
         << "Creating context";
 
     // Invoke the function and print results.
@@ -398,12 +391,10 @@
   IREE_TRACE_SCOPE0("EvaluateFile");
 
   // TODO(benvanik): move to instance-based registration.
-  RETURN_IF_ERROR(FromApiStatus(iree_hal_module_register_types(), IREE_LOC))
-      << "Registering HAL types";
+  RETURN_IF_ERROR(iree_hal_module_register_types()) << "Registering HAL types";
 
   iree_vm_instance_t* instance = nullptr;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_instance_create(iree_allocator_system(), &instance), IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_instance_create(iree_allocator_system(), &instance))
       << "Create instance";
 
   ASSIGN_OR_RETURN(auto target_backends, GetTargetBackends());
diff --git a/iree/tools/run_module_main.cc b/iree/tools/run_module_main.cc
index 35adf1b..348806a 100644
--- a/iree/tools/run_module_main.cc
+++ b/iree/tools/run_module_main.cc
@@ -71,11 +71,9 @@
 Status Run() {
   IREE_TRACE_SCOPE0("iree-run-module");
 
-  RETURN_IF_ERROR(FromApiStatus(iree_hal_module_register_types(), IREE_LOC))
-      << "registering HAL types";
+  RETURN_IF_ERROR(iree_hal_module_register_types()) << "registering HAL types";
   iree_vm_instance_t* instance = nullptr;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_instance_create(iree_allocator_system(), &instance), IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_instance_create(iree_allocator_system(), &instance))
       << "creating instance";
 
   ASSIGN_OR_RETURN(auto module_data, GetModuleContentsFromFlags());
@@ -90,20 +88,17 @@
   iree_vm_context_t* context = nullptr;
   // Order matters. The input module will likely be dependent on the hal module.
   std::array<iree_vm_module_t*, 2> modules = {hal_module, input_module};
-  RETURN_IF_ERROR(FromApiStatus(iree_vm_context_create_with_modules(
-                                    instance, modules.data(), modules.size(),
-                                    iree_allocator_system(), &context),
-                                IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_context_create_with_modules(
+      instance, modules.data(), modules.size(), iree_allocator_system(),
+      &context))
       << "creating context";
 
   std::string function_name = absl::GetFlag(FLAGS_entry_function);
   iree_vm_function_t function;
-  RETURN_IF_ERROR(FromApiStatus(
-      input_module->lookup_function(
-          input_module->self, IREE_VM_FUNCTION_LINKAGE_EXPORT,
-          iree_string_view_t{function_name.data(), function_name.size()},
-          &function),
-      IREE_LOC))
+  RETURN_IF_ERROR(input_module->lookup_function(
+      input_module->self, IREE_VM_FUNCTION_LINKAGE_EXPORT,
+      iree_string_view_t{function_name.data(), function_name.size()},
+      &function))
       << "looking up function '" << function_name << "'";
 
   RETURN_IF_ERROR(ValidateFunctionAbi(function));
@@ -126,16 +121,14 @@
 
   ASSIGN_OR_RETURN(auto output_descs, ParseOutputSignature(function));
   vm::ref<iree_vm_list_t> outputs;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_list_create(/*element_type=*/nullptr, output_descs.size(),
-                          iree_allocator_system(), &outputs),
-      IREE_LOC));
+  RETURN_IF_ERROR(iree_vm_list_create(/*element_type=*/nullptr,
+                                      output_descs.size(),
+                                      iree_allocator_system(), &outputs));
 
   std::cout << "EXEC @" << function_name << "\n";
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_invoke(context, function, /*policy=*/nullptr, inputs.get(),
-                     outputs.get(), iree_allocator_system()),
-      IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_invoke(context, function, /*policy=*/nullptr,
+                                 inputs.get(), outputs.get(),
+                                 iree_allocator_system()))
       << "invoking function " << function_name;
 
   RETURN_IF_ERROR(PrintVariantList(output_descs, outputs.get()))
diff --git a/iree/tools/vm_util.cc b/iree/tools/vm_util.cc
index 0fd0efd..fb16bd8 100644
--- a/iree/tools/vm_util.cc
+++ b/iree/tools/vm_util.cc
@@ -90,11 +90,10 @@
            << " buffer strings but received " << input_strings.size();
   }
   vm::ref<iree_vm_list_t> variant_list;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_list_create(/*element_type=*/nullptr, input_strings.size(),
-                          iree_allocator_system(), &variant_list),
-      IREE_LOC));
-  for (int i = 0; i < input_strings.size(); ++i) {
+  RETURN_IF_ERROR(iree_vm_list_create(/*element_type=*/nullptr,
+                                      input_strings.size(),
+                                      iree_allocator_system(), &variant_list));
+  for (size_t i = 0; i < input_strings.size(); ++i) {
     auto input_string = input_strings[i];
     auto desc = descs[i];
     std::string desc_str;
@@ -119,23 +118,18 @@
                  << "Converting '" << input_view << "' to i32 when parsing '"
                  << input_string << "'";
         }
-        RETURN_IF_ERROR(FromApiStatus(
-            iree_vm_list_push_value(variant_list.get(), &val), IREE_LOC));
+        RETURN_IF_ERROR(iree_vm_list_push_value(variant_list.get(), &val));
         break;
       }
       case RawSignatureParser::Type::kBuffer: {
         iree_hal_buffer_view_t* buffer_view = nullptr;
-        iree_status_t status = iree_hal_buffer_view_parse(
+        RETURN_IF_ERROR(iree_hal_buffer_view_parse(
             iree_string_view_t{input_string.data(), input_string.size()},
-            allocator, iree_allocator_system(), &buffer_view);
-        if (!iree_status_is_ok(status)) {
-          return FromApiStatus(status, IREE_LOC)
-                 << "Parsing value '" << input_string << "'";
-        }
+            allocator, iree_allocator_system(), &buffer_view))
+            << "Parsing value '" << input_string << "'";
         auto buffer_view_ref = iree_hal_buffer_view_move_ref(buffer_view);
-        RETURN_IF_ERROR(FromApiStatus(
-            iree_vm_list_push_ref_move(variant_list.get(), &buffer_view_ref),
-            IREE_LOC));
+        RETURN_IF_ERROR(
+            iree_vm_list_push_ref_move(variant_list.get(), &buffer_view_ref));
         break;
       }
       default:
@@ -170,8 +164,7 @@
                         iree_vm_list_t* variant_list, std::ostream* os) {
   for (int i = 0; i < iree_vm_list_size(variant_list); ++i) {
     iree_vm_variant_t variant = iree_vm_variant_empty();
-    RETURN_IF_ERROR(FromApiStatus(
-        iree_vm_list_get_variant(variant_list, i, &variant), IREE_LOC))
+    RETURN_IF_ERROR(iree_vm_list_get_variant(variant_list, i, &variant))
         << "variant " << i << "not present";
 
     const auto& desc = descs[i];
@@ -216,9 +209,7 @@
               &result_str[0], &actual_length);
           result_str.resize(actual_length);
         } while (iree_status_is_out_of_range(status));
-        if (!iree_status_is_ok(status)) {
-          return FromApiStatus(status, IREE_LOC);
-        }
+        RETURN_IF_ERROR(status);
 
         *os << result_str << "\n";
         break;
@@ -236,16 +227,12 @@
                     iree_hal_device_t** out_device) {
   LOG(INFO) << "Creating driver and device for '" << driver_name << "'...";
   iree_hal_driver_t* driver = nullptr;
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_hal_driver_registry_create_driver(
-          iree_string_view_t{driver_name.data(), driver_name.size()},
-          iree_allocator_system(), &driver),
-      IREE_LOC))
+  RETURN_IF_ERROR(iree_hal_driver_registry_create_driver(
+      iree_string_view_t{driver_name.data(), driver_name.size()},
+      iree_allocator_system(), &driver))
       << "Creating driver '" << driver_name << "'";
-  RETURN_IF_ERROR(
-      FromApiStatus(iree_hal_driver_create_default_device(
-                        driver, iree_allocator_system(), out_device),
-                    IREE_LOC))
+  RETURN_IF_ERROR(iree_hal_driver_create_default_device(
+      driver, iree_allocator_system(), out_device))
       << "Creating default device for driver '" << driver_name << "'";
   iree_hal_driver_release(driver);
   return OkStatus();
@@ -253,22 +240,19 @@
 
 Status CreateHalModule(iree_hal_device_t* device,
                        iree_vm_module_t** out_module) {
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_hal_module_create(device, iree_allocator_system(), out_module),
-      IREE_LOC))
+  RETURN_IF_ERROR(
+      iree_hal_module_create(device, iree_allocator_system(), out_module))
       << "Creating HAL module";
   return OkStatus();
 }
 
 Status LoadBytecodeModule(absl::string_view module_data,
                           iree_vm_module_t** out_module) {
-  RETURN_IF_ERROR(FromApiStatus(
-      iree_vm_bytecode_module_create(
-          iree_const_byte_span_t{
-              reinterpret_cast<const uint8_t*>(module_data.data()),
-              module_data.size()},
-          iree_allocator_null(), iree_allocator_system(), out_module),
-      IREE_LOC))
+  RETURN_IF_ERROR(iree_vm_bytecode_module_create(
+      iree_const_byte_span_t{
+          reinterpret_cast<const uint8_t*>(module_data.data()),
+          module_data.size()},
+      iree_allocator_null(), iree_allocator_system(), out_module))
       << "Deserializing module";
   return OkStatus();
 }
diff --git a/iree/vm/module_abi_cc.h b/iree/vm/module_abi_cc.h
index 2dbd9f6..03dba94 100644
--- a/iree/vm/module_abi_cc.h
+++ b/iree/vm/module_abi_cc.h
@@ -79,8 +79,7 @@
   NativeModule(const char* name, iree_allocator_t allocator,
                absl::Span<const NativeFunction<State>> dispatch_table)
       : name_(name), allocator_(allocator), dispatch_table_(dispatch_table) {
-    CHECK_OK(
-        FromApiStatus(iree_vm_module_initialize(&interface_, this), IREE_LOC));
+    IREE_CHECK_OK(iree_vm_module_initialize(&interface_, this));
     interface_.destroy = NativeModule::ModuleDestroy;
     interface_.name = NativeModule::ModuleName;
     interface_.signature = NativeModule::ModuleSignature;