diff --git a/src/tint/lang/hlsl/writer/raise/raise.cc b/src/tint/lang/hlsl/writer/raise/raise.cc
index f526849..90bdaea 100644
--- a/src/tint/lang/hlsl/writer/raise/raise.cc
+++ b/src/tint/lang/hlsl/writer/raise/raise.cc
@@ -179,6 +179,10 @@
         RUN_TRANSFORM(raise::ShaderIO, module, config);
     }
 
+    // DemoteToHelper must come before any transform that introduces non-core instructions.
+    // Run after ShaderIO to ensure the discards are added to the entry point it introduces.
+    RUN_TRANSFORM(core::ir::transform::DemoteToHelper, module);
+
     RUN_TRANSFORM(core::ir::transform::DirectVariableAccess, module,
                   core::ir::transform::DirectVariableAccessOptions{});
     // DecomposeStorageAccess must come after Robustness and DirectVariableAccess
@@ -193,12 +197,6 @@
         RUN_TRANSFORM(raise::PixelLocal, module, config);
     }
 
-    // TODO(dsinclair): TruncateInterstageVariables
-
-    // DemoteToHelper must come before any transform that introduces non-core instructions.
-    // Run after ShaderIO to ensure the discards are added to the entry point it introduces.
-    RUN_TRANSFORM(core::ir::transform::DemoteToHelper, module);
-
     RUN_TRANSFORM(raise::BinaryPolyfill, module);
     // BuiltinPolyfill must come after BinaryPolyfill and DecomposeStorageAccess as they add
     // builtins
diff --git a/test/tint/bug/tint/2147.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/tint/2147.wgsl.expected.ir.dxc.hlsl
index a3c0c3e..f49918c 100644
--- a/test/tint/bug/tint/2147.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/tint/2147.wgsl.expected.ir.dxc.hlsl
@@ -14,19 +14,24 @@
   if (false) {
     continue_execution = false;
   }
-  int v = int(0);
-  S.InterlockedCompareExchange(int(0u), int(0), int(1), v);
-  int v_1 = v;
-  atomic_compare_exchange_result_i32 v_2 = {v_1, (v_1 == int(0))};
-  int old_value = v_2.old_value;
+  atomic_compare_exchange_result_i32 v = (atomic_compare_exchange_result_i32)0;
+  if (continue_execution) {
+    int v_1 = int(0);
+    S.InterlockedCompareExchange(int(0u), int(0), int(1), v_1);
+    int v_2 = v_1;
+    atomic_compare_exchange_result_i32 v_3 = {v_2, (v_2 == int(0))};
+    v = v_3;
+  }
+  atomic_compare_exchange_result_i32 v_4 = v;
+  int old_value = v_4.old_value;
   return float4((float(old_value)).xxxx);
 }
 
 main_outputs main() {
-  main_outputs v_3 = {main_inner()};
+  main_outputs v_5 = {main_inner()};
   if (!(continue_execution)) {
     discard;
   }
-  return v_3;
+  return v_5;
 }
 
diff --git a/test/tint/bug/tint/2147.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/tint/2147.wgsl.expected.ir.fxc.hlsl
index a3c0c3e..f49918c 100644
--- a/test/tint/bug/tint/2147.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/tint/2147.wgsl.expected.ir.fxc.hlsl
@@ -14,19 +14,24 @@
   if (false) {
     continue_execution = false;
   }
-  int v = int(0);
-  S.InterlockedCompareExchange(int(0u), int(0), int(1), v);
-  int v_1 = v;
-  atomic_compare_exchange_result_i32 v_2 = {v_1, (v_1 == int(0))};
-  int old_value = v_2.old_value;
+  atomic_compare_exchange_result_i32 v = (atomic_compare_exchange_result_i32)0;
+  if (continue_execution) {
+    int v_1 = int(0);
+    S.InterlockedCompareExchange(int(0u), int(0), int(1), v_1);
+    int v_2 = v_1;
+    atomic_compare_exchange_result_i32 v_3 = {v_2, (v_2 == int(0))};
+    v = v_3;
+  }
+  atomic_compare_exchange_result_i32 v_4 = v;
+  int old_value = v_4.old_value;
   return float4((float(old_value)).xxxx);
 }
 
 main_outputs main() {
-  main_outputs v_3 = {main_inner()};
+  main_outputs v_5 = {main_inner()};
   if (!(continue_execution)) {
     discard;
   }
-  return v_3;
+  return v_5;
 }
 
