diff --git a/av1/av1.cmake b/av1/av1.cmake
index efbe26a..d9aca4c 100644
--- a/av1/av1.cmake
+++ b/av1/av1.cmake
@@ -411,11 +411,9 @@
       "${AOM_ROOT}/av1/common/x86/intra_edge_sse4.c")
 endif ()
 
-if (CONFIG_FILTER_INTRA)
-  set(AOM_AV1_COMMON_INTRIN_SSE4_1
-      ${AOM_AV1_COMMON_INTRIN_SSE4_1}
-      "${AOM_ROOT}/av1/common/x86/filterintra_sse4.c")
-endif ()
+set(AOM_AV1_COMMON_INTRIN_SSE4_1
+    ${AOM_AV1_COMMON_INTRIN_SSE4_1}
+    "${AOM_ROOT}/av1/common/x86/filterintra_sse4.c")
 
 set(AOM_AV1_COMMON_SOURCES
     ${AOM_AV1_COMMON_SOURCES}
diff --git a/av1/common/av1_rtcd_defs.pl b/av1/common/av1_rtcd_defs.pl
index aa8dc47..8012140 100755
--- a/av1/common/av1_rtcd_defs.pl
+++ b/av1/common/av1_rtcd_defs.pl
@@ -162,10 +162,8 @@
 
 
 # FILTER_INTRA predictor functions
-if (aom_config("CONFIG_FILTER_INTRA") eq "yes") {
-  add_proto qw/void av1_filter_intra_predictor/, "uint8_t *dst, ptrdiff_t stride, TX_SIZE tx_size, const uint8_t *above, const uint8_t *left, int mode";
-  specialize qw/av1_filter_intra_predictor sse4_1/;
-}
+add_proto qw/void av1_filter_intra_predictor/, "uint8_t *dst, ptrdiff_t stride, TX_SIZE tx_size, const uint8_t *above, const uint8_t *left, int mode";
+specialize qw/av1_filter_intra_predictor sse4_1/;
 
 # High bitdepth functions
 
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index dd81492..8f71d5d 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -178,7 +178,6 @@
   uint16_t palette_colors[3 * PALETTE_MAX_SIZE];
 } PALETTE_MODE_INFO;
 
-#if CONFIG_FILTER_INTRA
 typedef struct {
   uint8_t use_filter_intra;
   FILTER_INTRA_MODE filter_intra_mode;
@@ -187,7 +186,6 @@
 static const PREDICTION_MODE fimode_to_intradir[FILTER_INTRA_MODES] = {
   DC_PRED, V_PRED, H_PRED, D157_PRED, DC_PRED
 };
-#endif  // CONFIG_FILTER_INTRA
 
 #if CONFIG_RD_DEBUG
 #define TXB_COEFF_COST_MAP_SIZE (MAX_MIB_SIZE)
@@ -257,9 +255,8 @@
   TX_TYPE txk_type[TXK_TYPE_BUF_LEN];
 #endif
 
-#if CONFIG_FILTER_INTRA
   FILTER_INTRA_MODE_INFO filter_intra_mode_info;
-#endif  // CONFIG_FILTER_INTRA
+
   // The actual prediction angle is the base angle + (angle_delta * step).
   int8_t angle_delta[PLANE_TYPES];
 
@@ -783,7 +780,6 @@
   0, 90, 180, 45, 135, 113, 157, 203, 67, 0, 0, 0, 0,
 };
 
-#if CONFIG_FILTER_INTRA
 static INLINE int av1_filter_intra_allowed_txsize(TX_SIZE tx) {
   if (tx == TX_INVALID) return 0;
 
@@ -805,7 +801,6 @@
   }
   return TX_INVALID;
 }
-#endif
 
 // Converts block_index for given transform size to index of the block in raster
 // order.
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index a1c06b7..20236e8 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -707,10 +707,8 @@
   AVERAGE_TILE_CDFS(palette_uv_size_cdf)
   AVERAGE_TILE_CDFS(palette_y_color_index_cdf)
   AVERAGE_TILE_CDFS(palette_uv_color_index_cdf)
-#if CONFIG_FILTER_INTRA
   AVERAGE_TILE_CDFS(filter_intra_cdfs)
   AVERAGE_TILE_CDFS(filter_intra_mode_cdf)
-#endif
   AVERAGE_TILE_CDFS(palette_y_mode_cdf)
   AVERAGE_TILE_CDFS(palette_uv_mode_cdf)
 #if CONFIG_EXT_INTRA_MOD
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index ac1b6fb..7616afc 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -589,7 +589,6 @@
     };
 #endif  // CONFIG_JNT_COMP
 
-#if CONFIG_FILTER_INTRA
 static const aom_cdf_prob default_filter_intra_mode_cdf[CDF_SIZE(
     FILTER_INTRA_MODES)] = { AOM_CDF5(14259, 17304, 20463, 29377) };
 
@@ -603,7 +602,6 @@
       { AOM_CDF2(27767) }, { AOM_CDF2(27767) }, { AOM_CDF2(27378) },
       { AOM_CDF2(27378) },
     };
