diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index bda5f7c..75523f1 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -1103,19 +1103,6 @@
    */
   int recalc_luma_mc_data;
 
-  /*! \brief Likelihood of an edge existing in the current coding block.
-   *
-   * The likelihood of an edge existing in the block (using partial Canny edge
-   * detection). For reference, 556 is the value returned for a solid
-   * vertical black/white edge.
-   * The edge strengths are used in wedge_search.
-   */
-  uint16_t edge_strength;
-  //! The strongest edge strength seen along the x axis.
-  uint16_t edge_strength_x;
-  //! The strongest edge strength seen along the y axis.
-  uint16_t edge_strength_y;
-
   /*! \brief Data structure to speed up intrabc search.
    *
    * Contains the hash table, hash function, and buffer used for intrabc.
diff --git a/av1/encoder/compound_type.c b/av1/encoder/compound_type.c
index 6deb4aa..cb1a554e 100644
--- a/av1/encoder/compound_type.c
+++ b/av1/encoder/compound_type.c
@@ -100,9 +100,7 @@
                                        const AV1_COMP *const cpi) {
   // Enable wedge search if source variance and edge strength are above
   // the thresholds.
-  return x->source_variance >
-             cpi->sf.inter_sf.disable_wedge_search_var_thresh &&
-         x->edge_strength > cpi->sf.inter_sf.disable_wedge_search_edge_thresh;
+  return x->source_variance > cpi->sf.inter_sf.disable_wedge_search_var_thresh;
 }
 
 static INLINE bool enable_wedge_interinter_search(MACROBLOCK *const x,
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 4880410..d8b8fd5 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -688,20 +688,6 @@
   }
 }
 
-static EdgeInfo edge_info(const struct buf_2d *ref, const BLOCK_SIZE bsize,
-                          const bool high_bd, const int bd) {
-  const int width = block_size_wide[bsize];
-  const int height = block_size_high[bsize];
-  // Implementation requires width to be a multiple of 8. It also requires
-  // height to be a multiple of 4, but this is always the case.
-  assert(height % 4 == 0);
-  if (width % 8 != 0) {
-    EdgeInfo ei = { .magnitude = 0, .x = 0, .y = 0 };
-    return ei;
-  }
-  return av1_edge_exists(ref->buf, ref->stride, width, height, high_bd, bd);
-}
-
 static int use_pb_simple_motion_pred_sse(const AV1_COMP *const cpi) {
   // TODO(debargha, yuec): Not in use, need to implement a speed feature
   // utilizing this data point, and replace '0' by the corresponding speed
@@ -806,20 +792,6 @@
                               &x->simple_motion_pred_sse, &var);
   }
 
-  // If the threshold for disabling wedge search is zero, it means the feature
-  // should not be used. Use a value that will always succeed in the check.
-  if (cpi->sf.inter_sf.disable_wedge_search_edge_thresh == 0) {
-    x->edge_strength = UINT16_MAX;
-    x->edge_strength_x = UINT16_MAX;
-    x->edge_strength_y = UINT16_MAX;
-  } else {
-    EdgeInfo ei =
-        edge_info(&x->plane[0].src, bsize, is_cur_buf_hbd(xd), xd->bd);
-    x->edge_strength = ei.magnitude;
-    x->edge_strength_x = ei.x;
-    x->edge_strength_y = ei.y;
-  }
-
   // Initialize default mode evaluation params
   set_mode_eval_params(cpi, x, DEFAULT_EVAL);
 
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index b1318e2..fee7987 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -312,7 +312,6 @@
   sf->part_sf.prune_ext_partition_types_search_level = 1;
   sf->part_sf.simple_motion_search_prune_rect = 1;
 
-  sf->inter_sf.disable_wedge_search_edge_thresh = 0;
   sf->inter_sf.disable_wedge_search_var_thresh = 0;
   // TODO(debargha): Test, tweak and turn on either 1 or 2
   sf->inter_sf.inter_mode_rd_model_estimation = 1;
@@ -421,7 +420,6 @@
     sf->inter_sf.adaptive_rd_thresh = 1;
     sf->inter_sf.comp_inter_joint_search_thresh = BLOCK_SIZES_ALL;
     sf->inter_sf.disable_interinter_wedge_newmv_search = 1;
-    sf->inter_sf.disable_wedge_search_edge_thresh = 0;
     sf->inter_sf.disable_wedge_search_var_thresh = 100;
     sf->inter_sf.fast_interintra_wedge_search = 1;
     sf->inter_sf.fast_wedge_sign_estimate = 1;
@@ -648,7 +646,6 @@
 
   // TODO(debargha): Test, tweak and turn on either 1 or 2
   sf->inter_sf.inter_mode_rd_model_estimation = 0;
-  sf->inter_sf.disable_wedge_search_edge_thresh = 0;
   sf->inter_sf.disable_wedge_search_var_thresh = 0;
   sf->inter_sf.model_based_post_interp_filter_breakout = 1;
   sf->inter_sf.prune_compound_using_single_ref = 0;
@@ -698,7 +695,6 @@
     sf->inter_sf.selective_ref_frame = 2;
     sf->inter_sf.skip_repeated_newmv = 1;
     sf->inter_sf.disable_wedge_search_var_thresh = 0;
-    sf->inter_sf.disable_wedge_search_edge_thresh = 0;
     sf->inter_sf.prune_comp_type_by_comp_avg = 1;
     sf->inter_sf.prune_motion_mode_level = 2;
     sf->inter_sf.prune_single_motion_modes_by_simple_trans = 1;
@@ -731,7 +727,6 @@
 
     sf->inter_sf.adaptive_rd_thresh = 1;
     sf->inter_sf.comp_inter_joint_search_thresh = BLOCK_SIZES_ALL;
-    sf->inter_sf.disable_wedge_search_edge_thresh = 0;
     sf->inter_sf.disable_wedge_search_var_thresh = 100;
     sf->inter_sf.fast_wedge_sign_estimate = 1;
     sf->inter_sf.prune_comp_type_by_comp_avg = 2;
@@ -1004,7 +999,6 @@
   inter_sf->alt_ref_search_fp = 0;
   inter_sf->selective_ref_frame = 0;
   inter_sf->prune_ref_frame_for_rect_partitions = 0;
-  inter_sf->disable_wedge_search_edge_thresh = 0;
   inter_sf->disable_wedge_search_var_thresh = 0;
   inter_sf->fast_wedge_sign_estimate = 0;
   inter_sf->prune_wedge_pred_diff_based = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 09bf5cc..1c2e903 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -624,10 +624,6 @@
   // De-couple wedge and mode search during interintra RDO.
   int fast_interintra_wedge_search;
 
-  // Only enable wedge search if the edge strength is greater than
-  // this threshold. A value of 0 signals that this check is disabled.
-  unsigned int disable_wedge_search_edge_thresh;
-
   // Only enable wedge search if the variance is above this threshold.
   unsigned int disable_wedge_search_var_thresh;
 
