[tint] Implement quadSwapX, Y and Diagonal

Implement WGSL builtins quadSwapX, quadSwapY, and quadSwapDiagonal in
the SPIR-V IR backend and HLSL AST and IR backends. These are not yet
implemented in the MSL backends. No subgroup support is implemented for
the GLSL backend.

Bug: 354738715
Change-Id: Iff1a17a02d9b875333c49ee49f6149dda970f320
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/202415
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Natalie Chouinard <chouinard@google.com>
diff --git a/test/tint/builtins/gen/literal/quadSwapDiagonal/856536.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/quadSwapDiagonal/856536.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..5153112
--- /dev/null
+++ b/test/tint/builtins/gen/literal/quadSwapDiagonal/856536.wgsl.expected.dxc.hlsl
@@ -0,0 +1,17 @@
+RWByteAddressBuffer prevent_dce : register(u0);
+
+uint3 quadSwapDiagonal_856536() {
+  uint3 res = QuadReadAcrossDiagonal((1u).xxx);
+  return res;
+}
+
+void fragment_main() {
+  prevent_dce.Store3(0u, asuint(quadSwapDiagonal_856536()));
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  prevent_dce.Store3(0u, asuint(quadSwapDiagonal_856536()));
+  return;
+}