-#endif  // CONFIG_FILTER_INTRA
 
 // FIXME(someone) need real defaults here
 static const aom_cdf_prob default_seg_tree_cdf[CDF_SIZE(MAX_SEGMENTS)] = {
@@ -708,7 +706,6 @@
     default_uv_mode_cdf[INTRA_MODES][CDF_SIZE(UV_INTRA_MODES)] =
 #endif  // CONFIG_CFL
       {
-#if CONFIG_FILTER_INTRA
           { AOM_CDF13(17902, 18828, 21117, 21487, 21924, 22484, 23588, 24669,
                       25177, 28731, 29903, 31509) },
           { AOM_CDF13(9654, 23559, 23873, 24050, 24203, 24929, 25057, 25286,
@@ -735,34 +732,6 @@
                       23685, 28079, 29091, 32028) },
           { AOM_CDF13(13638, 16789, 19763, 19903, 19995, 20201, 20405, 20861,
                       21174, 22802, 23566, 24754) },
-#else
-          { AOM_CDF13(23552, 25936, 28623, 29033, 29395, 29892, 30252, 30905,
-                      31370, 31980, 32293, 32660) },
-          { AOM_CDF13(2944, 26431, 27553, 27746, 28022, 29080, 29204, 29377,
-                      30264, 31206, 31613, 32418) },
-          { AOM_CDF13(4352, 5120, 27952, 28117, 28473, 28759, 29563, 30864,
-                      31051, 31694, 32073, 32435) },
-          { AOM_CDF13(17664, 20288, 21839, 26072, 26420, 26972, 27240, 28565,
-                      30914, 31694, 32083, 32591) },
-          { AOM_CDF13(16640, 18390, 20233, 20557, 25162, 27789, 29397, 29895,
-                      30369, 31497, 32025, 32642) },
-          { AOM_CDF13(13952, 17947, 18918, 19206, 21131, 30668, 31061, 31317,
-                      31838, 32137, 32342, 32547) },
-          { AOM_CDF13(15872, 16990, 21479, 21732, 24134, 24854, 30296, 30887,
-                      31163, 31902, 32218, 32702) },
-          { AOM_CDF13(16256, 17280, 23081, 24039, 24457, 24838, 25346, 30329,
-                      30908, 31746, 32206, 32639) },
-          { AOM_CDF13(14720, 19249, 20501, 22079, 22439, 23218, 23463, 24107,
-                      30308, 31379, 31866, 32556) },
-          { AOM_CDF13(16768, 19967, 22374, 22976, 23836, 24050, 24642, 25760,
-                      26653, 29585, 30937, 32518) },
-          { AOM_CDF13(16768, 20751, 23026, 23591, 24299, 24516, 24981, 25876,
-                      26806, 29520, 31286, 32455) },
-          { AOM_CDF13(17536, 20055, 22965, 23507, 24210, 24398, 25098, 26366,
-                      27033, 29674, 30689, 32530) },
-          { AOM_CDF13(17536, 22753, 27126, 27353, 27571, 28139, 28505, 29198,
-                      29886, 30801, 31335, 32054) },
-#endif
 #if CONFIG_CFL
       },
       {
@@ -1095,7 +1064,6 @@
 // It is possible to re-train this model and bring back the 0.14% loss in CIF
 // set key frame coding. This reduction in context model does not change the
 // key frame coding stats for mid and high resolution sets.
-#if CONFIG_FILTER_INTRA
 const aom_cdf_prob
     default_kf_y_mode_cdf[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][CDF_SIZE(
         INTRA_MODES)] = {
@@ -1150,72 +1118,6 @@
         { AOM_CDF13(5612, 6462, 8166, 8737, 14316, 17802, 21788, 25554, 26080,
                     30083, 30983, 32457) } }
     };
-#else
-const aom_cdf_prob
-    default_kf_y_mode_cdf[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][CDF_SIZE(
-        INTRA_MODES)] = {
-      {
-          { AOM_CDF13(14208, 17049, 20482, 21400, 22520, 23261, 23963, 25010,
-                      25828, 28398, 29394, 30738) },
-          { AOM_CDF13(10496, 18295, 19872, 20945, 21933, 22818, 23334, 24033,
-                      24996, 27652, 29060, 30071) },
-          { AOM_CDF13(5120, 6461, 19840, 20310, 21151, 21506, 22535, 23900,
-                      24281, 26958, 27680, 29636) },
-          { AOM_CDF13(12544, 15177, 17666, 19855, 21147, 22017, 22797, 24514,
-                      25779, 28716, 29772, 31267) },
-          { AOM_CDF13(7552, 9909, 11908, 13141, 18765, 22029, 23872, 24920,
-                      25674, 29031, 30244, 31684) },
-      },
-      {
-          { AOM_CDF13(3968, 17613, 19125, 19550, 20305, 21908, 22274, 22719,
-                      23959, 26970, 29013, 29843) },
-          { AOM_CDF13(3072, 21231, 21863, 22306, 22674, 23414, 23517, 23798,
-                      24770, 27032, 29016, 29636) },
-          { AOM_CDF13(2560, 9825, 15681, 16370, 17054, 17687, 18236, 19273,
-                      20311, 24863, 26825, 28756) },
-          { AOM_CDF13(6912, 15140, 16485, 18364, 19181, 20394, 20663, 22098,
-                      23936, 27555, 29704, 30849) },
-          { AOM_CDF13(2944, 13101, 14006, 14974, 17818, 21093, 21930, 22566,
-                      24137, 27732, 29814, 30904) },
-      },
-      {
-          { AOM_CDF13(11392, 12961, 20901, 21544, 22490, 22928, 23888, 25214,
-                      25777, 28256, 29102, 30513) },
-          { AOM_CDF13(8064, 13595, 18888, 19616, 20765, 21454, 21990, 23103,
-                      23980, 26772, 28070, 29197) },
-          { AOM_CDF13(4352, 5059, 21705, 22099, 22703, 22846, 23679, 25469,
-                      25728, 27919, 28484, 30215) },
-          { AOM_CDF13(10752, 12277, 16471, 18276, 19443, 19917, 21158, 23881,
-                      24892, 27709, 28771, 30274) },
-          { AOM_CDF13(8320, 10000, 14147, 15330, 19197, 20923, 22954, 24541,
-                      25285, 28407, 29431, 30953) },
-      },
-      {
-          { AOM_CDF13(10240, 12819, 15545, 18248, 19779, 20932, 21899, 23377,
-                      25448, 28730, 29936, 31536) },
-          { AOM_CDF13(7552, 15309, 16645, 19760, 20653, 21650, 22221, 23273,
-                      25509, 28683, 30153, 31192) },
-          { AOM_CDF13(5248, 6840, 16129, 17940, 19069, 19660, 20588, 22760,
-                      23927, 27538, 28397, 30725) },
-          { AOM_CDF13(11008, 11903, 13794, 21320, 21931, 22310, 22546, 25375,
-                      27347, 29800, 30761, 31833) },
-          { AOM_CDF13(6272, 8678, 10313, 13073, 16823, 19980, 21520, 23242,
-                      25344, 28797, 30405, 31940) },
-      },
-      {
-          { AOM_CDF13(7296, 9304, 11772, 12529, 18014, 20418, 23076, 24662,
-                      25549, 29074, 30392, 31773) },
-          { AOM_CDF13(7168, 11687, 13541, 14431, 18214, 20761, 22269, 23320,
-                      24633, 28339, 30193, 31268) },
-          { AOM_CDF13(3584, 4428, 13496, 14189, 17372, 18617, 20609, 22615,
-                      23270, 27280, 28305, 30602) },
-          { AOM_CDF13(7424, 8834, 10499, 14357, 17671, 19150, 20460, 23235,
-                      24391, 28351, 29843, 31481) },
-          { AOM_CDF13(4480, 5888, 7093, 7902, 18290, 22123, 24511, 25532, 26360,
-                      29653, 30954, 32215) },
-      },
-    };
-#endif  // CONFIG_FILTER_INTRA
 
 #if CONFIG_EXT_INTRA_MOD
 static const aom_cdf_prob default_angle_delta_cdf[DIRECTIONAL_MODES][CDF_SIZE(
@@ -1268,10 +1170,8 @@
   av1_copy(fc->interintra_mode_cdf, default_interintra_mode_cdf);
   av1_copy(fc->seg.pred_cdf, default_segment_pred_cdf);
   av1_copy(fc->seg.tree_cdf, default_seg_tree_cdf);
-#if CONFIG_FILTER_INTRA
   av1_copy(fc->filter_intra_cdfs, default_filter_intra_cdfs);
   av1_copy(fc->filter_intra_mode_cdf, default_filter_intra_mode_cdf);
-#endif  // CONFIG_FILTER_INTRA
   av1_copy(fc->switchable_restore_cdf, default_switchable_restore_cdf);
   av1_copy(fc->wiener_restore_cdf, default_wiener_restore_cdf);
   av1_copy(fc->sgrproj_restore_cdf, default_sgrproj_restore_cdf);
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index cdad338..fc298c4 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -147,10 +147,8 @@
   aom_cdf_prob intrabc_cdf[CDF_SIZE(2)];
   int initialized;
   struct segmentation_probs seg;
-#if CONFIG_FILTER_INTRA
   aom_cdf_prob filter_intra_cdfs[TX_SIZES_ALL][CDF_SIZE(2)];
   aom_cdf_prob filter_intra_mode_cdf[CDF_SIZE(FILTER_INTRA_MODES)];
-#endif  // CONFIG_FILTER_INTRA
   aom_cdf_prob switchable_restore_cdf[CDF_SIZE(RESTORE_SWITCHABLE_TYPES)];
   aom_cdf_prob wiener_restore_cdf[CDF_SIZE(2)];
   aom_cdf_prob sgrproj_restore_cdf[CDF_SIZE(2)];
@@ -287,10 +285,8 @@
   unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
                            [TX_TYPES];
 #endif  // CONFIG_ENTROPY_STATS
-#if CONFIG_FILTER_INTRA
   unsigned int filter_intra_mode[FILTER_INTRA_MODES];
   unsigned int filter_intra_tx[TX_SIZES_ALL][2];
-#endif  // CONFIG_FILTER_INTRA
 } FRAME_COUNTS;
 
 extern const aom_cdf_prob default_kf_y_mode_cdf[KF_MODE_CONTEXTS]
diff --git a/av1/common/enums.h b/av1/common/enums.h
index 6d95a84..61a7ccb 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -505,8 +505,6 @@
   COMPOUND_TYPES,
 } COMPOUND_TYPE;
 
-// TODO(huisu): Consider adding FILTER_SMOOTH_PRED to "FILTER_INTRA_MODE".
-#if CONFIG_FILTER_INTRA
 typedef enum ATTRIBUTE_PACKED {
   FILTER_DC_PRED,
   FILTER_V_PRED,
@@ -515,7 +513,6 @@
   FILTER_PAETH_PRED,
   FILTER_INTRA_MODES,
 } FILTER_INTRA_MODE;
-#endif  // CONFIG_FILTER_INTRA
 
 #define DIRECTIONAL_MODES 8
 #define MAX_ANGLE_DELTA 3
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 4d24691..fb6b571 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -2301,9 +2301,7 @@
       interintra_to_intra_mode[xd->mi[0]->mbmi.interintra_mode];
   xd->mi[0]->mbmi.angle_delta[PLANE_TYPE_Y] = 0;
   xd->mi[0]->mbmi.angle_delta[PLANE_TYPE_UV] = 0;
-#if CONFIG_FILTER_INTRA
   xd->mi[0]->mbmi.filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
   xd->mi[0]->mbmi.use_intrabc = 0;
 
   av1_predict_intra_block(
diff --git a/av1/common/reconintra.c b/av1/common/reconintra.c
index d4dd816..34ee91a 100644
--- a/av1/common/reconintra.c
+++ b/av1/common/reconintra.c
@@ -1089,7 +1089,6 @@
   }
 }
 
