[hlsl] Emit `numthreads` from HLSL IR backend.

This CL adds the `numthreads` annotations to the HLSL IR backend compute
shaders.

Bug: 42251045
Change-Id: Icf9ad477c56a3d3f928cf18bb021dd305e07d936
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/193741
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/hlsl/writer/printer/printer.cc b/src/tint/lang/hlsl/writer/printer/printer.cc
index 444dc92..f0b2bfb 100644
--- a/src/tint/lang/hlsl/writer/printer/printer.cc
+++ b/src/tint/lang/hlsl/writer/printer/printer.cc
@@ -131,6 +131,14 @@
         TINT_SCOPED_ASSIGNMENT(current_function_, func);
 
         {
+            if (func->Stage() == core::ir::Function::PipelineStage::kCompute) {
+                auto wg_opt = func->WorkgroupSize();
+                TINT_ASSERT(wg_opt.has_value());
+
+                auto& wg = wg_opt.value();
+                Line() << "[numthreads(" << wg[0] << ", " << wg[1] << ", " << wg[2] << ")]";
+            }
+
             auto out = Line();
             auto func_name = NameOf(func);
 
diff --git a/test/tint/bug/chromium/1341475.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/chromium/1341475.wgsl.expected.ir.dxc.hlsl
index 7c4a2ec..0263fdc 100644
--- a/test/tint/bug/chromium/1341475.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/chromium/1341475.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float a = 1.0f;
 }
diff --git a/test/tint/bug/chromium/1341475.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/chromium/1341475.wgsl.expected.ir.fxc.hlsl
index 7c4a2ec..0263fdc 100644
--- a/test/tint/bug/chromium/1341475.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/chromium/1341475.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float a = 1.0f;
 }
diff --git a/test/tint/bug/chromium/1501769.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/chromium/1501769.wgsl.expected.ir.dxc.hlsl
index 0b1747a..3950fd7 100644
--- a/test/tint/bug/chromium/1501769.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/chromium/1501769.wgsl.expected.ir.dxc.hlsl
@@ -1,2 +1,3 @@
+[numthreads(1, 1, 1)]
 void a() {
 }
diff --git a/test/tint/bug/chromium/1501769.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/chromium/1501769.wgsl.expected.ir.fxc.hlsl
index 0b1747a..3950fd7 100644
--- a/test/tint/bug/chromium/1501769.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/chromium/1501769.wgsl.expected.ir.fxc.hlsl
@@ -1,2 +1,3 @@
+[numthreads(1, 1, 1)]
 void a() {
 }
diff --git a/test/tint/bug/tint/1474-b.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/tint/1474-b.wgsl.expected.ir.dxc.hlsl
index 65f3431..aa9bac6 100644
--- a/test/tint/bug/tint/1474-b.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/tint/1474-b.wgsl.expected.ir.dxc.hlsl
@@ -2,5 +2,6 @@
     let non_uniform_cond = non_uniform_value == 0;
     ^^^^^^^^^^^^^^^^^^^^
 
+[numthreads(1, 1, 1)]
 void main() {
 }
diff --git a/test/tint/bug/tint/1474-b.wgsl.expected.ir.fxc.hlsl b/test/tint/bug/tint/1474-b.wgsl.expected.ir.fxc.hlsl
index 65f3431..aa9bac6 100644
--- a/test/tint/bug/tint/1474-b.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/bug/tint/1474-b.wgsl.expected.ir.fxc.hlsl
@@ -2,5 +2,6 @@
     let non_uniform_cond = non_uniform_value == 0;
     ^^^^^^^^^^^^^^^^^^^^
 
+[numthreads(1, 1, 1)]
 void main() {
 }
diff --git a/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.dxc.hlsl
index f0206f5..d902668 100644
--- a/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float fract = 0.625f;
   int exp = 1;
diff --git a/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.fxc.hlsl
index f0206f5..d902668 100644
--- a/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/frexp/scalar/const_members.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float fract = 0.625f;
   int exp = 1;
