diff --git a/compiler/optimizing/scheduler.cc b/compiler/optimizing/scheduler.cc
index 299418a..1cdc98a 100644
--- a/compiler/optimizing/scheduler.cc
+++ b/compiler/optimizing/scheduler.cc
@@ -150,8 +150,7 @@
   DCHECK(heap_location_collector_ != nullptr);
 
   HInstruction* ref = instr->IsPredicatedInstanceFieldGet()
-      // TODO: Remove "OrNull".
-      ? instr->AsPredicatedInstanceFieldGetOrNull()->GetTarget()
+      ? instr->AsPredicatedInstanceFieldGet()->GetTarget()
       : instr->InputAt(0);
   size_t heap_loc = heap_location_collector_->GetFieldHeapLocation(ref, GetFieldInfo(instr));
   // This field access should be analyzed and added to HeapLocationCollector before.
@@ -491,11 +490,9 @@
   DCHECK(instruction != nullptr);
 
   if (instruction->IsIf()) {
-    // TODO: Remove first "OrNull", keep the second.
-    condition = instruction->AsIfOrNull()->InputAt(0)->AsConditionOrNull();
+    condition = instruction->AsIf()->InputAt(0)->AsConditionOrNull();
   } else if (instruction->IsSelect()) {
-    // TODO: Remove first "OrNull", keep the second.
-    condition = instruction->AsSelectOrNull()->GetCondition()->AsConditionOrNull();
+    condition = instruction->AsSelect()->GetCondition()->AsConditionOrNull();
   }
 
   SchedulingNode* condition_node = (condition != nullptr) ? graph.GetNode(condition) : nullptr;
@@ -736,15 +733,10 @@
          instruction->IsClassTableGet() ||
          instruction->IsCurrentMethod() ||
          instruction->IsDivZeroCheck() ||
-         (instruction->IsInstanceFieldGet() &&
-          // TODO: Remove "OrNull".
-          !instruction->AsInstanceFieldGetOrNull()->IsVolatile()) ||
+         (instruction->IsInstanceFieldGet() && !instruction->AsInstanceFieldGet()->IsVolatile()) ||
          (instruction->IsPredicatedInstanceFieldGet() &&
-          // TODO: Remove "OrNull".
-          !instruction->AsPredicatedInstanceFieldGetOrNull()->IsVolatile()) ||
-         (instruction->IsInstanceFieldSet() &&
-          // TODO: Remove "OrNull".
-          !instruction->AsInstanceFieldSetOrNull()->IsVolatile()) ||
+          !instruction->AsPredicatedInstanceFieldGet()->IsVolatile()) ||
+         (instruction->IsInstanceFieldSet() && !instruction->AsInstanceFieldSet()->IsVolatile()) ||
          instruction->IsInstanceOf() ||
          instruction->IsInvokeInterface() ||
          instruction->IsInvokeStaticOrDirect() ||
@@ -760,12 +752,8 @@
          instruction->IsReturn() ||
          instruction->IsReturnVoid() ||
          instruction->IsSelect() ||
-         (instruction->IsStaticFieldGet() &&
-          // TODO: Remove "OrNull".
-          !instruction->AsStaticFieldGetOrNull()->IsVolatile()) ||
-         (instruction->IsStaticFieldSet() &&
-          // TODO: Remove "OrNull".
-          !instruction->AsStaticFieldSetOrNull()->IsVolatile()) ||
+         (instruction->IsStaticFieldGet() && !instruction->AsStaticFieldGet()->IsVolatile()) ||
+         (instruction->IsStaticFieldSet() && !instruction->AsStaticFieldSet()->IsVolatile()) ||
          instruction->IsSuspendCheck() ||
          instruction->IsTypeConversion();
 }