-#if CONFIG_FILTER_INTRA
 DECLARE_ALIGNED(16, const int8_t,
                 av1_filter_intra_taps[FILTER_INTRA_MODES][8][8]) = {
   {
@@ -1242,7 +1241,6 @@
     dst += stride;
   }
 }
-#endif  // CONFIG_FILTER_INTRA
 
 #if CONFIG_INTRA_EDGE
 static int is_smooth(const MB_MODE_INFO *mbmi, int plane) {
@@ -1517,12 +1515,10 @@
   const uint16_t *left_ref = ref - 1;
   int p_angle = 0;
   const int is_dr_mode = av1_is_directional_mode(mode);
-#if CONFIG_FILTER_INTRA
   const int use_filter_intra =
       plane > 0 ? 0 : xd->mi[0]->mbmi.filter_intra_mode_info.use_filter_intra;
   const FILTER_INTRA_MODE filter_intra_mode =
       xd->mi[0]->mbmi.filter_intra_mode_info.filter_intra_mode;
-#endif  // CONFIG_FILTER_INTRA
   int base = 128 << (xd->bd - 8);
 
   // The default values if ref pixels are not available:
@@ -1542,9 +1538,7 @@
     else
       need_above = 0, need_left = 1, need_above_left = 1;
   }
-#if CONFIG_FILTER_INTRA
   if (use_filter_intra) need_left = need_above = need_above_left = 1;
