Remove RETURN_VOID_NO_BARRIER byte-code.

Unused and obsolete quickened byte-code.

Bug: 170086509
Test: test.py -b --host --64
Change-Id: I1e917c189da7bf64418412522676dc6b081d5c0b
diff --git a/compiler/optimizing/inliner.cc b/compiler/optimizing/inliner.cc
index 719221e..312b8ed 100644
--- a/compiler/optimizing/inliner.cc
+++ b/compiler/optimizing/inliner.cc
@@ -421,7 +421,6 @@
       case Instruction::RETURN_VOID:
       case Instruction::RETURN_WIDE:
       case Instruction::RETURN_OBJECT:
-      case Instruction::RETURN_VOID_NO_BARRIER:
         return false;  // found regular control flow back
       case Instruction::THROW:
         throw_seen = true;
diff --git a/compiler/optimizing/instruction_builder.cc b/compiler/optimizing/instruction_builder.cc
index ee6113f..4364d39 100644
--- a/compiler/optimizing/instruction_builder.cc
+++ b/compiler/optimizing/instruction_builder.cc
@@ -1408,7 +1408,6 @@
           // Primitive, null or j.l.String initialization is permitted.
           break;
         case Instruction::RETURN_VOID:
-        case Instruction::RETURN_VOID_NO_BARRIER:
           break;
         case Instruction::SPUT:
         case Instruction::SPUT_WIDE:
@@ -2697,7 +2696,6 @@
       break;
     }
 
-    case Instruction::RETURN_VOID_NO_BARRIER:
     case Instruction::RETURN_VOID: {
       BuildReturn(instruction, DataType::Type::kVoid, dex_pc);
       break;
@@ -3561,6 +3559,7 @@
     }
 
     case Instruction::UNUSED_3E ... Instruction::UNUSED_43:
