diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 0178721..4d28bf0 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -870,12 +870,7 @@
  * can skip this if the last coefficient in this transform block, e.g. the
  * 16th coefficient in a 4x4 block or the 64th coefficient in a 8x8 block,
  * were non-zero). */
-static int cost_coeffs(MACROBLOCK *x, int plane, int block,
-#if CONFIG_VAR_TX
-                       int coeff_ctx,
-#else
-                       ENTROPY_CONTEXT *A, ENTROPY_CONTEXT *L,
-#endif
+static int cost_coeffs(MACROBLOCK *x, int plane, int block, int coeff_ctx,
                        TX_SIZE tx_size, const int16_t *scan, const int16_t *nb,
                        int use_fast_coef_costing) {
   MACROBLOCKD *const xd = &x->e_mbd;
@@ -890,11 +885,7 @@
   unsigned int(*token_costs)[2][COEFF_CONTEXTS][ENTROPY_TOKENS] =
       x->token_costs[tx_size_ctx][type][is_inter_block(mbmi)];
   uint8_t token_cache[MAX_TX_SQUARE];
-#if CONFIG_VAR_TX
   int pt = coeff_ctx;
-#else
-  int pt = combine_entropy_contexts(*A, *L);
-#endif
   int c, cost;
 #if CONFIG_AOM_HIGHBITDEPTH
   const int *cat6_high_cost = av1_get_high_cost_table(xd->bd);
@@ -982,11 +973,6 @@
     }
   }
 
-#if !CONFIG_VAR_TX
-  // is eob first coefficient;
-  *A = *L = (c > 0);
-#endif
-
   return cost;
 }
 
@@ -1077,10 +1063,8 @@
 }
 
 static int rate_block(int plane, int block, int blk_row, int blk_col,
-                      TX_SIZE tx_size, struct rdcost_block_args *args) {
-#if CONFIG_VAR_TX
-  int coeff_ctx = combine_entropy_contexts(*(args->t_above + blk_col),
-                                           *(args->t_left + blk_row));
+                      int coeff_ctx, TX_SIZE tx_size,
+                      struct rdcost_block_args *args) {
   int coeff_cost =
       cost_coeffs(args->x, plane, block, coeff_ctx, tx_size, args->so->scan,
                   args->so->neighbors, args->use_fast_coef_costing);
@@ -1088,11 +1072,6 @@
   *(args->t_above + blk_col) = !(p->eobs[block] == 0);
   *(args->t_left + blk_row) = !(p->eobs[block] == 0);
   return coeff_cost;
-#else
-  return cost_coeffs(args->x, plane, block, args->t_above + blk_col,
-                     args->t_left + blk_row, tx_size, args->so->scan,
-                     args->so->neighbors, args->use_fast_coef_costing);
-#endif  // CONFIG_VAR_TX
 }
 
 static uint64_t sum_squares_2d(const int16_t *diff, int diff_stride,
@@ -1144,6 +1123,7 @@
   int rate;
   int64_t dist;
   int64_t sse;
+
   int coeff_ctx = combine_entropy_contexts(*(args->t_above + blk_col),
                                            *(args->t_left + blk_row));
 
@@ -1209,7 +1189,7 @@
     return;
   }
 
-  rate = rate_block(plane, block, blk_row, blk_col, tx_size, args);
+  rate = rate_block(plane, block, blk_row, blk_col, coeff_ctx, tx_size, args);
   rd1 = RDCOST(x->rdmult, x->rddiv, rate, dist);
   rd2 = RDCOST(x->rdmult, x->rddiv, 0, sse);
 