-#endif  // CONFIG_FILTER_INTRA
 
   assert(n_top_px >= 0);
   assert(n_topright_px >= 0);
@@ -1572,9 +1566,7 @@
   // NEED_LEFT
   if (need_left) {
     int need_bottom = !!(extend_modes[mode] & NEED_BOTTOMLEFT);
-#if CONFIG_FILTER_INTRA
     if (use_filter_intra) need_bottom = 0;
-#endif  // CONFIG_FILTER_INTRA
     if (is_dr_mode) need_bottom = p_angle > 180;
     const int num_left_pixels_needed = txhpx + (need_bottom ? txwpx : 0);
     i = 0;
@@ -1603,9 +1595,7 @@
   // NEED_ABOVE
   if (need_above) {
     int need_right = !!(extend_modes[mode] & NEED_ABOVERIGHT);
-#if CONFIG_FILTER_INTRA
     if (use_filter_intra) need_right = 0;
-#endif  // CONFIG_FILTER_INTRA
     if (is_dr_mode) need_right = p_angle < 90;
     const int num_top_pixels_needed = txwpx + (need_right ? txhpx : 0);
     if (n_top_px > 0) {
@@ -1651,13 +1641,11 @@
     left_col[-1] = above_row[-1];
   }
 
-#if CONFIG_FILTER_INTRA
   if (use_filter_intra) {
     highbd_filter_intra_predictor(dst, dst_stride, tx_size, above_row, left_col,
                                   filter_intra_mode, xd->bd);
     return;
   }
-#endif  // CONFIG_FILTER_INTRA
 
   if (is_dr_mode) {
     int upsample_above = 0;
@@ -1743,12 +1731,10 @@
   int need_above_left = extend_modes[mode] & NEED_ABOVELEFT;
   int p_angle = 0;
   const int is_dr_mode = av1_is_directional_mode(mode);
-#if CONFIG_FILTER_INTRA
   const int use_filter_intra =
       plane > 0 ? 0 : xd->mi[0]->mbmi.filter_intra_mode_info.use_filter_intra;
   const FILTER_INTRA_MODE filter_intra_mode =
       xd->mi[0]->mbmi.filter_intra_mode_info.filter_intra_mode;
-#endif  // CONFIG_FILTER_INTRA
 
   // The default values if ref pixels are not available:
   // 127 127 127 .. 127 127 127 127 127 127
@@ -1768,9 +1754,7 @@
     else
       need_above = 0, need_left = 1, need_above_left = 1;
   }
-#if CONFIG_FILTER_INTRA
   if (use_filter_intra) need_left = need_above = need_above_left = 1;
-#endif  // CONFIG_FILTER_INTRA
 
   assert(n_top_px >= 0);
   assert(n_topright_px >= 0);
@@ -1798,9 +1782,7 @@
   // NEED_LEFT
   if (need_left) {
     int need_bottom = !!(extend_modes[mode] & NEED_BOTTOMLEFT);
-#if CONFIG_FILTER_INTRA
     if (use_filter_intra) need_bottom = 0;
-#endif  // CONFIG_FILTER_INTRA
     if (is_dr_mode) need_bottom = p_angle > 180;
     const int num_left_pixels_needed = txhpx + (need_bottom ? txwpx : 0);
     i = 0;
@@ -1829,9 +1811,7 @@
   // NEED_ABOVE
   if (need_above) {
     int need_right = !!(extend_modes[mode] & NEED_ABOVERIGHT);
-#if CONFIG_FILTER_INTRA
     if (use_filter_intra) need_right = 0;
-#endif  // CONFIG_FILTER_INTRA
     if (is_dr_mode) need_right = p_angle < 90;
     const int num_top_pixels_needed = txwpx + (need_right ? txhpx : 0);
     if (n_top_px > 0) {
@@ -1874,13 +1854,11 @@
     left_col[-1] = above_row[-1];
   }
 
-#if CONFIG_FILTER_INTRA
   if (use_filter_intra) {
     av1_filter_intra_predictor(dst, dst_stride, tx_size, above_row, left_col,
                                filter_intra_mode);
     return;
   }
-#endif  // CONFIG_FILTER_INTRA
 
   if (is_dr_mode) {
     int upsample_above = 0;
diff --git a/av1/common/reconintra.h b/av1/common/reconintra.h
index 5c57532..354afd8 100644
--- a/av1/common/reconintra.h
+++ b/av1/common/reconintra.h
@@ -41,9 +41,7 @@
   II_H_PRED,  II_H_PRED, II_V_PRED, II_SMOOTH_PRED, II_SMOOTH_PRED
 };
 
-#if CONFIG_FILTER_INTRA
 #define FILTER_INTRA_SCALE_BITS 4
-#endif  // CONFIG_FILTER_INTRA
 
 #define CONFIG_USE_ANGLE_DELTA_SUB8X8 0
 
@@ -64,9 +62,7 @@
   return cm->allow_screen_content_tools && cm->allow_intrabc;
 }
 
-#if CONFIG_FILTER_INTRA
 extern const int8_t av1_filter_intra_taps[FILTER_INTRA_MODES][8][8];
-#endif
 
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index c4abfd5..7bdf417 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -617,7 +617,6 @@
   }
 }
 
-#if CONFIG_FILTER_INTRA
 static void read_filter_intra_mode_info(MACROBLOCKD *const xd, aom_reader *r) {
   MODE_INFO *const mi = xd->mi[0];
   MB_MODE_INFO *const mbmi = &mi->mbmi;
@@ -634,7 +633,6 @@
     }
   }
 }