+    case Instruction::UNUSED_73:
     case Instruction::UNUSED_79:
     case Instruction::UNUSED_7A:
     case Instruction::UNUSED_E3 ... Instruction::UNUSED_F9: {
diff --git a/dex2oat/Android.bp b/dex2oat/Android.bp
index 5bd7f00..5bae16f 100644
--- a/dex2oat/Android.bp
+++ b/dex2oat/Android.bp
@@ -463,7 +463,6 @@
         "dex2oat_test.cc",
         "dex2oat_vdex_test.cc",
         "dex2oat_image_test.cc",
-        "dex/dex_to_dex_decompiler_test.cc",
         "driver/compiler_driver_test.cc",
         "linker/elf_writer_test.cc",
         "linker/image_test.cc",
diff --git a/dex2oat/dex/dex_to_dex_decompiler_test.cc b/dex2oat/dex/dex_to_dex_decompiler_test.cc
deleted file mode 100644
index e754d5d..0000000
--- a/dex2oat/dex/dex_to_dex_decompiler_test.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "dex_to_dex_decompiler.h"
-
-#include "base/casts.h"
-#include "class_linker.h"
-#include "common_compiler_driver_test.h"
-#include "compiled_method-inl.h"
-#include "compiler_callbacks.h"
-#include "dex/class_accessor-inl.h"
-#include "dex/dex_file.h"
-#include "driver/compiler_driver.h"
-#include "driver/compiler_options.h"
-#include "handle_scope-inl.h"
-#include "mirror/class_loader.h"
-#include "quick_compiler_callbacks.h"
-#include "runtime.h"
-#include "scoped_thread_state_change-inl.h"
-#include "thread.h"
-#include "verifier/verifier_deps.h"
-
-namespace art {
-
-class DexToDexDecompilerTest : public CommonCompilerDriverTest {
- public:
-  void CompileAll(jobject class_loader) REQUIRES(!Locks::mutator_lock_) {
-    TimingLogger timings("DexToDexDecompilerTest::CompileAll", false, false);
-    compiler_options_->image_type_ = CompilerOptions::ImageType::kNone;
-    compiler_options_->SetCompilerFilter(CompilerFilter::kVerify);
-    // Create the main VerifierDeps, here instead of in the compiler since we want to aggregate
-    // the results for all the dex files, not just the results for the current dex file.
-    down_cast<QuickCompilerCallbacks*>(Runtime::Current()->GetCompilerCallbacks())->SetVerifierDeps(
-        new verifier::VerifierDeps(GetDexFiles(class_loader)));
-    std::vector<const DexFile*> dex_files = GetDexFiles(class_loader);
-    CommonCompilerDriverTest::CompileAll(class_loader, dex_files, &timings);
-  }
-
-  void RunTest(const char* dex_name) {
-    Thread* self = Thread::Current();
-    // First load the original dex file.
-    jobject original_class_loader;
-    {
-      ScopedObjectAccess soa(self);
-      original_class_loader = LoadDex(dex_name);
-    }
-    const DexFile* original_dex_file = GetDexFiles(original_class_loader)[0];
-
-    // Load the dex file again and make it writable to quicken them.
-    jobject class_loader;
-    const DexFile* updated_dex_file = nullptr;
-    {
-      ScopedObjectAccess soa(self);
-      class_loader = LoadDex(dex_name);
-      updated_dex_file = GetDexFiles(class_loader)[0];
-      Runtime::Current()->GetClassLinker()->RegisterDexFile(
-          *updated_dex_file, soa.Decode<mirror::ClassLoader>(class_loader));
-    }
-    // The dex files should be identical.
-    int cmp = memcmp(original_dex_file->Begin(),
-                     updated_dex_file->Begin(),
-                     updated_dex_file->Size());
-    ASSERT_EQ(0, cmp);
-
-    updated_dex_file->EnableWrite();
-    CompileAll(class_loader);
-
-    // Unquicken the dex file.
-    for (ClassAccessor accessor : updated_dex_file->GetClasses()) {
-      // Unquicken each method.
-      for (const ClassAccessor::Method& method : accessor.GetMethods()) {
-        CompiledMethod* compiled_method = compiler_driver_->GetCompiledMethod(
-            method.GetReference());
-        ArrayRef<const uint8_t> table;
-        if (compiled_method != nullptr) {
-          table = compiled_method->GetVmapTable();
-        }
-        optimizer::ArtDecompileDEX(*updated_dex_file,
-                                   *accessor.GetCodeItem(method),
-                                   table,
-                                   /* decompile_return_instruction= */ true);
-      }
-    }
-
-    // Make sure after unquickening we go back to the same contents as the original dex file.
-    cmp = memcmp(original_dex_file->Begin(), updated_dex_file->Begin(), updated_dex_file->Size());
-    ASSERT_EQ(0, cmp);
-  }
-};
-
-TEST_F(DexToDexDecompilerTest, VerifierDeps) {
-  RunTest("VerifierDeps");
-}
-
-TEST_F(DexToDexDecompilerTest, DexToDexDecompiler) {
-  RunTest("DexToDexDecompiler");
-}
-
-}  // namespace art
diff --git a/libdexfile/dex/dex_instruction_list.h b/libdexfile/dex/dex_instruction_list.h
index 3672351..9a01bfe 100644
--- a/libdexfile/dex/dex_instruction_list.h
+++ b/libdexfile/dex/dex_instruction_list.h
@@ -134,7 +134,7 @@
   V(0x70, INVOKE_DIRECT, "invoke-direct", k35c, kIndexMethodRef, kContinue | kThrow | kInvoke, 0, kVerifyRegBMethod | kVerifyVarArgNonZero) \
   V(0x71, INVOKE_STATIC, "invoke-static", k35c, kIndexMethodRef, kContinue | kThrow | kInvoke, 0, kVerifyRegBMethod | kVerifyVarArg) \
   V(0x72, INVOKE_INTERFACE, "invoke-interface", k35c, kIndexMethodRef, kContinue | kThrow | kInvoke, 0, kVerifyRegBMethod | kVerifyVarArgNonZero) \
-  V(0x73, RETURN_VOID_NO_BARRIER, "return-void-no-barrier", k10x, kIndexNone, kReturn, 0, kVerifyNothing) \
+  V(0x73, UNUSED_73, "unused-73", k10x, kIndexUnknown, 0, 0, kVerifyError) \
   V(0x74, INVOKE_VIRTUAL_RANGE, "invoke-virtual/range", k3rc, kIndexMethodRef, kContinue | kThrow | kInvoke, 0, kVerifyRegBMethod | kVerifyVarArgRangeNonZero) \
   V(0x75, INVOKE_SUPER_RANGE, "invoke-super/range", k3rc, kIndexMethodRef, kContinue | kThrow | kInvoke, 0, kVerifyRegBMethod | kVerifyVarArgRangeNonZero) \
   V(0x76, INVOKE_DIRECT_RANGE, "invoke-direct/range", k3rc, kIndexMethodRef, kContinue | kThrow | kInvoke, 0, kVerifyRegBMethod | kVerifyVarArgRangeNonZero) \
diff --git a/libdexfile/dex/dex_instruction_utils.h b/libdexfile/dex/dex_instruction_utils.h
index 53beb9f..242bbcd 100644
--- a/libdexfile/dex/dex_instruction_utils.h
+++ b/libdexfile/dex/dex_instruction_utils.h
@@ -65,7 +65,7 @@
 
 constexpr bool IsInstructionInvoke(Instruction::Code opcode) {
   return Instruction::INVOKE_VIRTUAL <= opcode && opcode <= Instruction::INVOKE_INTERFACE_RANGE &&
-      opcode != Instruction::RETURN_VOID_NO_BARRIER;
+      opcode != Instruction::UNUSED_73;
 }
 
 constexpr bool IsInstructionInvokeStatic(Instruction::Code opcode) {
diff --git a/openjdkjvmti/fixed_up_dex_file.cc b/openjdkjvmti/fixed_up_dex_file.cc
index 4aa81ff..9d1fabf 100644
--- a/openjdkjvmti/fixed_up_dex_file.cc
+++ b/openjdkjvmti/fixed_up_dex_file.cc
@@ -39,7 +39,6 @@
 // Runtime includes.
 #include "dex_container.h"
 #include "dex/compact_dex_level.h"
-#include "dex_to_dex_decompiler.h"
 #include "dexlayout.h"
 #include "oat_file.h"
 #include "vdex_file.h"
diff --git a/runtime/Android.bp b/runtime/Android.bp
index f66faf4..e8ebc20 100644
--- a/runtime/Android.bp
+++ b/runtime/Android.bp
@@ -93,7 +93,6 @@
         "debugger.cc",
         "dex/dex_file_annotations.cc",
         "dex_register_location.cc",
-        "dex_to_dex_decompiler.cc",
         "elf_file.cc",
         "exec_utils.cc",
         "fault_handler.cc",
diff --git a/runtime/dex_to_dex_decompiler.cc b/runtime/dex_to_dex_decompiler.cc
deleted file mode 100644
index eac2709..0000000
--- a/runtime/dex_to_dex_decompiler.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "dex_to_dex_decompiler.h"
-
-#include <android-base/logging.h>
-
-#include "base/macros.h"
-#include "base/mutex.h"
-#include "dex/bytecode_utils.h"
-#include "dex/code_item_accessors-inl.h"
-#include "dex/dex_file-inl.h"
-#include "dex/dex_instruction-inl.h"
-#include "quicken_info.h"
-
-namespace art {
-namespace optimizer {
-
-class DexDecompiler {
- public:
-  DexDecompiler(const DexFile& dex_file,
-                const dex::CodeItem& code_item,
-                const ArrayRef<const uint8_t>& quickened_info,
-                bool decompile_return_instruction)
-    : code_item_accessor_(dex_file, &code_item),
-      quicken_info_(quickened_info),
-      decompile_return_instruction_(decompile_return_instruction) {}
-
-  bool Decompile();
-
- private:
-  void DecompileInstanceFieldAccess(Instruction* inst, Instruction::Code new_opcode) {
-    uint16_t index = NextIndex();
-    inst->SetOpcode(new_opcode);
-    inst->SetVRegC_22c(index);
-  }
-
-  void DecompileInvokeVirtual(Instruction* inst, Instruction::Code new_opcode, bool is_range) {
-    const uint16_t index = NextIndex();
-    inst->SetOpcode(new_opcode);
-    if (is_range) {
-      inst->SetVRegB_3rc(index);
-    } else {
-      inst->SetVRegB_35c(index);
-    }
-  }
-
-  void DecompileNop(Instruction* inst) {
-    const uint16_t reference_index = NextIndex();
-    if (reference_index == DexFile::kDexNoIndex16) {
-      // This means it was a normal nop and not a check-cast.
-      return;
-    }
-    const uint16_t type_index = NextIndex();
-    inst->SetOpcode(Instruction::CHECK_CAST);
-    inst->SetVRegA_21c(reference_index);
-    inst->SetVRegB_21c(type_index);
-  }
-
-  uint16_t NextIndex() {
-    DCHECK_LT(quicken_index_, quicken_info_.NumIndices());
-    const uint16_t ret = quicken_info_.GetData(quicken_index_);
-    quicken_index_++;
-    return ret;
-  }
-
-  const CodeItemInstructionAccessor code_item_accessor_;
-  const QuickenInfoTable quicken_info_;
-  const bool decompile_return_instruction_;
-
-  size_t quicken_index_ = 0u;
-
-  DISALLOW_COPY_AND_ASSIGN(DexDecompiler);
-};
-
-bool DexDecompiler::Decompile() {
-  // We need to iterate over the code item, and not over the quickening data,
-  // because the RETURN_VOID quickening is not encoded in the quickening data. Because
-  // unquickening is a rare need and not performance sensitive, it is not worth the
-  // added storage to also add the RETURN_VOID quickening in the quickened data.
-  for (const DexInstructionPcPair& pair : code_item_accessor_) {
-    Instruction* inst = const_cast<Instruction*>(&pair.Inst());
-
-    switch (inst->Opcode()) {
-      case Instruction::RETURN_VOID_NO_BARRIER:
-        if (decompile_return_instruction_) {
-          inst->SetOpcode(Instruction::RETURN_VOID);
-        }
-        break;
-
-      case Instruction::NOP:
-        if (quicken_info_.NumIndices() > 0) {
-          // Only try to decompile NOP if there are more than 0 indices. Not having
-          // any index happens when we unquicken a code item that only has
-          // RETURN_VOID_NO_BARRIER as quickened instruction.
-          DecompileNop(inst);
-        }
-        break;
-
-      default:
-        break;
-    }
-  }
-
-  if (quicken_index_ != quicken_info_.NumIndices()) {
-    if (quicken_index_ == 0) {
-      LOG(WARNING) << "Failed to use any value in quickening info,"
-                   << " potentially due to duplicate methods.";
-    } else {
-      LOG(FATAL) << "Failed to use all values in quickening info."
-                 << " Actual: " << std::hex << quicken_index_
-                 << " Expected: " << quicken_info_.NumIndices();
-    }
-  }
-
-  return true;
-}
-
-bool ArtDecompileDEX(const DexFile& dex_file,
-                     const dex::CodeItem& code_item,
-                     const ArrayRef<const uint8_t>& quickened_info,
-                     bool decompile_return_instruction) {
-  if (quickened_info.size() == 0 && !decompile_return_instruction) {
-    return true;
-  }
-  DexDecompiler decompiler(dex_file, code_item, quickened_info, decompile_return_instruction);
-  return decompiler.Decompile();
-}
-
-}  // namespace optimizer
-}  // namespace art
diff --git a/runtime/dex_to_dex_decompiler.h b/runtime/dex_to_dex_decompiler.h
deleted file mode 100644
index 4b6b0f7..0000000
--- a/runtime/dex_to_dex_decompiler.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ART_RUNTIME_DEX_TO_DEX_DECOMPILER_H_
-#define ART_RUNTIME_DEX_TO_DEX_DECOMPILER_H_
-
-#include "base/array_ref.h"
-
-namespace art {
-
-class DexFile;
-
-namespace dex {
-struct CodeItem;
-}  // namespace dex
-
-namespace optimizer {
-
-// "Decompile", that is unquicken, the code item provided, given the
-// associated quickening data.
-// TODO: code_item isn't really a const element, but changing it
-// to non-const has too many repercussions on the code base. We make it
-// consistent with DexToDexCompiler, but we should really change it to
-// DexFile::CodeItem*.
-bool ArtDecompileDEX(const DexFile& dex_file,
-                     const dex::CodeItem& code_item,
-                     const ArrayRef<const uint8_t>& quickened_data,
-                     bool decompile_return_instruction);
-
-}  // namespace optimizer
-}  // namespace art
-
-#endif  // ART_RUNTIME_DEX_TO_DEX_DECOMPILER_H_
diff --git a/runtime/interpreter/interpreter_switch_impl-inl.h b/runtime/interpreter/interpreter_switch_impl-inl.h
index d7a1b1b..07a04fe 100644
--- a/runtime/interpreter/interpreter_switch_impl-inl.h
+++ b/runtime/interpreter/interpreter_switch_impl-inl.h
@@ -440,11 +440,6 @@
     return true;
   }
 
-  HANDLER_ATTRIBUTES bool RETURN_VOID_NO_BARRIER() {
-    JValue result;
-    return HandleReturn(result);
-  }
-
   HANDLER_ATTRIBUTES bool RETURN_VOID() {
     QuasiAtomic::ThreadFenceForConstructor();
     JValue result;
@@ -1628,6 +1623,10 @@
     return HandleUnused();
   }
 
+  HANDLER_ATTRIBUTES bool UNUSED_73() {
+    return HandleUnused();
+  }
+
   HANDLER_ATTRIBUTES bool UNUSED_79() {
     return HandleUnused();
   }
diff --git a/runtime/interpreter/mterp/arm/control_flow.S b/runtime/interpreter/mterp/arm/control_flow.S
index 2299ef9..2b4cf20 100644
--- a/runtime/interpreter/mterp/arm/control_flow.S
+++ b/runtime/interpreter/mterp/arm/control_flow.S
@@ -167,15 +167,6 @@
     mov    r1, #0
     b      MterpReturn
 
-%def op_return_void_no_barrier():
-    ldr     lr, [rSELF, #THREAD_FLAGS_OFFSET]
-    mov     r0, rSELF
-    ands    lr, #THREAD_SUSPEND_OR_CHECKPOINT_REQUEST
-    blne    MterpSuspendCheck                       @ (self)
-    mov    r0, #0
-    mov    r1, #0
-    b      MterpReturn
-
 %def op_return_wide():
     /*
      * Return a 64-bit value.
diff --git a/runtime/interpreter/mterp/arm64/control_flow.S b/runtime/interpreter/mterp/arm64/control_flow.S
index b634c98..25313d3 100644
--- a/runtime/interpreter/mterp/arm64/control_flow.S
+++ b/runtime/interpreter/mterp/arm64/control_flow.S
@@ -175,18 +175,6 @@
     bl      MterpSuspendCheck           // (self)
     b       .L${opcode}_return
 
-%def op_return_void_no_barrier():
-    ldr     w7, [xSELF, #THREAD_FLAGS_OFFSET]
-    mov     x0, xSELF
-    ands    w7, w7, #THREAD_SUSPEND_OR_CHECKPOINT_REQUEST
-    b.ne    .L${opcode}_check
-.L${opcode}_return:
-    mov     x0, #0
-    b       MterpReturn
-.L${opcode}_check:
-    bl      MterpSuspendCheck           // (self)
-    b       .L${opcode}_return
-
 %def op_return_wide():
     /*
      * Return a 64-bit value.
diff --git a/runtime/interpreter/mterp/arm64ng/control_flow.S b/runtime/interpreter/mterp/arm64ng/control_flow.S
index 0e0b8dd..f2d0559 100644
--- a/runtime/interpreter/mterp/arm64ng/control_flow.S
+++ b/runtime/interpreter/mterp/arm64ng/control_flow.S
@@ -141,12 +141,10 @@
 /*
  * Return a 32-bit value.
  */
-%def op_return(is_object="0", is_void="0", is_wide="0", is_no_barrier="0"):
+%def op_return(is_object="0", is_void="0", is_wide="0"):
     .if $is_void
-      .if !$is_no_barrier
       // Thread fence for constructor
       dmb ishst
-      .endif
     .else
       lsr     w2, wINST, #8               // w2<- AA
       .if $is_wide
@@ -172,16 +170,13 @@
     .cfi_restore_state
 
 %def op_return_object():
-%  op_return(is_object="1", is_void="0", is_wide="0", is_no_barrier="0")
+%  op_return(is_object="1", is_void="0", is_wide="0")
 
 %def op_return_void():
-%  op_return(is_object="0", is_void="1", is_wide="0", is_no_barrier="0")
-
-%def op_return_void_no_barrier():
-%  op_return(is_object="0", is_void="1", is_wide="0", is_no_barrier="1")
+%  op_return(is_object="0", is_void="1", is_wide="0")
 
 %def op_return_wide():
-%  op_return(is_object="0", is_void="0", is_wide="1", is_no_barrier="0")
+%  op_return(is_object="0", is_void="0", is_wide="1")
 
 %def op_throw():
   EXPORT_PC
diff --git a/runtime/interpreter/mterp/arm64ng/other.S b/runtime/interpreter/mterp/arm64ng/other.S
index ace1b09..caaec3d 100644
--- a/runtime/interpreter/mterp/arm64ng/other.S
+++ b/runtime/interpreter/mterp/arm64ng/other.S
@@ -302,6 +302,9 @@
 %def op_unused_43():
 %  unused()
 
+%def op_unused_73():
+%  unused()
+
 %def op_unused_79():
 %  unused()
 
diff --git a/runtime/interpreter/mterp/armng/control_flow.S b/runtime/interpreter/mterp/armng/control_flow.S
index 3d564e7..ab05228 100644
--- a/runtime/interpreter/mterp/armng/control_flow.S
+++ b/runtime/interpreter/mterp/armng/control_flow.S
@@ -141,12 +141,10 @@
 /*
  * Return a 32-bit value.
  */
-%def op_return(is_object="0", is_void="0", is_wide="0", is_no_barrier="0"):
+%def op_return(is_object="0", is_void="0", is_wide="0"):
     .if $is_void
-      .if !$is_no_barrier
       // Thread fence for constructor
       dmb ishst
-      .endif
     .else
       mov     r2, rINST, lsr #8           @ r2<- AA
       .if $is_wide
@@ -172,16 +170,13 @@
     .cfi_restore_state
 
 %def op_return_object():
-%  op_return(is_object="1", is_void="0", is_wide="0", is_no_barrier="0")
+%  op_return(is_object="1", is_void="0", is_wide="0")
 
 %def op_return_void():
-%  op_return(is_object="0", is_void="1", is_wide="0", is_no_barrier="0")
-
-%def op_return_void_no_barrier():
-%  op_return(is_object="0", is_void="1", is_wide="0", is_no_barrier="1")
+%  op_return(is_object="0", is_void="1", is_wide="0")
 
 %def op_return_wide():
-%  op_return(is_object="0", is_void="0", is_wide="1", is_no_barrier="0")
+%  op_return(is_object="0", is_void="0", is_wide="1")
 
 %def op_throw():
   EXPORT_PC
diff --git a/runtime/interpreter/mterp/x86/control_flow.S b/runtime/interpreter/mterp/x86/control_flow.S
index 74b4fad..08dc866 100644
--- a/runtime/interpreter/mterp/x86/control_flow.S
+++ b/runtime/interpreter/mterp/x86/control_flow.S
@@ -174,17 +174,6 @@
     xorl    %ecx, %ecx
     jmp     MterpReturn
 
-%def op_return_void_no_barrier():
-    movl    rSELF, %eax
-    testl   $$(THREAD_SUSPEND_OR_CHECKPOINT_REQUEST), THREAD_FLAGS_OFFSET(%eax)
-    jz      1f
-    movl    %eax, OUT_ARG0(%esp)
-    call    SYMBOL(MterpSuspendCheck)
-1:
-    xorl    %eax, %eax
-    xorl    %ecx, %ecx
-    jmp     MterpReturn
-
 %def op_return_wide():
 /*
  * Return a 64-bit value.
diff --git a/runtime/interpreter/mterp/x86/other.S b/runtime/interpreter/mterp/x86/other.S
index ec556b8..b0fd1ec 100644
--- a/runtime/interpreter/mterp/x86/other.S
+++ b/runtime/interpreter/mterp/x86/other.S
@@ -294,6 +294,9 @@
 %def op_unused_43():
 %  unused()
 
+%def op_unused_73():
+%  unused()
+
 %def op_unused_79():
 %  unused()
 
diff --git a/runtime/interpreter/mterp/x86_64/control_flow.S b/runtime/interpreter/mterp/x86_64/control_flow.S
index 2f3b5e5..3b52c62 100644
--- a/runtime/interpreter/mterp/x86_64/control_flow.S
+++ b/runtime/interpreter/mterp/x86_64/control_flow.S
@@ -165,15 +165,6 @@
     xorq    %rax, %rax
     jmp     MterpReturn
 
-%def op_return_void_no_barrier():
-    movq    rSELF, OUT_ARG0
-    testl   $$(THREAD_SUSPEND_OR_CHECKPOINT_REQUEST), THREAD_FLAGS_OFFSET(OUT_ARG0)
-    jz      1f
-    call    SYMBOL(MterpSuspendCheck)
-1:
-    xorq    %rax, %rax
-    jmp     MterpReturn
-
 %def op_return_wide():
 /*
  * Return a 64-bit value.
diff --git a/runtime/interpreter/mterp/x86_64/other.S b/runtime/interpreter/mterp/x86_64/other.S
index ec76b83..83e14f0 100644
--- a/runtime/interpreter/mterp/x86_64/other.S
+++ b/runtime/interpreter/mterp/x86_64/other.S
@@ -263,6 +263,9 @@
 %def op_unused_43():
 %  unused()
 
+%def op_unused_73():
+%  unused()
+
 %def op_unused_79():
 %  unused()
 
diff --git a/runtime/interpreter/mterp/x86_64ng/control_flow.S b/runtime/interpreter/mterp/x86_64ng/control_flow.S
index 35276d4..e6116dd 100644
--- a/runtime/interpreter/mterp/x86_64ng/control_flow.S
+++ b/runtime/interpreter/mterp/x86_64ng/control_flow.S
@@ -153,9 +153,6 @@
     ret
     CFI_RESTORE_STATE
 
-%def op_return_void_no_barrier():
-%  op_return_void()
-
 %def op_return_wide():
     GET_WIDE_VREG %rax, rINSTq   # eax <- vAA
     // In case we're going back to compiled code, put the
diff --git a/runtime/interpreter/mterp/x86_64ng/other.S b/runtime/interpreter/mterp/x86_64ng/other.S
index bbbf663..078fac5 100644
--- a/runtime/interpreter/mterp/x86_64ng/other.S
+++ b/runtime/interpreter/mterp/x86_64ng/other.S
@@ -239,6 +239,9 @@
 %def op_unused_43():
 %  unused()
 
+%def op_unused_73():
+%  unused()
+
 %def op_unused_79():
 %  unused()
 
diff --git a/runtime/vdex_file.cc b/runtime/vdex_file.cc
index 7a4ef9c..29efd40 100644
--- a/runtime/vdex_file.cc
+++ b/runtime/vdex_file.cc
@@ -34,7 +34,6 @@
 #include "dex/art_dex_file_loader.h"
 #include "dex/class_accessor-inl.h"
 #include "dex/dex_file_loader.h"
-#include "dex_to_dex_decompiler.h"
 #include "gc/heap.h"
 #include "gc/space/image_space.h"
 #include "mirror/class-inl.h"
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc
index 7faf9c2..12abed2 100644
--- a/runtime/verifier/method_verifier.cc
+++ b/runtime/verifier/method_verifier.cc
@@ -1993,20 +1993,6 @@
   return true;
 }
 
-// Returns the index of the first final instance field of the given class, or kDexNoIndex if there
-// is no such field.
-static uint32_t GetFirstFinalInstanceFieldIndex(const DexFile& dex_file, dex::TypeIndex type_idx) {
-  const dex::ClassDef* class_def = dex_file.FindClassDef(type_idx);
-  DCHECK(class_def != nullptr);
-  ClassAccessor accessor(dex_file, *class_def);
-  for (const ClassAccessor::Field& field : accessor.GetInstanceFields()) {
-    if (field.IsFinal()) {
-      return field.GetIndex();
-    }
-  }
-  return dex::kDexNoIndex;
-}
-
 // Setup a register line for the given return instruction.
 template <bool kVerifierDebug>
 static void AdjustReturnLine(MethodVerifier<kVerifierDebug>* verifier,
@@ -2016,7 +2002,6 @@
 
   switch (opcode) {
     case Instruction::RETURN_VOID:
-    case Instruction::RETURN_VOID_NO_BARRIER:
       if (verifier->IsInstanceConstructor()) {
         // Before we mark all regs as conflicts, check that we don't have an uninitialized this.
         line->CheckConstructorReturn(verifier);
@@ -3417,42 +3402,10 @@
                                  false);
       break;
 
-    // Special instructions.
-    case Instruction::RETURN_VOID_NO_BARRIER:
-      if (IsConstructor() && !IsStatic()) {
-        const RegType& declaring_class = GetDeclaringClass();
-        if (declaring_class.IsUnresolvedReference()) {
-          // We must iterate over the fields, even if we cannot use mirror classes to do so. Do it
-          // manually over the underlying dex file.
-          uint32_t first_index = GetFirstFinalInstanceFieldIndex(*dex_file_,
-              dex_file_->GetMethodId(dex_method_idx_).class_idx_);
-          if (first_index != dex::kDexNoIndex) {
-            Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "return-void-no-barrier not expected for field "
-                              << first_index;
-          }
-          break;
-        }
-        ObjPtr<mirror::Class> klass = declaring_class.GetClass();
-        for (uint32_t i = 0, num_fields = klass->NumInstanceFields(); i < num_fields; ++i) {
-          if (klass->GetInstanceField(i)->IsFinal()) {
-            Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "return-void-no-barrier not expected for "
-                << klass->GetInstanceField(i)->PrettyField();
-            break;
-          }
-        }
-      }
-      // Handle this like a RETURN_VOID now. Code is duplicated to separate standard from
-      // quickened opcodes (otherwise this could be a fall-through).
-      if (!IsConstructor()) {
-        if (!GetMethodReturnType().IsConflict()) {
-          Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "return-void not expected";
-        }
-      }
-      break;
-
     /* These should never appear during verification. */
     case Instruction::UNUSED_3E ... Instruction::UNUSED_43:
     case Instruction::UNUSED_E3 ... Instruction::UNUSED_F9:
+    case Instruction::UNUSED_73:
     case Instruction::UNUSED_79:
     case Instruction::UNUSED_7A:
       Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "Unexpected opcode " << inst->DumpString(dex_file_);
diff --git a/test/628-vdex/src/Main.java b/test/628-vdex/src/Main.java
index 7ceab2c..0a012f1 100644
--- a/test/628-vdex/src/Main.java
+++ b/test/628-vdex/src/Main.java
@@ -16,7 +16,6 @@
 
 public class Main {
   Main() {
-    // Will be quickened with RETURN_VOID_NO_BARRIER.
   }
 
   public static void main(String[] args) {
diff --git a/test/674-vdex-uncompress/src/Main.java b/test/674-vdex-uncompress/src/Main.java
index 0a25b56..ce8b7b5 100644
--- a/test/674-vdex-uncompress/src/Main.java
+++ b/test/674-vdex-uncompress/src/Main.java
@@ -16,7 +16,6 @@
 
 public class Main {
   Main() {
-    // Will be quickened with RETURN_VOID_NO_BARRIER.
   }
 
   public static void main(String[] args) {
diff --git a/test/983-source-transform-verify/source_transform_art.cc b/test/983-source-transform-verify/source_transform_art.cc
index fbf25b8..a1916a0 100644
--- a/test/983-source-transform-verify/source_transform_art.cc
+++ b/test/983-source-transform-verify/source_transform_art.cc
@@ -58,8 +58,7 @@
       for (const DexInstructionPcPair& pair : method.GetInstructions()) {
         const Instruction& inst = pair.Inst();
         int forbidden_flags = (Instruction::kVerifyError | Instruction::kVerifyRuntimeOnly);
-        if (inst.Opcode() == Instruction::RETURN_VOID_NO_BARRIER ||
-            (inst.GetVerifyExtraFlags() & forbidden_flags) != 0) {
+        if ((inst.GetVerifyExtraFlags() & forbidden_flags) != 0) {
           LOG(FATAL) << "Unexpected instruction found in " << dex->PrettyMethod(method.GetIndex())
                      << " [Dex PC: 0x" << std::hex << pair.DexPc() << std::dec << "] : "
                      << inst.DumpString(dex.get()) << std::endl;
diff --git a/test/DexToDexDecompiler/Main.java b/test/DexToDexDecompiler/Main.java
index 8f5075a..60f3049 100644
--- a/test/DexToDexDecompiler/Main.java
+++ b/test/DexToDexDecompiler/Main.java
@@ -16,7 +16,6 @@
 
 public class Main {
   Main() {
-    // Will be quickened with RETURN_VOID_NO_BARRIER.
   }
 
   public static void main() {
diff --git a/tools/dexfuzz/src/dexfuzz/rawdex/Instruction.java b/tools/dexfuzz/src/dexfuzz/rawdex/Instruction.java
index 620ea85..a9b93d4 100644
--- a/tools/dexfuzz/src/dexfuzz/rawdex/Instruction.java
+++ b/tools/dexfuzz/src/dexfuzz/rawdex/Instruction.java
@@ -434,7 +434,7 @@
     addOpcodeInfo(Opcode.INVOKE_DIRECT, "invoke-direct", 0x70, new Format35c());
     addOpcodeInfo(Opcode.INVOKE_STATIC, "invoke-static", 0x71, new Format35c());
     addOpcodeInfo(Opcode.INVOKE_INTERFACE, "invoke-interface", 0x72, new Format35c());
-    addOpcodeInfo(Opcode.RETURN_VOID_NO_BARRIER, "return-void-no-barrier", 0x73, new Format10x());
+    addOpcodeInfo(Opcode.UNUSED_73, "unused-73", 0x73, new Format10x());
     addOpcodeInfo(Opcode.INVOKE_VIRTUAL_RANGE, "invoke-virtual/range", 0x74, new Format3rc());
     addOpcodeInfo(Opcode.INVOKE_SUPER_RANGE, "invoke-super/range", 0x75, new Format3rc());
     addOpcodeInfo(Opcode.INVOKE_DIRECT_RANGE, "invoke-direct/range", 0x76, new Format3rc());
diff --git a/tools/dexfuzz/src/dexfuzz/rawdex/Opcode.java b/tools/dexfuzz/src/dexfuzz/rawdex/Opcode.java
index 5c2f081..76e8ef9 100644
--- a/tools/dexfuzz/src/dexfuzz/rawdex/Opcode.java
+++ b/tools/dexfuzz/src/dexfuzz/rawdex/Opcode.java
@@ -132,7 +132,7 @@
   INVOKE_DIRECT,
   INVOKE_STATIC,
   INVOKE_INTERFACE,
-  RETURN_VOID_NO_BARRIER,
+  UNUSED_73,
   INVOKE_VIRTUAL_RANGE,
   INVOKE_SUPER_RANGE,
   INVOKE_DIRECT_RANGE,