diff --git a/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.dxc.hlsl
index fd67e6b..d4eaab4 100644
--- a/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float2 fract = float2(0.625f, 0.9375f);
   int2 exp = int2(1, 2);
diff --git a/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.fxc.hlsl
index fd67e6b..d4eaab4 100644
--- a/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/frexp/vector/const_members.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float2 fract = float2(0.625f, 0.9375f);
   int2 exp = int2(1, 2);
diff --git a/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.dxc.hlsl
index 30df69d..5ef2a42 100644
--- a/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float fract = 0.25f;
   float whole = 1.0f;
diff --git a/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.fxc.hlsl
index 30df69d..5ef2a42 100644
--- a/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/modf/scalar/const_members.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float fract = 0.25f;
   float whole = 1.0f;
diff --git a/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.dxc.hlsl b/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.dxc.hlsl
index 4654235..7352244 100644
--- a/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float2 fract = float2(0.25f, 0.75f);
   float2 whole = float2(1.0f, 3.0f);
diff --git a/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.fxc.hlsl b/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.fxc.hlsl
index 4654235..7352244 100644
--- a/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/builtins/modf/vector/const_members.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void main() {
   float2 fract = float2(0.25f, 0.75f);
   float2 whole = float2(1.0f, 3.0f);
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.dxc.hlsl
index 9534902..94d588f 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float4 b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.fxc.hlsl
index 9534902..94d588f 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float4 b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.dxc.hlsl
index a2804af..4652f88 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int4 b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.fxc.hlsl
index a2804af..4652f88 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int4 b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.dxc.hlsl
index 00cf089..1d71249 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint4 b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.fxc.hlsl
index 00cf089..1d71249 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4f32-vec4u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint4 b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.dxc.hlsl
index 9534902..94d588f 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float4 b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.fxc.hlsl
index 9534902..94d588f 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float4 b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.dxc.hlsl
index a2804af..4652f88 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int4 b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.fxc.hlsl
index a2804af..4652f88 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int4 b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.dxc.hlsl
index 00cf089..1d71249 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint4 b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.fxc.hlsl
index 00cf089..1d71249 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4i32-vec4u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint4 b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.dxc.hlsl
index 9534902..94d588f 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float4 b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.fxc.hlsl
index 9534902..94d588f 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float4 b = float4(2.003662109375f, -513.03125f, -1024.25f, 0.00169684563297778368f);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.dxc.hlsl
index a2804af..4652f88 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int4 b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.fxc.hlsl
index a2804af..4652f88 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int4 b = int4(1073757184, -1006616064, -998242304, 987654321);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.dxc.hlsl
index 00cf089..1d71249 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint4 b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.fxc.hlsl
index 00cf089..1d71249 100644
--- a/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/128bit/vec4u32-vec4u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint4 b = uint4(1073757184u, 3288351232u, 3296724992u, 987654321u);
 }