-#endif  // CONFIG_FILTER_INTRA
 
 static void decode_block(AV1Decoder *const pbi, MACROBLOCKD *const xd,
                          int mi_row, int mi_col, aom_reader *r,
@@ -679,9 +677,7 @@
     set_txfm_ctxs(mbmi->tx_size, xd->n8_w, xd->n8_h, mbmi->skip, xd);
   }
 
-#if CONFIG_FILTER_INTRA
   if (!inter_block_tx) read_filter_intra_mode_info(xd, r);
-#endif  // CONFIG_FILTER_INTRA
 
   decode_token_and_recon_block(pbi, xd, mi_row, mi_col, r, bsize);
 }
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index b1e99a9..b540614 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -703,7 +703,6 @@
           r, ec_ctx->inter_ext_tx_cdf[eset][square_tx_size],
           av1_num_ext_tx_set[tx_set_type], ACCT_STR)];
     } else {
-#if CONFIG_FILTER_INTRA
       PREDICTION_MODE intra_dir;
       if (mbmi->filter_intra_mode_info.use_filter_intra)
         intra_dir =
@@ -713,11 +712,6 @@
       *tx_type = av1_ext_tx_inv[tx_set_type][aom_read_symbol(
           r, ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][intra_dir],
           av1_num_ext_tx_set[tx_set_type], ACCT_STR)];
-#else
-      *tx_type = av1_ext_tx_inv[tx_set_type][aom_read_symbol(
-          r, ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][mbmi->mode],
-          av1_num_ext_tx_set[tx_set_type], ACCT_STR)];
-#endif
     }
   } else {
     *tx_type = DCT_DCT;
@@ -861,9 +855,7 @@
   mbmi->ref_frame[1] = NONE_FRAME;
   mbmi->palette_mode_info.palette_size[0] = 0;
   mbmi->palette_mode_info.palette_size[1] = 0;
-#if CONFIG_FILTER_INTRA
   mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
 
   xd->above_txfm_context =
       cm->above_txfm_context + (mi_col << TX_UNIT_WIDE_LOG2);
@@ -1223,9 +1215,7 @@
   mbmi->palette_mode_info.palette_size[1] = 0;
   if (av1_allow_palette(cm->allow_screen_content_tools, bsize))
     read_palette_mode_info(cm, xd, mi_row, mi_col, r);
-#if CONFIG_FILTER_INTRA
   mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
 }
 
 static INLINE int is_mv_valid(const MV *mv) {
@@ -1707,9 +1697,7 @@
       mbmi->interintra_mode = interintra_mode;
       mbmi->angle_delta[PLANE_TYPE_Y] = 0;
       mbmi->angle_delta[PLANE_TYPE_UV] = 0;
-#if CONFIG_FILTER_INTRA
       mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
       if (is_interintra_wedge_used(bsize)) {
         mbmi->use_wedge_interintra = aom_read_symbol(
             r, ec_ctx->wedge_interintra_cdf[bsize], 2, ACCT_STR);
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 4469cde..1d4497f 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -623,7 +623,6 @@
   }
 }
 
-#if CONFIG_FILTER_INTRA
 static void write_filter_intra_mode_info(const MACROBLOCKD *xd,
                                          const MB_MODE_INFO *const mbmi,
                                          aom_writer *w) {
@@ -639,7 +638,6 @@
     }
   }
 }
-#endif  // CONFIG_FILTER_INTRA
 
 static void write_angle_delta(aom_writer *w, int angle_delta,
                               aom_cdf_prob *cdf) {
@@ -890,7 +888,6 @@
                        ec_ctx->inter_ext_tx_cdf[eset][square_tx_size],
                        av1_num_ext_tx_set[tx_set_type]);
     } else {
-#if CONFIG_FILTER_INTRA
       PREDICTION_MODE intra_dir;
       if (mbmi->filter_intra_mode_info.use_filter_intra)
         intra_dir =
@@ -901,12 +898,6 @@
           w, av1_ext_tx_ind[tx_set_type][tx_type],
           ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][intra_dir],
           av1_num_ext_tx_set[tx_set_type]);
-#else
-      aom_write_symbol(
-          w, av1_ext_tx_ind[tx_set_type][tx_type],
-          ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][mbmi->mode],
-          av1_num_ext_tx_set[tx_set_type]);
-#endif
     }
   }
 }
@@ -1778,9 +1769,7 @@
     set_txfm_ctxs(mbmi->tx_size, xd->n8_w, xd->n8_h, skip, xd);
   }
 
-#if CONFIG_FILTER_INTRA
   if (!is_inter_tx) write_filter_intra_mode_info(xd, mbmi, w);
-#endif  // CONFIG_FILTER_INTRA
 
   write_tokens_b(cpi, tile, w, tok, tok_end, mi_row, mi_col);
 }
diff --git a/av1/encoder/block.h b/av1/encoder/block.h
index 54a50f1..b037cc5 100644
--- a/av1/encoder/block.h
+++ b/av1/encoder/block.h
@@ -309,10 +309,8 @@
   int intra_uv_mode_cost[INTRA_MODES][UV_INTRA_MODES];
 #endif
   int y_mode_costs[INTRA_MODES][INTRA_MODES][INTRA_MODES];
-#if CONFIG_FILTER_INTRA
   int filter_intra_cost[TX_SIZES_ALL][2];
   int filter_intra_mode_cost[FILTER_INTRA_MODES];
-#endif
   int switchable_interp_costs[SWITCHABLE_FILTER_CONTEXTS][SWITCHABLE_FILTERS];
 #if CONFIG_EXT_PARTITION_TYPES
   int partition_cost[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 1664518..9c65eba 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -789,7 +789,6 @@
       update_cdf(fc->y_mode_cdf[size_group_lookup[bsize]], y_mode, INTRA_MODES);
   }
 