@@ -1956,10 +1936,8 @@
           if (xd->lossless[xd->mi[0]->mbmi.segment_id]) {
             TX_TYPE tx_type = get_tx_type(PLANE_TYPE_Y, xd, block, TX_4X4);
             const scan_order *so = get_scan(TX_4X4, tx_type, 0);
-#if CONFIG_VAR_TX | CONFIG_NEW_QUANT
             const int coeff_ctx =
                 combine_entropy_contexts(*(tempa + idx), *(templ + idy));
-#endif  // CONFIG_VAR_TX | CONFIG_NEW_QUANT
 #if CONFIG_NEW_QUANT
             av1_xform_quant_fp_nuq(x, 0, block, row + idy, col + idx, BLOCK_8X8,
                                    TX_4X4, coeff_ctx);
@@ -1967,16 +1945,10 @@
             av1_xform_quant(x, 0, block, row + idy, col + idx, BLOCK_8X8,
                             TX_4X4, AV1_XFORM_QUANT_FP);
 #endif  // CONFIG_NEW_QUANT
-#if CONFIG_VAR_TX
             ratey += cost_coeffs(x, 0, block, coeff_ctx, TX_4X4, so->scan,
                                  so->neighbors, cpi->sf.use_fast_coef_costing);
             *(tempa + idx) = !(p->eobs[block] == 0);
             *(templ + idy) = !(p->eobs[block] == 0);
-#else
-            ratey += cost_coeffs(x, 0, block, tempa + idx, templ + idy, TX_4X4,
-                                 so->scan, so->neighbors,
-                                 cpi->sf.use_fast_coef_costing);
-#endif  // CONFIG_VAR_TX
             if (RDCOST(x->rdmult, x->rddiv, ratey, distortion) >= best_rd)
               goto next_highbd;
             av1_highbd_inv_txfm_add_4x4(BLOCK_OFFSET(pd->dqcoeff, block), dst,
@@ -1997,16 +1969,10 @@
                             TX_4X4, AV1_XFORM_QUANT_FP);
 #endif  // CONFIG_NEW_QUANT
             av1_optimize_b(x, 0, block, TX_4X4, coeff_ctx);
-#if CONFIG_VAR_TX
             ratey += cost_coeffs(x, 0, block, coeff_ctx, TX_4X4, so->scan,
                                  so->neighbors, cpi->sf.use_fast_coef_costing);
             *(tempa + idx) = !(p->eobs[block] == 0);
             *(templ + idy) = !(p->eobs[block] == 0);
-#else
-            ratey += cost_coeffs(x, 0, block, tempa + idx, templ + idy, TX_4X4,
-                                 so->scan, so->neighbors,
-                                 cpi->sf.use_fast_coef_costing);
-#endif  // CONFIG_VAR_TX
             av1_highbd_inv_txfm_add_4x4(BLOCK_OFFSET(pd->dqcoeff, block), dst,
                                         dst_stride, p->eobs[block], xd->bd,
                                         tx_type, 0);
@@ -2082,10 +2048,8 @@
         if (xd->lossless[xd->mi[0]->mbmi.segment_id]) {
           TX_TYPE tx_type = get_tx_type(PLANE_TYPE_Y, xd, block, TX_4X4);
           const scan_order *so = get_scan(TX_4X4, tx_type, 0);
-#if CONFIG_VAR_TX | CONFIG_NEW_QUANT
           const int coeff_ctx =
               combine_entropy_contexts(*(tempa + idx), *(templ + idy));
-#endif  // CONFIG_VAR_TX | CONFIG_NEW_QUANT
 #if CONFIG_NEW_QUANT
           av1_xform_quant_fp_nuq(x, 0, block, row + idy, col + idx, BLOCK_8X8,
                                  TX_4X4, coeff_ctx);
@@ -2093,16 +2057,10 @@
           av1_xform_quant(x, 0, block, row + idy, col + idx, BLOCK_8X8, TX_4X4,
                           AV1_XFORM_QUANT_B);
 #endif  // CONFIG_NEW_QUANT
-#if CONFIG_VAR_TX
           ratey += cost_coeffs(x, 0, block, coeff_ctx, TX_4X4, so->scan,
                                so->neighbors, cpi->sf.use_fast_coef_costing);
           *(tempa + idx) = !(p->eobs[block] == 0);
           *(templ + idy) = !(p->eobs[block] == 0);
-#else
-          ratey += cost_coeffs(x, 0, block, tempa + idx, templ + idy, TX_4X4,
-                               so->scan, so->neighbors,
-                               cpi->sf.use_fast_coef_costing);
-#endif
           if (RDCOST(x->rdmult, x->rddiv, ratey, distortion) >= best_rd)
             goto next;
           av1_inv_txfm_add_4x4(BLOCK_OFFSET(pd->dqcoeff, block), dst,
@@ -2122,16 +2080,10 @@
                           AV1_XFORM_QUANT_FP);
 #endif  // CONFIG_NEW_QUANT
           av1_optimize_b(x, 0, block, TX_4X4, coeff_ctx);
-#if CONFIG_VAR_TX
           ratey += cost_coeffs(x, 0, block, coeff_ctx, TX_4X4, so->scan,
                                so->neighbors, cpi->sf.use_fast_coef_costing);
           *(tempa + idx) = !(p->eobs[block] == 0);
           *(templ + idy) = !(p->eobs[block] == 0);
-#else
-          ratey += cost_coeffs(x, 0, block, tempa + idx, templ + idy, TX_4X4,
-                               so->scan, so->neighbors,
-                               cpi->sf.use_fast_coef_costing);
-#endif
           av1_inv_txfm_add_4x4(BLOCK_OFFSET(pd->dqcoeff, block), dst,
                                dst_stride, p->eobs[block], tx_type, 0);
           cpi->fn_ptr[BLOCK_4X4].vf(src, src_stride, dst, dst_stride, &tmp);
@@ -4342,15 +4294,10 @@
                  &dist, &ssz);
       thisdistortion += dist;
       thissse += ssz;
-#if CONFIG_VAR_TX
       thisrate += cost_coeffs(x, 0, block, coeff_ctx, tx_size, so->scan,
                               so->neighbors, cpi->sf.use_fast_coef_costing);
       *(ta + (k & 1)) = !(p->eobs[block] == 0);
       *(tl + (k >> 1)) = !(p->eobs[block] == 0);
-#else
-      thisrate +=
-          cost_coeffs(x, 0, block, ta + (k & 1), tl + (k >> 1), tx_size,
-                      so->scan, so->neighbors, cpi->sf.use_fast_coef_costing);
 #if CONFIG_EXT_TX
       if (tx_size == TX_8X4) {
         *(ta + (k & 1) + 1) = *(ta + (k & 1));
@@ -4359,7 +4306,6 @@
         *(tl + (k >> 1) + 1) = *(tl + (k >> 1));
       }
 #endif  // CONFIG_EXT_TX
-#endif  // CONFIG_VAR_TX
       rd1 = RDCOST(x->rdmult, x->rddiv, thisrate, thisdistortion);
       rd2 = RDCOST(x->rdmult, x->rddiv, 0, thissse);
       rd = AOMMIN(rd1, rd2);