diff --git a/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.dxc.hlsl
index c518986..a4d0a95 100644
--- a/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float16_t b = float16_t(1.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.fxc.hlsl
index c518986..a4d0a95 100644
--- a/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/16bit/f16-f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float16_t b = float16_t(1.0h);
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.dxc.hlsl
index 8f2f3a8..1566e40 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.fxc.hlsl
index 8f2f3a8..1566e40 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.dxc.hlsl
index dbfc705..0fc974f 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.fxc.hlsl
index dbfc705..0fc974f 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.dxc.hlsl
index f7bc433..26b0e2a 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.fxc.hlsl
index f7bc433..26b0e2a 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.dxc.hlsl
index 835fa2c..31cf725 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> b = vector<float16_t, 2>(float16_t(1.0h), float16_t(2.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.fxc.hlsl
index 835fa2c..31cf725 100644
--- a/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/f32-vec2f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> b = vector<float16_t, 2>(float16_t(1.0h), float16_t(2.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.dxc.hlsl
index 8f2f3a8..1566e40 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.fxc.hlsl
index 8f2f3a8..1566e40 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.dxc.hlsl
index dbfc705..0fc974f 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.fxc.hlsl
index dbfc705..0fc974f 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.dxc.hlsl
index f7bc433..26b0e2a 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.fxc.hlsl
index f7bc433..26b0e2a 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.dxc.hlsl
index 835fa2c..31cf725 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> b = vector<float16_t, 2>(float16_t(1.0h), float16_t(2.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.fxc.hlsl
index 835fa2c..31cf725 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32-vec2f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> b = vector<float16_t, 2>(float16_t(1.0h), float16_t(2.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.dxc.hlsl
index 62b2f4b..9662761 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 2147483648u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.fxc.hlsl
index 62b2f4b..9662761 100644
--- a/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/i32min-u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 2147483648u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.dxc.hlsl
index 8f2f3a8..1566e40 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.fxc.hlsl
index 8f2f3a8..1566e40 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.dxc.hlsl
index dbfc705..0fc974f 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.fxc.hlsl
index dbfc705..0fc974f 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.dxc.hlsl
index f7bc433..26b0e2a 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.fxc.hlsl
index f7bc433..26b0e2a 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.dxc.hlsl
index 835fa2c..31cf725 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> b = vector<float16_t, 2>(float16_t(1.0h), float16_t(2.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.fxc.hlsl
index 835fa2c..31cf725 100644
--- a/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/u32-vec2f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> b = vector<float16_t, 2>(float16_t(1.0h), float16_t(2.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.dxc.hlsl
index 8f2f3a8..1566e40 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.fxc.hlsl
index 8f2f3a8..1566e40 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float b = 2.003662109375f;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.dxc.hlsl
index dbfc705..0fc974f 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.fxc.hlsl
index dbfc705..0fc974f 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int b = 1073757184;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.dxc.hlsl
index f7bc433..26b0e2a 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.fxc.hlsl
index f7bc433..26b0e2a 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint b = 1073757184u;
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.dxc.hlsl
index 835fa2c..31cf725 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> b = vector<float16_t, 2>(float16_t(1.0h), float16_t(2.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.fxc.hlsl
index 835fa2c..31cf725 100644
--- a/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/32bit/vec2f16-vec2f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 2> b = vector<float16_t, 2>(float16_t(1.0h), float16_t(2.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.dxc.hlsl
index b5fab50..9387cd7 100644
--- a/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 3> b = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.fxc.hlsl
index b5fab50..9387cd7 100644
--- a/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/48bit/vec3f16-vec3f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 3> b = vector<float16_t, 3>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.dxc.hlsl
index b7fadde..a5b61e1 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float2 b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.fxc.hlsl
index b7fadde..a5b61e1 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float2 b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.dxc.hlsl
index 7d404a9..67c97db 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int2 b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.fxc.hlsl
index 7d404a9..67c97db 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int2 b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.dxc.hlsl
index 683e74d..3b7fec3 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint2 b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.fxc.hlsl
index 683e74d..3b7fec3 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec2u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint2 b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.dxc.hlsl
index b98aba9..1c0a347 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 4> b = vector<float16_t, 4>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h), float16_t(-4.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.fxc.hlsl
index b98aba9..1c0a347 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2f32-vec4f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 4> b = vector<float16_t, 4>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h), float16_t(-4.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.dxc.hlsl
index b7fadde..a5b61e1 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float2 b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.fxc.hlsl
index b7fadde..a5b61e1 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float2 b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.dxc.hlsl
index 7d404a9..67c97db 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int2 b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.fxc.hlsl
index 7d404a9..67c97db 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int2 b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.dxc.hlsl
index 683e74d..3b7fec3 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint2 b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.fxc.hlsl
index 683e74d..3b7fec3 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec2u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint2 b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.dxc.hlsl
index b98aba9..1c0a347 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 4> b = vector<float16_t, 4>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h), float16_t(-4.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.fxc.hlsl
index b98aba9..1c0a347 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2i32-vec4f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 4> b = vector<float16_t, 4>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h), float16_t(-4.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.dxc.hlsl
index b7fadde..a5b61e1 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float2 b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.fxc.hlsl
index b7fadde..a5b61e1 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float2 b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.dxc.hlsl
index 7d404a9..67c97db 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int2 b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.fxc.hlsl
index 7d404a9..67c97db 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int2 b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.dxc.hlsl
index 683e74d..3b7fec3 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint2 b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.fxc.hlsl
index 683e74d..3b7fec3 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec2u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint2 b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.dxc.hlsl
index b98aba9..1c0a347 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 4> b = vector<float16_t, 4>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h), float16_t(-4.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.fxc.hlsl
index b98aba9..1c0a347 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec2u32-vec4f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 4> b = vector<float16_t, 4>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h), float16_t(-4.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.dxc.hlsl
index b7fadde..a5b61e1 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float2 b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.fxc.hlsl
index b7fadde..a5b61e1 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float2 b = float2(2.003662109375f, -513.03125f);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.dxc.hlsl
index 7d404a9..67c97db 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int2 b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.fxc.hlsl
index 7d404a9..67c97db 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int2 b = int2(1073757184, -1006616064);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.dxc.hlsl
index 683e74d..3b7fec3 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint2 b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.fxc.hlsl
index 683e74d..3b7fec3 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec2u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint2 b = uint2(1073757184u, 3288351232u);
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.dxc.hlsl
index b98aba9..1c0a347 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 4> b = vector<float16_t, 4>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h), float16_t(-4.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.fxc.hlsl
index b98aba9..1c0a347 100644
--- a/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/64bit/vec4f16-vec4f16.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   vector<float16_t, 4> b = vector<float16_t, 4>(float16_t(1.0h), float16_t(2.0h), float16_t(3.0h), float16_t(-4.0h));
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.dxc.hlsl
index 0dc3199..2b2a96f 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float3 b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.fxc.hlsl
index 0dc3199..2b2a96f 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float3 b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.dxc.hlsl
index a5351d1..26abf69 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int3 b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.fxc.hlsl
index a5351d1..26abf69 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int3 b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.dxc.hlsl
index 2aa2f18..ee73ca3 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint3 b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.fxc.hlsl
index 2aa2f18..ee73ca3 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3f32-vec3u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint3 b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.dxc.hlsl
index 0dc3199..2b2a96f 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float3 b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.fxc.hlsl
index 0dc3199..2b2a96f 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float3 b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.dxc.hlsl
index a5351d1..26abf69 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int3 b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.fxc.hlsl
index a5351d1..26abf69 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int3 b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.dxc.hlsl
index 2aa2f18..ee73ca3 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint3 b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.fxc.hlsl
index 2aa2f18..ee73ca3 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3i32-vec3u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint3 b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.dxc.hlsl
index 0dc3199..2b2a96f 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float3 b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.fxc.hlsl
index 0dc3199..2b2a96f 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3f32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   float3 b = float3(2.003662109375f, -513.03125f, -1024.25f);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.dxc.hlsl
index a5351d1..26abf69 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int3 b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.fxc.hlsl
index a5351d1..26abf69 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3i32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   int3 b = int3(1073757184, -1006616064, -998242304);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.dxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.dxc.hlsl
index 2aa2f18..ee73ca3 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.dxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint3 b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.fxc.hlsl b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.fxc.hlsl
index 2aa2f18..ee73ca3 100644
--- a/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/expressions/bitcast/const/96bit/vec3u32-vec3u32.wgsl.expected.ir.fxc.hlsl
@@ -1,3 +1,4 @@
+[numthreads(1, 1, 1)]
 void f() {
   uint3 b = uint3(1073757184u, 3288351232u, 3296724992u);
 }
diff --git a/test/tint/samples/function.wgsl.expected.ir.dxc.hlsl b/test/tint/samples/function.wgsl.expected.ir.dxc.hlsl
index 6428324..c3bccfa 100644
--- a/test/tint/samples/function.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/samples/function.wgsl.expected.ir.dxc.hlsl
@@ -1,5 +1,6 @@
 float main() {
   return 0.40000000596046447754f;
 }
+[numthreads(2, 1, 1)]
 void ep() {
 }
diff --git a/test/tint/samples/function.wgsl.expected.ir.fxc.hlsl b/test/tint/samples/function.wgsl.expected.ir.fxc.hlsl
index 6428324..c3bccfa 100644
--- a/test/tint/samples/function.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/samples/function.wgsl.expected.ir.fxc.hlsl
@@ -1,5 +1,6 @@
 float main() {
   return 0.40000000596046447754f;
 }
+[numthreads(2, 1, 1)]
 void ep() {
 }
diff --git a/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.dxc.hlsl b/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.dxc.hlsl
index 34f46e2..1281d46 100644
--- a/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.dxc.hlsl
@@ -1,2 +1,3 @@
+[numthreads(1, 1, 1)]
 void main() {
 }
diff --git a/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.fxc.hlsl b/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.fxc.hlsl
index 34f46e2..1281d46 100644
--- a/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/statements/assign/phony/addr_of_non_constructable.wgsl.expected.ir.fxc.hlsl
@@ -1,2 +1,3 @@
+[numthreads(1, 1, 1)]
 void main() {
 }
diff --git a/test/tint/types/functions/parameters.wgsl.expected.ir.dxc.hlsl b/test/tint/types/functions/parameters.wgsl.expected.ir.dxc.hlsl
index d27a509..1b1e294 100644
--- a/test/tint/types/functions/parameters.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/types/functions/parameters.wgsl.expected.ir.dxc.hlsl
@@ -1,4 +1,5 @@
 void foo() {
 }
+[numthreads(1, 1, 1)]
 void main() {
 }
diff --git a/test/tint/types/functions/parameters.wgsl.expected.ir.fxc.hlsl b/test/tint/types/functions/parameters.wgsl.expected.ir.fxc.hlsl
index d27a509..1b1e294 100644
--- a/test/tint/types/functions/parameters.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/types/functions/parameters.wgsl.expected.ir.fxc.hlsl
@@ -1,4 +1,5 @@
 void foo() {
 }
+[numthreads(1, 1, 1)]
 void main() {
 }
diff --git a/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl.expected.ir.dxc.hlsl b/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl.expected.ir.dxc.hlsl
index 34f46e2..50e5c9b 100644
--- a/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl.expected.ir.dxc.hlsl
@@ -1,2 +1,3 @@
+[numthreads(3, 2, 3)]
 void main() {
 }
diff --git a/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl.expected.ir.fxc.hlsl b/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl.expected.ir.fxc.hlsl
index 34f46e2..50e5c9b 100644
--- a/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/types/functions/shader_io/compute_workgroup_expression.wgsl.expected.ir.fxc.hlsl
@@ -1,2 +1,3 @@
+[numthreads(3, 2, 3)]
 void main() {
 }
diff --git a/test/tint/types/module_scope_const.wgsl.expected.ir.dxc.hlsl b/test/tint/types/module_scope_const.wgsl.expected.ir.dxc.hlsl
index 34f46e2..1281d46 100644
--- a/test/tint/types/module_scope_const.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/types/module_scope_const.wgsl.expected.ir.dxc.hlsl
@@ -1,2 +1,3 @@
+[numthreads(1, 1, 1)]
 void main() {
 }
diff --git a/test/tint/types/module_scope_const.wgsl.expected.ir.fxc.hlsl b/test/tint/types/module_scope_const.wgsl.expected.ir.fxc.hlsl
index 34f46e2..1281d46 100644
--- a/test/tint/types/module_scope_const.wgsl.expected.ir.fxc.hlsl
+++ b/test/tint/types/module_scope_const.wgsl.expected.ir.fxc.hlsl
@@ -1,2 +1,3 @@
+[numthreads(1, 1, 1)]
 void main() {
 }