-#if CONFIG_FILTER_INTRA
   if (mbmi->mode == DC_PRED && mbmi->palette_mode_info.palette_size[0] == 0 &&
       av1_filter_intra_allowed_txsize(mbmi->tx_size)) {
     const int use_filter_intra_mode =
@@ -811,7 +810,6 @@
                  2);
     }
   }
-#endif  // CONFIG_FILTER_INTRA
 #if CONFIG_EXT_INTRA_MOD
   if (av1_is_directional_mode(mbmi->mode) && av1_use_angle_delta(bsize)) {
 #if CONFIG_ENTROPY_STATS
@@ -4809,7 +4807,6 @@
         ++counts->inter_ext_tx[eset][txsize_sqr_map[tx_size]][tx_type];
 #endif  // CONFIG_ENTROPY_STATS
       } else {
-#if CONFIG_FILTER_INTRA
         PREDICTION_MODE intra_dir;
         if (mbmi->filter_intra_mode_info.use_filter_intra)
           intra_dir = fimode_to_intradir[mbmi->filter_intra_mode_info
@@ -4826,18 +4823,6 @@
               av1_ext_tx_ind[tx_set_type][tx_type],
               av1_num_ext_tx_set[tx_set_type]);
         }
-#else
-#if CONFIG_ENTROPY_STATS
-        ++counts->intra_ext_tx[eset][txsize_sqr_map[tx_size]][mbmi->mode]
-                              [tx_type];
-#endif  // CONFIG_ENTROPY_STATS
-        if (allow_update_cdf) {
-          update_cdf(
-              fc->intra_ext_tx_cdf[eset][txsize_sqr_map[tx_size]][mbmi->mode],
-              av1_ext_tx_ind[tx_set_type][tx_type],
-              av1_num_ext_tx_set[tx_set_type]);
-        }
-#endif
       }
     }
   }
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index 73696052..50d8b9f 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -134,13 +134,11 @@
                              NULL);
 #endif
 
-#if CONFIG_FILTER_INTRA
   av1_cost_tokens_from_cdf(x->filter_intra_mode_cost, fc->filter_intra_mode_cdf,
                            NULL);
   for (i = 0; i < TX_SIZES_ALL; ++i)
     av1_cost_tokens_from_cdf(x->filter_intra_cost[i], fc->filter_intra_cdfs[i],
                              NULL);
-#endif
 
   for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; ++i)
     av1_cost_tokens_from_cdf(x->switchable_interp_costs[i],
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 049f13e..c8b1784 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2252,7 +2252,6 @@
 }
 #endif  // CONFIG_DIST_8X8
 
-#if CONFIG_FILTER_INTRA
 static int skip_invalid_tx_size_for_filter_intra(const MB_MODE_INFO *mbmi,
                                                  int plane,
                                                  RD_STATS *rd_stats) {
@@ -2268,7 +2267,6 @@
     return 0;
   }
 }
-#endif
 
 static void txfm_rd_in_plane(MACROBLOCK *x, const AV1_COMP *cpi,
                              RD_STATS *rd_stats, int64_t ref_best_rd, int plane,
@@ -2286,12 +2284,10 @@
 
   if (plane == 0) xd->mi[0]->mbmi.tx_size = tx_size;
 
-#if CONFIG_FILTER_INTRA
   if (skip_invalid_tx_size_for_filter_intra(&xd->mi[0]->mbmi, plane,
                                             rd_stats)) {
     return;
   }
-#endif
 
   av1_get_entropy_contexts(bsize, tx_size, pd, args.t_above, args.t_left);
 
@@ -2349,7 +2345,6 @@
         return x->inter_tx_type_costs[ext_tx_set][square_tx_size][tx_type];
     } else {
       if (ext_tx_set > 0) {
-#if CONFIG_FILTER_INTRA
         PREDICTION_MODE intra_dir;
         if (mbmi->filter_intra_mode_info.use_filter_intra)
           intra_dir = fimode_to_intradir[mbmi->filter_intra_mode_info
@@ -2358,10 +2353,6 @@
           intra_dir = mbmi->mode;
         return x->intra_tx_type_costs[ext_tx_set][square_tx_size][intra_dir]
                                      [tx_type];
-#else
-        return x->intra_tx_type_costs[ext_tx_set][square_tx_size][mbmi->mode]
-                                     [tx_type];
-#endif
       }
     }
   }
@@ -2392,11 +2383,9 @@
 
   mbmi->tx_type = tx_type;
   mbmi->tx_size = tx_size;
-#if CONFIG_FILTER_INTRA
   if (skip_invalid_tx_size_for_filter_intra(mbmi, AOM_PLANE_Y, rd_stats)) {
     return INT64_MAX;
   }
-#endif
   txfm_rd_in_plane(x, cpi, rd_stats, ref_best_rd, AOM_PLANE_Y, bs, tx_size,
                    cpi->sf.use_fast_coef_costing);
   if (rd_stats->rate == INT_MAX) return INT64_MAX;
@@ -2488,11 +2477,9 @@
   const TxSetType tx_set_type =
       get_ext_tx_set_type(mbmi->tx_size, bs, is_inter, cm->reduced_tx_set_used);
   prune_tx(cpi, bs, x, xd, tx_set_type, 0);
-#if CONFIG_FILTER_INTRA
   if (skip_invalid_tx_size_for_filter_intra(mbmi, AOM_PLANE_Y, rd_stats)) {
     return;
   }
-#endif
   if (get_ext_tx_types(mbmi->tx_size, bs, is_inter, cm->reduced_tx_set_used) >
           1 &&
       !xd->lossless[mbmi->segment_id]) {
@@ -2559,11 +2546,9 @@
   mbmi->tx_type = DCT_DCT;
   mbmi->min_tx_size = TX_4X4;
 
-#if CONFIG_FILTER_INTRA
   if (skip_invalid_tx_size_for_filter_intra(mbmi, AOM_PLANE_Y, rd_stats)) {
     return;
   }
-#endif
   txfm_rd_in_plane(x, cpi, rd_stats, ref_best_rd, 0, bs, mbmi->tx_size,
                    cpi->sf.use_fast_coef_costing);
 }
