diff --git a/av1/common/convolve.h b/av1/common/convolve.h
index af0230a..b98974a 100644
--- a/av1/common/convolve.h
+++ b/av1/common/convolve.h
@@ -34,7 +34,6 @@
   int round_0;
   int round_1;
   int plane;
-  int do_post_rounding;
   int is_compound;
 #if CONFIG_JNT_COMP
   int use_jnt_comp_avg;
@@ -101,7 +100,6 @@
   conv_params.round = CONVOLVE_OPT_ROUND;
   conv_params.round_0 = ROUND0_BITS;
   conv_params.round_1 = 0;
-  conv_params.do_post_rounding = 0;
   conv_params.is_compound = 0;
   conv_params.dst = NULL;
   conv_params.dst_stride = 0;
@@ -146,7 +144,6 @@
   conv_params.dst = dst;
   conv_params.dst_stride = dst_stride;
   conv_params.plane = plane;
-  conv_params.do_post_rounding = 0;
   return conv_params;
 }
 
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 1ae7e53..87b859a 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -28,6 +28,21 @@
 
 // This function will determine whether or not to create a warped
 // prediction.
+
+static INLINE int get_compound_post_rounding_bits(
+    const MB_MODE_INFO *const mbmi, const ConvolveParams *conv_params) {
+  assert(conv_params->is_compound);
+  int round_bits =
+      2 * FILTER_BITS - conv_params->round_0 - conv_params->round_1;
+  if (is_masked_compound_type(mbmi->interinter_compound_type))
+    return round_bits;
+  round_bits += conv_params->is_compound;
+#if CONFIG_JNT_COMP
+  if (conv_params->use_jnt_comp_avg) round_bits += DIST_PRECISION_BITS - 1;
+#endif  // CONFIG_JNT_COMP
+  return round_bits;
+}
+
 static INLINE int allow_warp(const MODE_INFO *const mi,
                              const WarpTypesAllowed *const warp_types,
                              const WarpedMotionParams *const gm_params,
@@ -96,9 +111,6 @@
     inter_predictor(src, src_stride, dst, dst_stride, subpel_x, subpel_y, sf, w,
                     h, conv_params, interp_filters, xs, ys);
   }
-  // For compound, do_post_rounding is always 1.
-  // For masked compound, this flag will be turned off after the blend stage.
-  conv_params->do_post_rounding = conv_params->is_compound;
 }
 
 #define NSMOOTHERS 1
@@ -792,16 +804,6 @@
                                    org_dst_stride, tmp_buf32, tmp_buf_stride,
                                    &comp_data, mi->mbmi.sb_type, h, w);
 
-    const int convolve_rounding_bits =
-        FILTER_BITS * 2 - conv_params->round_0 - conv_params->round_1;
-    if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
-      av1_highbd_convolve_rounding(org_dst, org_dst_stride, dst, dst_stride, w,
-                                   h, convolve_rounding_bits, xd->bd);
-    else
-      av1_convolve_rounding(org_dst, org_dst_stride, dst, dst_stride, w, h,
-                            convolve_rounding_bits);
-
-    conv_params->do_post_rounding = 0;
   } else {
     if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
       build_masked_compound_highbd(dst, dst_stride, dst, dst_stride, tmp_dst,
@@ -1102,15 +1104,10 @@
                 xs, ys, xd);
         }  // for (ref = 0; ref < 1 + is_compound; ++ref)
 
-        if (conv_params.do_post_rounding) {
-          assert(!is_masked_compound_type(mi->mbmi.interinter_compound_type));
+        if (conv_params.is_compound) {
           assert(conv_params.dst != NULL);
-          int round_bits = FILTER_BITS * 2 + is_compound - conv_params.round_0 -
-                           conv_params.round_1;
-#if CONFIG_JNT_COMP
-          if (conv_params.use_jnt_comp_avg)
-            round_bits += DIST_PRECISION_BITS - 1;
-#endif  // CONFIG_JNT_COMP
+          int round_bits =
+              get_compound_post_rounding_bits(&mi->mbmi, &conv_params);
           if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
             av1_highbd_convolve_rounding(tmp_dst, tmp_dst_stride, dst,
                                          dst_buf->stride, b4_w, b4_h,
@@ -1244,14 +1241,9 @@
     }
 
     // TODO(angiebird): This part needs optimization
-    if (conv_params.do_post_rounding) {
-      assert(!is_masked_compound_type(mi->mbmi.interinter_compound_type));
+    if (conv_params.is_compound) {
       assert(conv_params.dst != NULL);
-      int round_bits = FILTER_BITS * 2 + is_compound - conv_params.round_0 -
-                       conv_params.round_1;
-#if CONFIG_JNT_COMP
-      if (conv_params.use_jnt_comp_avg) round_bits += DIST_PRECISION_BITS - 1;
-#endif  // CONFIG_JNT_COMP
+      int round_bits = get_compound_post_rounding_bits(&mi->mbmi, &conv_params);
       if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH)
         av1_highbd_convolve_rounding(tmp_dst, MAX_SB_SIZE, dst, dst_buf->stride,
                                      w, h, round_bits, xd->bd);