diff --git a/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.dxc.hlsl b/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.dxc.hlsl
index e5b7bee..57c824b 100644
--- a/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.dxc.hlsl
@@ -13,10 +13,15 @@
 int foo_inner() {
   continue_execution = false;
   int x = int(0);
-  int v = int(0);
-  a.InterlockedCompareExchange(int(0u), int(0), int(1), v);
-  int v_1 = v;
-  atomic_compare_exchange_result_i32 result = {v_1, (v_1 == int(0))};
+  atomic_compare_exchange_result_i32 v = (atomic_compare_exchange_result_i32)0;
+  if (continue_execution) {
+    int v_1 = int(0);
+    a.InterlockedCompareExchange(int(0u), int(0), int(1), v_1);
+    int v_2 = v_1;
+    atomic_compare_exchange_result_i32 v_3 = {v_2, (v_2 == int(0))};
+    v = v_3;
+  }
+  atomic_compare_exchange_result_i32 result = v;
   if (result.exchanged) {
     x = result.old_value;
   }
@@ -24,10 +29,10 @@
 }
 
 foo_outputs foo() {
-  foo_outputs v_2 = {foo_inner()};
+  foo_outputs v_4 = {foo_inner()};
   if (!(continue_execution)) {
     discard;
   }
-  return v_2;
+  return v_4;
 }
 
diff --git a/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.fxc.hlsl b/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.fxc.hlsl
index e5b7bee..57c824b 100644
--- a/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.ir.fxc.hlsl
@@ -13,10 +13,15 @@
 int foo_inner() {
   continue_execution = false;
   int x = int(0);
-  int v = int(0);
-  a.InterlockedCompareExchange(int(0u), int(0), int(1), v);
-  int v_1 = v;
-  atomic_compare_exchange_result_i32 result = {v_1, (v_1 == int(0))};
+  atomic_compare_exchange_result_i32 v = (atomic_compare_exchange_result_i32)0;
+  if (continue_execution) {
+    int v_1 = int(0);
+    a.InterlockedCompareExchange(int(0u), int(0), int(1), v_1);
+    int v_2 = v_1;
+    atomic_compare_exchange_result_i32 v_3 = {v_2, (v_2 == int(0))};
+    v = v_3;
+  }
+  atomic_compare_exchange_result_i32 result = v;
   if (result.exchanged) {
     x = result.old_value;
   }
@@ -24,10 +29,10 @@
 }
 
 foo_outputs foo() {
-  foo_outputs v_2 = {foo_inner()};
+  foo_outputs v_4 = {foo_inner()};
   if (!(continue_execution)) {
     discard;
   }
-  return v_2;
+  return v_4;
 }
 
diff --git a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.dxc.hlsl b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.dxc.hlsl
index 9675161..7ed4a57 100644
--- a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.dxc.hlsl
@@ -31,7 +31,11 @@
       result = (result + i);
       {
         int v = int(0);
-        a.InterlockedAdd(int(0u), int(1), v);
+        if (continue_execution) {
+          int v_1 = int(0);
+          a.InterlockedAdd(int(0u), int(1), v_1);
+          v = v_1;
+        }
         i = v;
       }
       continue;
@@ -41,10 +45,10 @@
 }
 
 foo_outputs foo(foo_inputs inputs) {
-  foo_outputs v_1 = {foo_inner(inputs.tint_symbol, inputs.coord)};
+  foo_outputs v_2 = {foo_inner(inputs.tint_symbol, inputs.coord)};
   if (!(continue_execution)) {
     discard;
   }
-  return v_1;
+  return v_2;
 }
 
diff --git a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.fxc.hlsl b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.fxc.hlsl
index 9675161..7ed4a57 100644
--- a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.ir.fxc.hlsl
@@ -31,7 +31,11 @@
       result = (result + i);
       {
         int v = int(0);
-        a.InterlockedAdd(int(0u), int(1), v);
+        if (continue_execution) {
+          int v_1 = int(0);
+          a.InterlockedAdd(int(0u), int(1), v_1);
+          v = v_1;
+        }
         i = v;
       }
       continue;
@@ -41,10 +45,10 @@
 }
 
 foo_outputs foo(foo_inputs inputs) {
-  foo_outputs v_1 = {foo_inner(inputs.tint_symbol, inputs.coord)};
+  foo_outputs v_2 = {foo_inner(inputs.tint_symbol, inputs.coord)};
   if (!(continue_execution)) {
     discard;
   }
-  return v_1;
+  return v_2;
 }
 