@@ -2708,9 +2693,7 @@
                                   int mode_cost) {
   int total_rate = mode_cost;
   const int use_palette = mbmi->palette_mode_info.palette_size[0] > 0;
-#if CONFIG_FILTER_INTRA
   const int use_filter_intra = mbmi->filter_intra_mode_info.use_filter_intra;
-#endif  // CONFIG_FILTER_INTRA
   const int use_intrabc = mbmi->use_intrabc;
   // Can only activate one mode.
   assert(((mbmi->mode != DC_PRED) + use_palette + use_intrabc +
@@ -2741,7 +2724,6 @@
       total_rate += palette_mode_cost;
     }
   }
-#if CONFIG_FILTER_INTRA
   if (mbmi->mode == DC_PRED && av1_filter_intra_allowed_txsize(mbmi->tx_size)) {
     total_rate += x->filter_intra_cost[mbmi->tx_size][use_filter_intra];
     if (use_filter_intra) {
@@ -2749,7 +2731,6 @@
                                                   .filter_intra_mode];
     }
   }
-#endif  // CONFIG_FILTER_INTRA
   if (av1_is_directional_mode(mbmi->mode)) {
     if (av1_use_angle_delta(bsize)) {
 #if CONFIG_EXT_INTRA_MOD
@@ -2845,12 +2826,10 @@
   int row, col;
   int64_t temp_sse, this_rd;
   TX_SIZE tx_size = tx_size_from_tx_mode(bsize, cm->tx_mode);
-#if CONFIG_FILTER_INTRA
   if (mbmi->filter_intra_mode_info.use_filter_intra) {
     tx_size = av1_max_tx_size_for_filter_intra(bsize, cm->tx_mode);
     if (!av1_filter_intra_allowed_txsize(tx_size)) return INT64_MAX;
   }
-#endif
   const int stepr = tx_size_high_unit[tx_size];
   const int stepc = tx_size_wide_unit[tx_size];
   const int max_blocks_wide = max_block_wide(xd, bsize, 0);
@@ -2876,7 +2855,6 @@
                            MAX_ANGLE_DELTA + mbmi->angle_delta[PLANE_TYPE_Y]);
 #endif  // CONFIG_EXT_INTRA_MOD
   }
-#if CONFIG_FILTER_INTRA
   if (mbmi->mode == DC_PRED && av1_filter_intra_allowed_txsize(mbmi->tx_size)) {
     if (mbmi->filter_intra_mode_info.use_filter_intra) {
       const int mode = mbmi->filter_intra_mode_info.filter_intra_mode;
@@ -2886,7 +2864,6 @@
       mode_cost += x->filter_intra_cost[mbmi->tx_size][0];
     }
   }
-#endif  // CONFIG_FILTER_INTRA
   this_rd =
       RDCOST(x->rdmult, this_rd_stats.rate + mode_cost, this_rd_stats.dist);
   return this_rd;
@@ -3023,9 +3000,7 @@
                                      cpi->common.bit_depth, count_buf);
   else
     colors = av1_count_colors(src, src_stride, rows, cols, count_buf);
-#if CONFIG_FILTER_INTRA
   mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
 
   if (colors > 1 && colors <= 64) {
     int r, c, i;
@@ -3064,9 +3039,7 @@
     }
 
     mbmi->mode = DC_PRED;
-#if CONFIG_FILTER_INTRA
     mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
 
     uint16_t color_cache[2 * PALETTE_MAX_SIZE];
     const int n_cache = av1_get_palette_cache(xd, 0, color_cache);
@@ -3125,7 +3098,6 @@
   return rate_overhead;
 }
 
-#if CONFIG_FILTER_INTRA
 // Return 1 if an filter intra mode is selected; return 0 otherwise.
 static int rd_pick_filter_intra_sby(const AV1_COMP *const cpi, MACROBLOCK *x,
                                     int *rate, int *rate_tokenonly,
@@ -3199,7 +3171,6 @@
     return 0;
   }
 }
-#endif  // CONFIG_FILTER_INTRA
 
 // Run RD calculation with given luma intra prediction angle., and return
 // the RD cost. Update the best mode info. if the RD cost is the best so far.
@@ -3523,9 +3494,7 @@
   uint8_t directional_mode_skip_mask[INTRA_MODES];
   const int src_stride = x->plane[0].src.stride;
   const uint8_t *src = x->plane[0].src.buf;
-#if CONFIG_FILTER_INTRA
   int beat_best_rd = 0;
-#endif  // CONFIG_FILTER_INTRA
   const int *bmode_costs;
   PALETTE_MODE_INFO *const pmi = &mbmi->palette_mode_info;
   const int try_palette =
@@ -3547,9 +3516,7 @@
   else
     angle_estimation(src, src_stride, rows, cols, bsize,
                      directional_mode_skip_mask);
-#if CONFIG_FILTER_INTRA
   mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
   pmi->palette_size[0] = 0;
 
   if (cpi->sf.tx_type_search.fast_intra_tx_type_search)
@@ -3601,9 +3568,7 @@
     if (this_rd < best_rd) {
       best_mbmi = *mbmi;
       best_rd = this_rd;
-#if CONFIG_FILTER_INTRA
       beat_best_rd = 1;
-#endif  // CONFIG_FILTER_INTRA
       *rate = this_rate;
       *rate_tokenonly = this_rate_tokenonly;
       *distortion = this_distortion;
@@ -3620,7 +3585,6 @@
                               ctx->blk_skip[0]);
   }
 
