writer/hlsl: Simplify emission logic, clean up output

And fix issues where global variables would not be emitted unless they were transitively referenced by an entry point.

This change requires crbug.com/tint/697 to be fixed before landing.

Change-Id: I712bd9d369e08c9a3cdfb0f114c3609584f91f28
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/54241
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/test/intrinsics/gen/sinh/445e33.wgsl.expected.hlsl b/test/intrinsics/gen/sinh/445e33.wgsl.expected.hlsl
index f274918..1d1fab6 100644
--- a/test/intrinsics/gen/sinh/445e33.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/sinh/445e33.wgsl.expected.hlsl
@@ -1,11 +1,11 @@
-struct tint_symbol {
-  float4 value : SV_Position;
-};
-
 void sinh_445e33() {
   float4 res = sinh(float4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
 tint_symbol vertex_main() {
   sinh_445e33();
   const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)};
@@ -22,4 +22,3 @@
   sinh_445e33();
   return;
 }
-