diff --git a/src/intel/compiler/elk/elk_fs.h b/src/intel/compiler/elk/elk_fs.h
index 0aedb4a2e92334c2b55465215a2169eae10392b6..daffeb408f23d8d4178cf941906fe9a56fc75e57 100644
--- a/src/intel/compiler/elk/elk_fs.h
+++ b/src/intel/compiler/elk/elk_fs.h
@@ -392,7 +392,6 @@ public:
    elk_fs_reg uw_pixel_x;
    elk_fs_reg uw_pixel_y;
    elk_fs_reg pixel_z;
-   elk_fs_reg wpos_w;
    elk_fs_reg delta_xy[ELK_BARYCENTRIC_MODE_COUNT];
    elk_fs_reg final_gs_vertex_count;
    elk_fs_reg control_data_bits;
diff --git a/src/intel/compiler/elk/elk_fs_nir.cpp b/src/intel/compiler/elk/elk_fs_nir.cpp
index 32f95d26fdf86bd459d3dbb34c9db3ea36ad320b..c4d84f6fac3f318091b1f45147dcb983c3792a07 100644
--- a/src/intel/compiler/elk/elk_fs_nir.cpp
+++ b/src/intel/compiler/elk/elk_fs_nir.cpp
@@ -3952,7 +3952,7 @@ fs_nir_emit_fs_intrinsic(nir_to_elk_state &ntb,
    case nir_intrinsic_load_frag_coord_w:
       /* Lowered to interpolation pre-gen6. */
       assert(devinfo->ver >= 6);
-      bld.MOV(dest, s.wpos_w);
+      bld.emit(ELK_SHADER_OPCODE_RCP, dest, fetch_payload_reg(bld, fs_payload().source_w_reg));
       break;
 
    case nir_intrinsic_load_interpolated_input: {
diff --git a/src/intel/compiler/elk/elk_fs_visitor.cpp b/src/intel/compiler/elk/elk_fs_visitor.cpp
index 78b5031d911c936ea8ffc13ee28472dd34c09a43..0e05bc32aa963e83fd6672adf90c70d81d3202b2 100644
--- a/src/intel/compiler/elk/elk_fs_visitor.cpp
+++ b/src/intel/compiler/elk/elk_fs_visitor.cpp
@@ -139,12 +139,6 @@ elk_fs_visitor::emit_interpolation_setup_gfx4()
       this->delta_xy[ELK_BARYCENTRIC_PERSPECTIVE_PIXEL];
 
    abld = bld.annotate("compute pos.w and 1/pos.w");
-   /* Compute wpos.w.  It's always in our setup, since it's needed to
-    * interpolate the other attributes.
-    */
-   this->wpos_w = vgrf(glsl_float_type());
-   abld.emit(ELK_FS_OPCODE_LINTERP, wpos_w, delta_xy,
-             interp_reg(abld, VARYING_SLOT_POS, 3, 0));
 }
 
 /** Emits the interpolation for the varying inputs. */
@@ -272,13 +266,6 @@ elk_fs_visitor::emit_interpolation_setup_gfx6()
    if (wm_prog_data->uses_src_depth)
       this->pixel_z = fetch_payload_reg(bld, fs_payload().source_depth_reg);
 
-   if (wm_prog_data->uses_src_w) {
-      abld = bld.annotate("compute pos.w");
-      this->wpos_w = vgrf(glsl_float_type());
-      abld.emit(ELK_SHADER_OPCODE_RCP, this->wpos_w,
-                fetch_payload_reg(abld, fs_payload().source_w_reg));
-   }
-
    if (wm_key->persample_interp == ELK_SOMETIMES) {
       assert(!devinfo->needs_unlit_centroid_workaround);