diff --git a/test/tint/statements/discard/helper_functions.wgsl.expected.ir.dxc.hlsl b/test/tint/statements/discard/helper_functions.wgsl.expected.ir.dxc.hlsl
index d9c83ad..4e04e89 100644
--- a/test/tint/statements/discard/helper_functions.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/statements/discard/helper_functions.wgsl.expected.ir.dxc.hlsl
@@ -9,7 +9,10 @@
 }
 
 void bar() {
-  output.Store(0u, asuint(ddx(1.0f)));
+  float v = ddx(1.0f);
+  if (continue_execution) {
+    output.Store(0u, asuint(v));
+  }
 }
 
 void main() {
diff --git a/test/tint/statements/discard/helper_functions.wgsl.expected.ir.fxc.hlsl b/test/tint/statements/discard/helper_functions.wgsl.expected.ir.fxc.hlsl
index d9c83ad..4e04e89 100644
--- a/test/tint/statements/discard/helper_functions.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/statements/discard/helper_functions.wgsl.expected.ir.fxc.hlsl
@@ -9,7 +9,10 @@
 }
 
 void bar() {
-  output.Store(0u, asuint(ddx(1.0f)));
+  float v = ddx(1.0f);
+  if (continue_execution) {
+    output.Store(0u, asuint(v));
+  }
 }
 
 void main() {
diff --git a/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.dxc.hlsl b/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.dxc.hlsl
index d5d5ab4..5f19b59 100644
--- a/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.dxc.hlsl
@@ -6,14 +6,20 @@
   if ((asint(non_uniform_global.Load(0u)) < int(0))) {
     continue_execution = false;
   }
-  output.Store(0u, asuint(ddx(1.0f)));
+  float v = ddx(1.0f);
+  if (continue_execution) {
+    output.Store(0u, asuint(v));
+  }
   if ((asfloat(output.Load(0u)) < 0.0f)) {
     int i = int(0);
     {
       while(true) {
-        float v = asfloat(output.Load(0u));
-        if ((v > float(i))) {
-          output.Store(0u, asuint(float(i)));
+        float v_1 = asfloat(output.Load(0u));
+        if ((v_1 > float(i))) {
+          float v_2 = float(i);
+          if (continue_execution) {
+            output.Store(0u, asuint(v_2));
+          }
           if (!(continue_execution)) {
             discard;
           }
diff --git a/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.fxc.hlsl b/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.fxc.hlsl
index d5d5ab4..5f19b59 100644
--- a/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/statements/discard/multiple_returns.wgsl.expected.ir.fxc.hlsl
@@ -6,14 +6,20 @@
   if ((asint(non_uniform_global.Load(0u)) < int(0))) {
     continue_execution = false;
   }
-  output.Store(0u, asuint(ddx(1.0f)));
+  float v = ddx(1.0f);
+  if (continue_execution) {
+    output.Store(0u, asuint(v));
+  }
   if ((asfloat(output.Load(0u)) < 0.0f)) {
     int i = int(0);
     {
       while(true) {
-        float v = asfloat(output.Load(0u));
-        if ((v > float(i))) {
-          output.Store(0u, asuint(float(i)));
+        float v_1 = asfloat(output.Load(0u));
+        if ((v_1 > float(i))) {
+          float v_2 = float(i);
+          if (continue_execution) {
+            output.Store(0u, asuint(v_2));
+          }
           if (!(continue_execution)) {
             discard;
           }
diff --git a/test/tint/statements/discard/non_uniform.wgsl.expected.ir.dxc.hlsl b/test/tint/statements/discard/non_uniform.wgsl.expected.ir.dxc.hlsl
index 15986f38e..54fd04a 100644
--- a/test/tint/statements/discard/non_uniform.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/statements/discard/non_uniform.wgsl.expected.ir.dxc.hlsl
@@ -6,7 +6,10 @@
   if ((asint(non_uniform_global.Load(0u)) < int(0))) {
     continue_execution = false;
   }
-  output.Store(0u, asuint(ddx(1.0f)));
+  float v = ddx(1.0f);
+  if (continue_execution) {
+    output.Store(0u, asuint(v));
+  }
   if (!(continue_execution)) {
     discard;
   }
diff --git a/test/tint/statements/discard/non_uniform.wgsl.expected.ir.fxc.hlsl b/test/tint/statements/discard/non_uniform.wgsl.expected.ir.fxc.hlsl
index 15986f38e..54fd04a 100644
--- a/test/tint/statements/discard/non_uniform.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/statements/discard/non_uniform.wgsl.expected.ir.fxc.hlsl
@@ -6,7 +6,10 @@
   if ((asint(non_uniform_global.Load(0u)) < int(0))) {
     continue_execution = false;
   }
-  output.Store(0u, asuint(ddx(1.0f)));
+  float v = ddx(1.0f);
+  if (continue_execution) {
+    output.Store(0u, asuint(v));
+  }
   if (!(continue_execution)) {
     discard;
   }