-#if CONFIG_FILTER_INTRA
   if (beat_best_rd && !xd->lossless[mbmi->segment_id]) {
     if (rd_pick_filter_intra_sby(cpi, x, rate, rate_tokenonly, distortion,
                                  skippable, bsize, bmode_costs[DC_PRED],
@@ -3628,7 +3592,6 @@
       best_mbmi = *mbmi;
     }
   }
-#endif  // CONFIG_FILTER_INTRA
 
   // If previous searches use only the default tx type, do an extra search for
   // the best tx type.
@@ -8754,9 +8717,7 @@
     assert((dv.col & 7) == 0);
     assert((dv.row & 7) == 0);
     memset(&mbmi->palette_mode_info, 0, sizeof(mbmi->palette_mode_info));
-#if CONFIG_FILTER_INTRA
     mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
     mbmi->use_intrabc = 1;
     mbmi->mode = DC_PRED;
     mbmi->uv_mode = UV_DC_PRED;
@@ -9130,9 +9091,7 @@
       }
     }
 
-#if CONFIG_FILTER_INTRA
     mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
     mbmi->interintra_mode = (INTERINTRA_MODE)(II_DC_PRED - 1);
 #if CONFIG_JNT_COMP
     mbmi->comp_group_idx = 0;
@@ -9691,11 +9650,9 @@
     mbmi->ref_frame[1] = second_ref_frame;
     pmi->palette_size[0] = 0;
     pmi->palette_size[1] = 0;
-#if CONFIG_FILTER_INTRA
     mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
-        // Evaluate all sub-pel filters irrespective of whether we can use
-        // them for this frame.
+    // Evaluate all sub-pel filters irrespective of whether we can use them for
+    // this frame.
 
     set_default_interp_filters(mbmi, cm->interp_filter);
 
@@ -9778,7 +9735,6 @@
       distortion_y = rd_stats_y.dist;
       skippable = rd_stats_y.skip;
 
-#if CONFIG_FILTER_INTRA
       uint8_t best_blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE];
       memcpy(best_blk_skip, x->blk_skip[0],
              sizeof(best_blk_skip[0]) * ctx->num_4x4_blk);
@@ -9852,7 +9808,6 @@
           mbmi->filter_intra_mode_info.use_filter_intra = 0;
         }
       }
-#endif
 
       if (rate_y == INT_MAX) continue;
 
@@ -9912,9 +9867,7 @@
       if (comp_pred) backup_ref_mv[1] = mbmi_ext->ref_mvs[second_ref_frame][0];
       mbmi->angle_delta[PLANE_TYPE_Y] = 0;
       mbmi->angle_delta[PLANE_TYPE_UV] = 0;
-#if CONFIG_FILTER_INTRA
       mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
       mbmi->ref_mv_idx = 0;
       ref_frame_type = av1_ref_frame_type(mbmi->ref_frame);
 
@@ -10562,9 +10515,7 @@
       best_mbmode.motion_mode = SIMPLE_TRANSLATION;
 
       best_mbmode.interintra_mode = (INTERINTRA_MODE)(II_DC_PRED - 1);
-#if CONFIG_FILTER_INTRA
       best_mbmode.filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
 
       set_default_interp_filters(&best_mbmode, cm->interp_filter);
 
@@ -10806,10 +10757,7 @@
 
   mbmi->palette_mode_info.palette_size[0] = 0;
   mbmi->palette_mode_info.palette_size[1] = 0;
-
-#if CONFIG_FILTER_INTRA
   mbmi->filter_intra_mode_info.use_filter_intra = 0;
-#endif  // CONFIG_FILTER_INTRA
   mbmi->mode = GLOBALMV;
   mbmi->motion_mode = SIMPLE_TRANSLATION;
   mbmi->uv_mode = UV_DC_PRED;
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index c7df6df..a90f954 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -106,7 +106,6 @@
 set(CONFIG_EXT_WARPED_MOTION 1 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_FAST_SGR 1 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_FILM_GRAIN 0 CACHE NUMBER "AV1 experiment flag.")
-set(CONFIG_FILTER_INTRA 1 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_FP_MB_STATS 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_FRAME_REFS_SIGNALING 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_FRAME_SIZE 1 CACHE NUMBER "AV1 experiment flag.")
diff --git a/test/test.cmake b/test/test.cmake
index 732cd23..708e420 100644
--- a/test/test.cmake
+++ b/test/test.cmake
@@ -142,12 +142,10 @@
         ${AOM_UNIT_TEST_ENCODER_SOURCES}
         "${AOM_ROOT}/test/motion_vector_test.cc")
 
-    if (CONFIG_FILTER_INTRA)
-      if (HAVE_SSE4_1)
+    if (HAVE_SSE4_1)
         set(AOM_UNIT_TEST_COMMON_SOURCES
             ${AOM_UNIT_TEST_COMMON_SOURCES}
             "${AOM_ROOT}/test/filterintra_test.cc")
-      endif ()
     endif ()
 
     if (CONFIG_CFL)
diff --git a/tools/aom_entropy_optimizer.c b/tools/aom_entropy_optimizer.c
index cacfb7c..14a220a 100644
--- a/tools/aom_entropy_optimizer.c
+++ b/tools/aom_entropy_optimizer.c
@@ -507,8 +507,7 @@
       &fc.intrabc[0], probsfile, 1, cts_each_dim,
       "static const aom_cdf_prob default_intrabc_cdf[CDF_SIZE(2)]");
 
-/* filter_intra experiment */
-#if CONFIG_FILTER_INTRA
+  /* filter_intra experiment */
   cts_each_dim[0] = FILTER_INTRA_MODES;
   optimize_cdf_table(
       &fc.filter_intra_mode[0], probsfile, 1, cts_each_dim,
@@ -520,7 +519,6 @@
   optimize_cdf_table(&fc.filter_intra_tx[0][0], probsfile, 2, cts_each_dim,
                      "static const aom_cdf_prob "
                      "default_filter_intra_cdfs[TX_SIZES_ALL][CDF_SIZE(2)]");
-#endif
 
   cts_each_dim[0] = TX_SIZES;
   cts_each_dim[1] = TXB_SKIP_CONTEXTS;
